﻿
var SearchBox = new function () {

	var me = this;
	var dayIndex = 0;
	var monthIndex = 1;
	var yearIndex = 2;
	var oldCountry;
	var oldDestination;
	var oldResort;
	var oldDeparturePoint;
	var oldVariance;
	var oldDuration;
	var oldStarRating;
	var oldBoardTypes;
	var cache = {};
	//var cacheInterval = 1000 * 60 * 10;
	//var cacheTimerId = setInterval(function () { cache = {}; }, cacheInterval);
	var cacheHandleXML = 'searchcriteria';
	var _optionHTML = '<option></option>';


	this.init = function () {
	};

	this.GetTodaysDate = function () {
		var d = new Date();
		return new Date(d.getFullYear(), d.getMonth(), d.getDate());
	}

	this.isLesserThanToday = function (dateToCompare) {
		return dateToCompare < me.GetTodaysDate();
	}

	this.GetCriteria = function (callback) {
		log('GetCriteria');
		jQuery.ajax({
			type: 'GET',
			url: '/XMLDataFiles_Ajax/SearchCriteria.xml',
			dataType: 'xml',
			success: function (xml) {
				cache[cacheHandleXML] = xml;
				callback(xml);
			},

			error: function (jqXHR, textStatus, errorThrown) {
				log('error in SearchBox.GetCriteria')
				log('jqXHR:', jqXHR);
				log('textStatus:', textStatus);
				log('errorThrown:', errorThrown);
			}
		});
	}

	this.buildDropdownOptions = function (current, code, value) {
		return jQuery(_optionHTML)
        .val(jQuery(current).attr(code))
        .html(jQuery(current).attr(value));
	}

	this.buildDefaultDropdownOption = function (defaultCode, defaultValue) {
		return jQuery(_optionHTML).val(defaultCode).html(defaultValue);
	}

	this.FillCountry = function (xml) {
		jQuery('#HolidaySearch_ddlCountry option').remove();
		var _ddlCountry = jQuery('#HolidaySearch_ddlCountry');

		jQuery(xml).find('country').each(function () {
			_ddlCountry.append(me.buildDropdownOptions(this, 'countrycode', 'countryname'));
		});
	}

	this.SelectCountry = function (selectedValue, xml, fillCountry) {
		var _ddlCountry = jQuery('#HolidaySearch_ddlCountry');
		if (fillCountry) {
			me.FillCountry(xml);
		}
		_ddlCountry[0].value = selectedValue;
	}

	this.FillDestination = function (xml) {
		jQuery('#HolidaySearch_ddlDestination option').remove();
		var _ddlCountry = jQuery('#HolidaySearch_ddlCountry');
		var _ddlDestination = jQuery('#HolidaySearch_ddlDestination');

		jQuery(xml).find('destination').each(function () {
			if (jQuery(this).attr('countrycode') == _ddlCountry.val()) {
				_ddlDestination.append(me.buildDropdownOptions(this, 'destinationcode', 'destinationname'));
			}
		});
	}

	this.SelectDestination = function (selectedValue, xml, fillDestination) {
		var _ddlDestination = jQuery('#HolidaySearch_ddlDestination');
		if (fillDestination) {
			me.FillDestination(xml);
		}
		_ddlDestination[0].value = selectedValue;
	}

	this.FillResort = function (xml) {
		jQuery('#HolidaySearch_ddlResort option').remove();
		var _ddlCountry = jQuery('#HolidaySearch_ddlCountry');
		var _ddlDestination = jQuery('#HolidaySearch_ddlDestination');
		var _ddlResort = jQuery('#HolidaySearch_ddlResort');

		_ddlResort.append(jQuery(_optionHTML)
            .val(0)
            .html(Constants.default_Selected_Resort));
		jQuery(xml).find('resort').each(function () {
			if (jQuery(this).attr('countrycode') == _ddlCountry.val()) {
				if (jQuery(this).attr('destinationcode') == _ddlDestination.val()) {
					jQuery('#HolidaySearch_ddlResort')
                    .append(me.buildDropdownOptions(this, 'resortcode', 'resortname'));
				}
			}
		});
	}

	this.SelectResort = function (selectedValue, xml, fillResort) {
		var _ddlResort = jQuery('#HolidaySearch_ddlResort');
		if (fillResort) {
			me.FillResort(xml);
		}
		_ddlResort[0].value = selectedValue;
	}

	this.FillDepartureAirport = function (xml) {
		jQuery('#HolidaySearch_ddlDeparturePoint option').remove();
		var _ddlDeparturePoint = jQuery('#HolidaySearch_ddlDeparturePoint');
		jQuery(xml).find('departureairport').each(function () {
			_ddlDeparturePoint.append(me.buildDropdownOptions(this, 'airportcode', 'airportname'));
		});
	}

	this.SelectDepartureAirport = function (selectedValue, xml, fillDepartureAirport) {
		var _ddlDepartureAirport = jQuery('#HolidaySearch_ddlDeparturePoint');
		if (fillDepartureAirport) {
			me.FillDepartureAirport(xml);
		}
		_ddlDepartureAirport[0].value = selectedValue;
	}

	this.SelectCalanderDate = function (monthYearID, dayID, day, month, year) {
		document.getElementById(monthYearID).value = month + '_' + year;
		CalendarDateChange(document.getElementById(monthYearID));
		document.getElementById(dayID).value = day;
	}

	this.FillDuration = function (xml) {
		jQuery('#HolidaySearch_ddlDuration option').remove();
		var _ddlDuration = jQuery('#HolidaySearch_ddlDuration');

		jQuery(xml).find('duration').each(function () {
			_ddlDuration.append(me.buildDropdownOptions(this, 'durationcode', 'duration'));
		});
	}

	this.SelectDuration = function (selectedValue, xml, fillDuration) {
		var _ddlDuration = jQuery('#HolidaySearch_ddlDuration');
		if (fillDuration) {
			me.FillDuration(xml);
		}
		_ddlDuration[0].value = selectedValue;
	}

	this.FillStarRating = function (xml) {
		jQuery('#HolidaySearch_ddlStarRating option').remove();
		var _ddlStarRating = jQuery('#HolidaySearch_ddlStarRating');
		_ddlStarRating.append(me.buildDefaultDropdownOption('0', Constants.default_Selected_StarRating));
		jQuery(xml).find('starrating').each(function () {
			_ddlStarRating.append(me.buildDropdownOptions(this, 'starratingcode', 'starrating'));
		});
	}

	this.SelectStarRating = function (selectedValue, xml, fillStarRating) {
		var _ddlStarRating = jQuery('#HolidaySearch_ddlStarRating');
		if (fillStarRating) {
			me.FillStarRating(xml);
		}
		_ddlStarRating[0].value = selectedValue;
	}

	this.FillVariance = function (xml) {
		jQuery('#HolidaySearch_variance option').remove();
		var _variance = jQuery('#HolidaySearch_variance');
		jQuery(xml).find('variance').each(function () {
			_variance.append(me.buildDropdownOptions(this, 'variancecode', 'variance'));
		});
	}

	this.SelectVariance = function (selectedValue, xml, fillVariance) {
		var _ddlVariance = jQuery('#HolidaySearch_variance');
		if (fillVariance) {
			me.FillVariance(xml);
		}
		_ddlVariance[0].value = selectedValue;
	}

	this.FillBoardTypes = function (xml) {
		jQuery('#HolidaySearch_ddlBoardType option').remove();
		var _ddlBoardType = jQuery('#HolidaySearch_ddlBoardType');
		_ddlBoardType.append(me.buildDefaultDropdownOption('0', Constants.default_Selected_Board));
		jQuery(xml).find('boardtypes').each(function () {
			_ddlBoardType.append(me.buildDropdownOptions(this, 'boardtypescode', 'boardtypes'));
		});
	}

	this.SelectBoardTypes = function (selectedValue, xml, fillBoardTypes) {
		var _ddlBoardTypes = jQuery('#HolidaySearch_ddlBoardType');
		if (fillBoardTypes) {
			me.FillBoardTypes(xml);
		}
		_ddlBoardTypes[0].value = selectedValue;
	}

	this.FillRooms = function (xml) {

		jQuery('#HolidaySearch_ddlRms option').remove();
		var _ddlRms = jQuery('#HolidaySearch_ddlRms');
		jQuery(xml).find('room').each(function () {
			_ddlRms.append(me.buildDropdownOptions(this, 'roomcode', 'room'));
		});
	}

	this.FillAdults = function (xml) {
		jQuery(xml).find('adult').each(function () {
			var maxRooms = jQuery(xml).find('room').length;
			var maxAdults = jQuery(this).attr('maxcount');
			var _ddlAdults;
			for (var i = 0; i < 3; i++) {
				_ddlAdults = jQuery('#HolidaySearch_ddlAdults' + (Number(i) + 1));
				for (var j = 0; j < maxAdults; j++) {
					_ddlAdults.append(jQuery(_optionHTML).val(Number(j) + 1).html(Number(j) + 1));
				}
			}
		});
	}

	this.FillChildren = function (xml) {
		jQuery(xml).find('children').each(function () {
			var maxRooms = jQuery(xml).find('room').length;
			var maxChildren = jQuery(this).attr('maxcount');
			var maxAge = jQuery(this).attr('maxage');
			var minAge = jQuery(this).attr('minage');
			var _ddlChildren;
			for (var i = 0; i < maxRooms; i++) {
				_ddlChildren = jQuery('#HolidaySearch_ddlChildren' + (Number(i) + 1));
				for (var j = 0; j < Number(maxChildren) + 1; j++) {
					_ddlChildren.append(jQuery(_optionHTML).val(j).html(j));
				}
				for (var k = 0; k < 3; k++) {
					var _ddlAge = jQuery('#HolidaySearch_ddlAge' + (Number(i) + 1) + (Number(k) + 1))
					for (var age = minAge; age < (Number(maxAge) + 1); age++) {
						_ddlAge.append(jQuery(_optionHTML).val(age).html(age));
					}
				}
			}
		});
	}

	this.FillRoomInfo = function (xml) {
		me.FillRooms(xml);
		me.FillAdults(xml);
		me.FillChildren(xml);
	}

	this.SelectRoomInfo = function (roomsRequired, occupancyStatus) {
		jQuery('#HolidaySearch_ddlRms')[0].value = roomsRequired;

		var aOccupancy = occupancyStatus.split('|');
		for (i = 0; i < aOccupancy.length; i++) {
			if (aOccupancy[i].length > 1) {
				var aRooms = aOccupancy[i].split(',');
				jQuery('#HolidaySearch_room' + aRooms[0]).show();
				jQuery('#HolidaySearch_ddlAdults' + aRooms[0])[0].value = aRooms[1];
				jQuery('#HolidaySearch_ddlChildren' + aRooms[0])[0].value = aRooms[2];
				if (aRooms[2] > 0) {
					for (j = 1; j < 4; j++) {
						jQuery('#HolidaySearch_ddlAge' + aRooms[0] + j)[0].value = aRooms[2 + j];
						if ((aRooms[2 + j] >= 0) && (jQuery('#HolidaySearch_ddlChildren' + i).val() >= j)) {
							jQuery('#HolidaySearch_ddlAge' + aRooms[0] + j).show();
							jQuery('#HolidaySearch_Labelage' + aRooms[0] + j).show();
						}
						else {
							jQuery('#HolidaySearch_ddlAge' + aRooms[0] + j).hide();
							jQuery('#HolidaySearch_Labelage' + aRooms[0] + j).hide();
						}
					}
					//what is this doing ?
					jQuery('#HolidaySearch_ddlAge' + aRooms[0] + 4).hide();
					jQuery('#HolidaySearch_age' + aRooms[0]).show();
				}

			}
		}
	}

	this.ShowDefaultRoomInfo = function () {
		for (var i = 1; i < 4; i++) {
			if (i == 1) {
				jQuery('#HolidaySearch_room' + (i)).show();
				//default adult count to 2 in room 1
				jQuery('#HolidaySearch_ddlAdults' + (i))[0].value = '2';
			} else {
				jQuery('#HolidaySearch_room' + (i)).hide();

			}
			jQuery('#HolidaySearch_age' + (i)).hide();

		}
	}

	this.fillDropDowns = function (xml) {
		me.FillCountry(xml);
		me.FillDestination(xml);
		me.FillResort(xml);
		me.FillDepartureAirport(xml);
		me.FillDuration(xml);
		me.FillStarRating(xml);
		me.FillBoardTypes(xml);
		me.FillVariance(xml);
		me.FillRoomInfo(xml);
		me.ShowDefaultRoomInfo();
	}

	// <Region text='Events'> -----------------------------------------

	this.OnCountryChanged = function () {
		if (cache[cacheHandleXML] === undefined) {
			me.GetCriteria(me.OnCountryChanged);
		} else {
			log('xml file :', cache[cacheHandleXML]);
			me.FillDestination(cache[cacheHandleXML]);
			me.FillResort(cache[cacheHandleXML]);
		}
	}

	this.OnDestinationChanged = function () {
		log(this);
		if (cache[cacheHandleXML] === undefined) {
			me.GetCriteria(me.OnDestinationChanged);
		} else {
			log('xml file :', cache[cacheHandleXML]);
			me.FillResort(cache[cacheHandleXML]);
		}
	}

	this.ShowHideElements = function (count, prefix) {
		for (var i = 0; i < 4; i++) {
			if ((i) < count) {

				jQuery('#' + prefix + (i + 1)).show();
			} else {
				jQuery('#' + prefix + (i + 1)).hide();
				jQuery('#HolidaySearch_age' + (i + 1)).hide();
			}
		}
	}


	this.ShowHideagedd = function (count, prefix, row, prefix2) {
		jQuery('#' + row).show();
		for (var i = 0; i < 4; i++) {
			if ((i) < count) {
				jQuery('#' + prefix2 + (i + 1)).show();
				jQuery('#' + prefix + (i + 1)).show();
			} else {
				jQuery('#' + prefix2 + (i + 1)).hide();
				jQuery('#' + prefix + (i + 1)).hide();
			}
		}
		if (count == 0) {
			jQuery('#' + row).hide();
		}
	}

		this.HideUnHideRoomInfo = function (isTrue) {
		var noOfRooms = jQuery('#HolidaySearch_ddlRms').val();
		var prefix = 'HolidaySearch_room';
		if (isTrue) {
			jQuery('#trRooms').show();
			jQuery('#trRoom1Text').css('color', '#FFFFFF')
			me.ShowHideElements(noOfRooms, 'HolidaySearch_room')
		}
		else {
			jQuery('#trRooms').hide();
			for (var i = 0; i < noOfRooms; i++) {
				if ((i + 1) == 1) {

					jQuery('#trRoom1Text').css('color', '#D6CA26')
				}
				else {
					jQuery('#' + prefix + (i + 1)).hide();
				}

			}
		}
	}
	this.FlightHotelchecked = function () {

		jQuery('#flighthoteltab').removeClass('InactiveTab').addClass('ActiveTab');
		jQuery('#hoteltab').removeClass('ActiveTab').addClass('InactiveTab');
		//
		jQuery('.search_mid').html("<p>Search Flight + Hotel</p>");
		jQuery('#divFlexibility').show();
		jQuery('#divDeparturePoint').show();
		document.getElementById('HolidaySearch_variance').value = 1;
		jQuery('.padtop3').addClass('tabchangeflight').removeClass('tabchangehotel');
		jQuery('#flighttab').removeClass('ActiveTab').addClass('InactiveTab');
		//
		//jQuery('#divResort').show();
		jQuery('#divStarRating').show();
		jQuery('#divBoardType').show();
		me.HideUnHideRoomInfo(true);
	};

	this.Hotelchecked = function () {
		jQuery('#divFlexibility').hide();
		jQuery('#divDeparturePoint').hide();
		//
		jQuery('.search_mid').html("<p>Search Hotel</p>");
		jQuery('#flighthoteltab').removeClass('ActiveTab').addClass('InactiveTab');
		jQuery('#hoteltab').removeClass('InactiveTab').addClass('ActiveTab');
		jQuery('.padtop3').addClass('tabchangehotel').removeClass('tabchangeflight');
		jQuery('#flighttab').removeClass('ActiveTab').addClass('InactiveTab');
		//
		//jQuery('#divResort').show();
		jQuery('#divStarRating').show();
		jQuery('#divBoardType').show();
		me.HideUnHideRoomInfo(true);
	};

	this.Flightchecked = function () {
		jQuery('#flighttab').removeClass('InactiveTab').addClass('ActiveTab');
		jQuery('#hoteltab').removeClass('ActiveTab').addClass('InactiveTab');
		jQuery('#flighthoteltab').removeClass('ActiveTab').addClass('InactiveTab');
		jQuery('.padtop3').addClass('tabchangehotel').removeClass('tabchangeflight');
		//
		jQuery('.search_mid').html("<p>Search Flight</p>");
		jQuery('#divFlexibility').show();
		jQuery('#divDeparturePoint').show();
		document.getElementById('HolidaySearch_variance').value = 1;
		//
		jQuery('#divResort').hide();
		jQuery('#divStarRating').hide();
		jQuery('#divBoardType').hide();
		me.HideUnHideRoomInfo(false);
	};

	//</Region> --------------------------------------------------------------------


	// <Region text='functions'> ---------------------------------------------------


	this.loadFromCookie = function (xml) {
		if (typeof (aSearchBoxCookieObj) !== 'undefined') {
			// select tab
			if (aSearchBoxCookieObj[Constants.QSKeySearchFor]) {
				switch (aSearchBoxCookieObj[Constants.QSKeySearchFor]) {
					case Constants.DealTypeFlight:
						me.Flightchecked();
						break;
					case Constants.DealTypeHotel:
						me.Hotelchecked();
						break;
					case Constants.DealTypeFlightAndHotel:
						me.FlightHotelchecked();
						break;
					default:
						me.FlightHotelchecked();
						break;
				}
			}
			else {
				me.FlightHotelchecked();
			}

			// fill country drop down
			if (aSearchBoxCookieObj[Constants.QSKeyCountryCode]) {
				me.SelectCountry(aSearchBoxCookieObj[Constants.QSKeyCountryCode], xml, true);
				oldCountry = aSearchBoxCookieObj[Constants.QSKeyCountryCode];
			}
			else {
				me.FillCountry(xml);
			}

			// fill destination drop down
			if (aSearchBoxCookieObj[Constants.QSKeyDestinationCode]) {
				me.SelectDestination(aSearchBoxCookieObj[Constants.QSKeyDestinationCode], xml, true);
				oldDestination = aSearchBoxCookieObj[Constants.QSKeyDestinationCode];
			}
			else {
				me.FillDestination(xml);
			}

			// fill resort
			if (aSearchBoxCookieObj[Constants.QSKeyLocationCode]) {
				me.SelectResort(aSearchBoxCookieObj[Constants.QSKeyLocationCode], xml, true);
				oldResort = aSearchBoxCookieObj[Constants.QSKeyLocationCode];
			}
			else {
				me.FillResort(xml);
			}

			//fill departure airport
			if (aSearchBoxCookieObj[Constants.QSKeyDepartureCode] || aSearchBoxCookieObj[Constants.QSKeyDepartureGroupID]) {
				// get departing code based on
				var departing;
				if (aSearchBoxCookieObj[Constants.QSKeyDepartureCode]) {
					departing = 'S_' + aSearchBoxCookieObj[Constants.QSKeyDepartureCode];
				}
				else {
					departing = 'G_' + aSearchBoxCookieObj[Constants.QSKeyDepartureGroupID];
				}
				me.SelectDepartureAirport(departing, xml, true);
				oldDeparturePoint = departing;
			}
			else {
				me.FillDepartureAirport(xml);
			}

			//fill departing date
			if (aSearchBoxCookieObj[Constants.QSKeyDepartureDate]) {
				var dateParts = aSearchBoxCookieObj[Constants.QSKeyDepartureDate].split('/');
				var cookieDate = new Date(dateParts[yearIndex], (dateParts[monthIndex] - 1), dateParts[dayIndex]);
				if (!me.isLesserThanToday(cookieDate)) {
					me.SelectCalanderDate('calDepartureDate_MonthYear', 'calDepartureDate_Day', dateParts[dayIndex], dateParts[monthIndex], dateParts[yearIndex]);
				}
			}

			// fill variance
			if (aSearchBoxCookieObj[Constants.QSKeyVariance]) {
				me.SelectVariance(aSearchBoxCookieObj[Constants.QSKeyVariance], xml, true);
				oldVariance = aSearchBoxCookieObj[Constants.QSKeyVariance];
			}
			else {
				me.FillVariance(xml);
			}

			//fill duration
			if (aSearchBoxCookieObj[Constants.QSKeyDuration]) {
				me.SelectDuration(aSearchBoxCookieObj[Constants.QSKeyDuration], xml, true);
				oldDuration = aSearchBoxCookieObj[Constants.QSKeyDuration];
			}
			else {
				me.FillDuration(xml);
			}

			//fill star rating
			if (aSearchBoxCookieObj[Constants.QSKeyStarRating]) {
				me.SelectStarRating(aSearchBoxCookieObj[Constants.QSKeyStarRating], xml, true);
				oldStarRating = aSearchBoxCookieObj[Constants.QSKeyStarRating];
			}
			else {
				me.FillStarRating(xml);
			}

			//fill board type
			if (aSearchBoxCookieObj[Constants.QSKeyBoardBasisID]) {
				me.SelectBoardTypes(aSearchBoxCookieObj[Constants.QSKeyBoardBasisID], xml, true);
				oldBoardTypes = aSearchBoxCookieObj[Constants.QSKeyBoardBasisID];
			}
			else {
				me.FillBoardTypes(xml);
			}

			//fill rooms
			me.FillRoomInfo(xml);
			me.ShowDefaultRoomInfo();
			if (aSearchBoxCookieObj[Constants.QSKeyRoomsRequired] && aSearchBoxCookieObj[Constants.QSKeyOccupancyStatus]) {
				me.SelectRoomInfo(aSearchBoxCookieObj[Constants.QSKeyRoomsRequired], aSearchBoxCookieObj[Constants.QSKeyOccupancyStatus]);
			}

		}
		else {
			me.fillDropDowns(xml);
		}

	}

	this.loadForCountryPage = function (xml) {
		if (typeof (aPageParams) !== 'undefined' && aPageParams[Constants.QSKeyCountryCode]) {
			me.SelectCountry(aPageParams[Constants.QSKeyCountryCode], xml, true);
			oldCountry = aPageParams[Constants.QSKeyCountryCode];
			me.FillDestination(xml);
			me.FillResort(xml);
			me.FillDepartureAirport(xml);
			me.FillDuration(xml);
			me.FillStarRating(xml);
			me.FillBoardTypes(xml);
			me.FillVariance(xml);
			me.FillRoomInfo(xml);
			me.ShowDefaultRoomInfo();
		}
		else {
			me.loadFromCookie(xml);
		}
	}

	this.loadForCityPage = function (xml) {
		if (typeof (aPageParams) !== 'undefined' && aPageParams[Constants.QSKeyCountryCode] && aPageParams[Constants.QSKeyCityCode]) {
			me.SelectCountry(aPageParams[Constants.QSKeyCountryCode], xml, true);
			oldCountry = aPageParams[Constants.QSKeyCountryCode];
			me.SelectDestination(aPageParams[Constants.QSKeyCityCode], xml, true);
			oldDestination = aPageParams[Constants.QSKeyCityCode];
			me.FillResort(xml);
			me.FillDepartureAirport(xml);
			me.FillDuration(xml);
			me.FillStarRating(xml);
			me.FillBoardTypes(xml);
			me.FillVariance(xml);
			me.FillRoomInfo(xml);
			me.ShowDefaultRoomInfo();
		}
		else {
			me.loadFromCookie(xml);
		}
	}

	this.loadForResortPage = function (xml) {
		if (typeof (aPageParams) !== 'undefined' && aPageParams[Constants.QSKeyCountryCode]
            && aPageParams[Constants.QSKeyCityCode]
            && aPageParams[Constants.QSKeyResortCode]) {
			me.SelectCountry(aPageParams[Constants.QSKeyCountryCode], xml, true);
			oldCountry = aPageParams[Constants.QSKeyCountryCode];
			me.SelectDestination(aPageParams[Constants.QSKeyCityCode], xml, true);
			oldDestination = aPageParams[Constants.QSKeyCityCode];
			me.SelectResort(aPageParams[Constants.QSKeyResortCode], xml, true);
			oldResort = aPageParams[Constants.QSKeyResortCode];

			me.FillDepartureAirport(xml);
			me.FillDuration(xml);
			me.FillStarRating(xml);
			me.FillBoardTypes(xml);
			me.FillVariance(xml);
			me.FillRoomInfo(xml);
			me.ShowDefaultRoomInfo();
		}
		else {
			me.loadFromCookie(xml);
		}
	}

	this.loadForHotelPage = function (xml) {
		if (typeof (aPageParams) !== 'undefined') {
			if (aPageParams[Constants.QSKeyCountryCode]) {
				me.SelectCountry(aPageParams[Constants.QSKeyCountryCode], xml, true);
				oldCountry = aPageParams[Constants.QSKeyCountryCode];
			}
			else {
				me.FillCountry(xml);
			}
			if (aPageParams[Constants.QSKeyCityCode]) {
				me.SelectDestination(aPageParams[Constants.QSKeyCityCode], xml, true);
				oldDestination = aPageParams[Constants.QSKeyCityCode];
			}
			else {
				me.FillDestination(xml);
			}

			if (aPageParams[Constants.QSKeyResortCode]) {
				me.SelectResort(aPageParams[Constants.QSKeyResortCode], xml, true);
				oldResort = aPageParams[Constants.QSKeyResortCode];
			}
			else {
				me.FillResort(xml);
			}
			me.FillDepartureAirport(xml);
			me.FillDuration(xml);
			me.FillStarRating(xml);
			me.FillBoardTypes(xml);
			me.FillVariance(xml);
			me.FillRoomInfo(xml);
			me.ShowDefaultRoomInfo();
		}
		else {
			me.loadFromCookie(xml);
		}
	}

	this.loadForSearchPages = function (xml) {
		me.loadFromCookie(xml);
	}

	this.loadByPageName = function (pageName, xml) {
		switch (pageName) {
			case Constants.PageNameHotelSearchResults:
				me.loadForSearchPages(xml);
				break;
			case Constants.PageNameFlightSearchResults:
				me.loadForSearchPages(xml);
				break;
			case Constants.PageNameHotelDetail:
				me.loadForHotelPage(xml);
				break;
			case Constants.PageNameCountryDetail:
				me.loadForCountryPage(xml);
				break;
			case Constants.PageNameCityDetail:
				me.loadForCityPage(xml);
				break;
			case Constants.PageNameResortDetail:
				me.loadForResortPage(xml);
				break;

			default:
				me.loadFromCookie(xml);
				break;
		}
	}

	this.FillDefault = function () {
		//log('FillDefault');
		var xml = cache[cacheHandleXML]
		//log('xml file :', xml);
		if (xml === undefined) {
			//log('xml file :');
			me.GetCriteria(me.FillDefault);
		} else {
			//log('xml file :', xml);
			if (strPageName) {
				me.loadByPageName(strPageName, xml);
			}
			else {
				me.loadFromCookie(xml);
			}
		}
	}

	this.GetManger = function () {
		//   alert('GetManger');
		//  debugger;
		return $find("ctl00_RadAjaxManagerGeneric");
		//return $find("RadAjaxManagerGeneric");
	}

	this.ValidateAndCreateURLToRedirect = function () {
		try {

			log(strPageName);
			var Year = document.getElementById('calDepartureDate_MonthYear').options[document.getElementById('calDepartureDate_MonthYear').selectedIndex].value.split("_")[1];
			var Month = document.getElementById('calDepartureDate_MonthYear').options[document.getElementById('calDepartureDate_MonthYear').selectedIndex].value.split("_")[0];
			var Day = document.getElementById('calDepartureDate_Day').options[document.getElementById('calDepartureDate_Day').selectedIndex].value;
			var inputDate = Day + '/' + Month + '/' + Year;
			var depcode, depgroupid;
			var hotelcode = "";

			if (!isDate(inputDate)) {
				return false;
			}

			//to uplaod 05th may 2011
			var d = new Date();
			var currentMonth = d.getMonth() + 1;
			var currentDay = d.getDate();
			var currentYear = d.getFullYear()

			if ((currentYear == Year) && (currentMonth == Month)) {
				if (currentDay > Day) {
					alert('Please make sure the Date is in the future');
					return false;
				}
			}

			var Url;
			var paramaters;
			var NumbersOfRooms = jQuery("#HolidaySearch_ddlRms").val();

			jQuery.query.REMOVE(Constants.QSKeyHotelCode);
			jQuery.query.REMOVE(Constants.QSKeyCountryCode);
			jQuery.query.REMOVE(Constants.QSKeyCityCode);
			jQuery.query.REMOVE(Constants.QSKeyResortCode);
			jQuery.query.REMOVE(Constants.QSKeyDuration);
			jQuery.query.REMOVE(Constants.QSKeyDestinationCode);
			jQuery.query.REMOVE(Constants.QSKeyLocationCode);
			jQuery.query.REMOVE(Constants.QSKeyCheckInDate);
			jQuery.query.REMOVE(Constants.QSKeyStarRating);
			jQuery.query.REMOVE(Constants.QSKeyBoardBasisID);
			jQuery.query.REMOVE(Constants.QSKeyRoomsRequired);
			jQuery.query.REMOVE(Constants.QSKeyAdults);
			jQuery.query.REMOVE(Constants.QSKeyChildren);
			jQuery.query.REMOVE(Constants.QSKeyOccupancyStatus);
			jQuery.query.REMOVE(Constants.QSKeySearchFor);
			jQuery.query.REMOVE(Constants.QSKeyFlightID);
			jQuery.query.REMOVE(Constants.QSKeyHotelID);
			jQuery.query.REMOVE(Constants.QSKeyVariance);
			jQuery.query.REMOVE(Constants.QSKeyOfferID);
			jQuery.query.REMOVE(Constants.QSKeyDepartureDate);
			jQuery.query.REMOVE(Constants.QSKeyDepartureCode);
			jQuery.query.REMOVE(Constants.QSKeyDepartureGroupID);
			jQuery.query.REMOVE(Constants.QSKeyCampaignCode);
			jQuery.query.REMOVE(Constants.QSKeyIsOnTest);
			jQuery.query.REMOVE(Constants.QSKeyVideoPath);
			jQuery.query.REMOVE(Constants.QSKeyref);
			jQuery.query.REMOVE(Constants.QSKeyXMLServiceStatus);
			jQuery.query.REMOVE(Constants.QSKeyFlightServiceSupplierCode);
			jQuery.query.REMOVE(Constants.QSTabName);
			jQuery.query.REMOVE(Constants.QSSearchRequestId);

			var AdultCount = 0;
			var ChildrenCount = 0;
			var maxChildrenCount = 3;
			var occupancyString = NumbersOfRooms + '|';
			var count;
			for (count = 0; count < Number(NumbersOfRooms); count++) {

				if (AdultCount < Number(jQuery("#HolidaySearch_ddlAdults" + (Number(count) + 1)).val())) {
					AdultCount = Number(jQuery("#HolidaySearch_ddlAdults" + (Number(count) + 1)).val());
				}
				if (ChildrenCount < Number(jQuery("#HolidaySearch_ddlChildren" + (Number(count) + 1)).val())) {
					ChildrenCount = Number(jQuery("#HolidaySearch_ddlChildren" + (Number(count) + 1)).val());
				}
				occupancyString = occupancyString + (count + 1) + ',' + Number(jQuery("#HolidaySearch_ddlAdults" + (Number(count) + 1)).val()) + ',' + Number(jQuery("#HolidaySearch_ddlChildren" + (Number(count) + 1)).val());
				var innerLoopCount = 0

				for (innerLoopCount; innerLoopCount < maxChildrenCount; innerLoopCount++) {
					if (innerLoopCount < Number(Number(jQuery("#HolidaySearch_ddlChildren" + (Number(count) + 1)).val()))) {
						occupancyString = occupancyString + ',' + jQuery("#HolidaySearch_ddlAge" + (Number(count) + 1) + ((Number(innerLoopCount) + 1))).val();
					}
					else {
						occupancyString = occupancyString + ',0';
					}
				}
				occupancyString = occupancyString + "|"
			}
			//
			if (typeof (aPageParams) !== 'undefined') {
				//console.log("loadForHotelPage");
				if (aPageParams[Constants.QSKeyGDSID] && aPageParams[Constants.QSKeyAccommodationID]) {
					if (aPageParams[Constants.QSKeyCountryCode] && aPageParams[Constants.QSKeyCityCode]) {
						hotelcode = "&" + Constants.QSKeyHotelCode + "=" + aPageParams[Constants.QSKeyGDSID] + ";" + aPageParams[Constants.QSKeyAccommodationID];
					}					
				}
			}
			//
			if (jQuery('#flighthoteltab').hasClass('ActiveTab')) {
				var splitresult = jQuery("#HolidaySearch_ddlDeparturePoint").val().split("_");
				if (splitresult[0] == "G") {
					depgroupid = splitresult[1];
					depcode = "";
				}
				else {
					depgroupid = "";
					depcode = splitresult[1];
				}

				Url = host + Constants.PageNameFlightSearchResults;
				//
				var depDetail = "&";
				if (depcode != "") {
					depDetail = depDetail + Constants.QSKeyDepartureCode + "=" + depcode;
				}
				else if (depgroupid != "") {
					depDetail = depDetail + Constants.QSKeyDepartureGroupID + "=" + depgroupid;
				}
				//
				paramaters = jQuery.query.set(Constants.QSKeyCountryCode, jQuery('#HolidaySearch_ddlCountry').val())
                .set(Constants.QSKeyDestinationCode, jQuery("#HolidaySearch_ddlDestination").val())
                .set(Constants.QSKeyLocationCode, jQuery("#HolidaySearch_ddlResort").val())
                .set(Constants.QSKeyCheckInDate, inputDate)
                .set(Constants.QSKeyDepartureDate, inputDate)
                .set(Constants.QSKeyVariance, jQuery("#HolidaySearch_variance").val())
                .set(Constants.QSKeyDuration, jQuery("#HolidaySearch_ddlDuration").val())
                .set(Constants.QSKeyStarRating, jQuery("#HolidaySearch_ddlStarRating").val())
                .set(Constants.QSKeyBoardBasisID, jQuery("#HolidaySearch_ddlBoardType").val())
                .set(Constants.QSKeyRoomsRequired, NumbersOfRooms)
                .set(Constants.QSKeyAdults, AdultCount)
                .set(Constants.QSKeyChildren, ChildrenCount)
                .set(Constants.QSKeyOccupancyStatus, occupancyString)
                .set(Constants.QSKeySearchFor, Constants.DealTypeFlightAndHotel)
								.toString();
				paramaters = paramaters + depDetail + hotelcode;
			}
			else if (jQuery('#hoteltab').hasClass('ActiveTab')) {
				var defaultDepPoint = 'LGW';
				Url = host + Constants.PageNameHotelSearchResults;
				//
				paramaters = jQuery.query.set(Constants.QSKeyCountryCode, jQuery('#HolidaySearch_ddlCountry').val())
                    .set(Constants.QSKeyDestinationCode, jQuery("#HolidaySearch_ddlDestination").val())
                    .set(Constants.QSKeyLocationCode, jQuery("#HolidaySearch_ddlResort").val())
                    .set(Constants.QSKeyDepartureCode, defaultDepPoint)
                    .set(Constants.QSKeyCheckInDate, inputDate)
                    .set(Constants.QSKeyVariance, jQuery("#HolidaySearch_variance").val())
                    .set(Constants.QSKeyDuration, jQuery("#HolidaySearch_ddlDuration").val())
                    .set(Constants.QSKeyStarRating, jQuery("#HolidaySearch_ddlStarRating").val())
                    .set(Constants.QSKeyBoardBasisID, jQuery("#HolidaySearch_ddlBoardType").val())
                    .set(Constants.QSKeyRoomsRequired, NumbersOfRooms)
                    .set(Constants.QSKeyAdults, AdultCount)
                    .set(Constants.QSKeyChildren, ChildrenCount)
                    .set(Constants.QSKeyOccupancyStatus, occupancyString)
                    .set(Constants.QSKeySearchFor, Constants.DealTypeHotel)
                    .toString();

				paramaters = paramaters + hotelcode;
			}
			else if (jQuery('#flighttab').hasClass('ActiveTab')) {
				var splitresult = jQuery("#HolidaySearch_ddlDeparturePoint").val().split("_");
				if (splitresult[0] == "G") {
					depgroupid = splitresult[1];
					depcode = "";
				}
				else {
					depgroupid = "";
					depcode = splitresult[1];
				}

				Url = host + Constants.PageNameFlightSearchResults;
				//
				var depDetail = "&";
				if (depcode != "") {
					depDetail = depDetail + Constants.QSKeyDepartureCode + "=" + depcode;
				}
				else if (depgroupid != "") {
					depDetail = depDetail + Constants.QSKeyDepartureGroupID + "=" + depgroupid;
				}
				//
				paramaters = jQuery.query.set(Constants.QSKeyCountryCode, jQuery('#HolidaySearch_ddlCountry').val())
                .set(Constants.QSKeyDestinationCode, jQuery("#HolidaySearch_ddlDestination").val())
                .set(Constants.QSKeyDepartureDate, inputDate)
                .set(Constants.QSKeyCheckInDate, inputDate)
                .set(Constants.QSKeyVariance, jQuery("#HolidaySearch_variance").val())
                .set(Constants.QSKeyDuration, jQuery("#HolidaySearch_ddlDuration").val())
                .set(Constants.QSKeyAdults, AdultCount)
                .set(Constants.QSKeyChildren, ChildrenCount)
                .set(Constants.QSKeyOccupancyStatus, occupancyString)
                .set(Constants.QSKeySearchFor, Constants.DealTypeFlight)
								.toString();
				paramaters = paramaters + depDetail;
			}
			//
			if (strPageName == 'SearchBox') {
				me.GetManger().ajaxRequest(Constants.AjaxKeySearchBoxButton + "^" + Url + paramaters + "^" + 'false');
				window.open(Url + paramaters, '_newtab');
			}
			else {
				if (jQuery('#flighthoteltab').hasClass('ActiveTab')) {
					WaitMessege.ShowHoldingPage(Constants.DealTypeFlightAndHotel);
				}
				else if (jQuery('#flighttab').hasClass('ActiveTab')) {
					WaitMessege.ShowHoldingPage(Constants.DealTypeFlight);
				}
				else {
					WaitMessege.ShowHoldingPage(Constants.DealTypeHotel);
				}
				me.GetManger().ajaxRequest(Constants.AjaxKeySearchBoxButton + "^" + Url + paramaters + "^" + 'true');
			}
		} catch (e) {
			log('error in validateandredirect:', e);
		}
		return false;
	}

	this.IFrameRedirect = function (strUrl) {
		try {
			//alert(strUrl);
			window.open(strUrl, '_newtab');
		} catch (e) {
			log('error in IFrameRedirect:', e);
		}
	}



	// </Region> -------------------------------------------------------------------
}


