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 + 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))
            {
                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" );
}
