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);
    date.setDate(parseInt(dateValue.substr(0,2), 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;
    }
}