<!--Search URL Generate -->

//パラメータOBJECTを保存する
var paramsObj;
var params;

//共有変数

//海外DP関連変数
var DP_URL = "http://web.travel.rakuten.co.jp/dynamic/simpleSearchForm.do";
var DP_DIRECT_URL = "http://web.travel.rakuten.co.jp/dynamic/DynamicSearchAction.do";
var DP_DIRECT_URL_CLICK = "http://img.travel.rakuten.co.jp/image/tr/se/dpoverseas/YZl8L/";
var HISTORY_URL = "http://ashiato.travel.rakuten.co.jp/ashiato/overseasAirPackageSearch/"; 

var HISTORY_FLG = false;
var DP_JOURNEY = "102";
var ADULT_NUM = "2";
var CHILD_NUM = "0";
var CHILD_NUM_NOBED = "0";
var INFANT_NUM = "0";
var F_HEYA_SU = "1";
var TICKET_TYPE = "DCY";
var DP_DELAY_DAY = "6";
var DP_SCHEDULE = "2";
var DEPARTURE_TIME1="";
var DEPARTURE_TIME2="";
var DP_REFER_PAGE="spPage";
var HISTORY_TIMEOUT = 5000;

function sendURL(p1){
	location.href = p1;
}

/**********************************************************************************
 * journey: 片道・往復・周遊の識別パラメータ (DP:102 Fix)
 * startYear : 出発年(YYYY)
 * startMonth : 出発月(MM)
 * startDay :出発日(DD)
 * departureTime1 : 出発時間
 * endYear : 帰り年(YYYY)
 * endMonth : 帰り月(MM)
 * endDay : 帰り日(DD)
 * departureTime2 : 帰り時間
 * city1 : 出発都市コード
 * city3 : 帰国地の都市コード（単純往復の場合はcity1と同様）
 * area : 地域コード
 * country : 国コード
 * city2 : 目的都市コード
 * adultNum : 大人人数
 * childNum : 子供人数
 * childNumNoBed : 子供ベッドなし人数
 * infantNum : 幼児人数
 * f_heya_su : 部屋数
 * ticketType : チケットタイプ(DCY)
 * hotelNoInfo : ホテルNO（,区切り)
 * codeAirline : AIRLINE
 * referPage :REFページ区別キー
 * tourCourseNo : ツアーコース番号
 * campIdInfo :プラン番号
 *********************************************************************************/
function dpSearchParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21,p22 , p23, p24,p25){
	this.journey = new Array("journey",p1);
	this.startYear = new Array("startYear",p2);
	this.startMonth = new Array("startMonth",p3);
	this.startDay = new Array("startDay",p4);
	this.departureTime1 = new Array("departureTime1",p5);
	this.endYear = new Array("endYear",p6);
	this.endMonth = new Array("endMonth",p7);
	this.endDay = new Array("endDay",p8);
	this.departureTime2 = new Array("departureTime2",p9);
	this.city1 = new Array("city1",p10);
	this.city3 = new Array("city3",p11);
	this.area = new Array("area",p12);
	this.country = new Array("country",p13);
	this.city2 = new Array("city2",p14);
	this.adultNum = new Array("adultNum",p15);
	this.childNum = new Array("childNum",p16);
	this.childNumNoBed = new Array("childNumNoBed",p17);
	this.infantNum = new Array("infantNum",p18);
	this.f_heya_su = new Array("f_heya_su",p19);
	this.ticketType = new Array("ticketType",p20);
	this.hotelNoInfo = new Array("hotelNoInfo",p21);
	this.codeAirline = new Array("codeAirline",p22);
	this.referPage = new Array("referPage",p23);
    this.tourCourseNo = new Array("tourCourseNo",p24);
    this.campIdInfo = new Array("campIdInfo",p25);
}

/**********************************************************************************
 * p1: 出発都市コード
 * p2 : 目的地都市コード
 * p3 : チケットタイプ（DCY等）
 * p4 : ホテル番号's (,区切り）
 * p5 : delay日数（今日から＋何日）
 * p6 : 基本日程
 * p7 : AirLINE
 * p8 : TourCourseNo
 * p9 : referPage
 * p10 : campIdInfo (部屋プラン番号、コンマ区切りで複数指定可能）
 *********************************************************************************/
function makeDpParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10){
	//get history info
	//have history data?
	dp_search_history_take(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
	//makeDpDirectParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
}

/**********************************************************************************
 * p1: 出発都市コード
 * p2 : 目的地都市コード
 * p3 : チケットタイプ（DCY等）
 * p4 : ホテル番号's (,区切り）
 * p5 : delay日数（今日から＋何日）
 * p6 : 基本日程
 * p7 : AirLINE
 * p8 : TourCourseNo
 * p9 : referPage
 * p10 : campIdInfo (部屋プラン番号、コンマ区切りで複数指定可能）
 *********************************************************************************/
function makeDpDirectParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10){
    //parameter 設定
	setParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
	//send(TEST)
	sendURL((DP_DIRECT_URL + params));
}

/**********************************************************************************
 * p1: 出発都市コード
 * p2 : 目的地都市コード
 * p3 : チケットタイプ（DCY等）
 * p4 : ホテル番号's (,区切り）
 * p5 : delay日数（今日から＋何日）
 * p6 : 基本日程
 * p7 : AirLINE
 * p8 : TourCourseNo
 * p9 : referPage
 * p10 : campIdInfo (部屋プラン番号、コンマ区切りで複数指定可能）
 * p11 : クリック集計用URL
 *********************************************************************************/
function makeDpDirectParamsForClick(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11){
    //parameter 設定
	setParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);

	var url_pairs = {
		"default" :DP_DIRECT_URL,
		"overseas":DP_DIRECT_URL_CLICK
	}
	var linkUrl = (p11)?url_pairs[p11]:url_pairs["default"]; 
	sendURL((linkUrl + params));
}


/**********************************************************************************
 * p1: 出発都市コード
 * p2 : 目的地都市コード
 * p3 : チケットタイプ（DCY等）
 * p4 : ホテル番号's (,区切り）
 * p5 : delay日数（今日から＋何日）
 * p6 : 基本日程
 * p7 : AirLINE
 * p8 : TourCourseNo
 * p9 : ReferPage
 * p10 : campIdInfo (部屋プラン番号、コンマ区切りで複数指定可能）
 *********************************************************************************/
function setParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10){
	var tourCourseNo = "";
	var campIdInfo = "";

	if(p7 == null){	p7  = "";}
	if(p8){	
		tourCourseNo= p8;
	}else{
		tourCourseNo= "";
	}
	if(p10){	
		campIdInfo= p10;
	}else{
		campIdInfo= "";
	}
	if(p5 != ""){
		DP_DELAY_DAY = p5;
	}
	if(p6 != ""){
		DP_SCHEDULE = p6;
	}
	if(p9 != ""){
	    DP_REFER_PAGE = p9;
	}
	//基本paramsObjを生成
	paramsObj = new dpSearchParams(
								DP_JOURNEY
								, ""
								, ""
								, ""
								, ""
								, ""
								, ""
								, ""
								, ""
								, p1 //出発地
								, p1
								, ""
								, ""
								, p2 //目的地
								, ADULT_NUM
								, CHILD_NUM
								, CHILD_NUM_NOBED
								, INFANT_NUM
								, F_HEYA_SU
								, p3 //DCY チケットタイプ
								, p4 //ホテル番号's
								, p7
								, DP_REFER_PAGE
                                , tourCourseNo
                                , campIdInfo
	                           );
	//日付を埋め込む
	setDate("DP");
	//国コードとエリアコードを埋め込む
	getTikuDivision("DP", p2);
	//markURL
	params = markURL("DP");
}


function markURL(p1){
	var tmpQuery ="?dummy=";
	if(p1 == "DP"){
		tmpQuery += "&" + paramsObj.journey[0] + "=" + paramsObj.journey[1];
		tmpQuery += "&" + paramsObj.startYear[0] + "=" + paramsObj.startYear[1];
		tmpQuery += "&" + paramsObj.startMonth[0] + "=" + paramsObj.startMonth[1];
		tmpQuery += "&" + paramsObj.startDay[0] + "=" + paramsObj.startDay[1];
		tmpQuery += "&" + paramsObj.departureTime1[0] + "=" + paramsObj.departureTime1[1];
		tmpQuery += "&" + paramsObj.endYear[0] + "=" + paramsObj.endYear[1];
		tmpQuery += "&" + paramsObj.endMonth[0] + "=" + paramsObj.endMonth[1];
		tmpQuery += "&" + paramsObj.endDay[0] + "=" + paramsObj.endDay[1];
		tmpQuery += "&" + paramsObj.departureTime2[0] + "=" + paramsObj.departureTime2[1];
		tmpQuery += "&" + paramsObj.city1[0] + "=" + paramsObj.city1[1];
		tmpQuery += "&" + paramsObj.city3[0] + "=" + paramsObj.city3[1];
		tmpQuery += "&" + paramsObj.area[0] + "=" + paramsObj.area[1];
		tmpQuery += "&" + paramsObj.country[0] + "=" + paramsObj.country[1];
		tmpQuery += "&" + paramsObj.city2[0] + "=" + paramsObj.city2[1];
		tmpQuery += "&" + paramsObj.adultNum[0] + "=" + paramsObj.adultNum[1];
		tmpQuery += "&" + paramsObj.childNum[0] + "=" + paramsObj.childNum[1];
		tmpQuery += "&" + paramsObj.childNumNoBed[0] + "=" + paramsObj.childNumNoBed[1];
		tmpQuery += "&" + paramsObj.infantNum[0] + "=" + paramsObj.infantNum[1];
		tmpQuery += "&" + paramsObj.f_heya_su[0] + "=" + paramsObj.f_heya_su[1];
		tmpQuery += "&" + paramsObj.ticketType[0] + "=" + paramsObj.ticketType[1];
		tmpQuery += "&" + paramsObj.hotelNoInfo[0] + "=" + paramsObj.hotelNoInfo[1];
		tmpQuery += "&" + paramsObj.codeAirline[0] + "=" + paramsObj.codeAirline[1];
		tmpQuery += "&" + paramsObj.referPage[0] + "=" + paramsObj.referPage[1];
		tmpQuery += "&" + paramsObj.tourCourseNo[0] + "=" + paramsObj.tourCourseNo[1];
		tmpQuery += "&" + paramsObj.campIdInfo[0] + "=" + paramsObj.campIdInfo[1];
	}
	return tmpQuery;
}

function getTikuDivision(p1,p2){
	if(p1 == "DP"){
		var targetCity = p2;
		var targetCountry = "";
		for(var i=0; i < city2.length; i++){
			if(targetCity == city2[i].code){
				paramsObj.country[1] = city2[i].country;
				targetCountry = city2[i].country;
				for(var j=0; j < country2.length; j++){
					if(targetCountry == country2[j].code){
						paramsObj.country[1] = city2[i].country;
						paramsObj.area[1] = country2[j].area;
						break;
					}
				}
				break;
			}
		}
	}
}

function setDate(p1){
	var curDate = new Date();
	var startDate = new Date();
	var endDate = new Date();

	if(p1 == "DP"){
		startDate.setDate(startDate.getDate() + Number(DP_DELAY_DAY));
		endDate.setDate(endDate.getDate() + (Number(DP_SCHEDULE)+ Number(DP_DELAY_DAY) -1));

//		alert(startDate + ' VS ' + endDate);
//		alert(DP_DELAY_DAY + ' VS' + DP_SCHEDULE);

		//set
		paramsObj.startYear[1] = startDate.getFullYear();
		paramsObj.startMonth[1] = addZero(startDate.getMonth() + 1);
		paramsObj.startDay[1] = addZero(startDate.getDate());
		paramsObj.departureTime1[1] = DEPARTURE_TIME1;

		paramsObj.endYear[1] = endDate.getFullYear();
		paramsObj.endMonth[1] = addZero(endDate.getMonth() + 1);
		paramsObj.endDay[1] = addZero(endDate.getDate());
		paramsObj.departureTime2[1] = DEPARTURE_TIME2;


	}

}

function addZero(p1){
	if(p1 < 10){ p1 = "0" + p1;}
	return p1;
}


/**
 * dp_search_history_take
 * get search condition from ashiato for dp
 */
function dp_search_history_take(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10){	  

	try{
        //5秒以内に反応がないであればHISTORYを無視
		setTimeout(function() {dp_search_basic(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);},HISTORY_TIMEOUT);
		$.ajax({
				url:HISTORY_URL+"take",
				dataType:"jsonp",
				scriptCharset:"UTF-8",
				success:function(json){
					if(json.header.status == "Success"){
						setCondObj(json,p1, p2, p3,p4,p7,p8,p10) ;
					}else{
						dp_search_basic(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
					}
				},
    			cache:false,
				timeout:1000,
		        error:function(){ throw new Error();}
		});

	}catch(e){
		dp_search_basic(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
	}
}

function dp_search_basic(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10){
		//false set default data
		setParams(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
		//send(TEST)
		sendURL((DP_URL + params));
}

/**
 * 2010/08/06
 * param1 : json -> get ashiato history data of dp searchCondition
 * p4: given hotel numbers
 * p8: given tour course numbers
 * p10: given camp id
 */
function setCondObj(json,p1, p2, p3, p4, p7,p8, p10){

		var jt = json.body.contents[0].airPackageSearchInfo;
		var hotelNo = jt.hotelNoInfo;
		var tourCoueseNo = jt.tourNoInfo;
		var campId = jt.campIdInfo;
		var departure_city = jt.city1;
		var arrival_city = jt.city2;
		var ticket_type = jt.ticketType;
		if(p4 != ""){
			hotelNo = p4;
		}

	    paramsObj = new dpSearchParams(
								 DP_JOURNEY
								,jt.startYear
								,jt.startMonth
								,jt.startDay
								,jt.departureTime1
								,jt.endYear
								,jt.endMonth
								,jt.endDay
								,jt.departureTime2
								,p1
								,p1								
								,""
		                        ,""
								,p2
								,jt.adultNum
								,jt.childNum
								,jt.childNumNoBed
								,jt.infantNum
								,jt.f_heya_su
								,ticket_type
								,hotelNo
								,p7
								,'history'
                                ,p8
                                ,p10
								);


		//data Availability check
		isAvailabilityDate("DP", paramsObj);
		//markURL
		//国コードとエリアコードを埋め込む
		getTikuDivision("DP", p2);
		params = markURL("DP");
		sendURL((DP_DIRECT_URL + params));
}

/**
 * dp_search_history_put
 * put search condition to ashiato
 */
function dp_search_history_put(form){	 
	try{
	//TODO : fill param : form value to url parameter
	setPutParam(form);
	var paramPut = markURL("DP");

		$.ajax({
				url:HISTORY_URL+"put",
				dataType:"jsonp",
				data:paramPut,
				scriptCharset:"UTF-8",
				success:function(msg){
					//alert(msg);
				},
				cache:false,
				timeout:1000
		});
	}catch(e){
		return "";
	}
}

/**
 * setPutParam
 * change form value to url parameter format
 */
function setPutParam(form){
	if(form){
		paramsObj = "";
	    paramsObj = new dpSearchParams(
								 DP_JOURNEY
								,form.startYear.value
								,form.startMonth.value
								,form.startDay.value
								,form.departureTime1.value
								,form.endYear.value
								,form.endMonth.value
								,form.endDay.value
								,form.departureTime2.value
								,form.city1.value
								,form.city3.value								
								,form.area.value
		                        ,form.country.value
								,form.city2.value
								,form.adultNum.value
								,form.childNum.value
								,form.childNumNoBed.value
								,form.infantNum.value
								,form.f_heya_su.value
								,form.ticketType.value
								,form.hotelNoInfo.value
								,form.codeAirline.value
								,'history'
                                ,form.tourNoInfo.value
                                ,form.campIdInfo.value
								);

	}

}

/**
 * isAvailabilityDate
 * check is availability date and fix
 */
function isAvailabilityDate(division, paramsObj){
	try{

		var curDate = new Date();
		var startDate = new Date();
		var endDate = new Date();
		startDate.setDate(startDate.getDate() + Number(DP_DELAY_DAY));
		endDate.setDate(endDate.getDate() + (Number(DP_SCHEDULE)+ Number(DP_DELAY_DAY) -1));

		if(division == "DP"){
			//if anyone null set default date
			if(paramsObj.startYear[1] == "" || paramsObj.startMonth[1] == "" || paramsObj.startDay[1] == "" || paramsObj.endYear[1] == "" || paramsObj.endMonth[1] == "" || paramsObj.endDay[1] == ""){
				paramsObj.startYear[1] = startDate.getFullYear();
				paramsObj.startMonth[1] = addZero(startDate.getMonth() + 1);
				paramsObj.startDay[1] = addZero(startDate.getDate());
				paramsObj.departureTime1[1] = DEPARTURE_TIME1;

				paramsObj.endYear[1] = endDate.getFullYear();
				paramsObj.endMonth[1] = addZero(endDate.getMonth() + 1);
				paramsObj.endDay[1] = addZero(endDate.getDate());
				paramsObj.departureTime2[1] = DEPARTURE_TIME2;

			}else{
				var startDateParam = new Date(Number(paramsObj.startYear[1]) ,Number(paramsObj.startMonth[1]) -1  ,Number(paramsObj.startDay[1]));
	//			var endDateParam =  new Date(Number(paramsObj.endYear[1]) ,Number(paramsObj.endMonth[1]) -1 ,Number(paramsObj.endDay[1]));
				if(startDateParam.getTime() < startDate.getTime()){
					paramsObj.startYear[1] = startDate.getFullYear();
					paramsObj.startMonth[1] = addZero(startDate.getMonth() + 1);
					paramsObj.startDay[1] = addZero(startDate.getDate());
					paramsObj.departureTime1[1] = DEPARTURE_TIME1;

					paramsObj.endYear[1] = endDate.getFullYear();
					paramsObj.endMonth[1] = addZero(endDate.getMonth() + 1);
					paramsObj.endDay[1] = addZero(endDate.getDate());
					paramsObj.departureTime2[1] = DEPARTURE_TIME2;				
				}
			}
		}
	}catch(e){
		//alert(e);
	}
}


