/**
 *	@filename		assessment.js
 *	@charset		utf-8
 *	@created		November 5, 2009
 *	@lastmodified	November 17, 2009
 *	@description	査定上限金額の算出用
 *	@author			T.Sakuma
 */
new function(){
	var path = document.getElementsByTagName("script");
	path = path[path.length-1].src.replace(/\/js\/contents\/assessment\.js$/, "");
	path += "/xml/assessment.xml";

	var item = {};

	var obj_make         = {};
	var obj_displacement = {};
	var obj_model        = {};
	
	var customSelectMake;
	var customSelectDisplacement;
	var customSelectModel;
	
	// ページ読み込み時に初期化とイベント設定
	$(document).ready(function(){
		
		//本物のセレクトタグ
		obj_make         = document.getElementById("fMake"        );
		obj_displacement = document.getElementById("fDisplacement");
		obj_model        = document.getElementById("fModel"       );
		
		//ダミーのセレクトタグを作成
		customSelectMake = (new blades.formCheck.Select("#fMake")).customize()[0];
		customSelectDisplacement = (new blades.formCheck.Select("#fDisplacement")).customize()[0];
		customSelectModel = (new blades.formCheck.Select("#fModel")).customize()[0];
		
		$.ajax({
			type: "GET",
			url:  path,
			dataType: "xml",
			timeout: 10000,
			cache: false,
			error: function(XMLHttpRequest, textStatus, errorThrown){
				if(textStatus == "timeout"){
					alert("タイムアウトしました" + "\n" + path);
				} else {
					alert("読み込みに失敗" + "\n" + path);
				}
			},
			success: function(xml){
				var unique = {};

				clearSelect("#fMake"        );
				clearSelect("#fDisplacement");
				clearSelect("#fModel"       );

				var len        = $(xml).find("row").get();
				var len_length = len.length;

				for(i=0;i<len_length;i++) {
					var obj_this     = len[i];
					var make         = obj_this.getElementsByTagName("make"        )[0];
					var displacement = obj_this.getElementsByTagName("displacement")[0];
					var model        = obj_this.getElementsByTagName("model"       )[0];
					var price        = obj_this.getElementsByTagName("price"       )[0];
					var notes        = obj_this.getElementsByTagName("notes"       )[0];

					if(make         && make.firstChild        ) make         = encodeURI(make.firstChild.nodeValue        );
					if(displacement && displacement.firstChild) displacement = encodeURI(displacement.firstChild.nodeValue);
					if(model        && model.firstChild       ) model        = encodeURI(model.firstChild.nodeValue       );
					if(price        && price.firstChild       ) price        = encodeURI(price.firstChild.nodeValue       );
					if(notes        && notes.firstChild       ) notes        = encodeURI(notes.firstChild.nodeValue       );

					if(!(make         in item                    )) item[make] = {};
					if(!(displacement in item[make]              )) item[make][displacement] = {};
					if(!(model        in item[make][displacement])) item[make][displacement][model] = {};

					item[make][displacement][model]["price"] = price;
					item[make][displacement][model]["notes"] = notes;

					if(make in unique) continue;
					unique[make] = true;

					var elem = document.createElement("option");
					elem.appendChild(document.createTextNode(decodeURI(make)));
					elem.value = decodeURI(make);
					$(obj_make).width();
					obj_make.appendChild(elem);
				}
				//selectタグマスターと同期
				customSelectMake.createOptions();

				// メーカー変更時処理設定
				obj_make.onchange = function(){
					clearSelect("#fDisplacement");
					clearSelect("#fModel"       );
					setSelect("#fDisplacement");
				}

				// 排気量変更時処理設定
				obj_displacement.onchange = function(){
					clearSelect("#fModel");
					setSelect("#fModel");
				}

				// 車種変更時処理設定
				//obj_model.onchange = function(){
				//}

				//	var form = document.getElementById("f");
				//	$("#buttonCheck").click(function(evt){
				//		return false;
				//	});
				
				// フォーム送信時処理設定
				$("#buttonCheck").click(function(){
					var error = "";
					if("" == obj_make.value        ) error += "【メーカー】" + "を選択してください" + "\n";
					if("" == obj_displacement.value) error += "【排気量】"   + "を選択してください" + "\n";
					if("" == obj_model.value       ) error += "【車種】"     + "を選択してください" + "\n";
					if("" != error){
						alert(error);
						return false;
					}

					var make         = encodeURI(obj_make.value        );
					var displacement = encodeURI(obj_displacement.value);
					var model        = encodeURI(obj_model.value       );

					setPram(make,displacement,model);

					if(document.getElementById("home")){
						document.getElementById("f").submit();
					}
					return false;
				});

				// GETリクエストから値を取得して格納
				if(get = getRequest()) {
					var make         = get["fMake"        ];
					var displacement = get["fDisplacement"];
					var model        = get["fModel"       ];

					make = make.replace(/%2F/g, '/');
					make = make.replace(/%28/g, '(');
					make = make.replace(/%29/g, ')');

					displacement = displacement.replace(/%2F/g, '/');
					displacement = displacement.replace(/%28/g, '(');
					displacement = displacement.replace(/%29/g, ')');

					model = model.replace(/%2F/g, '/');
					model = model.replace(/%28/g, '(');
					model = model.replace(/%29/g, ')');

					setMake(make);
					setDisplacement(displacement);
					setModel(model);

					setPram(make,displacement,model);
					
				}
			}
		});
	});

	// メーカーの初期値を設定
	function setMake(make){
		$(obj_make).val(decodeURI(make));
		dispatchChangeEvent(obj_make);
		customSelectMake.createOptions();
		document.getElementById('fMake').focus();
	}

	// 排気量の初期値を設定
	function setDisplacement(displacement){
		$(obj_displacement).val(decodeURI(displacement));
		dispatchChangeEvent(obj_displacement);
		customSelectDisplacement.createOptions();
		document.getElementById('fDisplacement').focus();
	}

	// 車種の初期値を設定
	function setModel(model){
		$(obj_model).val(decodeURI(model));
		dispatchChangeEvent(obj_model);
		customSelectModel.createOptions();
		document.getElementById('fModel').focus();
	}

	// 各項目に値を格納
	function setPram(make,displacement,model){
		if("" == make        ) return;
		if("" == displacement) return;
		if("" == model       ) return;

		make = make.replace(/%2F/g, '/');
		make = make.replace(/%28/g, '(');
		make = make.replace(/%29/g, ')');

		displacement = displacement.replace(/%2F/g, '/');
		displacement = displacement.replace(/%28/g, '(');
		displacement = displacement.replace(/%29/g, ')');

		model = model.replace(/%2F/g, '/');
		model = model.replace(/%28/g, '(');
		model = model.replace(/%29/g, ')');

		var price = decodeURI(item[make][displacement][model]["price"]);
		var notes = decodeURI(item[make][displacement][model]["notes"]);

		if(("" != price)&&(true != isNaN(price))) {
			price = numberFormat(price) + "円";
		} else {
			price = "円";
		}

		if(document.getElementById("rPrice")){
			document.getElementById("rPrice").innerHTML = price;
		}
		if(document.getElementById("remarkColumn")){
			document.getElementById("rNotes").innerHTML = notes;
		}
		if(document.getElementById("rNotes")){
			if(notes && "undefined" != notes && "null" != notes){
				document.getElementById("remarkColumn").style.display = "block";
			} else {
				document.getElementById("remarkColumn").style.display = "none";
			}
		}
	}

	// 各セレクトボックスを初期化
	function clearSelect(id){
		var option = {};
		$(id).children().remove();

		option["#fMake"        ] = "メーカーを選択";
		option["#fDisplacement"] = "排気量を選択";
		option["#fModel"       ] = "車種を選択";

		var elem = document.createElement("option");
		elem.appendChild(document.createTextNode(option[id]));
		elem.value = "";
		
		/*
		if(id == "#fMake"        ) obj_make.appendChild(elem);
		if(id == "#fDisplacement") obj_displacement.appendChild(elem);
		if(id == "#fModel"       ) obj_model.appendChild(elem);
		*/
		
		//optionタグ挿入と同時にselectタグマスターと同期
		if(id == "#fMake"){
			obj_make.appendChild(elem);
			customSelectMake.createOptions();
		}
		if(id == "#fDisplacement"){
			obj_displacement.appendChild(elem);
			customSelectDisplacement.createOptions();
		}
		if(id == "#fModel"){
			obj_model.appendChild(elem);
			customSelectModel.createOptions();
		}
		return true;
	}

	// 各セレクトボックスに格納
	function setSelect(id){
		var unique = {};
		var value  = {};
		var list   = {};

		value["#fMake"        ] = encodeURI(obj_make.value        );
		value["#fDisplacement"] = encodeURI(obj_displacement.value);
		value["#fModel"       ] = encodeURI(obj_model.value       );

		if(("#fDisplacement" == id)&&(value["#fMake"        ] != "")) list = item[value["#fMake"]];
		if(("#fModel"        == id)&&(value["#fDisplacement"] != "")) list = item[value["#fMake"]][value["#fDisplacement"]];

		for(var i in list){
			if(i in unique) return true;
			unique[i] = true;

			var elem = document.createElement("option");
			elem.appendChild(document.createTextNode(decodeURI(i)));
			elem.value = decodeURI(i);

			if(id == "#fMake") {
				$(obj_make).width();
				obj_make.appendChild(elem);
			}
			if(id == "#fDisplacement") {
				$(obj_displacement).width();
				obj_displacement.appendChild(elem);
			}
			if(id == "#fModel") {
				$(obj_model).width();
				obj_model.appendChild(elem);
			}
		}
		
		//selectタグマスターと同期
		if(id == "#fMake"){
			customSelectMake.createOptions();
		}
		if(id == "#fDisplacement"){
			customSelectDisplacement.createOptions();
		}
		if(id == "#fModel"){
			customSelectModel.createOptions();
		}
		return true;
	}

	// GETリクエストから値を取得
	function getRequest(){
		if(location.search.length > 1){
			var get = {};
			var ret = location.search.substr(1).split("&");
			$(ret).each(function(i){
				var r = ret[i].split("=");
				get[(r[0])] = r[1];
			});
			return get;
		} else {
			return false;
		}
	}

	// ３ケタ区切り用
	function numberFormat(str) {
		var num = new String(str).replace(/,/g, "");
		while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
		return num;
	}
	
	//同期用にDOM2 Event発火(2009/11/20 added by T.O.)
	var dispatchChangeEvent = function(element){
		if(document.createEvent){
			var evt = document.createEvent("Event");
			evt.initEvent("change", true, false);
			element.dispatchEvent(evt);
		}else{
			var evt = document.createEventObject();
			element.fireEvent("onchange", evt);
		}
	}
}




