var opMonths = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var opMonthsValue = new Array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');

function initCheckInOut(idCheckinM, idCheckinD, idCheckoutM, idCheckoutD)
{
	loadFollowing6Months(idCheckinM, idCheckoutM);
	reloadDateSelect(idCheckinM, idCheckinD);
	reloadDateSelect(idCheckoutM, idCheckoutD);
}

function OnMonthChange(idMonthSelect, idDateSelect)
{
	reloadDateSelect(idMonthSelect, idDateSelect);
}

function loadFollowing6Months(idCheckinM, idCheckoutM)
{
	var checkinSelect = document.getElementById(idCheckinM);
	checkinSelect.options.length = 0;
	var checkoutSelect = document.getElementById(idCheckoutM);
	checkoutSelect.options.length = 0;
	
	var aDate = new Date();
	var year = aDate.getFullYear();
	var month = aDate.getMonth();
	
	checkinSelect[checkinSelect.options.length] = new Option(getYearMonthText(year, month), getYearMonthValue(year, month));
	checkoutSelect[checkoutSelect.options.length] = new Option(getYearMonthText(year, month), getYearMonthValue(year, month));

	for (var i=0; i<5; i++)
	{
		if (month == 11)
		{
			month = 0;
			year ++;
		}
		else
		{
			month ++;
		}
		checkinSelect[checkinSelect.options.length] = new Option(getYearMonthText(year, month), getYearMonthValue(year, month));
		checkoutSelect[checkoutSelect.options.length] = new Option(getYearMonthText(year, month), getYearMonthValue(year, month));
	}
	
	checkinSelect.selectedIndex = 0;
	checkoutSelect.selectedIndex = 0;
}

//month: 0 - 11
function getYearMonthText(year, month)
{
	return year + ' ' + opMonths[month];
}
//month: 0 - 11
function getYearMonthValue(year, month)
{
	return year + '-' + opMonthsValue[month];
}
function reloadDateSelect(idMonthSelect, idDateSelect)
{
	var monthSelect = document.getElementById(idMonthSelect);
	var year = monthSelect.options[monthSelect.selectedIndex].value.substr(0,4);
	var month = monthSelect.options[monthSelect.selectedIndex].value.substr(5,2) - 1;

	var aDate = new Date();
	var minDate = 1;
	if (aDate.getMonth() == month)
	{
		minDate = aDate.getDate();	
	}
	loadMonthsDates(idDateSelect, minDate, getMonthMaxDate(month, year));
}
//month: 0 - 11
function getMonthMaxDate(m, y)
{
	if (m==0 || m==2 || m==4 || m==6 || m==7 || m==9 || m==11)
	{
		return 31;
	}
	else if (m==3 || m==5 || m==8 || m==10)
	{
		return 30;
	}
	else 
	{
		if (isLeapYear(y))
			return 29;
		else
			return 28;
	}
}

function loadMonthsDates(idDateSelect, minDate, maxDate)
{
	var dateSelect = document.getElementById(idDateSelect);
	dateSelect.options.length = 0;
	for (i=minDate; i<=maxDate; i++)
	{
		dateSelect[dateSelect.options.length] = new Option(i, i);
	}
}

function getDate(dateString) {
	var year = dateString.substr(0,4);
	var month = dateString.substr(5,2) - 1; // 0 - 11
	var day = dateString.substr(8,2);
	return new Date(year,month,day);
}

function isLeapYear( yrStr ) {
    var leapYear = false;
    var year = parseInt( yrStr, 10 );
    // every fourth year is a leap year
    if ( year % 4 == 0 ) {
        leapYear = true;
        // unless it's a multiple of 100
        if( year % 100 == 0 ) {
            leapYear = false;
            // unless it's a multiple of 400
            if( year % 400 == 0 ) {
                leapYear=true;
            }
        }
    }
    return leapYear;
}
function ShowGetPrice(itemId, hotelName, hotelId)
{
	HideGetPrice();
	
	var popContainer = document.getElementById('itemDatesPop' + itemId);
	popContainer.innerHTML = document.getElementById('search_box_dyn_container').innerHTML;
	document.getElementById('selectedSearchHotelName').innerHTML = hotelName;
	document.getElementById('search_hotel').value = hotelId;
	popContainer.style.display = 'block';
}
function DoCityHotelsSearch()
{
	var city = document.getElementById('search_city').value;
	var checkinText = document.getElementById('search_checkin_m').value + '-' + document.getElementById('search_checkin_d').value;
	var checkoutText = document.getElementById('search_checkout_m').value + '-' + document.getElementById('search_checkout_d').value;
	var guests = document.getElementById('search_guests').value;
	var rooms = document.getElementById('search_rooms').value;
	var hotel = document.getElementById('search_hotel').value;
	
	if (ValidateDates(checkinText, checkoutText))
	{
	//http://localhost:8088/hotels/search?city=singapore&checkin=2008-10-05&checkout=2008-10-06&rooms=1&guests=1&hotel=-1
		document.location = "/hotels/search?city="+ city +"&checkin="+ checkinText + "&checkout=" + checkoutText + "&rooms=" + rooms + "&guests=" + guests + "&hotel=" + hotel;
	}
}

function DoCityHotelsSearchBox()
{
	var city = document.getElementById('search_box_city').value;
	var checkinText = document.getElementById('search_box_checkin_m').value + '-' + document.getElementById('search_box_checkin_d').value;
	var checkoutText = document.getElementById('search_box_checkout_m').value + '-' + document.getElementById('search_box_checkout_d').value;
	var guests = document.getElementById('search_box_guests').value;
	var rooms = document.getElementById('search_box_rooms').value;
	
	if (ValidateDates(checkinText, checkoutText))
	{
		document.location = "/hotels/search?city="+ city +"&checkin="+ checkinText + "&checkout=" + checkoutText + "&rooms=" + rooms + "&guests=" + guests;
	}
}
// validate dates
function ValidateDates(checkinText, checkoutText) {
    var inDate = getDate(checkinText)
    var outDate = getDate(checkoutText)
    var currentDate = new Date();
	//validate checkin - checkout difference (date range too big)
	if ((outDate - inDate)/86400000 >= 31) {  //86400000 is one days in milliseconds
		alert('Your period of stay should be no longer than 30 nights.');
		return false;
	}
    // validate checkout <= checkin
	if (outDate - inDate <= 0) {
		alert('Please ensure that the check-out date is after the check-in date.');
		return false;
	}
    //validate checkin/checkout is less than one year in advance
    if((outDate - currentDate)/86400000 >= 363) {
		alert('You cannot book more than 1 year in advance.');
        return false;
    }
	return true;
}