var minimumNights = 1;  
var maximumNights = 25;
var enableChildren = true;


var withOptionAll = true; // "true" - for show option "All" for hotels drop down list, "false" for hide.
var strAllHotels = "All";
var withOptionAllForMealPlan = true; // "true" - for show option "Any" for Meal Plan  drop down list, "false" for hide.
var strAnyMealPlan = "Any"

function onHotelChange(hotelField)
{
    if (hotelField)
    {
        if (hotelField.value != "")
        {           
            var idProv = hotelField.value;
  
            if (hotelField.form && hotelField.form.meal_plan && remote_search_meal_plans)
            {
                var mealPlanObj = hotelField.form.meal_plan;
                
                var start = (withOptionAllForMealPlan) ? 1 : 0; 
                
                var length = mealPlanObj.options.length - 1;
                for(var j = length; j > start ; j--)
                {
                    mealPlanObj.removeChild(mealPlanObj.options[j]);
                }
                
                var k = start;
                for( var j = 0; j < remote_search_meal_plans[idProv].length; ++j )
                {
                    if (remote_search_meal_plans[idProv][j].id && remote_search_meal_plans[idProv][j].id != "null")
                    {
                        mealPlanObj.options[k] = new Option(remote_search_meal_plans[idProv][j].name, remote_search_meal_plans[idProv][j].id);                      
                    }       
                    k++;
                }
            }
            
            // children         
            if (remote_search_children && remote_search_max_occupancy)
            {
                updateChildren(remote_search_children[idProv], idProv, "childRow", "children", "childAge", remote_search_max_occupancy);
            }
        }
        else
        {
            // children         
            if (remote_search_children && remote_search_max_occupancy)
            {
                if (typeof(hotelField.options[1].value) != "undefined" && hotelField.options[1].value != 0)
                {
                    var idProv = hotelField.options[1].value;	 
                                                   
                    updateChildren(remote_search_children[idProv], idProv, "childRow", "children", "childAge", remote_search_max_occupancy);
                }
            }
        }       
    }
}

function updateChildren( children, idProv, blockName, selectName, ageName, maxOccupancy )
{
    for(var j = 1; j <=3; j++)
    {
        var blockObj = document.getElementById("" + blockName + j);
        if (blockObj)
        {
            blockObj.style.display = 'none';
        }
        
        var selectObj = document.getElementById("" + selectName + j);
        if (selectObj)
        {
            for(var k = 0; k < selectObj.options.length ; k++)
            {
                selectObj.removeChild(selectObj.options[k]);
            }
        }
    }
    if (children != null)
    {       
        for(var j in children)
        {
            if (children[j] != null && parseInt(children[j],10) > 0)
            {
                var blockObj = document.getElementById("" + blockName + j);
                if (blockObj)
                {
                    blockObj.style.display = '';
                }
                var selectObj = document.getElementById("" + selectName + j);
                if (selectObj)
                {           
                    for(var k = 0; k <= maxOccupancy ; k++)
                    {
                        selectObj.options[k] = new Option(k, k);                        
                    }
                }               
            }           
        }
        
        for(var j = 1; j <= 3; j++)
        {
            var last = 0;
            if (typeof(children[j+1]) != "undefined")
            {
                last = children[j+1];
            }       
            
            if (children[j] && children[j] > 0)
            {
                var ageObj = document.getElementById("" + ageName + j);
                if (ageObj)
                {
                    ageObj.innerHTML = '[Age ' + children[j] + ' - ' + last + ']';
                }               
            }
        }
    }
}

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(dateValue.substr(3,2));
    date.setMonth(date.getMonth() - 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();
    }
    
    this.children = new Array();    
}

iBookingRSData.prototype.buildSelector = function( el, type )
{
	if( typeof(defaultAdultsValue) != 'undefined' ) 
		remoteSearchData.defaultAdultsValue = defaultAdultsValue; 

    if( el )
    {
        switch( type )
        {
            case "hotels":
            {
                var k = 0;
                if (typeof(withOptionAll) != undefined && withOptionAll == true)
                {
                    el.options[k] = new Option( strAllHotels, "" );             
                    k++
                }
                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] = 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 = 0; i < this.maxAdults; ++i )
					{
                        el.options[i] = new Option( i + 1, i + 1 );
						if (typeof(this.defaultAdultsValue) != "undefined" && this.defaultAdultsValue != null)
						{
							if ( i+1 == parseInt(this.defaultAdultsValue,10))
							el.selectedIndex = i;
						}
					}
                    break;
            }
            case "rooms":
            {
                for( var i = 0; i < this.maxRooms; ++i )
                    el.options[i] = new Option( i + 1, i + 1 );
                break;                        
            }
            case "mealPlans":
            {
                var k = 0;          
                if (withOptionAllForMealPlan)
                {
                    el.options[k] = new Option( strAnyMealPlan, "");
                    ++k;
                }
                
                for( var i in this.mealPlans)
                {   
                    for( var j = 0; j < this.mealPlans[i].length; ++j )
                    {
                        if (this.mealPlans[i][j].id && this.mealPlans[i][j].id != "null")
                        {
                            el.options[k] = new Option(this.mealPlans[i][j].name, this.mealPlans[i][j].id);
                            ++k;
                        }                   
                    }
                }
                
                if(el.form.hotel )
                    onHotelChange(el.form.hotel);
                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 domainUrl = 'http://hotelapp.ibooking.com'; 
    
    var url = domainUrl +'/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 ) + getChildsString(form3);
    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 getChildsString(form3)
{
	var child1 = (form3 && form3.children1 && form3.children1.value != "") ? form3.children1.value : 0;
	var child2 = (form3 && form3.children2 && form3.children2.value != "") ? form3.children2.value : 0;
	var child3 = (form3 && form3.children3 && form3.children3.value != "") ? form3.children3.value : 0;
	
	var childs_string = "";
	
	if (child1 != 0)
	{
		childs_string += "&childs1=" + child1;
	}
	if (child2 != 0)
	{
		childs_string += "&childs2=" + child2;
	}
	if (child3 != 0)
	{
		childs_string += "&childs3=" + child3;
	}
	return childs_string;
}

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 domainUrl = 'http://hotelapp.ibooking.com';
            
        var url =  domainUrl +'/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 ) + getChildsString(form3);
        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_max_occupancy = 1;\
            var remote_search_meal_plans = new Array();\
            var remote_search_children = new Object();\
            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";
        }

        url += "&show_children_groups=1&show_meal_plans=1";
        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_max_occupancy ) remoteSearchData.maxOccupancy = remote_search_max_occupancy;\
        if( remote_search_towns      ) remoteSearchData.towns     = remote_search_towns;\
        if( remote_search_children   ) remoteSearchData.children  = remote_search_children;\
        </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, "mealPlans" );
        
    if( form3 && form3.nights )
    {
        var beginNights = 1;
        if (typeof(minimumNights) != "undefined" && minimumNights != null)
        {
            beginNights = minimumNights;
        }
        var endNights = 28;
        if (typeof(maximumNights) != "undefined" && maximumNights != null)
        {
            endNights = maximumNights;
        }
        
        for( var i = 0; i < endNights; ++i )
            form3.nights.options[i] = new Option( i + beginNights, i + beginNights );
    }
    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;
    }
}