/********************************************************
** library function
********************************************************/
var PnLib = function(){
	this.firstParam = {};
	// ■初期表示時のform値を保持する
	this.saveFirstParam = function(target){
		var paramHash = {};
		$(target).each(function(key, val){
			if( val.name == "GRDKC_HIDDEN" ){
				paramHash["GRDKC"] = val.value;
			} else {
				paramHash[val.name] = val.value;
			}
		});
		this.firstParam = paramHash;
		return true;
	};
	// ■ajaxコンボボックス操作を許可／禁止する
	this.setPanelDisable = function(selector, mode){
		$(selector).each(function(key, val){
			val.disabled = mode;
		});
		return true;
	};
	// ■コンボ内容を更新する
	this.updateCombo = function(id, res, selectedOptions){
		if( res.fc_brand && res.fc_shashu && res.fc_bodytype && res.fc_area ){
			this.setCombo("BRDC", res.fc_brand, selectedOptions);
			this.setCombo("CARC", res.fc_shashu, selectedOptions);
			this.setCombo("AR", res.fc_area, selectedOptions);
			this.setCombo("BT", res.fc_bodytype, selectedOptions);
			if( id == "BRDC" || id == "CARC" ){
				this.setCombo("GRDKC", res.fc_grade, selectedOptions);
			}
			if( id == "AR" ) this.setCombo("CITY", res.fc_city, selectedOptions);
		// ajaxレスポンスが空だった場合は、コンボの内容はすべてそのままで、件数のみ非表示にする
		} else {
			this.zeroCombo("BRDC", selectedOptions);
			this.zeroCombo("CARC", selectedOptions);
			this.zeroCombo("AR", selectedOptions);
			this.zeroCombo("BT", selectedOptions);
		}
	};
	// ■各コンボ内容を更新する
	this.setCombo = function(id, facet, selectedOptions){
		var selectEl = document.getElementById(id);
		var startNum = 0;
		var optionTxt = (id == "CITY") ? "市区町村選択" : "こだわらない";
		selectEl.options.length = 1;
		selectEl.options[0] = new Option(optionTxt, "_n");
		startNum ++;// 1
		// 元々のコンボが複数選択中であれば、以降も複数選択中のoptionをselectedの状態で挿入し続ける
		if( selectedOptions[id].search(/\*/) != -1 ){
			selectEl.options[1] = new Option("複数選択中", selectedOptions[id]);
			selectEl.options[1].selected = true;
			startNum ++;// 2
		}
		// 地域コンボで指定されたのが広域レベルであった場合は市区町村optionを挿入しない
		if( id == "CITY" && selectedOptions["AR"].length == 1 ){
			return;
		}
		if( facet ){
			var addedCount = 0;
			for(var i=0; i<facet.length; i++){
				var txt = facet[i]["text"];
				if( facet[i]["count"] !== "" ){
					txt += "("+facet[i]["count"]+")";
				}
				// 複数選択中項目がある場合、そのvalue値の中に含まれない項目はスキップする
				// ※ただし車種同士を区切るダミーoptionは残す
				if( facet[i]["value"].search(/■/) != -1 && startNum == 2 && selectedOptions[id].search(facet[i]["value"]) == -1 ){
					continue;
				}
				var optionEl = new Option(txt, facet[i]["value"]);
				// もともと選択していた項目はselectedにする
				if( startNum != 2 && selectedOptions[id] != "_n" && selectedOptions[id] == facet[i]["value"] ){
					optionEl.selected = true;
				}
				selectEl.options[startNum + addedCount] = optionEl;
				addedCount++;
			}
		}
		return;
	}
	// ■ajaxレスポンス0件時は、現状のコンボ内容のまま件数を0にする
	this.zeroCombo = function(id, selectedOptions){
		$("select#"+id+" option").each(function(){
			this.text = this.text.replace(/\(\d+\)/, "(0)");
		});
	}
	// ■submit時、グレード複数選択時のsubmit用パラメータ取得
	this.getSubmitParam = function(formObj){
		var params = {};
		params["STID"] = (formObj.STID.value) ? formObj.STID.value : "CS210610";
		params["PN"] = (formObj.PN.value) ? formObj.PN.value : "0";
		if( formObj.ROUTEID ) params["ROUTEID"] = formObj.ROUTEID.value;
		if( formObj.FAIR ) params["FAIR"] = formObj.FAIR.value;
		if( formObj.SHOP ) params["SHOP"] = formObj.SHOP.value;
		if( formObj.SHOPTR ) params["SHOPTR"] = formObj.SHOPTR.value;
		if( formObj.SHOPCMB ) params["SHOPCMB"] = formObj.SHOPCMB.value;
		// put plural item into array and join it by delimiter.
		var arrCL = [];
		var arrSP = [];
		var arrSLST = [];
		var arrOPT = [];
		var arrOPTCD = [];
		$.each(formObj, function(idx, item){
			// ignore items not selected
			if(
				(item.type == "submit") ||
				(item.type == "checkbox" && !item.checked) ||
				(item.type == "select-one" && (item.value == "_n" || item.value == "")) ||
				(item.type == "text" && item.value == "")
			){
				return true;// ※continue
			}
			if( item.name == "CL" ){
				arrCL.push(item.value);
				return true;// ※continue
			}
			if( item.name == "SP" ){
				arrSP.push(item.value);
				return true;// ※continue
			}
			if( item.name == "SLST" ){
				arrSLST.push(item.value);
				return true;// ※continue
			}
			if( item.name == "OPT" ){
				arrOPT.push(item.value);
				return true;// ※continue
			}
			if( item.name == "OPTCD" ){
				arrOPTCD.push(item.value);
				return true;// ※continue
			}
			// considering consistency(maker->car->fmc->mc->grade).
			if( item.name == "MCC" || item.name == "GRDC" ){
				if( formObj.BRDC.value != item.value.substring(0,2) || formObj.CARC.value != item.value.substring(0,7) ){
					return true;// ※continue
				}
			}
			params[item.name] = item.value;
		});
		if( arrCL.length > 0 ) params["CL"] = arrCL.join("*");
		if( arrSP.length > 0 ) params["SP"] = arrSP.join("*");
		if( arrSLST.length > 0 ) params["SLST"] = arrSLST.join("*");
		if( arrOPT.length > 0 ) params["OPT"] = arrOPT.join("*");
		if( arrOPTCD.length > 0 ) params["OPTCD"] = arrOPTCD.join("*");
		return params;
	}
	// ■検索条件オールクリア
	this.allClear = function(params){
		if( !confirm('すべての条件指定を解除します。\nよろしいですか？') ){
			return false;
		}
		var url = "/usedcar/search.php?STID=CS210610";
		// FAIR、ROUTEID、SHOPTRは付与
		if( params["FAIR"] ) url += "&FAIR="+ params["FAIR"];
		if( params["ROUTEID"] ) url += "&ROUTEID="+ params["ROUTEID"];
		if( params["SHOPTR"] ) url += "&SHOPTR="+ params["SHOPTR"];
		location.href = url;
		return false;
	}
	this.mpjump = function(jpurl, mpurl, root, trgt){
		apllog_output(mpurl, root);// use apllog.js
		var winObj = "";
		if(trgt != "") {
			winObj = window.open(jpurl, trgt);
		} else {
			window.location.href = jpurl;
		}
		winObj.focus();
		return false;
	}
}

