var ADateRange = new Array(), DDateRange = new Array();//, ADate = new Date(), DDate= new Date();
var adYear, adMon, adDay, ddYear, ddMon, ddDay, _DepartureDate, _ArrivalDate;
var DayInMonth = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

Date.prototype.addMilliseconds = function(value) { this.setMilliseconds(this.getMilliseconds() + value); return this; }
Date.prototype.addDays = function(value) { return this.addMilliseconds(value * 86400000); };
Date.prototype.cmpDate = function(value) {
var v_dt = new Date(value.getFullYear(), value.getMonth(), value.getDate());
// var s = v_dt.toString();
return this.valueOf() - v_dt.valueOf();
};
Date.prototype.cmpDay = function(value) {
    var r = this.cmpDate(value);
    return r / (1 * 24 * 60 * 60 * 1000);
};
    
Date.prototype.toString = function() {
    var d = this;
    function formatDate(d) {
        var y = d.getFullYear();
        var m = (d.getMonth() < 9 ? "0" : "") + (d.getMonth() + 1);
        var date = (d.getDate() < 10 ? "0" : "") + d.getDate();
        return y + "-" + m + "-" + date;
    }
    return formatDate(d);
};

function checkDate(d){
var s = d;
if(!s) return null;
var D = String(s).split("-");
if(D.length < 3) return null;
var yy = parseInt(D[0],10); 
var mm = parseInt(D[1],10)-1;
var dd = parseInt(D[2],10);
var _d = new Date( yy, mm , dd);
var c = isNaN(_d);
return c?null:_d;
}
function onSetRoomPerson(){
if( typeof RoomType != 'undefined'){
var room =  parseInt(RoomType,10);
var e;
if(!isNaN(room)){
	e = $("CountOfRoom");
	e.selectedIndex = room - 1;
}
}
if( typeof RoomType != 'undefined'){
var amount = parseInt(AmountOfRooms,10);
if(!isNaN(amount)){
	e = $("CountOfPerson");
	e.selectedIndex = amount - 1;
}
}
}

function onSetPeriod(){
	onSetRoomPerson();
	var ADate;
	if( typeof ArrivalDate != 'undefined')
		ADate = checkDate(ArrivalDate);
	if(!ADate){
		ADate = new Date();	ADate.setTime(ADate.getTime() + (0*24*60*60*1000))} // adv. tomorrow
	var DDate;
	if( typeof DepartureDate != 'undefined')
		DDate = checkDate(DepartureDate);
	if(!DDate){
		DDate = new Date();	DDate.setTime(DDate.getTime() + (1*24*60*60*1000))}// adv. day after tomorrow

	iADYear = ADate.getFullYear();
	iADMonth = ADate.getMonth();
	iADDay = ADate.getDate();

	iDDYear = DDate.getFullYear();
	iDDMonth = DDate.getMonth();
	iDDDay = DDate.getDate(); 	
			
	adYear = $("adYear");	
if(!adYear) return;
	adYear.options.length = 0;
	for (i = iADYear,j=0; i < iADYear+3; i++,j++)	{
		elOpt = new Option;
		elOpt.value = String(i);
		elOpt.text = String(i);
		adYear.options[j] = elOpt;
	}
	adYear.selectedIndex = 0;
	adYear.onchange = ArrivalDeparture_Year; 
	
	adMon  = $("adMon");  adMon.selectedIndex  =  iADMonth ;
	adMon.onchange = ArrivalDeparture_Mon;

	adDay  = $("adDay");  adDay.selectedIndex  = iADDay-1;
	adDay.onchange = ArrivalDeparture_Day; 
	
	_ArrivalDate = $("_ArrivalDate");
		
	ddYear = $("ddYear"); 
	ddYear.options.length = 0;
	for (i = iDDYear,j=0; i < iDDYear+3; i++,j++){
		elOpt = new Option;
		elOpt.value = String(i);
		elOpt.text = String(i);
		ddYear.options[j] = elOpt;
	}
	ddYear.selectedIndex = 0;
	ddYear.onchange = ArrivalDeparture_Year; 
	ddMon  = $("ddMon");  ddMon.selectedIndex =  DDate.getMonth();
	ddMon.onchange = ArrivalDeparture_Mon; 
	ddDay  = $("ddDay");  ddDay.selectedIndex = DDate.getDate()-1;
	ddDay.onchange = ArrivalDeparture_Day; 
	
	_DepartureDate = $("_DepartureDate");

	_DDate = new Date();
	_DDate.setTime(_DDate.getTime() + (365*24*60*60*1000));
	
	ADateRange[0] = Array(ADate.getFullYear(),ADate.getMonth()+1,ADate.getDate());
	ADateRange[1] = Array(_DDate.getFullYear()+3,_DDate.getMonth()+1,_DDate.getDate());
	
	_DDate.setTime(_DDate.getTime() + (30*60*60*1000));
	DDateRange[0] = Array(DDate.getFullYear(),DDate.getMonth()+1,DDate.getDate());
	DDateRange[1] = Array(_DDate.getFullYear()+3,_DDate.getMonth()+1,_DDate.getDate());
		
	ArrivalDeparture_Year();
}

function setDateRange() {
    var curDate = new Date();

    ADateRange[0] = Array(curDate.getFullYear(), curDate.getMonth() + 1, curDate.getDate());
    curDate.addDays(1);
    DDateRange[0] = Array(curDate.getFullYear(), curDate.getMonth() + 1, curDate.getDate());

    //curDate.addDays(3*365-30);

    ADateRange[1] = Array(curDate.getFullYear()+2, curDate.getMonth() + 1, curDate.getDate());
    curDate.addDays(30);
    DDateRange[1] = Array(curDate.getFullYear() + 2, curDate.getMonth() + 1, curDate.getDate());

}

function SetVarBook() {
    if (typeof varBook != 'object') return;
    var room = parseInt(varBook.typeRoom, 10);
    var e;
    if (!isNaN(room)) {
        e = $("CountOfPerson");
        e.selectedIndex = room - 1;
    }
    var amount = parseInt(varBook.amountRoom, 10);
    if (!isNaN(amount)) {
        e = $("CountOfRoom");
        e.selectedIndex = amount - 1;
    }

    var ADate = checkDate(varBook.fromDate);
    if (!ADate) {
        ADate = new Date(); ADate.setTime(ADate.getTime() + (0 * 24 * 60 * 60 * 1000))
    }
    var DDate = checkDate(varBook.toDate);
    if (!DDate) {
        DDate = new Date(); DDate.setTime(DDate.getTime() + (1 * 24 * 60 * 60 * 1000))
    }
    iADYear = ADate.getFullYear();
    iADMonth = ADate.getMonth();
    iADDay = ADate.getDate();

    iDDYear = DDate.getFullYear();
    iDDMonth = DDate.getMonth();
    iDDDay = DDate.getDate();

    adYear = $("adYear");
    if (!adYear) return;
    adYear.options.length = 0;
    for (i = iADYear, j = 0; i < iADYear + 3; i++, j++) {
        elOpt = new Option;
        elOpt.value = String(i);
        elOpt.text = String(i);
        adYear.options[j] = elOpt;
    }
    adYear.selectedIndex = 0;
    adYear.onchange = ArrivalDeparture_Year;

    adMon = $("adMon"); adMon.selectedIndex = iADMonth;
    adMon.onchange = ArrivalDeparture_Mon;

    adDay = $("adDay"); adDay.selectedIndex = iADDay - 1;
    adDay.onchange = ArrivalDeparture_Day;

    _ArrivalDate = $("_ArrivalDate");

    ddYear = $("ddYear");
    ddYear.options.length = 0;
    for (i = iDDYear, j = 0; i < iDDYear + 3; i++, j++) {
        elOpt = new Option;
        elOpt.value = String(i);
        elOpt.text = String(i);
        ddYear.options[j] = elOpt;
    }
    ddYear.selectedIndex = 0;
    ddYear.onchange = ArrivalDeparture_Year;
    ddMon = $("ddMon"); ddMon.selectedIndex = DDate.getMonth();
    ddMon.onchange = ArrivalDeparture_Mon;
    ddDay = $("ddDay"); ddDay.selectedIndex = DDate.getDate() - 1;
    ddDay.onchange = ArrivalDeparture_Day;

    _DepartureDate = $("_DepartureDate");

    _DDate = new Date();
    _DDate.setTime(_DDate.getTime() + (365 * 24 * 60 * 60 * 1000));

    ADateRange[0] = Array(ADate.getFullYear(), ADate.getMonth() + 1, ADate.getDate());
    ADateRange[1] = Array(_DDate.getFullYear() + 3, _DDate.getMonth() + 1, _DDate.getDate());

    _DDate.setTime(_DDate.getTime() + (30 * 60 * 60 * 1000));
    DDateRange[0] = Array(DDate.getFullYear(), DDate.getMonth() + 1, DDate.getDate());
    DDateRange[1] = Array(_DDate.getFullYear() + 3, _DDate.getMonth() + 1, _DDate.getDate());

    ArrivalDeparture_Year();
}

function InitPeriod() {
//    var d = new Date(2010,9,31);
//    d.addDays(1);
//    d.addDays(-1);
    SetVarBook();
    
    adYear = $("adYear"); adYear.onchange = ArrivalDeparture_Year; 
    adMon  = $("adMon"); adMon.onchange = ArrivalDeparture_Year; 
	adDay  = $("adDay"); adDay.onchange = ArrivalDeparture_Year;  
    _ArrivalDate = $("_ArrivalDate");
	// Y-M-D	
	// $v("_ArrivalDate", $v("adYear")+"-"+String($v("adMon")).lpad(2,'0')+"-"+String($v("adDay")).lpad(2,'0'));
	$v("_ArrivalDate",buildDate(adYear,adMon,adDay));
	ddYear = $("ddYear");ddYear.onchange = ArrivalDeparture_Year; 
	ddMon  = $("ddMon");ddMon.onchange = ArrivalDeparture_Year;   
	ddDay  = $("ddDay");ddDay.onchange = ArrivalDeparture_Year;   
	_DepartureDate = $("_DepartureDate");
	// $v("_DepartureDate", $v("ddYear") + "-" + String($v("ddMon")).lpad(2, '0') + "-" + String($v("ddDay")).lpad(2, '0'));
	$v("_DepartureDate",buildDate(ddYear,ddMon,ddDay));

	setDateRange();
	try
	{
	    if (typeof EnableHotelRates != 'undefined') EnableHotelRates();
	}
	catch (err) { }

	if (typeof searchRun != 'undefined' && searchRun == "yes" &&
        typeof SearchNew != 'undefined')
	    SearchNew();
}
function buildDate(year, mon, date) { return $v(year) + "-" + String($v(mon)).lpad(2, '0') + "-" + String($v(date)).lpad(2, '0') }
function ArrivalDeparture_Day(){ArrivalDateOrDepartureDate_Change()}
function ArrivalDeparture_Mon(){
	if(this == adMon) CorrectDays(adDay, adMon, adYear);
	else if(this == ddMon) CorrectDays(ddDay, ddMon, ddYear);
}

function ArrivalDeparture_Year(){
	if(this == adYear) CorrectDays(adDay, adMon, adYear);
	else if(this == ddYear) CorrectDays(ddDay, ddMon, ddYear);
	else ArrivalDateOrDepartureDate_Change();
}

function ChangeDays(adDay, adMon, adYear){
	CorrectDays(adDay, adMon, adYear);
	ArrivalDateOrDepartureDate_Change()
}

function CorrectDaysOfMon(adDay, adMon, adYear){
	lDay   = parseInt(adDay.value);
	lMonth = parseInt(adMon.value);
	lYear  = parseInt(adYear.value);
	iDaysCount = DayInMonth[adMon.value-1];
	if (lYear % 4 == 0 && lMonth==2) iDaysCount = 29;
	var j = adDay.options.length;
	
	if(iDaysCount < j) for (i = j-1; i > iDaysCount; i--) adDay.options[i] = null;			
	else for (i = j; i < iDaysCount; i++){
			elOpt = new Option;
			elOpt.value = i+1;
			elOpt.text = i+1;
			adDay.options[i] = elOpt;
		}
	adDay.options.length = iDaysCount;		
}

function CorrectDays(adDay, adMon, adYear){
	CorrectDaysOfMon(adDay, adMon, adYear);
	ArrivalDateOrDepartureDate_Change();		
}

function ArrivalDateOrDepartureDate_Change() {
    if (String(typeof (hideHotelRates)) == "function") hideHotelRates();

    var curDate = new Date();
    var year = $v(adYear), mon = $v(adMon), day = $v(adDay);
    var _ADate = new Date($v(adYear), $v(adMon) - 1, $v(adDay));
    var _DDate = new Date($v(ddYear), $v(ddMon) - 1, $v(ddDay));
    var _AD = _ADate.toString();  // $v(adYear) + "-" + $v(adMon) + "-" + $v(adDay);

    var _DD = _DDate.toString();  // $v(ddYear) + "-" + $v(ddMon) + "-" + $v(ddDay);
    var cd;
    
    if (_ArrivalDate.value != _AD) {
        cd = _ADate.cmpDay(curDate);
        if (cd < 0) {
            //alert("bad date: < current date:" + _ArrivalDate.value + " " + _AD);
            var d = parseDate($v(_ArrivalDate));
            
           if (d.getYear() != _ADate.getYear()) $v(_ArrivalDate, curDate.toString());
            // если месяц не изменился, то ...
            else if (d.getMonth() != _ADate.getMonth()) {
                d = _ADate;
                d.addDays(365);
                $v(_ArrivalDate, d);
                $v(_DepartureDate, d.addDays(1));
            }
            else if (d.getDate() != _ADate.getDate()) {
                d = new Date($v(adYear), $v(adMon), $v(adDay));
                $v(_ArrivalDate, d.toString());
                $v(_DepartureDate, d.addDays(1).toString());
            }

            setADate($v(_ArrivalDate)); // уставливаем дату
            setDDate($v(_DepartureDate));
        }
        else if (_DDate <= _ADate) {
            _DDate = new Date(_ADate.getTime()); // _DDate.setTime(_ADate.getTime() + (1*24*60*60*1000));
            _DDate.addDays(1);
            $v(_ArrivalDate, _AD);
            $v(_DepartureDate, _DDate.toString()); //  String(_DDate.getFullYear()) + "-" + String(_DDate.getMonth() + 1) + "-" + String(_DDate.getDate());
            setDDate(_DDate);
        }
    }
    else if (_DepartureDate.value != _DD) {
        cd = _DDate.cmpDay(curDate);
        if (cd < 0) {
            //alert("bad date: < current date:" + _DepartureDate.value + " " + _DD);

            var d = parseDate($v(_DepartureDate));
            if (d.getYear() != _DDate.getYear()) {
                $v(_ArrivalDate, curDate.toString());
                $v(_DepartureDate, curDate.addDays(1).toString())}
            // если месяц не изменился, то ...
            else if (d.getMonth() != _DDate.getMonth()) {
                d = _DDate;
                d.addDays(365);
                $v(_DepartureDate, d)}
            else if (d.getDate() != _DDate.getDate()) {
                d = new Date($v(ddYear), $v(ddMon), $v(ddDay));
                //$v(_ArrivalDate, d.toString());
                $v(_DepartureDate, d.toString())}
            

            setADate($v(_ArrivalDate)); // уставливаем дату
            setDDate($v(_DepartureDate));
            
        }
        else if (_DDate <= _ADate) {
            _ADate = new Date(_DDate.getTime());
            _ADate.addDays(-1);

            $v(_DepartureDate, _DD);
            $v(_ArrivalDate, _ADate.toString()); // String(_ADate.getFullYear()) + "-" + String(_ADate.getMonth() + 1) + "-" + String(_ADate.getDate());
            setADate(_ADate);
        } 
    }
}

function parseDate(d) {
    if (typeof d === "string") {
        var s = String(d).split("-");
        d = new Date(parseInt(s[0]), parseInt(s[1]-1), parseInt(s[2]))
    }
    return d;
}
function setADate(_ADate) {
    var dt = parseDate(_ADate);

    for (i = 0; i < adYear.options.length; i++)
        if (adYear.options[i].value == String(dt.getFullYear())) {
        adYear.selectedIndex = i; break
    }
    adMon.selectedIndex = dt.getMonth();
    CorrectDaysOfMon(adDay, adMon, adYear);
    adDay.selectedIndex = dt.getDate() - 1;
}

function setDDate(_DDate) {
    var dt = parseDate(_DDate);

    for (i = 0; i < ddYear.options.length; i++)
        if (ddYear.options[i].value == String(dt.getFullYear())) {
        ddYear.selectedIndex = i; break
    }
    ddMon.selectedIndex = dt.getMonth();
    CorrectDaysOfMon(ddDay, ddMon, ddYear);
    ddDay.selectedIndex = dt.getDate() - 1;
}

function getAD() {var dt = new Date($v(adYear), $v(adMon) - 1, $v(adDay));return dt.toString()}
function getDD() {var dt = new Date($v(ddYear), $v(ddMon) - 1, $v(ddDay));return dt.toString()}

function CheckADDate() {
    var curDate = new Date();
    var _ADate = new Date($v(adYear), $v(adMon) - 1, $v(adDay), 23, 59, 59);
    if (_ADate < curDate) { alert($("msgErrorArrivalDate").value); return false; }
    _ADate = _ADate.getTime();
    var _DDate = new Date($v(ddYear), $v(ddMon) - 1, $v(ddDay), 0, 0, 0);
    _DDate = _DDate.getTime();
    if (_DDate - _ADate > 30 * 24 * 60 * 60 * 1000) { alert($("msgErrorCountDays").value); return false; }
    return true;
}

//if(window.addEventListener) // Mozilla, Netscape, Firefox
//	window.addEventListener('load',InitPeriod, false);
//else  // IE
//	window.attachEvent('onload', InitPeriod);

//InitPeriod();
