function setDefaultNights(arrivalField, departureField, nightsField, defaultNumberOfNights)
{
	var dateObj = document.getElementsByName(nightsField);
	var nightsObj = dateObj.item(0);
	nightsObj.options[defaultNumberOfNights - 1].selected = true;
	onNightsChange(arrivalField, departureField, nightsField);
}
function dateFromFieldName(obj)
{
	var dateObj = document.getElementsByName(obj);
	var dateValue = dateObj.item(0).value;
	var date = new Date();
	date.setYear(parseInt(dateValue.substr(6,4),10));
	date.setMonth(parseInt(dateValue.substr(3,2),10) - 1);
	var tempDate = dateValue.substr(0,2);
	date.setDate(parseInt(tempDate, 10));
	date.setHours(0, 0, 0, 0);
	return date;
}

function onDatesChange(arrivalField, departureField, nightsField)
{
	var dateArriv = dateFromFieldName(arrivalField);
	var dateDepart = dateFromFieldName(departureField);

	if (dateArriv >= dateDepart)
	{
/////////////
		var sum = dateArriv.getDate() + parseInt(1,10);
		var daysM = daysInMonth(dateArriv.getMonth(), dateArriv.getFullYear());

		if (sum <= daysM)
		{
			dateDepart.setDate(sum);
			dateDepart.setMonth(dateArriv.getMonth());
			dateDepart.setFullYear(dateArriv.getFullYear());
		}
		else
		{
			dateDepart.setDate(sum - daysM);
			var newMonth = dateArriv.getMonth() + parseInt(1,10);
			if (newMonth < 12)
			{
				dateDepart.setMonth(newMonth);
				dateDepart.setFullYear(dateArriv.getFullYear());
			}
			else
			{
				dateDepart.setMonth(0);
				var newYear = dateArriv.getFullYear()+parseInt(1,10);
				dateDepart.setFullYear(newYear);
			}
		}
/////////////

		var dateObj = document.getElementsByName(departureField);
		dateObj.item(0).value = dateToStr(dateDepart);
	}

	var dat=dateDepart.getTime()-dateArriv.getTime();

    dat=Math.floor(dat/1000/3600/24);

	var nightsFieldObj = document.getElementsByName(nightsField);
	nightsFieldObj.item(0).value = dat;
}

function dateToStr(dateIn)
{
	var date = "0" + dateIn.getDate();
	var month = "0"+(parseInt(dateIn.getMonth(),10)+1);
	return date.slice(-2)+"/"+month.slice(-2)+"/"+dateIn.getFullYear();
}

function dateTodayToStr()
{
	return dateToStr(new Date());
}

function dateTomorrowToStr()
{
	var today = new Date();
	today.setDate(today.getDate()+1);
	return dateToStr(today);
}

function checkData(arrivalField, formName)
{
	var dateArriv = dateFromFieldName(arrivalField);

	var date = "0" + dateArriv.getDate();
	var month = "0"+(parseInt(dateArriv.getMonth(),10)+1);
	formName.arrival_date.value = "" + dateArriv.getFullYear() + month.slice(-2) + date.slice(-2);

	formName.arrival_day.value = dateArriv.getDate();
	formName.arrival_month.value = (parseInt(dateArriv.getMonth(),10)+1);
	formName.arrival_year.value = dateArriv.getFullYear();
}

function onNightsChange(arrivalField, departureField, nightsField)
{
	var dateArriv = dateFromFieldName(arrivalField);
	var dateDepart = dateFromFieldName(departureField);

	var nightsFieldObj = document.getElementsByName(nightsField);
	var nightsCount = nightsFieldObj.item(0).value;

	var newDate = new Date();
	var sum = dateArriv.getDate() + parseInt(nightsCount,10);
	var daysM = daysInMonth(dateArriv.getMonth(), dateArriv.getFullYear());
	if (sum <= daysM)
	{
		newDate.setDate(sum);
		newDate.setMonth(dateArriv.getMonth());
		newDate.setFullYear(dateArriv.getFullYear());
	}
	else
	{
		newDate.setDate(sum - daysM);
		var newMonth = dateArriv.getMonth() + parseInt(1,10);
		if (newMonth < 12)
		{
			newDate.setMonth(newMonth);
			newDate.setFullYear(dateArriv.getFullYear());
		}
		else
		{
			newDate.setMonth(0);
			var newYear = dateArriv.getFullYear()+parseInt(1,10);
			newDate.setFullYear(newYear);
		}
	}

	var dateObj = document.getElementsByName(departureField);
	var dateValue = dateObj.item(0).value;

	var date = "0" + newDate.getDate();
	var month = "0"+(parseInt(newDate.getMonth(),10)+1);
	dateObj.item(0).value = "" + date.slice(-2) + "/" + month.slice(-2) + "/" + newDate.getFullYear();
}
function daysInMonth(iMonth, iYear)
{
  	return 32 - new Date(iYear, iMonth, 32).getDate();
}

//----------------------------------------------------
iBookingRSData = function( id_search_group, id_prov, id_prov_group, type )
{
        // check type
        if (!type || typeof(type) != "integer" || type > 3 || type <= 0)
        {
           // find out type from ids
           if (id_prov != 0)
           {
               type = 1;
           }
           else if (id_prov_group)
           {
               type = 2;
           }
           else
           {
               type = 0;
           }
        }

	iBookingRSThisPtr = this;
	this.hotels = new Array();
	this.locations = new Array();
	this.towns = new Array();
	this.maxAdults = 1;
	this.maxRooms = 1;
	this.id_search_group = id_search_group;
	this.id_prov = id_prov;
	this.id_provider_group = id_prov_group;
	this.type = type;

	if (id_prov)
	{
		this.mealPlans = new Array();
	}
}

iBookingRSData.prototype.buildSelector = function( el, type )
{
	if( el )
	{
		switch( type )
		{
		case "hotels":
		{
			var k = 0;
			for( var i = 0; i < this.hotels.length; ++i )
			if(
			    this.hotels[i].id && this.hotels[i].id != "null" && this.hotels[i].id != " " &&
			    this.hotels[i].name && this.hotels[i].name != "null" && this.hotels[i].name != " "
			  )
			{
				el.options[k + 1] = new Option( this.hotels[i].name, this.hotels[i].id );
				++k;
			}
			break;
		}
		case "towns":
		{
		        var k = 0;
		        for( var i = 0; i < this.towns.length; ++i )
		        if( this.towns[i].id && this.towns[i].id != "null" && this.towns[i].id != " " )
		        {
		        	el.options[k + 1] = new Option( this.towns[i].id, this.towns[i].id );
		        	++k;
		        }
		        break;
		}
		case "adults":
		{
			for( var i = 1; i < this.maxAdults; ++i )
				el.options[i] = new Option( i + 1, i + 1 );
			break;
		}
		case "rooms":
		{
			for( var i = 1; i < this.maxRooms; ++i )
				el.options[i] = new Option( i + 1, i + 1 );
			break;
                }
                case "mealPlans":
                {
                	var k = 0;
                	for( var i = 1; i < this.mealPlans.length; ++i )
                	{
                		if (this.mealPlans[i].id && this.mealPlans[i].id != "null" && this.mealPlans[i].id != " ")
                		{
                			el.options[k + 1] = new Option(this.mealPlans[i].name, this.mealPlans[i].id);
                			++k;
                		}
                		break;
                	}
		}
		}
	}
}

function ShowRemoteSearchPopup(search_group_id, form1, form2, form3, lng)
{
    if( iBookingRSThisPtr )
    {
    	id_search_group = iBookingRSThisPtr.id_search_group;
    }
    else
    	id_search_group = search_group_id;

    var hotel_location = "";
    var hotel_region = "";
    var hotel_classification = "";
    var hotel_town = "";

    if (form1)
    {
        if (form1.hotel_location)
        {
            hotel_location = escape(form1.hotel_location.value);
        }

        if (form1.hotel_region)
        {
            hotel_region = escape(form1.hotel_region.value);
        }

        if (form1.hotel_classification)
        {
            hotel_classification = escape(form1.hotel_classification.value);
        }

        if (form1.hotel_town)
        {
            hotel_town = escape(form1.hotel_town.value);
        }
    }

    var curDate = new Date();
    var day = ( form2 && form2.arrival_day ) ? form2.arrival_day.value : curDate.getDate();
    var month = ( form2 && form2.arrival_date ) ? form2.arrival_date.value.substr(4, 2) : ( curDate.getMonth() + 1 );
    var year = ( form2 && form2.arrival_year ) ? form2.arrival_year.value : ( curDate.getYear() );

    var nights = ( form3 && form3.nights ) ? form3.nights.value : 1;
    var rooms = ( form3 && form3.rooms ) ? form3.rooms.value : 1;
    var adults = ( form3 && form3.adults ) ? form3.adults.value : 1;

    var url = 'http://hotelapp.ibooking.com/hotel_net/search/Search.aspx?id_search_group=' + escape(id_search_group);
    url += "&town=" + hotel_town + "&classification=" + hotel_classification + "&region=" + hotel_region + "&location=" + hotel_location;
    url += "&day=" + escape( day ) + "&month=" + escape( month ) + "&year=" + escape( year );
    url += "&nights=" + escape( nights ) + "&quantity=" + escape( rooms ) + "&adults=" + escape( adults );
    url += "&t=" + ( new Date() ).getTime() + "&tp_site=Y";

    if (lng)
    {
        url += "&lng=" + escape(lng);
    }

    var newWin = window.open(url,'search','dependent=yes,width=600,height=610,titlebar=yes,top=0,left=0,scrollbars=yes');
}

function ShowHotelPopup(id_provider, form1, form2, form3, lng)
{
    var id_prov = !id_provider ? iBookingRSThisPtr.id_prov : id_provider;
    if (id_prov)
    {
        var id_mpln = (form1 && form1.meal_plan) ? escape(form1.meal_plan.value) : 0;
        var curDate = new Date();
        var day = ( form2 && form2.arrival_day ) ? form2.arrival_day.value : curDate.getDate();
        var month = ( form2 && form2.arrival_date ) ? form2.arrival_date.value.substr(4, 2) : ( curDate.getMonth() + 1 );
        var year = ( form2 && form2.arrival_year ) ? form2.arrival_year.value : ( curDate.getYear() );

        var nights = ( form3 && form3.nights ) ? form3.nights.value : 1;
        var rooms = ( form3 && form3.rooms ) ? form3.rooms.value : 1;
        var adults = ( form3 && form3.adults ) ? form3.adults.value : 1;

        var url = 'http://hotelapp.ibooking.com/hotel_net/ProcessExternalAction.aspx?command=start_from_tp_site&id_prov=' + escape(id_prov);

        if (id_mpln)
        {
            url += "&id_mpln=" + id_mpln;
        }

        url += "&start_date=" + escape( year + month + makeTwoDigit(day) );
        url += "&nights=" + escape( nights ) + "&quantity=" + escape( rooms ) + "&adults=" + escape( adults ) + "&childs=0";
        url += "&t=" + ( new Date() ).getTime() + "&tp_site=Y";

        if (lng)
        {
           url += "&lng=" + escape(lng);
        }

        var newWin = window.open(url,'search','dependent=yes,width=600,height=610,titlebar=yes,top=0,left=0,scrollbars=yes');
    }
}

function OnRemoteSearchButtonClick(form1, form2, form3, lng)
{
    switch (iBookingRSThisPtr.type)
    {
        case 0:
        {
            ShowRemoteSearchPopup(0, form1, form2, form3, lng);
        }
        break;

        case 1:
        {
            ShowHotelPopup(0, form1, form2, form3, lng);
        }
        break;

        case 2:
        {
            if (form1 && form1.hotel && parseInt(form1.hotel.value,10))
            {
                ShowHotelPopup(form1.hotel.value, form1, form2, form3, lng);
            }
            else
            {
                ShowRemoteSearchPopup(0, form1, form2, form3, lng);
            }
        }
        break;
    }
}

//
// type : 0 - remote_search
//        1 - provider
//        2 - provider group
//
function WriteRemoteSearchData( id_search_group, type, show_towns, id_provider_group)
{
        var id_provider = (type == 1 ? id_search_group : 0);

	var result = "";
    	result += "<script type=\"text/javascript\">\
        	var remote_search_hotels = new Array();\
        	var remote_search_max_rooms = 1;\
        	var remote_search_max_adults = 1;\
        	var remote_search_meal_plans = new Array();\
        	var remote_search_towns = new Array();\
        	</script>";

        var url = "http://hotelapp.ibooking.com/remote_search_info.asp";

        var show_towns_param = "";
        if (show_towns == 2)
        {
            show_towns_param = "&show_hotels=1";
        }
        else
        {
            show_towns_param = "&show_towns=1";
        }


        switch(type)
        {
            case 1:
            {
                url += "?provider_id=" + id_provider;
            }
            break;

            case 2:
            {
                url += "?provider_group_id=" + id_provider_group;
            }
            break;

            default:
            {
                url += "?search_group_id=" + id_search_group + show_towns_param;
            }
        }

        var constructor_params  = "";
        switch(type)
        {
            case 1:
            {
                constructor_params = "0, " + id_provider;
            }
            break;

            case 2:
            {
                constructor_params = id_search_group + ", 0, " + id_provider_group
            }
            break;

            default:
            {
                constructor_params = id_search_group;
            }
        }

        if (show_towns == 2)
        {
            constructor_params = id_search_group + ", 0, 1, 2";
        }

        result += "<script type=\"text/javascript\" src=\"" + url + "\"></script>";
	result += "<script type=\"text/javascript\">remoteSearchData = new iBookingRSData(" + constructor_params + ");</script>";
	document.write(result);

	result = "<script type=\"text/javascript\">\
		if( remote_search_hotels     ) remoteSearchData.hotels    = remote_search_hotels;\
		if( remote_search_max_rooms  ) remoteSearchData.maxRooms  = remote_search_max_rooms;\
		if( remote_search_meal_plans ) remoteSearchData.mealPlans = remote_search_meal_plans;\
		if( remote_search_max_adults ) remoteSearchData.maxAdults = remote_search_max_adults;\
		if( remote_search_towns      ) remoteSearchData.towns     = remote_search_towns;\
		</script>";

	document.write( result );
}

function UpdateSelectors( form1, form2, form3 )
{
	if( remote_search_hotels )
		iBookingRSThisPtr.hotels = remote_search_hotels;
	if( remote_search_max_rooms )
		iBookingRSThisPtr.maxRooms = remote_search_max_rooms;
	if( remote_search_max_adults )
		iBookingRSThisPtr.maxAdults = remote_search_max_adults;
	if( remote_search_meal_plans )
		iBookingRSThisPtr.mealPlans = remote_search_meal_plans;
	if( remote_search_towns )
		iBookingRSThisPtr.towns     = remote_search_towns;

	if( form1 && form1.hotel_location)
		iBookingRSThisPtr.buildSelector( form1.hotel_location, "hotels" );

	if( form1 && form1.hotel )
	        iBookingRSThisPtr.buildSelector( form1.hotel, "hotels" );

	if( form1 && form1.hotel_town )
	        iBookingRSThisPtr.buildSelector( form1.hotel_town, "towns" );

        if( form1 && form1.meal_plan )
        	iBookingRSThisPtr.buildSelector( form1.meal_plan, "meal_plans" );

	if( form3 && form3.nights )
		for( var i = 0; i < 28; ++i )
			form3.nights.options[i] = new Option( i + 1, i + 1 );
	
	if( form3 && form3.rooms )
		iBookingRSThisPtr.buildSelector( form3.rooms, "rooms" );
	if( form3 && form3.adults )
		iBookingRSThisPtr.buildSelector( form3.adults, "adults" );
}

function makeTwoDigit(inValue)
{
    var numVal = parseInt(inValue, 10);

    if (numVal < 10)
	{

        return("0" + numVal);
    }
    else
	{
        return numVal;
    }
}