﻿var searchDef = {
	"area" : ""
	,"country" : ""
	,"city" : ""
};

//選択中の国,都市を取得する
function getCC()
{
	var geo = new Array();
	//都市は"citycode,countrycode" "citycode,"の場合あり
	var val  = jQuery("#sp_city").val();
	var tmp  = val.split(",");
	geo.city = tmp[0];

	if((tmp[1] != "undefined")&&(tmp[1])){
		geo.country = tmp[1];
	}
	else{
		geo.country = jQuery("#sp_country").val();
	}
	return geo;
}

//都市コード整合性チェック
function checkCity(code)
{
	if((code.length == 3)||(code.length == 4)){
		return true;
	}
	else{
		return false;
	}
}

//最大人数のチェック
function checkMaxPerson()
{
	var rt = jQuery("#sp_roomtype").val().split(",");
	var rc = jQuery('#sp_roomcount').val();
	var pax = parseInt(rt[0]) + parseInt(rt[1]);
	var total = pax * parseInt(rc);
	if(total > 9){
		return false;
	}
	else{
		return true;
	}
}

//チェックイン日チェック
//本日（本日以前も含め）、明日、明後日を検索できないように制御
function checkCheckinDate()
{
	var daysLater = 2;//～日後
	var limit = new Date();
	limit.setTime(limit.getTime() + (daysLater * 24 * 3600 * 1000));//期限日を設定
	Msec = limit.getTime();
	var ym = jQuery("#sp_ym").val().split("-");
	var d = jQuery("#sp_d").val();
	checkin = new Date(ym[0],ym[1]-1,d);//チェックイン日の設定
	if( checkin.getTime() < limit.getTime()){
		return false;
	}
	else{
		return true;
	}
}

//検索条件チェック総括
//検索条件が規定外であればalert()してfalseを返す
function checkCondition()
{
	if( !checkMaxPerson()){
		alert( CAUTION_OVER_MAX_PERSON );
		return false;
	}
	if( !checkCheckinDate()){
		alert( CAUTION_CHECKIN_DATE01 );
		return false;
	}
	return true;
}

//アフィリエイト用セレクトボックス作成(他のサーバにhtmlを置く場合)
function afInit(blank, company)
{
	var par = getDefaultPar();

	createYYYYMMSel();
	createDDSel(par.y, par.m);//月によって末日が違うので先に渡す
	createDaysSel();
	createRoomCountSel();
	createRoomTypeSel();

	setDefault(par);
	//イベントハンドラ submitボタンが押されたら発生
	jQuery("form").submit(function(){
		jumpCityPage(blank, company);
		return false;
	});
	//JSONP エリアセレクトボックス作成
	jQuery('<script type="text/javascript"/>').attr("src", HOST + "citydata.php?lang=JP").appendTo("head");

}

//都市ページへ飛ばす
function jumpCityPage(blank, company)
{
	//check
	var geo = getCC();
	if( !checkCity(geo.city)){
		return false;
	}
	if( !checkMaxPerson()){
		alert( CAUTION_OVER_MAX_PERSON );
		return false;
	}
	if( !checkCheckinDate()){
		alert( CAUTION_CHECKIN_DATE01 );
		return false;
	}
	setFindCond();
	var par = HOST + "JP/DataHtml/ja_ci_" + geo.country + "_" + geo.city + ".html";
	par+= getSearchPar();
	if(company){
		par+= "&ref=" + company;
	}
	if(blank == 1){
		window.open( par, "_blank");
	}
	else{
		window.open( par, "_self");
	}
	return false;
}

//検索ボックスの作成 都市スポットページ共通
function createSearchForm(citycode)
{
	var par = getDefaultPar();

	createYYYYMMSel();
	createDDSel(par.y, par.m);//月によって末日が違うので先に渡す
	createDaysSel();
	createRoomCountSel();
	createRoomTypeSel();
	createRatingSel();
	createPriceRangeSel();
	createHidden(citycode);
	setDefault(par);
}

//エリア国都市付き検索ボックス作成 Top用
function createSearchForm2()
{
	if( getCookie("FindCond")){
		var par = getRememberPar();
	}
	else{
		var par = getDefaultPar();
	}
	createYYYYMMSel();
	createDDSel(par.y, par.m);//月によって末日が違うので作る前にデフォルトを渡す
	createDaysSel();
	createRoomCountSel();
	createRoomTypeSel();
	createRatingSel();
	createPriceRangeSel();
	setDefault(par);

	//onclick 検索ボタン
	jQuery(function(){
		jQuery(".js_search").click( function(){
			jumpCityPage(0, false);
		});
	});
	//onclick 検索ボタン
	jQuery(function(){
		jQuery(".js_win_search").click( function(){
			jumpCityPage(1, false);
		});
	});

	//JSONP エリアセレクトボックス作成
	jQuery('<script type="text/javascript"/>').attr("src","citydata.php?lang=JP").appendTo("head");

}

//検索ボックスのデフォルト設定は作成後DOM操作で行う
//デフォルト検索条件の取得
function getDefaultPar()
{
	//after日後
	var after = 14;
	var par = new Array();
	var date = new Date();
	date.setTime(date.getTime() + (after * 24 * 3600 * 1000));
	par.y = date.getYear();
	if (par.y < 2000) { par.y += 1900; }
	par.m  = date.getMonth() + 1;
	par.ym = par.y + '-' + par.m;
	par.d  = date.getDate();
	par.Days = 1;
	par.RoomType = "2,0,4,TW";
	par.RoomCount = "1";
	par.Rating = "0";
	par.PriceRange = "";
	return par;
}

//cookieに保存された検索条件の展開
function getRememberPar()
{
	var par = new Array();
	var ck = getFindCond("Checkin");
	var ymd = ck.split("-");
	par.y = ymd[0];
	par.m = ymd[1];
	par.ym = ymd[0] + "-" + ymd[1];
	par.d = ymd[2];
	par.Days = getFindCond("Days");
	par.RoomType = getFindCond("RoomType");
	par.RoomCount = getFindCond("RoomCount");
	par.Rating = getFindCond("Rating");
	par.PriceRange = getFindCond("PriceRange");
	return par;
}

function setDefault( par )
{
	//要素があるかをチェック ないのにやるとIEでエラーになる
	//width()をする事でIEでselectboxのselectedを設定しようとするとバグるのを回避できる(謎)
	//IE7で幅がおかしくなるので幅設定しなおし
	if( jQuery('#sp_ym').attr("value")){
		jQuery("#sp_ym").width();
		jQuery("#sp_ym").val( par.ym);
		jQuery("#sp_ym").width( jQuery("#sp_ym").width());
	}
	if( jQuery('#sp_d').attr("value")){
		jQuery('#sp_d').width();
		jQuery('#sp_d').val( par.d);
		jQuery("#sp_d").width( jQuery("#sp_d").width());
	}
	if( jQuery('#sp_days').attr("value")){
		jQuery('#sp_days').width();
		jQuery('#sp_days').val( par.Days);
		jQuery("#sp_days").width( jQuery("#sp_days").width());
	}
	if( jQuery('#sp_roomtype').attr("value")){
		jQuery('#sp_roomtype').width();
		jQuery('#sp_roomtype').val( par.RoomType);
		jQuery("#sp_roomtype").width( jQuery("#sp_roomtype").width());
	}
	if( jQuery('#sp_roomcount').attr("value")){
		jQuery('#sp_roomcount').width();
		jQuery('#sp_roomcount').val( par.RoomCount);
		jQuery("#sp_roomcount").width( jQuery("#sp_roomcount").width());
	}
	if( jQuery('#sp_rating').attr("value")){
		jQuery('#sp_rating').width();
		jQuery('#sp_rating').val( par.Rating);
		jQuery("#sp_rating").width( jQuery("#sp_rating").width());
	}
	if( jQuery('#sp_pricerange').attr("value")){
		jQuery('#sp_pricerange').width();
		jQuery('#sp_pricerange').val( par.PriceRange);
		jQuery("#sp_pricerange").width( jQuery("#sp_pricerange").width());
	}
}

//検索ボックスのvalueを取得してgetの形式にする
function getSearchPar()
{
	var par = "?ym="    + jQuery("#sp_ym").val();
	par+= "&d="         + jQuery("#sp_d").val();
	par+= "&days="      + jQuery("#sp_days").val();
	par+= "&rating="    + jQuery("#sp_rating").val();
	par+= "&roomcount=" + jQuery("#sp_roomcount").val();
	par+= "&roomtype="  + jQuery("#sp_roomtype").val();
	par+= "&pr="        + jQuery("#sp_pricerange").val();
	return par;
}

//コールバック citydata.phpが呼ばれると動作する
function cityRes(json)
{
	createAreaSel(json);
	//デフォルトがあればデフォルトを設定する
	if(searchDef.area){
		jQuery("#sp_area").width();	//IEエラー回避のため
		jQuery("#sp_area").val( searchDef.area);
	}

	if(searchDef.country){
		createCountrySel(json, searchDef.area);
		//デフォルトがあればデフォルトを設定する
		jQuery("#sp_area").width();	//IEエラー回避のため
		jQuery("#sp_country").val( searchDef.country);
		if(searchDef.city){
			createCitySel(json, searchDef.area, searchDef.country);
			//デフォルトがあればデフォルトを設定する
			if( searchDef.countrycode){
				var cc = searchDef.countrycode;
			}
			else{
				var cc = "undefined";
			}
			jQuery("#sp_area").width();	//IEエラー回避のため
			jQuery("#sp_city").val( searchDef.city + "," + cc);
		}
	}

	//イベントハンドラ設定
	//onchange エリアが変わると国が変わる 都市は消す
	jQuery("#sp_area").change(function(){
		createCountrySel( json, jQuery("#sp_area").val() );
		jQuery("#sp_city").empty();	//クリア
	});
	//onchange 国が変わると都市が変わる
	jQuery("#sp_country").change(function(){
		createCitySel( json,  jQuery("#sp_area").val(), jQuery("#sp_country").val() );
	});
}

//セレクトボックス----年--月の中身作成
function createYYYYMMSel()
{
	jQuery("#sp_ym").empty();
	var date = new Date();
	var loopMonth = 12;
	for(var i=1; i<loopMonth+1; i++){
		var year = date.getYear();
		if (year < 2000) { year += 1900; }
		var mon   = date.getMonth() + i;
		if(mon > 12){
			year = year + 1;
			mon  = mon - 12;
		}
		var val = year + "-" + mon;
		var str = year + YEAR_UNIT + mon + MONTH_UNIT;

		jQuery("<option/>").attr("value", val)
			.text(str)
			.appendTo("#sp_ym");
	}
	//onchangeの設定
	jQuery("#sp_ym").change(function(){
		var ym  = jQuery("#sp_ym").val();
		var ary = ym.split("-");
		createDDSel( ary[0], ary[1]);
	});
}

//セレクトボックス--日の中身作成
function createDDSel( y, m)
{
	jQuery("#sp_d").empty(); //表示領域のクリア
	var end = _getMonthEndDay( y, m);
	for(var i=1; i<end+1; i++){
		var str = i + DATE_UNIT;
		jQuery("<option/>").attr("value", i)
			.text(str)
			.appendTo("#sp_d");
	}
}

//セレクトボックス泊数の中身作成
function createDaysSel()
{
	jQuery("#sp_days").empty();
	for(var i=1; i<31; i++){
		var str = i + DAYS_UNIT;
		jQuery("<option/>").attr("value", i)
			.text(str)
			.appendTo("#sp_days");
	}
}

//セレクトボックス部屋数の中身作成
function createRoomCountSel()
{
	jQuery("#sp_roomcount").empty();
	for(var i=1; i<5; i++){
		var str = i + ROOMCOUNT_UNIT;
		jQuery("<option/>").attr("value", i)
			.text(str)
			.appendTo("#sp_roomcount");
	}
}

//セレクトボックス部屋タイプの中身作成
function createRoomTypeSel()
{
	jQuery("#sp_roomtype").empty();
	// xx/serach_form.jsから定数を取得
	for(var i=0; i<ROOMTYPE_VAL.length; i++){
		jQuery("<option/>").attr("value", ROOMTYPE_VAL[i])
			.text(ROOMTYPE_STR[i])
			.appendTo("#sp_roomtype");
	}
}

//セレクトボックス☆の中身作成
function createRatingSel()
{
	jQuery("#sp_rating").empty();
	// xx/serach_form.jsから定数を取得
	for(var i=0; i< RATING_VAL.length; i++){
		jQuery("<option/>").attr("value", RATING_VAL[i])
			.text(RATING_STR[i])
			.appendTo("#sp_rating");
	}
}

//セレクトボックス価格帯の中身作成
function createPriceRangeSel()
{
	jQuery("#sp_pricerange").empty();
	// xx/serach_form.jsから定数を取得
	for(var i=0; i<PRICERANGE_VAL.length; i++){
		jQuery("<option/>").attr("value", PRICERANGE_VAL[i])
			.text(PRICERANGE_STR[i])
			.appendTo("#sp_pricerange");
	}
}

//月末日の取得
function _getMonthEndDay(year, month)
{
    //日付を0にすると前月の末日を指定したことになります
    var dt = new Date(year, month, 0);
    return dt.getDate();
}

//xmlからデータを読んでセレクトボックスに設定する
function createAreaSel(json)
{
	jQuery(json.area).each(function(i,v){
		jQuery("<option/>").attr("value", v.code).text( v.name).appendTo("#sp_area");
	});
}

function createCountrySel(json, ar)
{
	jQuery("#sp_country").empty();
	jQuery("<option/>").text( COUNTRY_STR ).appendTo("#sp_country");

	jQuery(json.area).each(function(i,v){
		if(v.code == ar){
			jQuery(v.country).each(function(i2,v2){
				jQuery("<option/>").attr("value", v2.code).text( v2.name).appendTo("#sp_country");
			});
			return;
		}
	});

}

function createCitySel(json, ar, co)
{
	jQuery("#sp_city").empty();
	jQuery("<option/>").text( CITY_STR ).appendTo("#sp_city");

	jQuery(json.area).each(function(i,v){
		if(v.code == ar){
			jQuery(v.country).each(function(i2,v2){
				if(v2.code == co){
					jQuery(v2.city).each(function(i3,v3){
						if(v3.code){
							//value="citycode,countrycode"の形式にする
							jQuery("<option/>").attr("value", v3.code + "," + v3.countrycode).text( v3.name).appendTo("#sp_city");
						}
					});
					return;
				}
			});
		}
	});
}

//検索値保存用hidden作成 都市スポット用
function createHidden(citycode)
{
	jQuery("<input type='hidden'/>").attr("id","sp_city").attr("value", citycode).appendTo("body");
	jQuery("<input type='hidden'/>").attr("id","sp_lat").appendTo("body");
	jQuery("<input type='hidden'/>").attr("id","sp_lon").appendTo("body");
	jQuery("<input type='hidden'/>").attr("id","sp_sort").attr("value", "Fare").appendTo("body");
	jQuery("<input type='hidden'/>").attr("id","sp_start").attr("value", 1).appendTo("body");
	jQuery("<input type='hidden'/>").attr("id","sp_length").attr("value", 10).appendTo("body");	//表示件数
	jQuery("<input type='hidden'/>").attr("id","sp_pageno").attr("value", 1).appendTo("body");
	jQuery("<input type='hidden'/>").attr("id","sp_cache").attr("value", 1).appendTo("body");
}

