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";



var id_provider;



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)

        {

            var selectObjLength = parseInt(selectObj.options.length,10) - 1;

            

            for(var k = selectObjLength; k >= 0; 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++

                }

                if (this.hotels.length > 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] = new Option( this.hotels[i].name, this.hotels[i].id );               

                        ++k;

                    }

                }

                else

                {

                    this.hotels[0] = id_provider;

                    el.options[k] = new Option( id_provider, id_provider );                   

                    el.parentNode.parentNode.parentNode.style.display = 'none';

                }

                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);

    }



    top.document.location =  "/bookonline.php?url=" + url;

    //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);

        }



        top.document.location =  "/bookonline.php?url=" + url;

        //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)

{

    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;

    }

}
