//auth Aono
/*
*Nissan WCT全ページ共通javascript
*
*PartsObject内の_flagObjectへobject形式のデータを追加することで拡張可能
*		<例>
*			{keyParent							:				"#right_column ul.img_switch_box_right"	,
*				keyChild							:				["a.r_front,a.r_rear"] ,
*			 	functionNS						:				"imgChanger",
*			 	ns										:				"img_switch"}
*		<説明>
*		keyParent:
*			そのパーツを識別するためのクラス。
*			クラスはパーツ内に一つで且つパーツ全体の親でなければならない。
*			もしクラスと親が一致しない場合は配列形式で、
*			[<一意のクラス>,<親のクラス>]
*			と記述する。
*
*		keyChild:(省略可能)
*			イベントを付加したいクラスやノードの指定を行う。
*			数にかかわらず、常に配列リテラルで記述する
*		
*		functionNS:
*			結びつけるイベントのネームスペースを指定する。
*			eventObjectに記述されたイベント名を指定することで、イベントの結びつけが可能。
*
*		ns:(省略可能)
*			汎用的なネームスペースを指定する。
*			用途は限定されないので自由に利用可能。
*		
*/
//window.defaultGradeID=(window.defaultGradeID)?defaultGradeID:{}

(function($,doc,win){


	var ie={},
	
	ua=(navigator.userAgent.indexOf("IE 6")>-1)?true:false;
	
	ie.flag=(navigator.userAgent.indexOf("MSIE")>-1)?true:false;
	
	if(!!ie.flag)ie.version=(navigator.userAgent.match(/MSIE (\d)/)[1])
	
	//jQuery拡張 オリジナルのbindメソッドを一時退避
	$.prototype._bind=$.prototype.bind;
	
	$(win)._bind("unload",function(){
				for(var i =0,len=$.cache.length;i<len;i++)
					$.eventCache[i].n.unbind($.eventCache[i].type)
					$.eventCache[i]=null;
				})
	
	$.extend({
		
		iterater	:	0,
		
		eventCache:[],
		
		closureNs:"jQueryClosure",
		
		//メモリリーク対策 jQuery本体でもやってるだろうけど一応
		newClosure:function(f){
			var ns=$.closureNs+$.iterater++,fn
			$.newClosure[ns]=f
			fn=$.newClosure[ns]
			if($.iterater>0)delete $.newClosure[$.closureNs+($.iterater-1)];
			f=ns=null;
			return function(){
				return fn.apply(this,arguments)
			}
		}
	})
	
	$.fn.extend({
		//bindをPrototypeのhashMapメソッド風に拡張
		//登録されたイベントはページリロードで消される
		bind:function(F, G, E){
			var Self=this
			this._bind(F, $.newClosure(G), E)
			if(F!="unload")
				$.eventCache.push({n:this,type:F});
			return this;
		},
		setHeight:function(Class,c){
			if(this.size()>0 && $(Class).size()>0)
			for(var i=0;i<this.length;i++){
				var height=$(this).eq(i).outerHeight(true)
				$(Class,c.eq(i)).height(height);
				$(this).eq(i).height(height)
				height=null;
			}
		},
		setTableHeight:function(Class,bool){
			if(this.size()>0 && $(Class).size()>0)
			var height=this.outerHeight(true)
			$(Class).height(height);
			this.height(height)
			height=null;
		}
	})
		function doSetHeight(id){
			if(hashMap.get(id)!=id){
			$(id+" table.color_comb_table2 tr.tr_line2 th:first").setTableHeight(id+" table.color_comb_table .tr_line2");
			$(id+" table.color_comb_table2 tr.tr_line3 th:first").setTableHeight(id+" table.color_comb_table .tr_line3",true);
			$(id+" table.color_comb_table td.cc_table_c_name").setHeight("td",$(id+" table.color_comb_table2 tbody"));
			(ua)?$(id+" table.color_comb_table td.cc_table_color").width(20):$(id+" table.color_comb_table td.cc_table_color").width(22);			var height=$(id+" tr.cc_table_header").eq(1).outerHeight(true)
			$(id+" tr.cc_table_header th").eq(0).height(height);
			$(id+" tr.cc_table_header th").eq(1).height(height)
			height=null;
			if($(id+" table.color_comb_table2 tr.cc_table_second th").size()<4)$(id+" div.cm_table_wrapper").css("border-right",0)
			heightFix(id,"div.cm_table_wrapper")
			}
		}
		function heightFix(id,Class){
			var parent=(id)?$(id):0,table=(Class)?$(Class,parent):parent;
			(table)?table.height(table.height()+1):parent.height(parent.height()+1)
			hashMap.set(id,id)
			parent=table=null;
		}
		function imgRollover(){
			var img=$("#header ul.hd img"),reg=/_off/
			if(/Webkit/i.test(navigator.userAgent)){
				for(var i=0,len=img.size();i<len;i++){
					if(reg.test(img.eq(i).attr("src"))){
					(function(im){
						var new_img=new Image();
						new_img.src=im.attr("src").replace("_off","_on")
					})(img.eq(i))
					}
				}
			}
					var im=$("img").not(".sub_stay")
					im.bind("mouseover",function(){
						var img2=$(this),src=img2.attr("src");
						if(!reg.test(img2.attr("src"))){$(this).unbind("mouseout").unbind("mouseover");return false}
						img2.attr("src",src.replace("_off","_on"))
						img2=null;
					})
					im.bind("mouseout",function(){
						var img2=$(this),src=img2.attr("src");
						img2.attr("src",src.replace("_on","_off"))
						img2=null;
					})
				img=null;
		}

	var partsObject=function(){
		this._ns_used={};
		this._btnObject=[
					{parent		:		"ul.contents_side_btn5",		first		:		"ul.contents_side_btn5 a:first"},
					{parent		:		"ul.contents_side_btn4",		first		:		"ul.contents_side_btn4 a:first"},
					{parent		:		"ul.contents_side_btn3",		first		:		"ul.contents_side_btn3 a:first"},
					{parent		:		"ul.contents_side_btn2",		first		:		"ul.contents_side_btn2 a:first"},
		]
		this._globalNavi="ul.header_navi";
		
		//拡張用プロパティ
		this._flagObject=[
			{keyParent							:				"#right_column ul.img_switch_box_right"	,
				keyChild							:				["a.r_front,a.r_rear"] ,
			 	functionNS						:				"imgChanger",
			 	ns										:				"img_switch"},
			 
			 {keyParent							:				"#right_column ul.img_switch_box_left"	,
				keyChild							:				["a.l_side,a.l_top"] ,
			 	functionNS						:				"imgChanger",
			 	ns										:				"img_switch2"},
			 	
			 {keyParent							:				["#right_column div.img_gallery1","#right_column ul.img_gallery_thumb"]	,
				keyChild							:				["a"] ,
			 	functionNS						:				"imgChangerType2",
			 	ns										:				"img_switch_type1"},
			 
			{keyParent							:				"#right_column div.bcolor_wrap"	,
				keyChild							:				["a"],
				functionNS						:				"colorChanger",	
				ns										:				"color_change"},
			
			{keyParent							:				["#right_column table.color_comb_table","ul.contents_side_btn3"],
				keyChild							:				["a"],
				functionNS						:				"tableChanger"	,
				ns										:				"table_change"},
				
			{keyParent							:				"#right_column ul.contents_side_btn2",
				keyChild							:				["a"],
				functionNS						:				"ulChanger"	,
				ns										:				"ul_change"},
			
			{keyParent							:				["#right_column table.grade_table","ul.contents_side_btn4"],
				keyChild							:				["a"],
				functionNS						:				"tableChanger"	,
				ns										:				"table_change2"},
			
			{keyParent							:				"#right_column div.option_pull"	,
				keyChild							:				["span.dummy"],
				functionNS						:				"pullDown",
				ns										:				"pull"},
			
			{keyParent							:				"#right_column div.equip_ajax"	,
				keyChild							:				["a"],
				functionNS						:				"ajaxChanger",
				ns										:				"ajax_change"},
				
			{keyParent							:				["#right_column table.grade_price_table","ul.contents_side_btn5"]	,
				keyChild							:				["a"],
				functionNS						:				"tableChanger2",
				ns										:				"table_change3"},
			
			{keyParent							:				"#right_column div.voice_area"	,
				keyChild							:				["a"],
				functionNS						:				"getTopAjaxOne",
				ns										:				"voice"},
			
			{keyParent							:				"#right_column table.photo_gallery2",
			 keyChild								:				["a"],
			 functionNS							:				"gallery",
			 ns											:				"gallery2"},
			 
			{keyParent							:				"#right_column div.ranking_area"	,
				keyChild							:				["a"],
				functionNS						:				"getTopAjax",
				ns										:				"ranking"},
			
			{keyParent							:				"#right_column div.compare_area"	,
				keyChild							:				["a"],
				functionNS						:				"getTopAjax",
				ns										:				"carcompare"},
				
			{keyParent							:				["#right_column a.sel_grade_btn","#right_column table.grade_table"]	,
				keyChild							:				["a.sel_grade_btn"],
				functionNS						:				"inputCheck",
				ns										:				"",
				np										:				true},
			
			{keyParent							:				"#swf_point1"	,
				keyChild							:				[""],
				functionNS						:				"makeSwf",
				ns										:				""},
				
			{keyParent							:				"#right_column div.equip_ajax_compare"	,
				keyChild							:				["a"],
				functionNS						:				"ajaxChanger2",
				ns										:				"grade_compare"},
				
			{keyParent							:				"#right_column div.option_filter"	,
				keyChild							:				["input"],
				functionNS						:				"filterOption",
				ns										:				"filter"}
			
		]
		this._tableObj=[
			{
				node				:		$("ul.opt_map"),
				css_enter		:		{"backgroundColor"	:	"#aaaaaa"},
				css_leave		:		{"backgroundColor"	:	"#ffffff"}
			},
			{
				node				:		$("table.grade_table tr").not(".gt_head"),
				css_enter		:		{"backgroundColor"	:	"#e4e4e4",		"color"	:	"#0033CC"},
				css_leave		:		{"backgroundColor"	:	"#ffffff",			"color"	:	"#000000"}
			}
		]
	}
	partsObject.prototype={
		createObject:function(){
			var arr=[];
			for(var i=0,len=this._flagObject.length;i<len;i++){
				
				var obj=this._flagObject[i],
				pobj=obj.keyParent,
				cobj=obj.keyChild,
				type=typeof(pobj),
				clen=cobj.length,
				n,
				_n=null;
				
				if(type!="string"){
					n=$(pobj[0]);		_n=$(pobj[1])
				}else{ n=$(pobj)};
				if(n.size()>0){
					if(_n && typeof(_n)==="object")n=_n;		var args=[];
					if(obj.np)for(var l=0;l<clen;l++)args.push($(cobj[l]))
					else{	
						for(var m=0,len2=n.size();m<len2;m++)for(var l=0;l<clen;l++)args.push($(cobj[l],n.eq(m)))
						if(args.length==0)for(var l=0;l<clen;l++)args.push($(cobj[l]))
					}
					if(args.length<1 && type!="string")args.push($(pobj[0]));	arr.push([n,args,obj.functionNS,obj.ns])
				
				}
				obj=pobj=cobj=type=clen=n=null
			}
			
			return this.makeArr(arr);
		},
		makeArr:function(arg){
			this.length = 0;
			Array.prototype.push.apply(this,arg);
			return this;
		},
		jailBreak:function(p,n,f){
			(f)?hashMap.breakThrough(p,n):hashMap.set(p,n)
		},
		getIoState:function(){
			return iostream.ajaxState.get()
		},
		each:function(f){
			for(var i=0,len=this.length;i<len;i++)f(this[i])
		},
		saveAs:function(f,ns,arr){
			partsObject._ns_used[ns]={};
			partsObject._ns_used[ns].fn=f
			partsObject._ns_used[ns].arg=arr
		},
		callAsFunction:function(ns,num){
			var arr=partsObject._ns_used[ns].arg
			partsObject._ns_used[ns].fn(arr[0].eq(num),arr[1],arr[2]);
		},
		NSFunction:function(obj){
			var saveAs=	this.saveAs;
			this.each(function(n){
				if(obj[n[2]]){
					obj[n[2]](n[0],n[1],n[3]);
					saveAs(obj[n[2]],n[2],[n[0],n[1],n[3]])
				}
			})
			delete this._flagObject
	//		for(var i=0,len=this.length;i<len;i++)
	//			delete this[i]
		}
	}


/*
*通信用の関数群
*通常のajaxでは無く、クロスドメイン通信のために使用する。
*戻り値にjsonpを設定し、iostream.parseObjectの引数とすることでクロスドメイン通信が可能。
*/
	win.iostream=function(){
		var init=function(){
			
			this._domain=simUrl+"/bg/wct/";
			this._url_suffix="";
			this.ajaxState.init();
			this._param="";
			this._current="view";
			this._dir_prefix="grade/"
			this._grade="_2wd_20s_v_selection"
			this._head=$("head")
			this._obj={};
			this._noop={};
			this._jo={};
			this._name_space;
			this._table={
				"ranking":"getTopRanking/",
				
				"carcompare":"getCarCompare/"
			}
		}
		init.prototype={
			ajaxState:{
				init:function(){
					this._ajax_state="complete";
				},
				get:function(){
					return this._ajax_state;
				},
				set:function(state){
					this._ajax_state=state;
				}
			},
			testFlag:(function(){
				if(/pro/.test(location.hostname)){
					return 1;
				}
				else if( /wct/.test(location.hostname)){
					return 2;
				}else{
					return 0;
				}
			})(),
			changeDir:function(dir){
				this._url_suffix=dir
			},
			setParam:function(param){
				this._param=("?testFlg="+this.testFlag+"&")+param;
			},
			changeGrade:function(gr){
				this._grade=gr
			},
			parseObject:function(obj,ns){
				this._obj[ns]=obj
				this._noop[this._name_space](this._obj[ns],this._jo[ns],ns)
			},
			outputHandler:function(obj,u,ns,c){
				for(var i=0,len=obj.length;i<len;i++){
					for(var m=0,len2=obj[i].area.size();m<len2;m++){
						var dir=this._table[obj[i].dir];
						//this.changeGrade(obj[i].name)
						var url=(u)?u:this._domain+dir+this._param,
							sc=document.createElement("script");
						sc.type="text/javascript";
						this._jo[obj[i].name]=obj[i].area.eq(m)
						this._name_space=ns
						if(c)this._noop[ns]=c;
						sc.src=url;
						this._head[0].appendChild(sc);
					}
				}
			
			},
			open:function(obj,ns,callback){
				this.ajaxState.set("loading");
				var list=(obj)?obj.className.replace("stay_btn2","").replace(/\s/mg,""):this._current,
				url=this._domain+this._url_suffix+this._param,
				sc=document.createElement("script");
				
				sc.type="text/javascript";
				(obj)?this._current=list:false;
				this._name_space=ns
				if(callback)this._noop[ns]=callback;
				sc.src=url;
				this._head[0].appendChild(sc);
			}
		}
		return new init();
	}
	
	
/*
*データ保持用
*ネームスペースとデータを指定することでローカル変数なしに一意なデータを保存可能。
*データの型は自由
*/
	var hashMap=function(){this._node={};this._through={}}
	hashMap.prototype={
		set:function(node,ns){this._node[ns]=node},
		get:function(ns){return (this._node[ns])?this._node[ns]:0},
		breakThrough:function(ns,b){this._through[ns]=b},
		getThrough:function(ns){return this._through[ns]}
	}
	hashMap=new hashMap();

	win.carDataManager=function(){
		var init=function(){
			this._grade={};
			this._color={};
		}
		init.prototype={
			
			carName:modelNameRoma,
			
			defaultGrade:function(){
				return (defaultGradeID[modelNameRoma])?defaultGradeID[modelNameRoma]:"　";
			},
			
			defGradeName:function(){
				return (defaultGradeName[modelNameRoma])?defaultGradeName[modelNameRoma]:"　";
			},
			
			get3Dmodel:function(){
				return $("input.kaga_data").val();
			},
			
			setGrade:function(id,ns){
				this._grade[ns]=id;
			},
			getGrade:function(ns){
				return this._grade[ns]
			},
			setColor:function(color,ns){
				this._color[ns]=color
			},
			getColor:function(ns){
				return this._color[ns];
			}
		}
		return new init();
	}

/*
*イベントオブジェクト
*partsObjectのNSFunctionメソッドで参照される。
*/
	var eventObject={
			"imgChanger"	:
			function(p,c,ns){
				window.ob=hashMap
					hashMap.set("complete","img_state1")
					$("ul.img_switch_box_left img").unbind("mouseover").unbind("mouseout")
			for(var m=0,len2=p.length;m<len2;m++)
				if(c[m].size()>0)
				for(var i=0,len=c[m].length;i<len;i++){
					var co=c[m];
					var node=$("img",co.eq(0)).eq(0),src=node.attr("src"),name=ns+m;
					if(src)node.attr("src",src.replace("off","on"));
					hashMap.set(co.eq(0),name);
					hashMap.set($("img.model_img",p.eq(m)).eq(0),name+"img");
					(function(par,img,iter,name){
					if(i>0)img.hide();
					co.eq(i).bind("click",function(e){
						e.preventDefault();
						if(hashMap.get(name).get(0)!==this && hashMap.get("img_state1")=="complete"){
							hashMap.set("run","img_state1")
							var img2=$(this).children(),seci=hashMap.get(name).children()
							seci.attr("src",seci.attr("src").replace("on","off"))
							img2.attr("src",img2.attr("src").replace("off","on"))
							hashMap.set($(this),name);
							hashMap.get(name+"img").fadeOut("400",function(){img.fadeIn("400",function(){
								hashMap.set("complete","img_state1")
								hashMap.set(img,name+"img")
								});
							})
						}
					})
					})(p.eq(m),$("img.model_img",p.eq(m)).eq(i),i,name)
				}
			},
			
			"imgChangerType2"	:
			function(p,c,ns){
				var color="1px solid #c71444";
				hashMap.set("complete","img_state2")
				for(var i=0,len=p.size();i<len;i++){
					var parent=p.parent(),big=$("div.ig_big_img",parent),name=ns+i;
					big.eq(0).show();
					var number=[];
					hashMap.set({thumb:c[i].eq(0),big:big.eq(0),border:"1px solid #cccccc"},name)
					hashMap.get(name).thumb.css("border",color);
					for(var m=0,len2=c[i].size();m<len2;m++){
						number[m]=m;
						(function(n,l){
							l.bind("click",function(e){
							e.preventDefault();
							if(hashMap.get(name).thumb.get(0)!==this && hashMap.get("img_state2")=="complete"){
								hashMap.set("run","img_state2")
								$(this).css("border",color);
									hashMap.get(name).thumb.css("border",hashMap.get(name).border)
								hashMap.get(name).big.fadeOut(400,function(){
									n.fadeIn(400,function(){hashMap.set("complete","img_state2")})
								})
								hashMap.set({thumb:$(this),big:n,border:"1px solid #cccccc"},name);
							}
						})
						})(big.eq(number[m]),c[i].eq(m))
					}
				}
			},
			
			"colorChanger":
			function(p,c,ns){
				var color="1px solid #c71444",
				def_color="1px solid #cccccc",
				url_prefix=carDataManager.get3Dmodel()
				for(var m=0,len=p.length;m<len;m++){
					var name=ns+m,carNs="exterior"+m
					carDataManager.setGrade(	carDataManager.defaultGrade(),carNs)
					hashMap.set($("."+carDataManager.defaultGrade()+"_tip a:first",p.eq(m)),name)
					hashMap.get(name).css("border",color);
				for(var i=0,len2=c.length;i<len2;i++){
					
					var img=$("img.model_img",p.eq(m).parents(".isPlateDropable"));
					img.eq(0).attr("src",url_prefix+carDataManager.carName.toLowerCase()+"_"+carDataManager.defaultGrade().toLowerCase()+"_"+c[m].eq(0).get(0).className.toLowerCase()+"_v02.jpg")
							img.eq(1).attr("src",url_prefix+carDataManager.carName.toLowerCase()+"_"+carDataManager.defaultGrade().toLowerCase()+"_"+c[m].eq(0).get(0).className.toLowerCase()+"_v04.jpg");
					
					(function(par,cn){
					cn.html("ボディカラー："+hashMap.get(name).attr("title"))
					c[i].bind("click",function(e){
						e.preventDefault();
						if(hashMap.get(name).get(0)!==this){
							var img=$("img.model_img",par),
						
							grade=carDataManager.getGrade(carNs).toLowerCase()
							cn.html("ボディカラー："+$(this).attr("title"))
							img.eq(0).attr("src",url_prefix+carDataManager.carName.toLowerCase()+"_"+grade+"_"+this.className.toLowerCase()+"_v02.jpg")
							img.eq(1).attr("src",url_prefix+carDataManager.carName.toLowerCase()+"_"+grade+"_"+this.className.toLowerCase()+"_v04.jpg")
							$(this).css("border",color)
							
							hashMap.get(name).css("border",def_color);
							hashMap.set($(this),name)
						}
					})
					})(p.eq(m).parents(".column1"),$("p.color_name strong").eq(m))
				}
				}
			},
			"ulChanger":
			function(parent,children,ns){
				/*
				*parent=".contents_side_btn2"
				*children="a";
				*/
				for(var i=0,len=parent.length;i<len;i++){
					var	ul=$("ul.img_switch_box_left",parent.eq(i).parents(".sizeWrapper")),
							name=ns+i;
							
					hashMap.set(ul.eq(0),name)//{ul_change i : {Node}ul.img_switch_box_left(0)}
					hashMap.set("complete",name+"state")//{ul_changestate : {String}complete}
					
					for(var m=0,len2=children[i].size();m<len2;m++){
						if(m>0){
							ul.eq(m).css("display","none");//Stay fisr
						};
						(function(child_node,ul_list,ns){
							child_node.bind("click",function(){
								if(hashMap.get(ns)[0]!==ul_list[0] && hashMap.get(ns+"state")=="complete"){
									hashMap.set("loading",ns+"state")
									hashMap.get(ns).fadeOut(400,function(){
										ul_list.fadeIn(400);
										hashMap.set(ul_list,ns)
										hashMap.set("complete",ns+"state")
									})
								}
							})
						})(children[i].eq(m),ul.eq(m),name)
					}
				}
			},
			"tableChanger":
			function(p,c,ns){
				var Class="stay_btn2"
					hashMap.set("complete","tbl_state1")
					hashMap.set("complete","global")
					for(var n=0,len=p.length;n<len;n++){
							var name=ns+n;
							hashMap.set(c[n].eq(0),name);
						for(var i=0,len2=c[n].size();i<len2;i++){
							var tbns=name+i,tbl=$("div.grade_btn",p.eq(n).parents(".isPlateDropable"))
							if(i==0){
								tbl.eq(0).show().attr("id",tbns);
								doSetHeight("#"+tbns);
							}
							else
								tbl.eq(i).attr("id",tbns);
							(function(par,ch,tbl_name,_tbl,ap){
								ch.bind("click",function(e){
									e.preventDefault();
									if(hashMap.get(name).get(0)!==this && hashMap.get("tbl_state1")=="complete"){
											hashMap.set("run","tbl_state1")
											hashMap.set("run","global")
											var cl=this.className.replace(/\sstay_btn2/,"");
											$("div.grade_btn:visible",_tbl).fadeOut(400,function(){
												$("#"+tbl_name).fadeIn(400,function(){hashMap.set("complete","tbl_state1");hashMap.set("complete","global")})
												doSetHeight("#"+tbl_name)
											})
											$("a."+Class,$(this.parentNode)).toggleClass(Class,false);
											$(this).addClass(Class);
											hashMap.set($(this),name);
									}
								})
							})(p.eq(n),c[n].eq(i),tbns,tbl.parents(".isPlateDropable"))
						}
					}
			},
			"tableChanger2":
			function(p,c,ns){
				var Class="stay_btn2"
				hashMap.set("complete","tbl_state2")
				hashMap.set("complete","global")
					for(var i=0,len2=c.length;i<len2;i++){
					var name=ns+i;
					hashMap.set(c[i].eq(0),name);
					c[i].bind("click",function(e){
						e.preventDefault();
						if(hashMap.get(name).get(0)!==this && hashMap.get("tbl_state2")=="complete"){
								hashMap.set("run","tbl_state2")
								hashMap.set("run","global")
								var cl=this.className.replace(/\sstay_btn2/,""),wrapper=$(this).parents(".isPlateDropable");
								$("table.grade_price_table:visible",wrapper).fadeOut(400,function(){
									$("table."+cl+"_gp",wrapper).fadeIn(400,function(){hashMap.set("complete","tbl_state2");hashMap.set("complete","global")})
									//heightFix("#"+cl)
								})
								$("a."+Class,$(this.parentNode)).toggleClass(Class,false);
								$(this).addClass(Class);
								hashMap.set($(this),name);
						}
					})
					}
			},
			"pullDown":
			function(p,c,ns){
				win.filter="&filter=1";
				var modelID=carDataManager.carName;
				win.paramP="?gradeID="+carDataManager.defaultGrade()+"&modelNameRoma="+modelID
				for(var i=0,len=p.size();i<len;i++)
					(function(wrap,bt,field,doc,ID,iter){
						hashMap.set(0,ns+iter)
						bt.bind("click",function(e){
							e.stopPropagation();
							if(hashMap.get(ns+iter)==0){
							field.show();
							var ua=doc.all? true:false,w=(ua)?doc.width()-30:doc.width(),
h=(ua)?doc.height()-30:doc.height();	
							hashMap.set(1,ns+iter)
							}
						});
						$("div.op_tab",field).bind("click",function(e){
							e.stopPropagation();
							var node=$(this),next=node.next();
							(node.attr("style"))?node.attr("style",""):node.css("background","url(/GENERAL/BPARTS/IMAGES/option_arrowa.gif) #ebebeb no-repeat");
							next.slideToggle();
						})
						$("body").bind("click",function(){
							field.hide();
							hashMap.set(0,ns+iter)
						});
						var ajax_area=$("div.equip_ajax",wrap.parents(".column1")),
						gn=$("p.grade_name strong").eq(iter)
						gn.html("グレード："+carDataManager.defGradeName())
						hashMap.set($("a."+carDataManager.defaultGrade(),field),"opa"+iter)
						hashMap.get("opa"+iter).css("background","#316ac5");
						
						if($("ul.img_switch_box_right",wrap.parents(".column1")).size()<1)
							$("li a",field).bind("click",function(e){
									e.preventDefault();
									if(iostream.ajaxState.get()=="complete"){
										gn.html("グレード："+this.innerHTML.replace(/\d+WD/,""))
										hashMap.get("opa"+iter).css("background","");
										hashMap.get("opa"+iter).removeAttr("style");
										$(this).css("background","#316ac5");
										
										hashMap.set(0,ns+iter)
										var param=this.className
										win.paramP="?gradeID="+this.className+"&modelNameRoma="+ID;
										
										partsObject.jailBreak("op_ajax",true,true);
										hashMap.set(0,"time"+iter);
										hashMap.set($(this),"opa"+iter)
										if(ie.flag && ie.version<8)ajax_area.css("position","relative")
										ajax_area.animate({"height":'toggle'},1500,"easeOutExpo",function(){
											partsObject.callAsFunction("ajaxChanger",iter)
											hashMap.set(1000,"lb_later");
											setTimeout(function(){ajax_area.slideDown(500)},700)
										})
									}
							})
						else{
							var name="dummy"+i,name2="color_change"+i
							hashMap.set({self:$("a."+carDataManager.defaultGrade(),field).eq(0)[0],color:$("."+carDataManager.defaultGrade()+"_tip")},name)
							var url_prefix=carDataManager.get3Dmodel();
							img=$("img.model_img",wrap.parents(".column1"))
							$("li a",field).bind("click",function(e){
									e.preventDefault();
									if(hashMap.get(name).self!==this){
										gn.html("グレード："+this.innerHTML.replace(/\d+WD/,""))
										hashMap.get("opa"+iter).css("background","");
										hashMap.get("opa"+iter).removeAttr("style");
										$(this).css("background","#316ac5");
										
										var color_tip=$("."+this.className+"_tip").eq(iter);
										if(color_tip.size()>0){
											field.hide();
											hashMap.set(0,ns+iter)
											hashMap.get(name).color.hide()
											color_tip.show()
											$("a",color_tip).css("border","1px solid #cccccc");
											var tip=($("."+hashMap.get(name2).attr("class"),color_tip).size()>0)?$("."+hashMap.get(name2).attr("class"),color_tip).css("border","1px solid #c71444"):(function(){
														$("li a:first",color_tip).triggerHandler("click")
														return $("li a:first",color_tip).css("border","1px solid #c71444");
													})();
											hashMap.set(tip,name2)
											hashMap.set(tip,"color_change"+iter)
											hashMap.set($(this),"opa"+iter)
											carDataManager.setGrade(this.className,"exterior"+iter)
											if(img.eq(0).attr("src")){
												img.eq(0).attr("src",url_prefix+carDataManager.carName.toLowerCase()+"_"+this.className.toLowerCase()+"_"+tip.attr("class").toLowerCase()+"_v02.jpg")
												img.eq(1).attr("src",url_prefix+carDataManager.carName.toLowerCase()+"_"+this.className.toLowerCase()+"_"+tip.attr("class").toLowerCase()+"_v04.jpg")
											}
											hashMap.set({self:this,color:color_tip},name)
											}
									}
							})
						}
					})(p.eq(i),c[i].eq(0),	$("div.option_field2").eq(i),$(doc),modelID, i)
			},
			"ajaxChanger":
			function(p,c,ns){
					
					var Class="stay_btn2",table={"normal":1,"option":2,"all":3},pageParam;
					
					hashMap.set("complete","global")
					
					for(var i=0,pageParam,len2=c.length;i<len2;i++)
						
						(function(name,fWrapper,iter){
							
							hashMap.set(0,"time"+i)
							
							hashMap.set(c[i].eq(0),name);
							
							var gradeID=$("#gradeID"),
							
							text=p.eq(i).parents(".isPlateDropable").children("p"),
							
							count=0;
							
							function getParam(){
								if(/model/.test(location.search))
									pageParam=location.search;
								else{
									count++
									if(!win.paramP && count<5)getParam()
									pageParam=(win.filter)?win.paramP+win.filter:win.paramP
								}
							}
							
							getParam()
							
							var type=table[fWrapper.attr("class").match(/(normal|all|option)/)[1]],param=pageParam+"&type="+type,radio=$("[name=q1]"),
							
							time=hashMap.get("time"+iter)
							
							iostream.setParam(param.replace("?","")+"&button="+time+"&category="+lightbox.special.firstCategory)
							
							iostream.changeDir("get_optionList.php");
							
							iostream.open(null,name,
							
							function(jsonData){
									time=hashMap.get("time"+iter)
									
									radio.attr("disabled",true)
									
									$("#lightbox_area2").empty()
									
									var wrap=(time==0)?fWrapper:$("div.ajax_area",fWrapper);
									
									if(wrap.size()<1)wrap=$("div.ajax_area div",fWrapper);
									
									if(ie.flag && ie.version<8)wrap.css({"position":"relative",width:"720px"});
									
									if(time!=0)wrap.animate({"height":'toggle'},1500,"easeOutExpo",function(){
										setTimeout(function(){
											
											wrap.empty();
											wrap[0].innerHTML=jsonData.html
												if($("#normal").size()<1)text.css("visibility","hidden");
												else text.css("visibility","visible")
											wrap.animate({"height":'show'},1600,"easeOutExpo",function(){
												
												if(hashMap.get("lb_later"))
													setTimeout(function(){
												
															if($("#lightbox_area2").size()<1)$("#right_column").append("<div id='lightbox_area2'></div>")
																var lw=$("div.lightbox_window",wrap.parents(".column1")),
																cl=lw.clone()
																$("#lightbox_area2").append(cl)
																lw.remove();
														
														lightbox.subset.live($("a.lb_show"));hashMap.set(null,"lb_later");
													},hashMap.get("lb_later"));
												else{
													
												
															if($("#lightbox_area2").size()<1)$("#right_column").append("<div id='lightbox_area2'></div>")
																var lw=$("div.lightbox_window",wrap.parents(".column1")),
																cl=lw.clone()
																$("#lightbox_area2").append(cl)
																lw.remove();
														
													
													lightbox.subset.live($("a.lb_show"))
												}
												
												iostream.ajaxState.set("complete");
												
												radio.removeAttr("disabled")
												
												eventBind()
												
												jsonData.html=null;
												
											})
										},100);
										
									});
									else 	{
										wrap[0].innerHTML=jsonData.html
											if($("#normal").size()<1)text.css("visibility","hidden");
												else text.css("visibility","visible")
											if(hashMap.get("lb_later"))
													setTimeout(function(){
														
													
															if($("#lightbox_area2").size()<1)$("#right_column").append("<div id='lightbox_area2'></div>")
																var lw=$("div.lightbox_window",wrap.parents(".column1")),
																cl=lw.clone()
																$("#lightbox_area2").append(cl)
																lw.remove();
														
														
																hashMap.set(null,"lb_later");
														
															if(lightbox.special.openID){
																lightbox.subset.live($("a.lb_show"),true)
															}else{
																lightbox.subset.live($("a.lb_show"))
															}
														
													},hashMap.get("lb_later"));
												else{
													
													
															if($("#lightbox_area2").size()<1)$("#right_column").append("<div id='lightbox_area2'></div>")
																var lw=$("div.lightbox_window",wrap.parents(".column1")),
																cl=lw.clone()
																$("#lightbox_area2").append(cl)
																lw.remove();
														
													
												
													
													if(lightbox.special.openID){
															lightbox.subset.live($("a.lb_show"),true)
													}else{
															lightbox.subset.live($("a.lb_show"))
													}
													
												}
												
												iostream.ajaxState.set("complete");
												
												radio.removeAttr("disabled")
												
												jsonData.html=null;
												
												eventBind()
												
												
									}
								//	sc.eq(sc.size()-1).remove();
								function eventBind(){
								bind($("ul.opt_map",fWrapper))
								if(time==0)
								$("ul.contents_side_btn5 a",fWrapper).bind("click",function(e){
									e.preventDefault();
									if((hashMap.get(name).get(0)!==this && iostream.ajaxState.get()=="complete") || hashMap.getThrough("op_ajax")){
											var cl="stay_btn2",parent=$(this).parent().parent()
											if(!win.filter)win.filter="";
											$("a."+cl,parent).toggleClass(cl,false);
											$(this).addClass(cl);
											hashMap.set(this,ns+i);
											hashMap.set("complete","global")
											var param=(location.search.length>0)?location.search:win.paramP+win.filter,wrapper=$(this).parents(".isPlateDropable").eq(0),ul=$("ul.opt_map",wrapper),type="&type="+table[fWrapper.attr("class").match(/(normal|all|option)/)[1]]
											unbind(ul)
											iostream.changeDir("get_optionList.php");
											iostream.setParam(param.replace("?","")+"&category="+this.className.match(/category(\d+)/)[1]+type+"&button="+hashMap.get("time"+iter))
											iostream.open(this,name);
											$("a."+Class,$(this.parentNode)).toggleClass(Class,false);
											$(this).addClass(Class);
											hashMap.set($(this),name);
											hashMap.breakThrough("op_ajax",false)
											parent=null;
									}
								})
								hashMap.set(1,"time"+iter)
								}
							})
						})(ns+i,p.eq(i),i);
			},
			"ajaxChanger2":
			function(p,c,ns){
					var Class="stay_btn2",time=0,pageParam;
					hashMap.set("complete","global")
					for(var i=0,len2=c.length;i<len2;i++){
						var name=ns+i;
						hashMap.set(c[i].eq(0),name)
						var model="&modelNameRoma="+carDataManager.carName,
						pageParam="gradeID="+location.search.replace("?","").split("&").join(",")+model;
						(function(NS,fWrapper){
						var param=pageParam;
						iostream.changeDir("get_gradeOption.php");
						iostream.setParam(param+"&button="+time+"&category=''")
						iostream.open(null,NS,
								function(jsonData){
									var wrap=(time==0)?fWrapper:$("tbody.ajax_area",fWrapper)
									if(ie.flag){
										$(".ajax_area",fWrapper).fadeTo(400,0);
										$("table.grade_price_table td",wrap).fadeTo(400,0)
									}
									wrap.fadeOut(400,function(){
										if(ie.flag){
											if(	$("td",wrap).size()>0){
												doc.innerHTML=jsonData.html
												wrap.empty();
												wrap.append(doc.innerHTML)
												var node=$("td",wrap)
												node.css("opacity",0)
												node.fadeTo(400,1,function(){
													if(ie.version>6){
														wrap.empty().append(doc.innerHTML)
														jsonData.html=null;
													}
												node=null; })
											}else wrap[0].innerHTML=jsonData.html
											
											wrap.fadeIn(0,function(){
												iostream.ajaxState.set("complete");
												lightbox.subset.live($("a.lb_show"));
												jsonData.html=null;
												eventBind()
											})
										}else{
											wrap[0].innerHTML=jsonData.html
											wrap.fadeIn(400,function(){
												lightbox.subset.live($("a.lb_show"));
												iostream.ajaxState.set("complete");
												jsonData.html=null;
												eventBind()
												wrap=null;
											})
										}
									});
							function eventBind(){
							//bind($("ul.opt_map",fWrapper))
							if(time==0)
							$("ul.contents_side_btn5 a",fWrapper).bind("click",function(e){
								e.preventDefault();
								if(hashMap.get(name).get(0)!==this && iostream.ajaxState.get()=="complete"){
										var cl="stay_btn2",parent=$(this).parent().parent()
										$("a."+cl,parent).toggleClass(cl,false);
										$(this).addClass(cl);
										hashMap.set(this,ns+i);
										hashMap.set("complete","global")
										var wrapper=$(this).parents(".equip_ajax_compare").eq(0)
										iostream.changeDir("get_gradeOption.php");
										iostream.setParam(param+"&category="+this.className.match(/category(\d+)/)[1]+"&button="+time)
										iostream.open(this,NS);
										$("a."+Class,$(this.parentNode)).toggleClass(Class,false);
										$(this).addClass(Class);
										hashMap.set($(this),name);
								}
							})
								time=1
							}
						})
					})(ns+i,p.eq(i));
					}
			},
			"getTopAjax":
			function(p,c,ns){
				iostream.setParam("modelNameRoma="+carDataManager.carName)
				iostream.outputHandler([{area:p,name:ns,dir:ns}],null,ns,function(json,jo,n){
									jo.fadeOut(300,function(){
										jo.css("border",0).html(json.html).css({"width":"auto","height":"auto"}).fadeIn(400,function(){
											json.html=null;
											if($("#lightbox_area").size()<1)
											$("#right_column").append("<div id='lightbox_area'></div>");
											var par=$("table.ranking_caset_v").parent();
											if(par[0] && n=="ranking")
												(function(){
													for(var i=0,len=par.size();i<len;i++){
														var lw=$("div.lightbox_window",par.eq(i))
														if(lw[0]){
															lc=lw.clone();
															$("#lightbox_area").append(lc)
															lw.remove();
														}
													}
													setTimeout(function(){lightbox.subset.live($("a.lb_show"))},100)
												})()
										})
									})
							})
			},
			"getTopAjaxOne":
			function(p,c,ns){
				iostream.outputHandler([{area:p,name:ns,dir:ns}],"http://www.sotoasobi.net/nissan-wct/bParts/ajax/voice/voice.js",ns)
			},
			"inputCheck":
			function(p,c){
				for(var x=0,lenx=c.length;x<lenx;x++)
				c[x].bind("click",function(e){
					e.preventDefault();
					var stack=[],param=[]
					for(var i=0,len=p.size();i<len;i++){
						var input=$("input:checkbox:checked",p.eq(i))
						for(var m=0,len2=input.length;m<len2;m++){
							stack.push(input.eq(m).val())
							param.push(input.eq(m).parent().parent()[0].className.split("-")[0])
						}
						input=null;
					}
					if(stack.length<2 || stack.length>3){
						param=null;;
						stack=null
						alert("比較対象グレードは2グレード以上4グレード未満としてください。")
						return false;
					}else{
						location.href=$(this).attr("href")+"?"+param.join("&")
						param=null;;
						stack=null
					}
				});
			},
			"gallery":
			function(p,c){
				if(ie.flag && ie.version<8)
					for(var i=0,len=p.length;i<len;i++)
						if(!c[i].hasClass("ie_fix_done"))
							c[i].each(function(){
									$(this).html("<span></span>"+$(this).html())
									$(this).addClass("ie_fix_done")
							});
			},
			"makeSwf":
			function(p,c,ns){
					var $=win.jQuery,so = new SWFObject("/GENERAL/SWF/flv_swf.swf", "swf_point1", 350, 176, "9", "#000000");
					so.addParam("allowScriptAccess","always")
					so.addVariable("url", "/GENERAL/SWF/DL0000001596.flv");
					so.write("swf_point1");
					so=swf=path=null
			},
			"getObject":
			function(){
				var param=location.search.replace("?",""),gradeID="gradeID";
				
			},
			"filterOption":
			function(p,c,ns){
				c[0].eq(0).attr("checked","true")
				for(var i=0,len=p.length;i<len;i++){
					c[i].bind("click",function(){
						win.filter="&filter="+this.className.replace("i","");
							hashMap.breakThrough("op_ajax",true)
							$("a.stay_btn2",$(this).parents(".column1")).triggerHandler("click");
					})
				}
			}
	}

	var evtControll2=function(){
		var init=function(){
			this._ns="NS"
			this.commonBtnClass="stay_btn2"
			this.commonEvent();
			this.bind();
			return partsObject.createObject()
		}
		init.prototype={
			bind:function(){
				for(var i=0,len=partsObject._tableObj.length;i<len;i++)
					if(partsObject._tableObj[i].node.size()>0)
						(function(obj){
							obj.node.bind("mouseenter",function(){$(this).css(obj.css_enter)})
							obj.node.bind("mouseleave",function(){$(this).css(obj.css_leave)})
							if(obj.evt)obj.evt();
						})(partsObject._tableObj[i])
			},
			commonEvent:function(){
					var ns=this._ns;
					hashMap.set("complete","global")
					for(var i=0,len=partsObject._btnObject.length;i<len;i++)
							(function(obj,Class){
								if(obj && obj.first){
									var p=$(obj.parent);
									for(var m=0,len2=p.length;m<len2;m++)
									(function(n,nsm){
									$("a",n).eq(0).addClass(Class)
									$("a",n).bind("click",function(e){
										e.preventDefault();
										if(hashMap.get(nsm)!==this && hashMap.get("global")=="complete"){
												var cl=this.className;
												$("a."+Class,n).toggleClass(Class,false);
												$(this).addClass(Class);
												hashMap.set(this,nsm);
										}
								})
								})(p.eq(m),ns+m)
								}
						})(partsObject._btnObject[i],this.commonBtnClass,this)
					for(var i=0,dw=[90,84,85,111,103,66],p=$(partsObject._globalNavi).children("li.des"),lo_d=$("#logo_slide"),lo_d_i=$("#logo_slide img"),len=p.size(),hs=$("#header span.slide"),hs_i=$("#header span.slide img");i<len;i++)
						(function(pa,dw,sl,img,lo,lo_img,cnst,as,ai,roll){	
								sl.css("opacity",0)
								pa.bind("mouseenter",function(e){
								
								img.css("opacity",1)
								if(hashMap.get("timer"))clearTimeout(hashMap.get("timer").count);
								if(hashMap.get("timer2"))clearTimeout(hashMap.get("timer2").count);
								hashMap.set({count:""},"timer2")
								as.animate({width:0,opacity:0},200);
								sl.addClass("run")
								hashMap.get("timer2").count=setTimeout(function(){
									as.animate({width:0,opacity:0},200);
									lo_img.stop(true, false).animate({"left":"41px"},200,function(){
										if(hashMap.get("animate").Self[0].parentNode.className!="on")
											hashMap.get("animate").Self.triggerHandler("mouseout")
										else
											sl.stop(true, false).animate({width:dw,opacity:1},100,function(){			
												img.animate({"opacity":0},function(){
													hashMap.get("animate").state="compleate"
													if(hashMap.get("animate").Self[0].parentNode.className!="on")
													hashMap.get("animate").Self.triggerHandler("mouseout")
												});
											})
									})
								},100);
									hashMap.set({state:"run",Self:$(this),sl:sl,img:img},"animate")
							})
							pa.bind("mouseout",function(e){
								if(hashMap.get("timer2"))clearTimeout(hashMap.get("timer2").count);
								$("#header ul.header_navi li span.run").animate({width:0,opacity:0},200);
								hashMap.set({count:""},"timer")
								hashMap.get("timer").count=setTimeout(function(){
								sl.animate({width:0,opacity:0},200,function(){
										img.css("opacity",1)
										sl.toggleClass("run",false)
										if($("#header li.on").size()<1){
											lo_img.stop(true, false).animate({"left":"-39px"},function(){
												hashMap.get("animate").state="end";
											})
										}
								})
								},100)
							})
						})($("a",p.eq(i)).eq(0),dw[i],$("span.slide",p.eq(i)),$("span.slide img",p.eq(i)),lo_d,lo_d_i,58,hs,hs_i,$("img",p.eq(i)).eq(0));
						(function(h){
							hashMap.set({Self:1},"g_roll")
							h.bind("mouseenter",function(e){
										e.stopPropagation()
										if(hashMap.get("g_roll").Self!==this){
											if(hashMap.get("g_roll").img)hashMap.get("g_roll").img.attr("src",hashMap.get("g_roll").img.attr("src").replace("_on","_off"))
											var img=$("a img",this).eq(0)
											img.unbind("mouseout")
											hashMap.set({img:img,anc:$("a",this).eq(0),Self:this},"g_roll")
										}
							})
							h.bind("mouseover",function(e){
										e.stopPropagation()
							})
							$("body").bind("mouseover",function(){
								if(hashMap.get("g_roll") && hashMap.get("g_roll").img){
									var img=hashMap.get("g_roll").img
									img.attr("src",img.attr("src").replace("_on","_off"))
								}
									if(hashMap.get("animate") && hashMap.get("animate").Self[0].parentNode.className!="on")
											hashMap.get("animate").Self.triggerHandler("mouseout")
						})
					})($("#header ul.header_navi li.des"));
					
					(function(){
						var insiteSearch = {
							
							focusCont:function(){
								
								
								var isi = $("#insite_search_input");
								isi.bind("focus.insite_search",
									function(){
										
										$('#insite_search_btn')
										.removeAttr('disabled')
										.attr('src','/GENERAL/IMAGES/headernavi_button_01_move_active_off.jpg')
										.bind("mouseover.imgrep",
											function(){
												$(this).attr("src",
													$(this).attr("src").replace('_off','_on')
												);
											}
										)
										.bind("mouseout.imgrep",
											function(){
												$(this).attr("src",
													$(this).attr("src").replace('_on','_off')
												);
											}
										);
											
										
										$(this).val(this.value.replace('サイト内検索','') );
										
										
									}
								)
							},
							
							blurCont:function(){
								var isi = $("#insite_search_input")
								isi.bind("blur.insite_search",function(){
									if( $(this).val() == ''){
										$('#insite_search_btn')
										.attr('disabled','disabled')
										.attr('src','/GENERAL/IMAGES/headernavi_button_01_move.jpg')
										.unbind("mouseover.imgrep")
										.unbind("mouseout.imgrep");

										$(this).val("サイト内検索");

									}
								})
							},
							
							btnCont:function(){
								var isi = $("#insite_search_input");
								$('#insite_search_btn').bind("mouseover.noblr",
									function(){
										isi.unbind("blur.insite_search");
									}
								)
								
								$('#insite_search_btn').bind("mouseout.noblr",
									function(){
										
										insiteSearch.blurCont();
										
									}
								)
								
								$('#insite_search_btn').bind("blur",
									function(){
										if( isi.val() == ''){
											$('#insite_search_btn')
											.attr('disabled','disabled')
											.attr('src','/GENERAL/IMAGES/headernavi_button_01_move.jpg')
											.unbind("mouseover.imgrep")
											.unbind("mouseout.imgrep");

											isi.val("サイト内検索");

										}
									}
								)
							}
						}
							insiteSearch.focusCont();
							insiteSearch.blurCont();
							insiteSearch.btnCont();
					})();
					
			}
		}
		return new init();
	}
	function unbind(n){
		n.unbind("mouseenter").unbind("mouseleave")
	}
	function bind(n){
		n.bind("mouseenter",function(){$(this).css(partsObject._tableObj[0].css_enter)})
		n.bind("mouseleave",function(){$(this).css(partsObject._tableObj[0].css_leave)})	
	}
	function initNissanPartsEvent(){
		iostream=iostream();
		window.carDataManager=carDataManager();
		partsObject=win.$pcl=new partsObject();
		var evtControll=evtControll2();
		partsObject.NSFunction(eventObject)
	}
	$(function(){
		imgRollover();
		lightbox({
			fx:"scale",
			time:1000,
			ease:"easeInOutExpo",
			debug:false
		});
		lightbox.subset.autoOpen();
		initNissanPartsEvent();
	})
	$(win).bind("unload",function(){
		$("script").remove();
		for(var i in partsObject)delete partsObject[i]
		for(var i in iostream)delete iostream[i]
		for(var i in eventObject)delete eventObject[i]
		delete partsObject,$pcl,iostream,$,jQuery,eventObject;
		$("a").unbind("click");
	})
})(jQuery,document,window)

function over(i){
	i.src=i.src.replace("_off","_on")
}
function out(i){
	i.src=i.src.replace("_on","_off")
}
