﻿/*---------------------------------------------------------------*/
/* require base.js */
var dptPlace;

function setPlace(placeName){
	dptPlace = placeName;
}

function loadTikeponDpt(){
	var src = "http://www.ena.travel/was/query/master?data_type=dep_city&callback=setDpt";
	var script = document.createElement("script");
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('charset', 'utf-8');
	script.setAttribute('src', src);
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(script);
}
function setDpt(json){
	var node = document.top_searching_form.departure;
	var data = eval(json);
	var itemList = new Array();
	itemList = data;
	$defaultTtl = node.options[0].text;
	$defaultVal = node.options[0].value;
	node.options.length = 0;
	node.options[0] = new Option($defaultTtl,$defaultVal);
	for(var cnt=0; cnt < itemList.length || cnt < node.length; cnt++){
		if(cnt < itemList.length){
			node.options[cnt+1] = new Option(itemList[cnt]["title"],itemList[cnt]["code"]);
		}else{
			node.options[cnt+1] = null;
		}
		if(cnt < itemList.length && itemList[cnt]["code"] && dptPlace==itemList[cnt]["code"] ){
			node.options[cnt+1].selected = "selected";
		}
	};
};


function loadTikeponDstArea(){
	var src = "http://www.ena.travel/was/query/master?data_type=dst_area&callback=setDstArea";
	var script = document.createElement("script");
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('charset', 'utf-8');
	script.setAttribute('src', src);
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(script);
}
function setDstArea(json){
	var node = document.top_searching_form.dst_area;
	var data = eval(json);
	var itemList = new Array();
	itemList = data;
	$defaultTtl = node.options[0].text;
	$defaultVal = node.options[0].value;
	node.options.length = 0;
	node.options[0] = new Option($defaultTtl,$defaultVal);
	for(var cnt=0; cnt < itemList.length || cnt < node.length; cnt++){
		if(cnt < itemList.length){
			node.options[cnt+1] = new Option(itemList[cnt]["title"],itemList[cnt]["code"]);
		}else{
			node.options[cnt+1] = null;
		}
	};
};


function loadTikeponDstCountry(){
	var selectOp = document.top_searching_form.dst_area;
	var src = "http://www.ena.travel/was/query/master?data_type=dst_country&key="+selectOp.options[selectOp.selectedIndex].value+"&callback=setDstCountry";
	var script = document.createElement("script");
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('charset', 'utf-8');
	script.setAttribute('src', src);
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(script);
}
function setDstCountry(json){
	var node = document.top_searching_form.dst_country;
	var data = eval(json);
	var itemList = new Array();
	itemList = data;
	$defaultTtl = node.options[0].text;
	$defaultVal = node.options[0].value;
	node.options.length = 0;
	node.options[0] = new Option($defaultTtl,$defaultVal);
	for(var cnt=0; cnt < itemList.length || cnt < node.length; cnt++){
		if(cnt < itemList.length){
			node.options[cnt+1] = new Option(itemList[cnt]["title"],itemList[cnt]["code"]);
		}else{
			node.options[cnt+1] = null;
		}
	};
//////////////////////////////////////////////
        if((itemList.length == 1)&&(node.options[1].text != 'undefined')) {
            node.options[1].selected = true;
            node.selectedIndex = 1;
            loadTikeponDstCity();
        }
/////////////////////////////////////////////
};


function loadTikeponDstCity(){
	var selectOp = document.top_searching_form.dst_country;
	var src = "http://www.ena.travel/was/query/master?data_type=dst_city&key="+selectOp.options[selectOp.selectedIndex].value+"&callback=setDstCity";
	var script = document.createElement("script");
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('charset', 'utf-8');
	script.setAttribute('src', src);
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(script);
}
function setDstCity(json){
	var node = document.top_searching_form.destination;
	var data = eval(json);
	var itemList = new Array();
	itemList = data;
	$defaultTtl = node.options[0].text;
	$defaultVal = node.options[0].value;
	node.options.length = 0;
	node.options[0] = new Option($defaultTtl,$defaultVal);
	for(var cnt=0; cnt < itemList.length || cnt < node.length; cnt++){
		if(cnt < itemList.length){
			node.options[cnt+1] = new Option(itemList[cnt]["title"],itemList[cnt]["code"]);
		}else{
			node.options[cnt+1] = null;
		}
	};
/////////////////////////////////////////////
        if((itemList.length == 1)&&(node.options[1].text != 'undefined')) {
            node.selectedIndex = 1;
        }
/////////////////////////////////////////////
};


function loadTikeponAirline(){
	var selectOp = document.top_searching_form.airline;
	var src = "http://www.ena.travel/was/query/master?data_type=airline&callback=setAirline";
	var script = document.createElement("script");
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('charset', 'utf-8');
	script.setAttribute('src', src);
	var head = document.getElementsByTagName('head').item(0);
	head.appendChild(script);
}
function setAirline(json){
	var node = document.top_searching_form.airline;
	var data = eval(json);
	var itemList = new Array();
	itemList = data;
	$defaultTtl = node.options[0].text;
	$defaultVal = node.options[0].value;
	node.options.length = 0;
	node.options[0] = new Option($defaultTtl,$defaultVal);
	for(var cnt=0; cnt < itemList.length || cnt < node.length; cnt++){
		if(cnt < itemList.length){
			node.options[cnt+1] = new Option(itemList[cnt]["title"],itemList[cnt]["code"]);
		}else{
			node.options[cnt+1] = null;
		}
	};
};

function searchTikepon(opt){
//////////////////////////////
	if(checkTopForm()) {
//////////////////////////////
		var getURL = opt+"online/index.html";
		var temp = "";
		getURL += "?departure=";
		temp = document.top_searching_form.departure;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&destination=";
		temp = document.top_searching_form.destination;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&dep_year=";
		temp = document.top_searching_form.dep_year;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&dep_month=";
		temp = document.top_searching_form.dep_month;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&dep_day=";
		temp = document.top_searching_form.dep_day;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&dst_year=";
		temp = document.top_searching_form.dst_year;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&dst_month=";
		temp = document.top_searching_form.dst_month;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&dst_day=";
		temp = document.top_searching_form.dst_day;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&airline=";
		temp = document.top_searching_form.airline;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&seatclass=";
		temp = document.top_searching_form.seatclass;
		getURL += temp.options[temp.selectedIndex].value;
		getURL += "&timezone=";
		temp = document.top_searching_form.timezone;
		getURL += temp.options[temp.selectedIndex].value;
		location.href=getURL;
////////////////////////
	}
	return false;
///////////////////////
}


/*---------------------------------------------------------------*/

function getCurrentStyle(id, style, defValue) {
    if(!document.getElementById) {
        return defValue;
    }

    var elem = document.getElementById(id);
    if(elem.currentStyle) {		// IE, Opera
        return elem.currentStyle[style];
    } else if(getComputedStyle) {	// Mozzila, Opera
        return getComputedStyle(elem,'').getPropertyValue(style);
    } else {
        return defValue;
    }
}

function showElement(elem)
{
    if(elem == null) {
        return;
    }
    elem.style.display = "";
}

function hideElement(elem) {
    if(elem == null) {
        return;
    }
    elem.style.display = "none";
}

function showElementById(id) {
    showElement(document.getElementById(id));
}

function hideElementById(id) {
    hideElement(document.getElementById(id));
}


function switchBlocks(hideBlocks, showBlocks)
{
    if(hideBlocks instanceof Array) {
        for(ct = 0; ct < hideBlocks.length; ct++) {
            hideElementById(hideBlocks[ct]);
        }
    } else if(hideBlocks != null) {
        hideElementById(hideBlocks);
    }

    if(showBlocks instanceof Array) {
        for(ct = 0; ct < showBlocks.length; ct++) {
            showElementById(showBlocks[ct]);
        }
    } else if(showBlocks != null) {
        showElementById(showBlocks);
    }

    return false;
}


function replaceBlocks()
{
    var hides = new Array();
    var shows = new Array();

    var argc = replaceBlocks.arguments.length;
    var show = true;
    for(ct = 0; ct < argc; ct++) {
        var argv = replaceBlocks.arguments[ct];
        if(argv == "-") {
            show = false;
        } else if(argv == "+") {
            show = true;
        } else if(show == true) {
            shows.push(argv);
        } else {
            hides.push(argv);
        }
    }

    return switchBlocks(hides, shows);
}


function showBlock()
{
    var argc = showBlock.arguments.length;
    if(argc == 0) {
        return;
    }

    var idx = showBlock.arguments[0];

    var hides = new Array();
    var shows = new Array();

    var show = false;
    for(ct = 1; ct < argc; ct++) {
        var argv = showBlock.arguments[ct];
        if(argv == "-") {
            show = false;
        } else if(argv == "+") {
            show = true;
        } else if(show == true) {
            shows.push(argv);
        } else {
            hides.push(argv);
        }
    }

    shows.push(idx);
    hides.push(idx + "_opener");
    shows.push(idx + "_closer");

    return switchBlocks(hides, shows);
}

function hideBlock()
{
    var argc = hideBlock.arguments.length;
    if(argc == 0) {
        return;
    }

    var idx = hideBlock.arguments[0];

    var hides = new Array();
    var shows = new Array();

    var show = true;
    for(ct = 1; ct < argc; ct++) {
        var argv = hideBlock.arguments[ct];
        if(argv == "-") {
            show = false;
        } else if(argv == "+") {
            show = true;
        } else if(show == true) {
            shows.push(argv);
        } else {
            hides.push(argv);
        }
    }

    hides.push(idx);
    hides.push(idx + "_closer");
    shows.push(idx + "_opener");

    return switchBlocks(hides, shows);
}



function createHttpRequest() {
    if(window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            try {
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e2) {
                return null;
            }
        }
    } else {
        return null;
    }
}


function emptyFunction() {
}



//
// Safari 文字化け対応
//
function getResponseText(text) {
    if(navigator.appVersion.indexOf('KHTML') > -1) {
        var esc = escape(text);
        if(esc.indexOf('%u') < 0 && esc.indexOf('%') > -1) {
            text = decodeURIComponent(esc);
        }
    }
    return text;
}

//
// getString
//
function getString(text) {
    if(text == undefined || text == null) {
        return "";
    } else {
        return text;
    }
}


//
// getCommaValue
//
function getCommaFormat(value) {
    if(isNaN(value)) {
        return value;
    }

    var sign = '';
    if(value < 0) {
        sign = '-';
        value = -value;
    }

    var numData = String(value);

    var data = '';
    var index = numData.length % 3;
    if(index == 0) {
        index = 3;
    }

    var head = 0;
    for( ; index <= numData.length; index += 3) {
        if(data.length > 0) {
            data += ',';
        }
        data += numData.substring(head, index);
        head = index;
    }
    return sign + data;
}


//
// HTTPリクエスト処理
//
function httpRequest(url, async, callBack) {
    var httpObj = createHttpRequest();
    if(httpObj == null) {
         return null;
    }

    if(httpRequest.arguments.length < 2) {
         async = false;
    }

    httpObj.open("GET", url, async);

    if(async) {
        httpObj.onreadystatechange = function() {
            if(httpObj.readyState==4) { 
                 callBack(getResponseText(httpObj.responseText));

                 /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
                 httpObj.onreadystatechange = emptyFunction;
            }
        }
        httpObj.send(null);
        return null;

    } else {
        httpObj.send(null);
        return getResponseText(httpObj.responseText);
    }
}


//
// HTTPリクエスト処理 (パラメータ処理付き)
//
function httpRequestWithParams(url, params, async, callBack) {
    var urlprm = url;
    var orgParam = urlprm.indexOf('?');
    var delim;
    if(orgParam >= 0) {
        delim = '&';
    } else {
        delim = '?';
    }
    for(var ct = 0; ct < params.length; ct += 2) {
        urlprm += delim + params[ct] + '=' + encodeURI(params[ct+1]);
        delim = '&';
    }
    return httpRequest(urlprm, async, callBack);
}

//
// BaseObject to use in Ajax javascript codes
//

function BaseObject() {
}

//
// updateElement
//
function updateElement(elem, htmlText) {

    // get target element
    if(elem == undefined || elem == null) {
        return;
    } else if(typeof(elem) == 'string') {
        elem = document.getElementById(elem);
        if(elem == undefined || elem == null) {
            return;
        }
    }

    // make matching regular expressions
    var scriptExp = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
    var matchAll = new RegExp(scriptExp, 'img');
    var matchOne = new RegExp(scriptExp, 'im');

    // set text without script
    var htmlWithoutScript = htmlText.replace(matchAll, '');
    elem.innerHTML = htmlWithoutScript;

    // callback function for timer
    var callBackFunc = function () {
        var matchArray = htmlText.match(matchAll);

        // eval scripts
        if(matchArray != null) {
            for(var ct = 0; ct < matchArray.length; ct++) {
                var matchScript = matchArray[ct].match(matchOne);

                if(matchScript != null && matchScript.length >= 2) {
                    var scriptBody = matchScript[1];
                    var commStart = scriptBody.indexOf("<!" + "--");
                    var commEnd   = scriptBody.lastIndexOf("-" + "->", scriptBody.length-1);

                    if(commStart >= 0 && commEnd >= 0) {
                       scriptBody = scriptBody.substring(commStart + 4, commEnd);
                    } else if(commStart >= 0) {
                       scriptBody = scriptBody.substring(commStart + 4);
                    } else if(commEnd >= 0) {
                       scriptBody = scriptBody.substring(0, commEnd);
                    }

                    eval(scriptBody);
                }
            }
        }
    }
    setTimeout(callBackFunc, 10);
}


//
// getElementByName
//
function getElementByName(elem) {
    if(elem == undefined || elem == null) {
        return null;
    } else if(typeof(elem) == 'string') {
        var list = document.getElementsByName(elem);
        if(!list) {
            return null;
        } else {
            return list[0];
        }
    } else {
        return elem;
    }
}


//
// getValueFromElement
//
function getValueFromElement(elem) {
    elem = getElementByName(elem);
    if(elem == null) {
        return null;
    }
    if(elem.type == 'select-one' || elem.type == 'select-multiple') {
        var opts = elem.options;
        for(var i = 0; i < opts.length; i++) {
            if(opts[i].selected) {
                return opts[i].value;
            }
        }
        return null;
    } else {
        return elem.value;
    }
}


function getValueFromElements(name) {
    var list = document.getElementsByName(name);
    if(list == null) {
        return null;
    }

    for(var i = 0; i < list.length; i++) {
        if(list[i].checked) {
            return list[i].value;
        }
    }

    return null;
}


//
// setValueToElement
//
function setValueToElement(elem, value, selectFirst) {
    elem = getElementByName(elem);
    if(elem == null) {
        return;
    }
    if(elem.type == 'select-one' || elem.type == 'select-multiple') {
        var selected = false;
        var opts = elem.options;
        for(var i = 0; i < opts.length; i++) {
            var vcrnt = opts[i].value;
            var tcrnt = opts[i].text;
            var slcted = (value == vcrnt || value == tcrnt);
            opts[i].selected = slcted;
            if(slcted) {
                selected = true;
            }
        }
        if(!selected && selectFirst == true && opts.length > 0) {
            opts[0].selected = true;
        }
    } else {
        elem.value = value;
    }
}

//
// getElementOfForm
//
function getElementOfForm(formElem, elem) {
    if(elem == undefined || elem == null) {
        return null;
    } else if(typeof(elem) == 'string') {
        var len = formElem.elements.length;
        for(var ct = 0; ct < len; ct++) {
           if(formElem.elements[ct].name == elem) {
               return formElem.elements[ct];
           }
        }
        return null;

    } else {
        return elem;
    }
}


//
// getValueFromElementOfForm
//
function getValueFromElementOfForm(formElem, elem) {
    return getValueFromElement(getElementOfForm(formElem, elem));
}

//
// setValueToElement
//
function setValueToElementOfForm(formElem, elem, value, selectFirst) {
    return setValueToElement(getElementOfForm(formElem, elem), value, selectFirst);
}



function calNormalizeYear(year) {
	if(year < 2000) {
		year += 1900;
	}
	return year;
}

function calNormalizeMonth(month) {
	return month + 1;
}


// 2008/02/08 Update
//var calCurrentDate = new Date(2007, 12 - 1, 28);
var calCurrentDate = new Date();
var calCurrentYear = calNormalizeYear(calCurrentDate.getYear());
var calCurrentMonth = calNormalizeMonth(calCurrentDate.getMonth());
var calCurrentDay = calCurrentDate.getDate();

var calDaysInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function calIsToday(year, month, day)
{
	return (year == calCurrentYear && month == calCurrentMonth && day == calCurrentDay);
}

function calIsPast(year, month, day)
{
	return (year < calCurrentYear || (year == calCurrentYear && (month < calCurrentMonth || (month == calCurrentMonth && day < calCurrentDay))));
}

function calIsFuture(year, month, day)
{
	return (year > calCurrentYear || (year == calCurrentYear && (month > calCurrentMonth || (month == calCurrentMonth && day > calCurrentDay))));
}


function calAddMonthToDate(date, addmonth)
{
	var year  = calNormalizeYear(date.getYear());
	var month = calNormalizeMonth(date.getMonth());;

	month += addmonth;

	while(month < 1) {
		year--;
		month += 12;
	}

	while(month > 12) {
		year++;
		month -= 12;
	}

	return new Date(year, month-1, 1);
}


function calAddDayToDate(date, addday)
{
	var year  = calNormalizeYear(date.getYear());
	var month = calNormalizeMonth(date.getMonth());;
	var day = date.getDate();
	var maxday = calGetFinalDay(year, month);

	day += addday;

	if(day > maxday) {
		while(day > maxday) {
			day -= maxday;
			month++;
			if(month > 12) {
				year++;
				month = 1;
			}
			maxday = calGetFinalDay(year, month);
		}

	} else if(day < 1) {
		while(day < 1) {
			month--;
			if(month < 1) {
				month = 12;
				year--;
			}
			maxday = calGetFinalDay(year, month);
			day += maxday;
		}
	}
	return new Date(year, month-1, day);
}


function calCalcMonthOffset(date, objYear, objMonth)
{
	var year  = calNormalizeYear(date.getYear());
	var month = calNormalizeMonth(date.getMonth());
	return Number((objYear - year) * 12) + Number(objMonth - month);
}


function calGetFinalDay(year, month) {
	if(month == 2 && ((year%4 == 0) && (year%100 != 0) || (year%400 == 0))) {
		return 29;
	} else {
		return calDaysInMonth[month-1];
	}
}


function calCreateCalendar(date, callBack)
{
	var year  = calNormalizeYear(date.getYear());
	var month = calNormalizeMonth(date.getMonth());

	date.setDate(1);
	var firstDay = date.getDay();

	var maxDay = calGetFinalDay(year, month);

	var calen = '';

	calen += callBack.tableHead() + '\n';
	calen += ' ' + callBack.titleHead() + callBack.titleBody(year, month) + callBack.titleTail() + '\n';
	calen += ' ' + callBack.weekHead() + '\n';
	calen += '  ' + callBack.weekBody(0) + '\n';
	calen += '  ' + callBack.weekBody(1) + '\n';
	calen += '  ' + callBack.weekBody(2) + '\n';
	calen += '  ' + callBack.weekBody(3) + '\n';
	calen += '  ' + callBack.weekBody(4) + '\n';
	calen += '  ' + callBack.weekBody(5) + '\n';
	calen += '  ' + callBack.weekBody(6) + '\n';
	calen += ' ' + callBack.weekTail() + '\n';

	dct = (1 - firstDay);
	for (wct = 0; wct < 6; wct++) {
	calen += ' ' + callBack.dayHead() + '\n';
		for(wday = 0; wday < 7; wday++) {
			if((dct > 0) && (dct <= maxDay)) {
				holiday = calGetNationalHoliday(year, month, dct, wday, 0);
	calen += '  ' + callBack.dayBody(year, month, dct, wday, holiday) + '\n';
			} else {
	calen += '  ' + callBack.dayOutBody(year, month, wday) + '\n';
			}

			dct++;
		}
	calen += ' ' + callBack.dayTail() + '\n';
	}
	calen += callBack.titleTail() + '\n';

	return calen;
}


/*
 * Get Holiday
 *  usage:   calGetNationalHoliday(year, month, day, week, depth)
 *    year  ... 年 (西暦4桁)
 *    month ... 月 (1～12)
 *    day   ... 日 (1～31)
 *    week  ... 曜日 (日=0,月=1...土=6)
 *    depth ... 再起カウンタ（最初の呼び出しは0かnullかundefinedである事)
 *
 *  returns: 祭日の名前、祭日でないなら NULL
 *
 *  ※適応範囲:1990年頃以降（それ以前の休日名や日付には完全には対応していません）
 *
 */
var calShunbunTable = new Array(19.8277, 20.8357, 20.8431, 21.8510);  // 春分の日付計算用基数
var calShuubunTable = new Array(22.2588, 23.2588, 23.2488, 24.2488);  // 秋分の日付計算用基数

function calGetNationalHoliday(year, month, day, week, depth) {

	// 日付範囲チェック
	if(day < 1 || day > calGetFinalDay(year, month)) {
		return null;
	}

	// 日付固定の祝日
	if(month == 1 && day ==	1) {			 //	1月1日
		return '元日' ;
	} else if(month == 2 && day == 11) {	// 2月11日
		return '建国記念の日';
	} else if(month == 4 && day == 29){		// 4月29日
		return '昭和の日';
	} else if(month == 5 && day == 3) {		// 5月3日
		return '憲法記念日';
	} else if(month == 5 && day == 4) {		// 5月4日
		return 'みどりの日';
	} else if(month == 5 && day == 5) {		// 5月5日
		return 'こどもの日';
	} else if(month == 11 && day == 3) {	// 11月3日
		return '文化の日';
	} else if(month == 11 && day == 23) {	// 11月23日
		return '勤労感謝の日';
	} else if(month == 12 && day == 23) {	// 12月23日
		return '天皇誕生日';
	} else if(year < 2000 && month == 1 && day == 15) {		// 1月15日(～1999)
		return '成人の日';
	} else if(year < 2000 && month == 10 && day == 10) {		// 10月10日(～1999)
		return '体育の日';
	} else if(year < 2003 && month == 7 && day == 20) {		// 7月20日(～2002)
		return '海の日';
	} else if(year < 2003 && month == 9 && day == 15) {		// 9月15日(～2002)
		return '敬老の日';
	}

	// ハッピーマンデー
	if(week == 1) {
		var monCount = Math.floor((day + 6) / 7);

		// 第2月曜
		if(monCount == 2) {
			if(year >= 2000 && month == 1) {	// 1月(2000～)
				return '成人の日';
			}
			if(year >= 2000 && month == 10) {	// 10月(2000～)
				return '体育の日';
			}

		// 第3月曜
		} else if(monCount == 3){
			if(year >= 2003 && month == 7) {	 // 7月(2003～)
				return '海の日';
			}
			if(year >= 2003 && month == 9) {	 // 9月(2003～)
				return '敬老の日';
			}
		}
	}

	// 春分の日・秋分の日
	var index, tyear;
	if((year >= 1851) && (year <= 1899)) {
		index = 0;
	} else if ((year >= 1900) && (year <= 1979)) {
		index = 1;
	} else if ((year >= 1980) && (year <= 2099)) {
		index = 2;
	} else if ((year >= 2100) && (year <= 2150)) {
		index = 3;
	} else {
		index = 4;	 // 範囲外
	}
	if(index < 4) {
		if(index < 2) {
			tyear = year - 1983;
		} else {
			tyear = year - 1980;
		}
		if(month == 3) {			// 春分の日
			if(day == Math.floor(calShunbunTable[index] + 0.242194 * tyear - Math.floor((tyear + 0.1)/4))) {
				return '春分の日';
			}
		} else if(month == 9) { // 秋分の日
			if(day == Math.floor(calShuubunTable[index] + 0.242194 * tyear - Math.floor((tyear + 0.1)/4))) {
				return '秋分の日';
			}
		}
	}

	// 再帰フラグのチェック
	if(depth == null || depth == undefined) {
		depth = 0;
	} else if(depth > 0) {
		return null;
	}

	// 国民の休日(祝日に挟まれた平日)と振り替え休日(日曜日が祝日の場合の翌日の月曜日）
	if(week > 0) {		// 平日で祝日でない

		// 前日と次日が祝日か確認
		// １日と末日が祝日の場合はない事を利用してアルゴリズムを簡略化する

		// 曜日の設定
    var bbholiday=calGetNationalHoliday(year,month,day-2,((week+7)%7),depth+1);
    var bholiday=calGetNationalHoliday(year,month,day-1,((week+6)%7),depth+1);
    var aholiday=calGetNationalHoliday(year,month,day+1,((week+1)%7),depth+1);
    if(bholiday!=null&&aholiday!=null){return '国民の休日';
    }else if(week==1&&bholiday!=null){return '振替休日';
    }else if(bbholiday&&bholiday){return '振替休日';
    };
	}

	return null;
}




//
// qzQueryZipCode(zip1, zip2, callBackFunc)
//   zip1 ... zip1 (3 digits) or zipcode (7 degits)
//   zip2 ... zip2 (4 digits) or null (then assume zip1 as 7 digits)
//   callBackFunc ... function to callback when httpRequest is completed
//   ssl  ... true if use ssl
//
function qzQueryZipCode(zip1, zip2, callBackFunc, ssl) {

    if(zip2 == null) {
        if(zip1.length < 7) {
            callBackFunc(null);
        } else if(ssl == true) {
            httpRequest("https://www.ena.travel/was/query/zipcode/"+zip1, true, callBackFunc);
        } else {
            httpRequest("http://www.ena.travel/was/query/zipcode/"+zip1, true, callBackFunc);
        }
    } else {
        if(zip1.length < 3 || zip2.length < 4) {
            callBackFunc(null);
        } else if(ssl == true) {
            return httpRequest("https://www.ena.travel/was/query/zipcode/"+zip1+"/"+zip2, true, callBackFunc);
        } else {
            return httpRequest("http://www.ena.travel/was/query/zipcode/"+zip1+"/"+zip2, true, callBackFunc);
        }
    }
}

//
// qzSetupAddress(zip1Name, zip2Name, prefName, addrName, yomiName, ssl)
//   zip1Name ... name attr. of input tag of zip1 (3 digits) or zipcode (7 degits)
//   zip2Name ... name attr. of input tag of zip2 (4 digits) or null (then assume zip1Name as 7 digits)
//   prefName ... name attr. of select tag of prefectures or null (then set the prefecture to the addrName)
//   addrName ... name attr. of input tag of address
//   hiraName ... name attr. of input tag of hiragana-yomi of the address or null (then ignore)
//   kataName ... name attr. of input tag of katakana-yomi of the address or null (then ignore)
//   ssl      ... true if use ssl
//
function qzSetupAddress(zip1Name, zip2Name, prefName, addrName, hiraName, kataName, ssl) {

    // get elements
    var zip1Elem = getElementByName(zip1Name);
    var zip2Elem = getElementByName(zip2Name);
    var prefElem = getElementByName(prefName);
    var addrElem = getElementByName(addrName);
    var hiraElem = getElementByName(hiraName);
    var kataElem = getElementByName(kataName);

    if(ssl == undefined || ssl == null) {
        ssl = false;
    }

    // call back function
    var callBackFunc = function (jsonResp) {

        // check error
        if(jsonResp == null) {
            return;
        }

        // get response data
        var data = eval('(' + jsonResp + ')');

        var prefCode  = getString(data["pref"]);
        var prefKanji = getString(data["prefKanji"]);
        var prefHira  = getString(data["prefHira"]);
        var prefKata  = getString(data["prefKata"]);

        var cityKanji = getString(data["cityKanji"]);
        var cityHira  = getString(data["cityHira"]);
        var cityKata  = getString(data["cityKata"]);

        var addrKanji = getString(data["addrKanji"]);
        var addrHira  = getString(data["addrHira"]);
        var addrKata  = getString(data["addrKata"]);

        // set to elements
        if(prefElem) {
            if(prefElem.type == 'select-one' || prefElem.type == 'select-multiple') {
                var selected = false;
                var opts = prefElem.options;
                for(var i = 0; i < opts.length; i++) {
                    var vpref = opts[i].value;
                    var tpref = opts[i].text;
                    var slcted = (vpref == prefCode || vpref == prefKanji || tpref == prefKanji);
                    opts[i].selected = slcted;
                    if(slcted) {
                        selected = true;
                    }
                }

                if(!selected && opts.length > 0) {
                    opts[0].selected = true;
                }

            } else {
                prefElem.value = prefKanji;
            }

            if(addrElem) {
                addrElem.value = cityKanji + addrKanji;
            }
            if(hiraElem) {
                hiraElem.value = cityHira + addrHira;
            }
            if(kataElem) {
                kataElem.value = cityKata + addrKata;
            }

        } else {
            if(addrElem) {
                addrElem.value = prefKanji + cityKanji + addrKanji;
            }
            if(hiraElem) {
                hiraElem.value = prefHira + cityHira + addrHira;
            }
            if(kataElem) {
                kataElem.value = prefKata + cityKata + addrKata;
            }
        }
    }

    // query zip-code
    if(!zip1Elem) {
        callBackFunc(null);
    } else if(zip2Elem) {
        qzQueryZipCode(zip1Elem.value, zip2Elem.value, callBackFunc, ssl);
    } else {
        var delim = zip1Elem.value.indexOf('-');
        if(delim < 0) {
            qzQueryZipCode(zip1Elem.value, null, callBackFunc, ssl);
        } else {
            var zip1 = zip1Elem.value.substring(0, delim);
            var zip2 = zip1Elem.value.substring(delim+1);
            qzQueryZipCode(zip1, zip2, callBackFunc, ssl);
        }
    }

}


//
// qcQueryCountries(area, callBackFunc)
//   area ... area code
//   callBackFunc ... function to callback when httpRequest is completed
//
function qcQueryCountries(area, callBackFunc) {
    if(area == null) {
        callBackFunc(null);
    } else {
        httpRequest("http://www.ena.travel/was/query/countries/"+area, true, callBackFunc);
    }
}

//
// qcSetupCountries(areaName, countriesName, citiesName)
//   areaName      ... name attr. of input tag of area
//   countriesName ... name attr. of input tag of countries
//   citiesName    ... name attr. of input tag of cities
//
function qcSetupCountries(areaName, countriesName, citiesName) {

    // get elements
    var areaElem = getElementByName(areaName);
    var countriesElem = getElementByName(countriesName);
    var citiesElem = getElementByName(citiesName);

    // call back function
    var callBackFunc = function (jsonResp) {

        // check error
        if(jsonResp == null) {
            return;
        }

        // get response data
        var data = eval('(' + jsonResp + ')');

        if(countriesElem != null) {
            countriesElem.options.length = 1 + data.length;
            countriesElem.options[0].selected = true;

            for(var ct = 0; ct < data.length; ct++) {
                countriesElem.options[ct+1].value = getString(data[ct]["code"]);
                countriesElem.options[ct+1].text = getString(data[ct]["title"]);
                countriesElem.options[ct+1].selected = false;
            }
        }

        if(citiesElem != null) {
            citiesElem.options.length = 1;
            citiesElem.options[0].selected = true;
        }
    }

    // query countries
    if(!areaElem) {
        callBackFunc(null);
    } else {
        qcQueryCountries(getValueFromElement(areaElem), callBackFunc);
    }

}

//
// qcQueryCities(country, callBackFunc)
//   country ... country code
//   callBackFunc ... function to callback when httpRequest is completed
//
function qcQueryCities(country, callBackFunc) {
    if(country == null) {
        callBackFunc(null);
    } else {
        httpRequest("http://www.ena.travel/was/query/cities/"+country, true, callBackFunc);
    }
}

//
// qcSetupCities(countriesName, citiesName)
//   countriesName ... name attr. of input tag of countries
//   citiesName    ... name attr. of input tag of cities
//
function qcSetupCities(countriesName, citiesName) {

    // get elements
    var countriesElem = getElementByName(countriesName);
    var citiesElem = getElementByName(citiesName);

    // call back function
    var callBackFunc = function (jsonResp) {

        // check error
        if(jsonResp == null) {
            return;
        }

        // get response data
        var data = eval('(' + jsonResp + ')');

        if(citiesElem != null) {
            citiesElem.options.length = 1 + data.length;
            citiesElem.options[0].selected = true;

            for(var ct = 0; ct < data.length; ct++) {
                citiesElem.options[ct+1].value = getString(data[ct]["code"]);
                citiesElem.options[ct+1].text = getString(data[ct]["title"]);
                citiesElem.options[ct+1].selected = false;
            }
        }
    }

    // query cities
    if(!countriesElem) {
        callBackFunc(null);
    } else {
        qcQueryCities(getValueFromElement(countriesElem), callBackFunc);
    }

}

//
// qsQuerySearchCity(name, callBackFunc)
//   name ... name of city
//   callBackFunc ... function to callback when httpRequest is completed
//
function qsQuerySearchCity(name, callBackFunc) {
    if(name == null) {
        callBackFunc(null);
    } else {
        httpRequest("http://www.ena.travel/was/query/searchcity?name="+encodeURI(name), true, callBackFunc);
    }
}

//
// qsSetupSearchCity(searchName, citiesName)
//   searchName    ... name attr. of input tag of seach name of city
//   citiesName    ... name attr. of input tag of cities
//
function qsSetupSearchCity(searchName, citiesName) {

    // get elements
    var searchElem = getElementByName(searchName);
    var citiesElem = getElementByName(citiesName);

    // call back function
    var callBackFunc = function (jsonResp) {

        // check error
        if(jsonResp == null) {
            return;
        }

        // get response data
        var data = eval('(' + jsonResp + ')');

        if(citiesElem != null) {
            citiesElem.options.length = 1 + data.length;
            citiesElem.options[0].selected = true;

            for(var ct = 0; ct < data.length; ct++) {
                citiesElem.options[ct+1].value = getString(data[ct]["code"]);
                citiesElem.options[ct+1].text = getString(data[ct]["title"]);
                citiesElem.options[ct+1].selected = false;
            }
        }
    }

    // query cities
    if(!searchElem) {
        callBackFunc(null);
    } else {
        qsQuerySearchCity(getValueFromElement(searchElem), callBackFunc);
    }

}



function OptionRecorder(srcName) {
    this.srcElem = getElementByName(srcName);
    this.options = new Array();

    this.getOptions = function() {
        if(this.srcElem) {
            this.options.length = 0;
            for(ct = 0; ct < this.srcElem.options.length; ct++) {
                this.options.push( {
                     "value" : this.srcElem.options[ct].value,
                     "text" : this.srcElem.options[ct].text,
                     "selected" : this.srcElem.options[ct].selected
                } );
            }
        }
    }


    this.setOptions = function() {
        if(this.srcElem) {
            this.srcElem.options.length = this.options.length;
            for(ct = 0; ct < this.options.length; ct++) {
                this.srcElem.options[ct].value = this.options[ct].value;
                this.srcElem.options[ct].text = this.options[ct].text;
                this.srcElem.options[ct].selected = this.options[ct].selected;
            }
        }
    }
    this.getOptions();
}

var cityListByArea;
var cityListByName;

function initializeSelectCity() {
    cityListByArea = new OptionRecorder('destination');
    cityListByName = new OptionRecorder('destination');
}



function showSearchByName() {
    cityListByArea.getOptions();
    cityListByName.setOptions();
    setValueToElement('dst_method', "name");
}

function showSearchByArea() {
    cityListByName.getOptions();
    cityListByArea.setOptions();
    setValueToElement('dst_method', "area");
}



function cbTopCalendar(setFuncName) {
    this.setFuncName = setFuncName;

    this.checkInSpan = function(year, month, day) {
        if(calIsPast(year, month, day)) {
            return false;
        } else if(year > calCurrentYear + 2) {
            return false;
        } else if(year == calCurrentYear + 2 && month > calCurrentMonth) {
            return false;
        } else if(year == calCurrentYear + 2 && month == calCurrentMonth && day > calCurrentDay) {
            return false;
        } else {
            return true;
        }
    }

    this.tableHead = function() {
        return '<table border="0" cellpadding="2" cellspacing="2">';
    }

    this.titleHead = function() {
        return '<tr>';
    }
    this.titleBody = function(year, month) {
        return '<td colspan="7" align="center" class="stdcalen_header">' + year + '年' + month + '月</td>';
    }
    this.titleTail = function() {
        return '</tr>';
    }

    this.weekHead = function() {
        return '<tr>';
    }
    this.weekBody = function(week) {
        switch(week) {
          case 0:
            return '<td align="center" class="stdcalen_week_sun">日</td>';
          case 1:
            return '<td align="center" class="stdcalen_week_nml">月</td>';
          case 2:
            return '<td align="center" class="stdcalen_week_nml">火</td>';
          case 3:
            return '<td align="center" class="stdcalen_week_nml">水</td>';
          case 4:
            return '<td align="center" class="stdcalen_week_nml">木</td>';
          case 5:
            return '<td align="center" class="stdcalen_week_nml">金</td>';
          case 6:
            return '<td align="center" class="stdcalen_week_sat">土</td>';
          default:
            return '<td align="center" class="stdcalen_week_nml">？</td>';
        }
    }
    this.weekTail = function() {
        return '</tr>';
    }

    this.dayHead = function() {
        return '<tr>';
    }
    this.dayBody = function(year, month, day, week, holiday) {
        var funcStr;
        if(setFuncName == null || setFuncName == undefined) {
            funcStr = '';
        } else {
            funcStr = ' onClick="return '+setFuncName+'('+year+','+month+','+day+')"';
        }

        if(holiday != null) {
            if(!this.checkInSpan(year, month, day)) {
                return '<td align="center" class="stdcalen_holiday"><span title="'+holiday+'">'+day+'</span></td>';
            } else if(calIsToday(year, month, day)) {
                return '<td align="center" class="stdcalen_today"><span title="'+holiday+'"><a href="#" class="stdcalen"'+funcStr+'>'+day+'</a></span></td>';
            } else {
                return '<td align="center" class="stdcalen_holiday"><span title="'+holiday+'"><a href="#" class="stdcalen"'+funcStr+'>'+day+'</a></span></td>';
            }
        } else if(calIsToday(year, month, day)) {
            return '<td align="center" class="stdcalen_today"><a href="#" class="stdcalen"'+funcStr+'>'+day+'</a></td>';
        } else if(week == 0) {
            if(!this.checkInSpan(year, month, day)) {
                return '<td align="center" class="stdcalen_sunday">'+day+'</td>';
            } else {
                return '<td align="center" class="stdcalen_sunday"><a href="#" class="stdcalen"'+funcStr+'>'+day+'</a></td>';
            }
        } else if(week == 6) {
            if(!this.checkInSpan(year, month, day)) {
                return '<td align="center" class="stdcalen_satday">'+day+'</td>';
            } else {
                return '<td align="center" class="stdcalen_satday"><a href="#" class="stdcalen"'+funcStr+'>'+day+'</a></td>';
            }
        } else {
            if(!this.checkInSpan(year, month, day)) {
                return '<td align="center" class="stdcalen_weekday">'+day+'</td>';
            } else {
                return '<td align="center" class="stdcalen_weekday"><a href="#" class="stdcalen"'+funcStr+'>'+day+'</a></td>';
            }
        }
    }
    this.dayOutBody = function(year, month, week) {
        if(week == 0) {
            return '<td align="center" class="stdcalen_outsunday"><br></td>';
        } else if(week == 6) {
            return '<td align="center" class="stdcalen_outsatday"><br></td>';
        } else {
            return '<td align="center" class="stdcalen_outday"><br></td>';
        }
    }
    this.dayTail = function() {
        return '</tr>';
    }

    this.tableTail = function() {
        return '</table>';
    }

}


var obj_dep;
var obj_dst;
var targetday;

function getSelectObj(target){
  var tmp = document.getElementsByName( target );
  var itemcnt = tmp.length;
  for(i=0; i<itemcnt; i++){
    if( tmp[i].tagName.toLowerCase() == "select" ){
      return( tmp[i] );
    }
  }
  return(undefined);
}

var obj = function(target){
    this.year = getSelectObj( target + "_year" );
    this.month = getSelectObj( target + "_month" );
    this.day = getSelectObj( target + "_day" );
}

var inp_date = function(target){
    var obj;
    if( target.toLowerCase() == "dep" ) {
        obj = obj_dep;
    }else{
        obj = obj_dst;
    }
    this.year = obj.year.options[obj.year.selectedIndex].text;
    this.month = obj.month.options[obj.month.selectedIndex].text;
    this.day = obj.day.options[obj.day.selectedIndex].text;
    this.date = new Date(this.year, this.month - 1, this.day);
    this.last = calGetFinalDay(this.year,this.month);
}

var now_date = function(){
    this.date = new Date();
    this.year = this.date.getFullYear();
    this.month = this.date.getMonth() + 1;
    this.day = this.date.getDate();
}

function iniDays() {
    obj_dep = new obj("dep");
    obj_dst = new obj("dst");

    var now = new now_date();

    var dep = new inp_date("dep");
    var dst = new inp_date("dst");

	  tempDate = new Date();
      dep.date = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate()+14);
      dep.year = dep.date.getFullYear();
      dep.month = dep.date.getMonth() + 1;
      dep.day = dep.date.getDate();
      dep.last = calGetFinalDay(dep.year,dep.month);
      iniSelect(obj_dep, dep);
	  dst.date = new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate()+16);
      dst.year = dst.date.getFullYear();
      dst.month = dst.date.getMonth() + 1;
      dst.day = dst.date.getDate();
      dst.last = calGetFinalDay(dst.year,dst.month);
      iniSelect(obj_dst, dst);

    var tmpDate = dep.date;

      tmpDate = new Date(computeDate(now.date, 14));
      dep.date = new Date(tmpDate);
      dep.year = dep.date.getFullYear();
      dep.month = dep.date.getMonth() + 1;
      dep.day = dep.date.getDate();
      dep.last = calGetFinalDay(dep.year,dep.month);
      iniSelect(obj_dep, dep);
	  
      if( dep.month == 12 && dep.day >= 25 ){
        tmpDate = new Date(dep.year+1, 0, 6);
      }else if( dep.month == 1 && dep.day <= 3 ){
        tmpDate = new Date(dep.year, 0, 6);
      }else if(( dep.month == 4 && dep.day >= 25 ) || ( dep.month == 5 && dep.day <= 3 )){
        tmpDate = new Date(dep.year, 4, 12);
      }else if(( dep.month == 7 && dep.day >= 20 ) || ( dep.month == 8 && dep.day <= 10 )){
        tmpDate = new Date(dep.year, 7, 27);
      }

    if( tmpDate != dep.date ){
      dep.date = new Date(tmpDate);
      dep.year = dep.date.getFullYear();
      dep.month = dep.date.getMonth() + 1;
      dep.day = dep.date.getDate();
      dep.last = calGetFinalDay(dep.year,dep.month);
      iniSelect(obj_dep, dep);
      dst.date = new Date(computeDate(dep.date, 2));
      dst.year = dst.date.getFullYear();
      dst.month = dst.date.getMonth() + 1;
      dst.day = dst.date.getDate();
      dst.last = calGetFinalDay(dst.year,dst.month);
      iniSelect(obj_dst, dst);
    }


    ChangeBetweenDays(dep, dst);
    nextDstDay();
}

function iniSelect(obj, tgt) {

    for ( cnt=0; cnt < obj.year.length; cnt++ ) {
        if( parseInt(tgt.date.getFullYear()) == parseInt(obj.year.options[cnt].text) ) {
            obj.year.selectedIndex = cnt;
            break;
        }
    }

    for ( cnt=0; cnt < obj.month.length; cnt++ ) {
        if( parseInt(tgt.date.getMonth() + 1) == parseInt(obj.month.options[cnt].text) ) {
            obj.month.selectedIndex = cnt;
            break;
        }
    }
    for ( cnt=0; cnt < obj.day.length; cnt++ ) {
        if( parseInt(tgt.date.getDate()) == parseInt(obj.day.options[cnt].text) ) {
            obj.day.selectedIndex = cnt;
            break;
        }
    }
}


function setDays(obj, start, lastday) {

    var index = obj.options[obj.selectedIndex].text - 1;

    if (lastday == null) {
        lastday = 12;
    }

    if (lastday - 1 < index) {
            index = lastday - 1;
    }
// 2008/02/08 Update
    obj.length = lastday - start + 1;

    for (cnt = 0; cnt <= obj.length - 1; cnt++) {
        obj.options[cnt].text = start + cnt;
        obj.options[cnt].value = start + cnt;
    }

    if ( index < start) {
        obj.selectedIndex = 0;
    } else {
        obj.selectedIndex = index - (start - 1);

    }
}

function changeDstYears() {
    var dst = new inp_date("dst");

    var index = obj_dep.year.selectedIndex;
    var length = obj_dep.year.length - index;

    obj_dst.year.length = length;

    for (cnt = 0; cnt < length; cnt++) {
        obj_dst.year.options[cnt].text = obj_dep.year.options[index + cnt].text;
        obj_dst.year.options[cnt].value = obj_dep.year.options[index + cnt].value;
        if ( obj_dst.year.options[cnt].text == dst.year ) {
            obj_dst.year.selectedIndex = cnt;
        }
    }
}

function changeMonths(target){ 
    if( target.toLowerCase() == "dep" ) {
        var obj = obj_dep;
        var now = new now_date();
    }else{
        var obj = obj_dst;
        var now = new inp_date("dep");
    }

    var inp = new inp_date(target);
    var key = 1;

    if( inp.year == now.year) {
        key = parseInt(now.month);
    }
    setDays(obj.month, key, null);
}

function changeDays(target){
    if( target.toLowerCase() == "dep" ) {
        var obj = obj_dep;
        var now = new now_date();
    }else{
        var obj = obj_dst;
        var now = new inp_date("dep");
    }

    var now_ym = "" + now.year + now.month;
    var inp = new inp_date(target);
    var inp_ym = inp.year + inp.month;
    var key = 1;

    if( inp_ym == now_ym) {
        key = parseInt(now.day);
    }
    setDays(obj.day, key, inp.last);
}

function setBetweenDays() {
    var dep = new inp_date("dep");
    var dst = new inp_date("dst");

    ChangeBetweenDays(dep, dst);

}

function ChangeBetweenDays(dep, dst) {

    changeMonths("dst");
    changeDays("dst");

    targetday = (dst.date - dep.date)/86400000;
    
    if( targetday < 0 ) {
        targetday = 0;
    }

}

function nextDstDay() {
	
    changeMonths("dep");
    changeDays("dep");
    var dep = new inp_date("dep");
    var dst = new inp_date("dst");

    var old_dstYear = parseInt(dst.year);
    var old_dstMonth = parseInt(dst.month);

    dst.date =  computeDate(dep.date, targetday);

    var new_dstYear = parseInt(dst.date.getFullYear());
    var new_dstMonth = parseInt(dst.date.getMonth() + 1);

    var diff = ( (new_dstYear - old_dstYear) * 12) + (new_dstMonth - old_dstMonth);

    dstCalendar.shiftCalendar(diff)

    changeDstYears();

    for ( cnt=0; cnt < obj_dst.year.length; cnt++ ) {
        if( parseInt(dst.date.getFullYear()) == parseInt(obj_dst.year.options[cnt].text) ) {
            obj_dst.year.selectedIndex = cnt;
            break;
        }
    }
    changeMonths("dst");
    for ( cnt=0; cnt < obj_dst.month.length; cnt++ ) {
        if( parseInt(dst.date.getMonth() + 1) == parseInt(obj_dst.month.options[cnt].text) ) {
            obj_dst.month.selectedIndex = cnt;
            break;
        }
    }
    changeDays("dst");
    for ( cnt=0; cnt < obj_dst.day.length; cnt++ ) {
        if( parseInt(dst.date.getDate()) == parseInt(obj_dst.day.options[cnt].text) ) {
            obj_dst.day.selectedIndex = cnt;
            break;
        }
    }
}

function getPos(elm) {
    var target = (typeof elm == 'string') ? document.getElementById(elm) : elm;
    var pos = new function(){ this.x = 0; this.y = 0; } 

    while (target) {
        pos.x += target.offsetLeft;
        pos.y  += target.offsetTop;
        target = target.offsetParent;
    }

    if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != "undefined") {
        pos.x += document.body.leftMargin;
        pos.y  += document.body.topMargin;
    }
    return pos;
}

function setPos( tgtid, elmid, addtop, addleft) {
    var tgt = document.getElementById(tgtid);
    var elm = document.getElementById(elmid);
    var base = document.getElementById('base_left');

    pos = getPos(elm);
    basepos = getPos(base);

    tgt.style.top = pos.y + parseInt(addtop);
    tgt.style.left = (pos.x - basepos.x) + parseInt(addleft);
}

function computeDate(date, val) {
  var tmp = new Date(date);
  return new Date(tmp.setTime(date.getTime() + (val * 86400000)));
}

function checkTopForm()
{
    var departure = getValueFromElement('departure');
    
    if(departure == null || departure.length == 0) {
        alert('出発地を選択してください。');
        return false;
    }

    var dst_area = getValueFromElement('dst_area');
    if(dst_area == null || dst_area.length == 0) {
        alert('目的地：方面を選択してください。');
        return false;
    }

    var dst_country = getValueFromElement('dst_country');
    if(dst_country == null || dst_country.length == 0) {
        alert('目的地：国を選択してください。');
        return false;
    }

    var destination = getValueFromElement('destination');
    if(destination == null || destination.length == 0) {
        alert('目的地：都市を選択してください。');
        return false;
    }

    var depYear = parseInt(getValueFromElement('dep_year'));
    var depMonth = parseInt(getValueFromElement('dep_month'));
    var depDay = parseInt(getValueFromElement('dep_day'));

    var dstYear = parseInt(getValueFromElement('dst_year'));
    var dstMonth = parseInt(getValueFromElement('dst_month'));
    var dstDay = parseInt(getValueFromElement('dst_day'));

    if(depYear < calCurrentYear || (depYear == calCurrentYear && (depMonth < calCurrentMonth || (depMonth == calCurrentMonth && depDay < calCurrentDay)))) {
        alert('出発日の日付が本日より前になっています。');
        return false;
    }

    if(dstYear < depYear || (dstYear == depYear && (dstMonth < depMonth || (dstMonth == depMonth && dstDay < depDay)))) {
        alert('現地出発日の日付が出発日の日付より前になっています。');
        return false;
    }

    return true;
}




    var depCalendar = new TopCalendar("depCalendar", "dep_calendar_left", "dep_calendar_right",
                     "dep_calendar1", "dep_calendar2", "dep_calendar3", "dep_year", "dep_month", "dep_day", 1);
    var dstCalendar = new TopCalendar("dstCalendar", "dst_calendar_left", "dst_calendar_right",
                     "dst_calendar1", "dst_calendar2", "dst_calendar3", "dst_year", "dst_month", "dst_day", 1);
    
    function initializeTopCalendar() {
    depCalendar.createCalendar();
    dstCalendar.createCalendar();
}

function TopCalendar(objectName, leftItem, rightItem, cal1Item, cal2Item, cal3Item, inputYear, inputMonth, inputDay, defaultMonthOffset) {
    this.objectName = objectName;

    this.leftItem = leftItem;
    this.rightItem = rightItem;
    this.cal1Item = cal1Item;
    this.cal2Item = cal2Item;
    this.cal3Item = cal3Item;

    this.inputYear = inputYear;
    this.inputMonth = inputMonth;
    this.inputDay = inputDay;
    this.monthOffset = defaultMonthOffset;

    this.objCalendar = new cbTopCalendar(objectName + ".setupDate");

    this.objCalendar.titleBody = function(year, month) {
        var data = '<td colspan="7" align="center" class="stdcalen_header">';
        var MonthOffset = calCalcMonthOffset(calCurrentDate, year, month);

        if(MonthOffset <= 0) {
            data += '<span class="span_contents_text_rest">&lt;&lt;</span>';
        } else {
            data += '<a href="#" onClick="return '+objectName+'.shiftCalendar(-1)">&lt;&lt;</a>';
        }

        data += ' ' + year + '年' + month + '月 ';

        if(MonthOffset >= 24) {
            data += '<span class="span_contents_text_rest">&gt;&gt;</span>';
        } else {
            data += '<a href="#" onClick="return '+objectName+'.shiftCalendar(1)">&gt;&gt;</a>';
        }
        data += '</td>';
        return data;
    }

    this.setupDate = function(year, month, day) {
    	if(objectName == "dstCalendar") {
		    var objyear = document.getElementsByName( "dep_year" )[0];
		    var objmonth = document.getElementsByName( "dep_month" )[0];
		    var objday = document.getElementsByName( "dep_day" )[0];
		    var baseYear = objyear.options[objyear.selectedIndex].text;
		    var baseMonth = objmonth.options[objmonth.selectedIndex].text;
		    var baseDay = objday.options[objday.selectedIndex].text;
    		var baseDate = new Date(baseYear, baseMonth - 1, baseDay);
    		var date = new Date(year, month - 1, day);
    		
    		if(baseDate > date){
    			return false;
    		}
    	}
    	
	    var objyear = document.getElementsByName( this.inputYear )[0];
    	for ( cnt=0; cnt < objyear.length; cnt++ ) {
	        if( parseInt(year) == parseInt(objyear.options[cnt].text) ) {
	            objyear.selectedIndex = cnt;
	            changeMonths(objectName.substring(0, 3));
	            break;
	        }
	    }

	    var objmonth = document.getElementsByName( this.inputMonth )[0];
	    for ( cnt=0; cnt < objmonth.length; cnt++ ) {
	        if( parseInt(month) == parseInt(objmonth.options[cnt].text) ) {
	            objmonth.selectedIndex = cnt;
	            changeDays(objectName.substring(0, 3));
	            break;
	        }
	    }

	    var objday = document.getElementsByName( this.inputDay )[0];
	    for ( cnt=0; cnt < objday.length; cnt++ ) {
	        if( parseInt(day) == parseInt(objday.options[cnt].text) ) {
	            objday.selectedIndex = cnt;
	            break;
	        }
	    }
        
        if(objectName == "depCalendar") {
          nextDstDay();
          hideBlock('calendar_block');
        }else{
          setBetweenDays();
          hideBlock('calendar2_block');
        }
        
        return false;
    }

    this.shiftCalendar = function(offset) {
        this.monthOffset += offset;
        this.createCalendar();
        return false;
    }

    this.setCalendar = function(year, month) {
        this.monthOffset = calCalcMonthOffset(calCurrentDate, year, month);
        this.createCalendar();
        return false;
    }

    this.createCalendar = function() {

        elem = document.getElementById(this.cal1Item);
        if(elem != null) {
            elem.innerHTML = calCreateCalendar(calAddMonthToDate(calCurrentDate, this.monthOffset), this.objCalendar);
        }

        elem = document.getElementById(this.cal2Item);
        if(elem != null) {
            elem.innerHTML = calCreateCalendar(calAddMonthToDate(calCurrentDate, this.monthOffset + 1), this.objCalendar);
        }

        elem = document.getElementById(this.cal3Item);
        if(elem != null) {
            elem.innerHTML = calCreateCalendar(calAddMonthToDate(calCurrentDate, this.monthOffset + 2), this.objCalendar);
        }
    }
}



        function partsFunc() {
            puldawncont();
            initializeTopCalendar();
            initializeSelectCity();
            
            setValueToElement("dst_area", "", true);
            setValueToElement("dst_country", "", true);
            setValueToElement("dst_name", "", true);
            setValueToElement("destination", "", true);
            iniDays();
        }

        function puldawncont(){
            var topDateSpan = 2;

            if(document.getElementsByName("dep_year")[0].options[0].value != calCurrentYear){
                for(var cnt = 0;cnt < document.getElementsByName("dep_year")[0].length;cnt++){
                    var tempyear = calCurrentYear + cnt;
                    document.getElementsByName("dep_year")[0].options[cnt].text = tempyear;
                    document.getElementsByName("dep_year")[0].options[cnt].value = tempyear;
                }

                var leng = document.getElementsByName("dep_year")[0].length;

                if(topDateSpan < leng){
                    document.getElementsByName("dep_year")[0].length = topDateSpan;
                }else if(topDateSpan > leng){
                    document.getElementsByName("dep_year")[0].length = topDateSpan;
                    for(var ct = leng;ct < topDateSpan;ct++){
                        var tempyear = calCurrentYear + ct;
                        document.getElementsByName("dep_year")[0].options[ct].text = tempyear;
                        document.getElementsByName("dep_year")[0].options[ct].value = tempyear;
                    }
                }
            }
        }

        function submitForm() {
            if(checkTopForm()) {
                document.top_searching_form.submit()
            }
            return false;
        }

        function setNextDays(obj){
            obj = document.top_searching_form;
            var nowDate = new Date();
            var set_years = parseInt(obj.dst_year.options[obj.dst_year.selectedIndex].value);
            var set_months = parseInt(obj.dst_month.options[obj.dst_month.selectedIndex].value);
            var set_days = parseInt(obj.dst_day.options[obj.dst_day.selectedIndex].value);

            var iyear = nowDate.getUTCFullYear();
            var imon = nowDate.getUTCMonth();
            var iday = nowDate.getUTCDate();

            if ( (set_years == nowDate.getUTCFullYear()) && (set_months == nowDate.getUTCMonth()+1) && (set_days == nowDate.getUTCDate()) ) {
                var years = parseInt(obj.dep_year.options[obj.dep_year.selectedIndex].value);
                var months = parseInt(obj.dep_month.options[obj.dep_month.selectedIndex].value) - 1;
                var days = parseInt(obj.dep_day.options[obj.dep_day.selectedIndex].value);
                var setDay = new Date(Date.UTC(years,months,days));
                var set_sec = setDay.getTime();
                set_sec = set_sec + (3 * 24 * 60 * 60 * 1000);
                setDay.setTime(set_sec);

                var get_year = setDay.getUTCFullYear();
                for ( var iLoop=0; iLoop<obj.dst_year.length; iLoop++ ) {
                    if( get_year == parseInt(obj.dst_year.options[iLoop].value) ) {
                        obj.dst_year.selectedIndex = iLoop;
                        break;
                    }
                }
                var get_month = setDay.getUTCMonth() + 1;
                for ( var iLoop=0; iLoop<obj.dst_month.length; iLoop++ ) {
                    if( get_month == parseInt(obj.dst_month.options[iLoop].value) ) {
                        obj.dst_month.selectedIndex = iLoop;
                        break;
                    }
                }
                var get_day = setDay.getUTCDate();
                for ( var iLoop=0; iLoop<obj.dst_day.length; iLoop++ ) {
                    if( get_day == parseInt(obj.dst_day.options[iLoop].value) ) {
                        obj.dst_day.selectedIndex = iLoop;
                        break;
                    }
                }
            }
        }

        function setDepCalendar()
        {
            var year  = getValueFromElementOfForm(document.top_searching_form, "dep_year");
            var month = getValueFromElementOfForm(document.top_searching_form, "dep_month");
            depCalendar.setCalendar(year, month);
            nextDstDay();
        }

        function setDstCalendar()
        {
            var year  = getValueFromElementOfForm(document.top_searching_form, "dst_year");
            var month = getValueFromElementOfForm(document.top_searching_form, "dst_month");
            dstCalendar.setCalendar(year, month);
            setBetweenDays();
        }
/*---------------------------------------------------------------*/

function isArray(x) {
	return ((typeof x == "object") && (x.constructor == Array));
}; 

window.addOnload(loadTikeponDpt);
window.addOnload(loadTikeponDpt);
window.addOnload(loadTikeponDstArea);
window.addOnload(loadTikeponAirline);
window.addOnload(partsFunc);