var filters_hidden = 1;

var search_time_elapsed = 0;
var start_sletoh_time;
var sletoh_request_status = "not_started";
var sletoh_search_progress = 0;
var sletoh_search_id = 0;
var search_id = 0;
var sletoh_search_hotels_available = 0;
var sletoh_xml_timeout = 30000; //(30 seconds) 
var error_message = '';
var map_loaded = false;
var photos_loaded = false;
var reviews_loaded = false;

var hotel_images = new Array();



//=====================================================================================

function jsError(mess) {
	// all of the 'catch' blocks call this function with a error number message.
	// if things are not working, put an alert in here.
	
	//alert(mess) ;
}



//=====================================================================================

function my_event_tracker(str_category, str_action, str_optional_label, int_optional_value)
{
	try{
		if (typeof int_optional_value == 'undefined'){
			pageTracker._trackEvent(str_category, str_action, str_optional_label);
		}
		else {
			pageTracker._trackEvent(str_category, str_action, str_optional_label, int_optional_value);
		}
	}
	catch(e) { 
		jsError("Error in my_event_tracker()\ncategory:"+str_category+"\naction:"+str_action+"\noptional_label:"+str_optional_label+"\noptional_value:"+int_optional_value);
	}
	
	return;
}









//=====================================================================================
//=====================================================================================

function set_active_tab(tab_type) 
{
	var active_tab; 
	active_tab = gup('tab'); 
	if (active_tab != '') {
		setTimeout('activate_tab("'+tab_type+'", "'+active_tab+'");', 1000); 
	}
	return;
}







//=====================================================================================
// Activate tab on hotel page or on overlay (tab_type=inpage or overlay)
//=====================================================================================

function activate_tab(tab_type, active_tab)
{
	var description_div_element = $("hotel_" + tab_type + "_description");
	var reviews_div_element = $("hotel_" + tab_type + "_reviews");
	var prices_div_element = $("hotel_" + tab_type + "_prices");
	var map_div_element = $("hotel_" + tab_type + "_map");
	var photos_div_element = $("hotel_" + tab_type + "_photos");
	
	var description_div_button_element = $("hotel_" + tab_type + "_description_button");
	var reviews_div_button_element = $("hotel_" + tab_type + "_reviews_button");
	var prices_div_button_element = $("hotel_" + tab_type + "_prices_button");
	var map_div_button_element = $("hotel_" + tab_type + "_map_button");
	var photos_div_button_element = $("hotel_" + tab_type + "_photos_button");
	
	var active_tab_div = $("hotel_" + tab_type + "_" + active_tab);
	var active_tab_div_button = $("hotel_" + tab_type + "_" + active_tab + "_button");
	
	description_div_element.style.display = "none";
	reviews_div_element.style.display = "none";
	prices_div_element.style.display = "none";
	map_div_element.style.display = "none";
	photos_div_element.style.display = "none";
	
	description_div_button_element.className = "";
	reviews_div_button_element.className = "";
	prices_div_button_element.className = "";
	map_div_button_element.className = "";
	photos_div_button_element.className = "";
	
	active_tab_div_button.className='current';
	active_tab_div.style.display = "block";


	// Track tab changes on main site but not overlay
	if (tab_type == "inpage") {
		my_event_tracker('hotel_page', 'tabs', active_tab);
	}
	
	
	// When user clicks review tab on main site, show the write review form.
	if (active_tab == "reviews" && tab_type == "inpage") {
		show("div_write_review");
		show("div_supplier_reviews");
	}

	// When user clicks map tab on main site, load the map tab content.
	if (active_tab == "map" && tab_type == "inpage") {
		if (map_loaded == false) {
//			load_where_map();
			load_map(0,0);
			load_hotel_map($("where_id").value);
			map_loaded = true;
		}
	}
	
	// When user clicks photo tab on main site, load the photo tab content.
	if (active_tab == "photos" && tab_type == "inpage") {
		if (photos_loaded == false) {
			load_hotel_photos($("where_id").value);
			photos_loaded = true;
		}
	}

	// When user clicks reviews tab on main site, load the read reviews links. We do this to take the links off the page so search engines cannot spider them.
	if (active_tab == "reviews" && tab_type == "inpage") {
		if (reviews_loaded == false) {
			refresh_read_reviews($("where_id").value);
			reviews_loaded = true;
		}
	}


	
	return;
}






//=====================================================================================

function check_availability_hotel(hotel_id, hotel_name, preset_search_form)
{
	//alert("check_availability_hotel() hotel_id=" + hotel_id);

  $('where_changed').value = 0;
	$("where_id").value = hotel_id;
	$("where_mode").value = "H";
	$("hotel_name").value = hotel_name;
	hide_overlay();

	if (preset_search_form == 1) {
	  show_search_tab('H');
		$("where_changed").value = 0; // show_search_tab changes sets to 1
		alert("\"" + hotel_name + "\" is now in the search form (top left of page).\n\nEnter your travel dates and click 'Compare Prices'.");
		show_search_form();
	}
  else {
		return validate_search_form_start_search();
	}
	
	return false;
}





//=====================================================================================

function check_availability_postcode(postcode_id, postcode_name)
{
  $('where_changed').value = 0;
	$("where_id").value = postcode_id;
	$("postcode_name").value = postcode_name;
	$("where_mode").value = "P";
	hide_overlay();
	return validate_search_form_start_search();
}







//=====================================================================================

function update_hotel_description(hotel_id, supplier_selector)
{
	var url = "ajax.php";
	var pars = 'action=update_hotel_description&hotel_id='+hotel_id+'&supplier_id='+supplier_selector.value;

	my_event_tracker('hotel_page', 'change_description', supplier_selector.value);

	var myAjax = new Ajax.Updater( 'hotel_inpage_description' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
	
}




//=====================================================================================
// Load photos from different suppliers
//=====================================================================================

function update_hotel_photos(hotel_id, supplier_selector)
{
	var url = "ajax.php";
	var pars = 'action=update_hotel_photos&hotel_id='+hotel_id+'&supplier_id='+supplier_selector.value;

	var myAjax = new Ajax.Updater( 'hotel_inpage_image_gallery' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}





//=====================================================================================
// Load photo page content (either a dropdown to choose supplier or set of photos)
//=====================================================================================

function load_hotel_photos(hotel_id)
{
	var url = "ajax.php";
	var pars = 'action=update_hotel_photos&hotel_id='+hotel_id+'&supplier_id=0';

	var myAjax = new Ajax.Updater( 'hotel_inpage_image_gallery' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}






//=====================================================================================
//=====================================================================================

function toggle_load_map()
{
	if ($('map').style.display == "block") {
		hide_load_map();
	}
	else {
		show_search_form();
	}
}


//=====================================================================================
//=====================================================================================

function toggle_map()
{
	//alert ("Starting toggle_map()");
	if ($('map').style.display == "block") {
		hide_map();
	}
	else {
		show_map();
	}
}



//=====================================================================================
//=====================================================================================

function show_map()
{
	//alert ("Starting show_map()");

	if ($('map').style.display == "none") {
		show('map');
		$('div_load_map').innerHTML = "Hide<br>map";
		if (map_loaded == false) {
			load_where_map();
		}
		my_event_tracker('map', 'show', '');

		// Adjust hotel results div height when viewing widget
		if (page_type_widget) {
			$('hotel_results').style.height = "420px";
		}
	}
}



//=====================================================================================
//=====================================================================================

function hide_map()
{
	//alert ("Starting hide_map()");

	if ($('map').style.display == "block") {
		hide('map');
		$('div_load_map').innerHTML = "Show<br>map";
		my_event_tracker('map', 'hide', '');

		// Adjust hotel results div height when viewing widget
		if (page_type_widget) {
			$('hotel_results').style.height = "670px";
		}
	}
}



//=====================================================================================
//=====================================================================================

function load_where_map()
{
	//alert ("Starting load_where_map()");

	map_loaded = true;
	
	where_mode = $("where_mode").value;
	where_id = $("where_id").value;
	try {
		search_id = $("search_id").value;
	}
	catch(err){}
	

	var url = "ajax.php";
	var pars = 'action=load_where_map&where_mode='+where_mode+'&where_id='+where_id+'&search_id='+search_id;

	var myAjax = new Ajax.Request( url,
							{ method: 'get',
							  parameters: pars,
							  onComplete: load_where_map_markers
							}
						 );
}



//=====================================================================================

function load_where_map_markers(originalRequest)
{
	//alert ("Starting start_load_region_map()");

	Try.these(
		function () { 
		
			var jsonObject = eval('(' + originalRequest.responseText + ')');
			
			landmark_details[where_id] = new Array();
			landmark_details[where_id]['name'] = jsonObject["where_object"][where_id]["name"];
			landmark_details[where_id]['link'] = jsonObject["where_object"][where_id]["link"];
			landmark_details[where_id]['address'] = jsonObject["where_object"][where_id]["address"];
			landmark_details[where_id]['type'] = jsonObject["where_object"][where_id]["type"];

			load_map(jsonObject["map_center_lat"], jsonObject["map_center_long"]);
			initialise_map(jsonObject["map_center_lat"], jsonObject["map_center_long"], where_id, jsonObject["where_object"][where_id]["type"]);

			add_hotel_markers(where_mode, where_id, search_id, 0, '');
		}
	);
}








//=====================================================================================
//=====================================================================================

function load_hotel_map(hotel_id)
{
	//alert ("Starting load_hotel_map()");
	
	var url = "ajax.php";
	var pars = "action=center_map_on_hotel&hotel_id="+hotel_id;
	var myAjax = new Ajax.Request( url,
								{ method: 'get',
								  parameters: pars,
								  onComplete: add_json_hotel_map_markers
								}
							 );
}




//=====================================================================================

function hotel_details_overlay(hotel_id, active_tab)
{
	show_overlay();

	my_event_tracker('hotel_details_overlay', 'open', active_tab);

	var url = "ajax.php";
	var pars = 'action=hotel_details_overlay&hotel_id='+hotel_id+'&active_tab='+active_tab;

	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );

}





//=====================================================================================
/*
function overlay_search_form(search_id)
{
	show_overlay();

	// todo - what action do we want to track here?
	//my_event_tracker('hotel_details_overlay', '', 'hotel_id='+hotel_id);

	var url = "ajax.php";
	var pars = 'action=overlay_search_form&search_id='+search_id;

	$('overlay_container_content').innerHTML = $('div_search_form_content').innerHTML;

}
*/




//=====================================================================================

function open_feedback_box()
{
	show_overlay();
	
	my_event_tracker('feedback', 'open_message_box', '');
	
	var url = "ajax.php";
	var pars = 'action=feedback_form';

	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}








//=====================================================================================

function send_feedback()
{
	var alert_message = "";
	var error = false;
	
	your_email_value = $F('your_email');
	
	/*
	if (your_email_value.length == 0)
	{
		alert_message += "Please enter your email address \n";
		error = true;
	}
	else if (!validate_email(your_email_value))
	{
		alert_message += "Your email address is not in a valid format \n";
		error = true;
	}
	*/
	
	if (!error)
	{
		your_email_value = encodeURIComponent(your_email_value);
		message_value = encodeURIComponent($F('message'));
		
		my_event_tracker('feedback', 'send', '');

		var url = "ajax.php";
		var pars = 'action=send_feedback&your_email='+your_email_value+'&message='+message_value;
		var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
								{ method: 'get',
								  parameters: pars
								}
							 );
	}
	else
	{
		my_event_tracker('feedback', 'send', alert_message);
		alert(alert_message);
	}

}







//=====================================================================================

function open_email_box(where_mode, where_id, search_id)
{
	show_overlay();
	
	if (search_id != '') {
		my_event_tracker('email_page', 'open_message_box', 'search_id='+search_id);
	}
	else {
		my_event_tracker('email_page', 'open_message_box', 'where_mode='+where_mode+'; where_id='+where_id);
	}
	
	
	var url = "ajax.php";
	var pars = 'action=tell_a_friend&where_mode='+where_mode+'&where_id='+where_id+'&search_id='+search_id;

	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}



//=====================================================================================

function send_friend_email()
{
	var alert_message = "";
	var error = false;
	
	your_email_value = $F('your_email');
	friend_email_value = $F('friend_email');
	
	if (your_email_value.length == 0)
	{
		alert_message += "Please enter Your email address \n";
		error = true;
	}
	else if (!validate_email(your_email_value))
	{
		alert_message += "Your email address is not in a valid format \n";
		error = true;
	}
	else if (friend_email_value.length == 0)
	{
		alert_message += "Please enter the To email address \n";
		error = true;
	}
	else if (!validate_email(friend_email_value))
	{
		alert_message += "The To email address is not in a valid format\n";
		error = true;
	}
	
	
	if (!error)
	{
		your_email_value = encodeURIComponent(your_email_value);
		friend_email_value = encodeURIComponent(friend_email_value);
		subject_value = encodeURIComponent($F('subject'));
		message_value = encodeURIComponent($F('message'));
		
		my_event_tracker('email_page', 'send', '');

		var url = "ajax.php";
		var pars = 'action=tell_a_friend_send&your_email='+your_email_value+'&friend_email='+friend_email_value+'&subject='+subject_value+'&message='+message_value;
		var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
								{ method: 'get',
								  parameters: pars
								}
							 );
	}
	else
	{
		my_event_tracker('email_page', 'error', alert_message);
		alert(alert_message);
	}

}








//=====================================================================================
// not used now we have switched to sort dropdown
/*
function change_order(where_mode, where_id, order_by, order_direction)
{
	my_event_tracker('hotels_reload', 'change_order', 'order_by '+order_by+' '+order_direction);
	
	var url = "ajax.php";
	var pars = 'action=hotels_reload&page=0&where_mode='+where_mode+'&where_id='+where_id+'&order_by='+order_by+'&order_direction='+order_direction+'&search_id='+search_id;

	var myAjax = new Ajax.Updater('hotel_results', url,
							{ method: 'get',
							  parameters: pars,
							  evalScripts: true
							}
						 );

}
*/






//=====================================================================================

function change_page(where_mode, where_id, search_id)
{
	pagination_element = document.getElementById('pagination');
	var page = pagination_element.options[pagination_element.selectedIndex].value;

	my_event_tracker('hotels_reload', 'change_page', 'page=' + page);

	// Scroll to top, display udating message and then reload page
	scroll(0,0);
	$("hotel_results").innerHTML = "<br><img align='left' src='"+root_path_url+"/images/indicator_circle_ball_big.gif' style='padding:10px;'>Updating...";
	hotels_reload(where_mode, where_id, search_id, page, '', '', 0);
	
	// Add more markers to the map - need to move to latest maps API where we can we can remove old markers before adding new.
	if (map_loaded) {
		add_hotel_markers(where_mode, where_id, search_id, page, '');
	}
	
	return;
}






//======================================================================================
function toggle_hotel(hotel_id)
{
	if (sletoh_request_status == "started") {
		return false;
	}
	var div_result_outer = $("div_result_outer_"+hotel_id);
	var hotel_details_expand = $("hotel_details_expand_"+hotel_id);
	var details_images = $("hotel_details_images_"+hotel_id);
	var details_icon = $("hotel_details_icon_"+hotel_id);
	var toggle_hotel_link = $("toggle_hotel_link_"+hotel_id);
	
	// Expand the display
	if (hotel_details_expand.style.display == "none")	{

		div_result_outer.style.margin = "10px 0px 20px 0px";
		div_result_outer.style.border = "1px solid #a1a1a1";
		div_result_outer.style.background = "#ffffff";

		hotel_set_selected_icon(hotel_id);
		details_icon.src = root_path_url+"/images/icons/icon_minimize.gif";
		hotel_details_expand.style.display = "block";
		if (hotel_images[hotel_id]) {
			if (thumb_div = $('thumb_img_'+hotel_id)) {
				thumb_div.src = hotel_images[hotel_id];
			}
		}
		try {
			details_images.style.display = "block";	
		}
		catch(err){}

		try {
			toggle_hotel_link.innerHTML = "Hide Info";
		}
		catch(err){}
		
		// Show hotel when expanding
		//map_show_hotel(hotel_id);
	}

	// Collapse	
	else{

		div_result_outer.style.margin = "10px 0px 1px 0px";
		div_result_outer.style.border = "1px solid #ffffff";
		div_result_outer.style.borderTop = "1px solid #9f9f9f";
		div_result_outer.style.background = "#ffffff";

		hotel_set_not_selected_icon(hotel_id);
		details_icon.src = root_path_url+"/images/icons/icon_maximize.gif";
		hotel_details_expand.style.display = "none";
		try {
			details_images.style.display = "none";	
		}
		catch(err){}
		
		try {
			toggle_hotel_link.innerHTML = "Hotel Info";
		}
		catch(err){}
	}
	
}






//=====================================================================================
//=====================================================================================
//============ FUNCTIONS USED TO SEARCH AVAILABILITY OF HOTELS ========================
//=====================================================================================
//=====================================================================================


function checkdate( day, month, year ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: checkdate(12, 31, 2000);
    // *     returns 1: true
    // *     example 2: checkdate(2, 29, 2001);
    // *     returns 2: false
 
    var myDate = new Date();
 
    //alert(day + "=" + month + "=" + year);
    
    myDate.setDate(1); 
    myDate.setMonth(0);
    myDate.setFullYear(year);
    //alert(myDate);
    myDate.setMonth(month);
    //alert(myDate);
    myDate.setDate(day);
    //alert(myDate);

    //alert(myDate+"\n|"+ month + "|" + myDate.getMonth() + "|" + (parseInt(myDate.getMonth()) == parseInt( month)) );
	
    //alert(myDate.getMonth() != month );
    //alert(myDate.toString());
 
    return ( myDate.getMonth() == month );
}







//=====================================================================================

function explode( delimiter, string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: kenneth
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: explode(' ', 'Kevin van Zonneveld');
    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
 
    var emptyArray = { 0: '' };
 
    if ( arguments.length != 2
        || typeof arguments[0] == 'undefined'
        || typeof arguments[1] == 'undefined' )
    {
        return null;
    }
 
    if ( delimiter === ''
        || delimiter === false
        || delimiter === null )
    {
        return false;
    }
 
    if ( typeof delimiter == 'function'
        || typeof delimiter == 'object'
        || typeof string == 'function'
        || typeof string == 'object' )
    {
        return emptyArray;
    }
 
    if ( delimiter === true ) {
        delimiter = '1';
    }
 
    return string.toString().split ( delimiter.toString() );
}












//=====================================================================================
// Check that rooms have been entered correctly.
//=====================================================================================

function validate_rooms_input()
{
	rooms = document.getElementById("rooms");
  adults = document.getElementById("adults");
	children = document.getElementById("children");
	total_guests = parseInt(adults.value) + parseInt(children.value);

	// Total rooms	
	if (rooms.value == 0) {
		alert('Please enter number of rooms to check availability');
		return false;
	}

  // More rooms than guests?
  if (parseInt(rooms.value) > parseInt(adults.value)) {
    alert("You searched for " + rooms.value + " rooms and " + adults.value + " adults. Please change the search form and search for at least one adult per room.");
    return false;
  }

  // Too many people in a multi room search?
  if (parseInt(rooms.value) > 1 && parseFloat(total_guests/rooms.value) > 4) {
    alert("For "+ rooms.value + " room searches we can only search for up to 4 guests per room. Please change the rooms / guests (you will see most availability if you search for 2 guests per room).");
    return false;
  }

  // Too many people in a single room search?
  if (rooms.value == 1 && parseFloat(total_guests/rooms.value) > 6) {
    alert("For "+ rooms.value + " room searches we can only search for up to 6 guests per room. Please change the rooms / guests (you will see most availability if you search for 2 guests per room).");
    return false;
  }


	// Child ages
	if (children.value > 0)
	{
		for (i=1; i<=children.value ; i++)
		{
			child_age = document.getElementById("child_age_"+i);
			if (child_age.value == "-") {
				alert('Please choose age for child '+i+'.');
				return false;
			}
		}
	}
	
}











//=====================================================================================
// Check that dates have been entered correctly. Month is 0-11 in JavaScript.
// Round the result as some dates cause floating point results! e.g. 26/10/11 to 05/11/11
//=====================================================================================

function calculate_nights_from_check_in_check_out()
{
	var d1 = jQuery('#check_in_date').val().split('-');
	var d2 = jQuery('#check_out_date').val().split('-');
	var check_in = new Date(d1[2],(d1[1]-1),d1[0]).getTime(); 
	var check_out = new Date(d2[2],(d2[1]-1),d2[0]).getTime();
	nights = Math.round(( check_out - check_in ) / 86400000);

	return nights	
}










//=====================================================================================
// Get where ID and where_mode using destination box 'city' as key to call findid.php
//=====================================================================================

function call_findid_for_where_info()
{
	where_string = document.getElementById("where_string");

	jQuery.ajax({
		type: "GET",
		url: root_path_url+"/findid.php",
		data: "city="+escape(where_string.value),
		async:false, 
		success: function(msg){
			d = msg.split('_');
			jQuery('#where_id').val(d[0]);
			jQuery('#where_mode').val(d[1]);
		}
	});

}










//=====================================================================================
// Validate search form (site)
//=====================================================================================

function validate_search_form_start_search()
{
	if (validate_rooms_input() == false) {
		return false;
	}

	// DATES
	
	// User must enter dates when they have not changed what they are searching for or when using the widget.
	if ($('where_changed').value == 0 || $('search_source').value == 1) {
		if ((jQuery('#check_in_date').val() == '') || (jQuery('#check_out_date').val() == '') ) {
			alert('Enter check in and check out dates to check availability.');
			return false;
		}
	}
	// If user has entered both dates calculate nights
	if ((jQuery('#check_in_date').val() != '') && (jQuery('#check_out_date').val() != '') ) {
		nights = calculate_nights_from_check_in_check_out();
		$('nights').value = nights;
	}
	// If user has entered one date but not the other, delete both and issue alert
	if (((jQuery('#check_in_date').val() != '') && (jQuery('#check_out_date').val() == '')) 
			|| ((jQuery('#check_in_date').val() == '') && (jQuery('#check_out_date').val() != '')) ){
		//$('check_in_date').value = '';
		//$('check_out_date').value = '';
		alert("Enter both check in and check out dates.");
		return false;
	}
	
	

	// If user has changed search form where_string field, look up whatever has been entered in overlay or send user to find screen where they choose what they want to search.
	if ($("where_id").value == "" || $('where_changed').value == 1) {
  	
		switch($("where_mode").value)
		{
			case "L":
			case "R":		
				call_findid_for_where_info();
				
				// Widget users must select destination
				if (jQuery('#where_id').val() == '' && $('search_source').value == 1) {
				  alert('Please delete destination, type in again and select from dropdown');
					where_string = document.getElementById("where_string");
			   	my_event_tracker('search', 'destination', escape(where_string.value));
			   	return false;
				}
				
				// Cannot have an empty where_string.
				if (jQuery('#where_string').val() == '') {
					alert('Please enter a destination.');
					return false;
				}

				break;
			
			case "H":
				// Use overlay to match hotel name on main site and widget.
				if (jQuery('#search_source').val() != 2) {
				  start_hotel_match();
				  return false;
				}
				// On gadget set where_id to nothing so that find.php is used to choose hotel.
				else {
					$("where_id").value = "";
				}
				break;
			
			case "P":
				start_postcode_match();
				return false;
				break;
		}

	}
  
  
  
  
  // Redirect user to appropriate page when selected search form item not same as page URL
  if (page_name_value != "widget.php") {

		var where_id = document.getElementById('where_id').value;
	
		switch($("where_mode").value)
		{
			case "H":
				if (document.search_form.elements["where_alternatives"].value == 1) {
				  document.forms["search_form"].submit();
				  return false;
				}
				else if ((page_name_value != "hotel_page.php") || ( where_id != document.search_form.elements["hidden_id"].value)) {
				  document.forms["search_form"].submit();
				  return false;
				}
				break;
	
			/*
			case "R":
			case "L":
		    if ((page_name_value != "search_results.php") || ( where_id != document.search_form.elements["hidden_id"].value) ) {
				  document.forms["search_form"].submit();
				  return true;
			  }
				break;
			*/

			// Postcode search always submit form to change URL
			case "P":
			default:
			  document.forms["search_form"].submit();
			  return false;
				break;
		 }
	}
	
	// Start search
	if ($("where_id").value != "") {
		start_sletoh_request();	
	}
	
	return false;
	
}






//=====================================================================================

function start_sletoh_request()
{
	//alert('Starting start_sletoh_request()');
	
	sletoh_request_status = "started";
	//map_loaded = true;

	// Widget components
	hide("how_to");
 	show("suitcase_middle");
	hide("suitcase_stand");

	try {
      show_search_in_progress();
			show("hotel_results");
   		hide('div_recommended_accommodation');
			hide_search_form();

			// For the widget
			if (page_type_widget) {
				hide_map();
				map_loaded=false;
				show("div_load_map");
   			show('div_widget_buttons'); 
   			hide('howto_image'); 
   		}
	}
	catch(err)
	{
		jsError('error 12') ;
	}
		
	// If this is a single hotel search, display results on 'Prices' tab
	try {
	  activate_tab("inpage", "prices");
	}
	catch(err) {}
	
	//note the timestamp when the search started
	start_sletoh_time = (new Date()).getTime();
	
	my_event_tracker('search', 'check_availability', '');
	
	var url = "ajax.php";
	var pars = 'action=check_availability';
	var frm = document.search_form;
	for (var i=0; i<frm.length;i++) {
		element_value = get_input_value(frm.elements[i]);
		if (element_value != '') {
		  pars+= ('&' + frm.elements[i].name + '=' + element_value);
		}
	}

	// Clear sort and filters box and set hotel_results
	try{document.getElementById('div_sort_container').innerHTML = "";}catch(e){}
	try{document.getElementById('div_filters_container').innerHTML = "";}catch(e){}
	try{document.getElementById('div_best_prices').innerHTML = "";}catch(e){}
	$("hotel_results").innerHTML = "<div id=\"div_search_results_title\"><img align='left' src='"+root_path_url+"/images/indicator_circle_ball_big.gif' style='padding:10px;'><b>We are searching lots of hotel reservation sites...</b></div>";
	
	//alert("start ajax");
	
	var myAjax = new Ajax.Request( url,
									{ method: 'get',
									  parameters: pars,
									  onComplete: js_eval
									}
								 );
								 
}








//=====================================================================================
function show_search_in_progress()
{

  var o ;
  o = $("body_intro_container") ;
  if (o != null) {
	  o.innerHTML = "";  // clear the seo header text
	}

	show_overlay();

	sletoh_xml_timeout_sec = Math.round(sletoh_xml_timeout / 1000);
	
	var overlay_container_content_div = $('overlay_container_content');
	
  search_in_progress_html = '<div style="padding:10px;">Please wait while we search lots of hotel web sites. This can take up to 30 seconds.</div>';
  
  search_in_progress_html += ''
  		+'<div style="width:400px;padding:10px;" id="search_in_progress">'
				+'<div style="width:20px;float:left;"><img src="'+ root_path_url +'/images/indicator_circle_ball_big.gif"></div>'
				+'<div style="font-weight:bold;float:left;">Search progress:&nbsp;</div>'
				+'<div style="font-weight:bold;float:left;" id="search_in_progress_percent">0</div>'
				+'<div style="font-weight:bold;float:left; width:20px">%</div>'
				+'<br><br>'
				+'<div id="div_search_in_progress_max_time_left" style=\"display:none;\">'
					+'<div style="font-weight:bold;float:left;">Maximum time left:&nbsp;</div>'
					+'<div style="font-weight:bold;float:left;" id="search_in_progress_time_left">'+sletoh_xml_timeout_sec+'</div>'
					+'<div style="font-weight:bold;float:left;">&nbsp;seconds</div>'
					+'<div class="clr"></div>'
				+'</div>'
			+'</div>';    
    
	overlay_container_content_div.innerHTML = search_in_progress_html;
	
	// Hide the close button when searching for availability so user cannot click it before search has finished and site links become active
	var overlay_container_close_div = document.getElementById('overlay_container_close');
	overlay_container_close_div.style.display = "none";

	// Call update procedure in one second
	setTimeout(update_search_in_progress_time_left,1000);
	
}










//=====================================================================================

function start_list_regions(region_id)
{
	show_overlay();

	my_event_tracker('list_regions', '', 'region_id='+region_id);
	
	var url = "ajax.php";
	var pars = 'action=list_regions&region_id='+region_id;

	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );	
}




	
	

//=====================================================================================

function start_region_match()
{
	region_name = $('region_name').value;
	region_name = trim(region_name);
	if (region_name.length < 3) {
		alert("Please enter at least 3 letters of the city name.");
		return false;
	}

	show_overlay();
	
	my_event_tracker('search', 'match_region_name', 'country_id=' + $('country_id').value + '&region_name=' + region_name);
	
	var url = "ajax.php";
	var pars = 'action=match_region_name&region_name='+region_name+'&country_id='+$('country_id').value;
	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}



//=====================================================================================

function start_landmark_match()
{
	landmark_name = $('landmark_name').value;
	landmark_name = trim(landmark_name);
	if (landmark_name.length < 3) {
		alert("Please enter at least 3 letters.");
		return false;
	}

	show_overlay();
	
	my_event_tracker('search', 'match_landmark_name', 'country_id=' + $('country_id').value + '&landmark_name=' + landmark_name);
	
	var url = "ajax.php";
	var pars = 'action=match_landmark_name&landmark_name='+landmark_name+'&country_id='+$('country_id').value;
	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}



//=====================================================================================

function start_hotel_match()
{ 
	hotel_name = $('hotel_name').value;
	hotel_name = trim(hotel_name);
	if (hotel_name.length < 3) {
		alert("Please enter at least 3 letters of the hotel name.");
		return false;
	}

	show_overlay();

	my_event_tracker('search', 'match_hotel_name', 'country_id=' + $('country_id').value + '&hotel_name=' + hotel_name);
	
	var url = "ajax.php";
	var pars = 'action=match_hotel_name&hotel_name='+hotel_name+'&country_id='+$('country_id').value;

	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}





//=====================================================================================

function start_postcode_match()
{
	postcode_name = $('postcode_name').value;
	postcode_name = trim(postcode_name);
	if (postcode_name.length < 2) {
		alert("Please enter at least the first two 2 letters or numbers of the postcode.");
		return false;
	}

	show_overlay();
	
	my_event_tracker('search', 'match_postcode_name', 'country_id=' + $('country_id').value + '&postcode_name=' + postcode_name);
	
	var url = "ajax.php";
	var pars = 'action=match_postcode_name&postcode_name='+postcode_name+'&country_id='+$('country_id').value;

	var myAjax = new Ajax.Updater( 'overlay_container_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
	

							 
	
}






//=====================================================================================

function check_sletoh_progress(search_id, sletoh_search_id)
{ 
	if (sletoh_request_status == "started")
	{
		var url = "ajax.php";
		var pars = 'action=check_progress&search_id=' + search_id + '&sletoh_search_id='+sletoh_search_id;
		
		var myAjax = new Ajax.Request( url,
									{ method: 'get',
									  parameters: pars,
									  onComplete: check_sletoh_progress_complete
									}
								 );
	}
}





//=====================================================================================

function check_sletoh_progress_complete(originalRequest)
{
	js_eval(originalRequest);

 	if ($('search_in_progress_percent').innerHTML < sletoh_search_progress) {
		$('search_in_progress_percent').innerHTML = sletoh_search_progress;
	}

	if (parseInt(sletoh_search_progress) > 30 && parseInt(sletoh_search_hotels_available) > 0) { 
		update_hotel_list_during_search();
	}
	
}



//=====================================================================================

//=====================================================================================

function update_hotel_list_during_search()
{
	hotels_reload('', '', search_id, 0, '', '', 0);
}



//=====================================================================================

//=====================================================================================

	
function update_search_in_progress_time_left()
{
  if (sletoh_request_status == "stopped")
	{
		return;
	}
	else
	{
		current_time = (new Date()).getTime();
		duration = current_time - start_sletoh_time;
		duration_seconds = Math.round(duration / 1000);
		time_left_seconds = Math.round((sletoh_xml_timeout - duration) / 1000);

		// time_left_seconds should never go below 0 as ajax PHP controls this.
		if (time_left_seconds < 0) {

			// Todo 28/1/2011 - This search_id is the actions search_id. If XML search does not reach 100% in time allowed, this call removes search results from users screen! Call stop_sletoh_requests without search_id to prevent this.
			var search_id = gup('search_id');
			//stop_sletoh_requests(search_id, "");
			stop_sletoh_requests("", "");
		}
		
		// Update user display:
		// - show time left when time_left_seconds < 10
		// - increment percent_complete until check_sletoh_progress_complete() sets value greater than our increment process. Increment by (100000 / sletoh_xml_timeout) so that rate of increase is in appropriate steps.
   	if (time_left_seconds <= 10) {
	   	$("search_in_progress_time_left").innerHTML = time_left_seconds;
   		$('div_search_in_progress_max_time_left').style.display = "block";
   	}
   	percent_increment = Math.round(100000 / sletoh_xml_timeout);
   	if ($('search_in_progress_percent').innerHTML < duration_seconds * percent_increment) {
			$('search_in_progress_percent').innerHTML = duration_seconds * percent_increment;
		}
		// Whilst percent progress is less than 95, increment by 1 to show user that the search is still executing. Do not increment over 95 as we can exceed 100%
   	else if (parseInt($('search_in_progress_percent').innerHTML) < 95) {
			$('search_in_progress_percent').innerHTML = parseInt($('search_in_progress_percent').innerHTML) + 1;
		}
   	
   	if (time_left_seconds > 2) {
	   	setTimeout(update_search_in_progress_time_left, 1000);
	  }
	}
}



//=====================================================================================

function toggle_search_form()
{
	if ($('search_form_iframe').style.display == "block") {
		hide_search_form();
	}
	else {
		show_search_form();
	}
}


//=====================================================================================

function show_search_form()
{
 	try {
		show('search_form_iframe');
		//hide('div_map_iframe');
		$('div_search_form_toggle').innerHTML = "Hide search form";
	}
	catch(e)
	{
		jsError('error 20');
	}
}




//=====================================================================================
//=====================================================================================

function hide_search_form()
{
 	try {
		hide('search_form_iframe');
		show('div_map_iframe');
		$('div_search_form_toggle').innerHTML = "Show search form";
	}
	catch(e) {
	}
}




//=====================================================================================
// Stop requests, display results and filters
//=====================================================================================

function stop_sletoh_requests(search_id, no_availability_message)
{
	//alert ("Starting stop_sletoh_requests");
	
	sletoh_request_status = "stopped";

	// Turn back on the overlay close button
	var overlay_container_close_div = document.getElementById('overlay_container_close');
	overlay_container_close_div.style.display = "block";
	
	// Close overlay
	$('search_in_progress_percent').innerHTML = "0";
	hide_overlay();


	// Hotels available
	if (parseInt(sletoh_search_hotels_available) > 0) {

		//alert("hotels available");
		hide_search_form();
		
		if (search_id > 0) {
	  	refresh_sort(search_id);
	  	refresh_filters(search_id);
			hotels_reload('', '', search_id, 0, '', '', 0);
		}
	}

	// No results
	else {
		// If XML engine does not return a user message display default one.
		if (no_availability_message == "") {
			no_availability_message = "Sorry, cannot find availability. Please change your search criteria and try again.";
		}

		$("div_search_results_title").innerHTML = "<div class='div_search_problem'><div class='div_search_error'>" + no_availability_message + "</div></div>";  
		show_search_form();
	}

}





//=====================================================================================
//=====================================================================================
//=============== SEARCH BY ROOM DETAILS ==============================================
//=====================================================================================
//=====================================================================================


//=====================================================================================


function js_eval(originalRequest)
{
	try{
		eval(originalRequest.responseText);	
	}
	catch(err)
	{
				jsError('js_eval() error');
	}
}


	
	
//=====================================================================================
//=====================================================================================
function add_world_markers()
{
	
	var url = "ajax.php";
	var pars = "action=world_map";
	var myAjax = new Ajax.Request( url,
								{ method: 'get',
								  parameters: pars,
								  onComplete: add_json_world_markers
								}
							 );
	
}		




//=====================================================================================
//=====================================================================================
function add_region_markers(where_id)
{
	
	var url = "ajax.php";
	var pars = "action=add_region_markers&region_id="+where_id;
	var myAjax = new Ajax.Request( url,
								{ method: 'get',
								  parameters: pars,
								  onComplete: add_json_regions_markers
								}
							 );
	
}		


//=====================================================================================
//=====================================================================================
function add_landmark_markers(where_id, landmark_type_id, landmark_count)
{
	var url = "ajax.php";
	var pars = "action=add_landmark_markers&region_id="+where_id+"&landmark_type_id="+landmark_type_id+'&landmark_count='+landmark_count;
	var myAjax = new Ajax.Request( url,
								{ method: 'get',
								  parameters: pars,
								  onComplete: add_json_landmark_markers
								}
							 );
	
}		

//=====================================================================================
//=====================================================================================
function add_hotel_markers(where_mode, where_id, search_id, page, filters_serialized)
{
	//alert ("Starting add_hotel_markers()");
	
	// Do not add markers if map not loaded
	if (map_loaded == false) {
		return;
	}

	var url = "ajax.php";
	var pars = "action=add_hotel_markers&where_mode="+where_mode+'&where_id='+where_id+'&search_id='+search_id+'&page='+page+'&filters_serialized='+filters_serialized;
	var myAjax = new Ajax.Request( url,
								{ method: 'get',
								  parameters: pars,
								  onComplete: add_json_markers
								}
							 );
	
}	



marker_details = new Array();
marker_objects = new Array();
landmark_details = new Array();


//=====================================================================================
//=====================================================================================
//=====================================================================================


function add_json_world_markers(originalRequest)
{
	Try.these(
			function () { 

				var jsonObject = eval('(' + originalRequest.responseText + ')');
	
				landmarkers_manager = new GMarkerManager(map, {trackMarkers: true});
				var batch = [];
				
				//alert('here');
				
				for (var k=0; k<jsonObject.length; k++)
				{
					
					country_id = jsonObject[k]["country_id"];
					region_id = jsonObject[k]["type"];
					
					
				
					
					var icon = new GIcon();
					icon.image = root_path_url+"/images/icons/region/"+region_id+"_grey.gif";
					icon.shadow = root_path_url+"/images/icons/trans_pix.gif";
					icon.iconSize = new GSize(20, 14);
					icon.shadowSize = new GSize(1, 1);
					icon.iconAnchor = new GPoint(10, 14);
					icon.infoWindowAnchor = new GPoint(10, 7);
					
					icons["landmark_"+region_id] = icon;
					
					landmarker = createLandMarker( new GLatLng( jsonObject[k]["latitude"], jsonObject[k]["longitude"] ) , country_id,  region_id );
					batch.push (landmarker);
			
					landmark_details[country_id] = new Array();
					landmark_details[country_id]['name'] = jsonObject[k]["name"];
					landmark_details[country_id]['link'] = jsonObject[k]["link"];
					landmark_details[country_id]['type'] = jsonObject[k]["type"];
					
				
				}
				
				
				landmarkers_manager.addMarkers(batch, map_minimum_zoom, map_maximum_zoom);
				landmarkers_manager.refresh();
					
			}
		);
		hide('map_loading');
}


//=====================================================================================
//=====================================================================================
//=====================================================================================


function add_json_landmark_markers(originalRequest)
{
	Try.these(
			function () { 

				var jsonObject = eval('(' + originalRequest.responseText + ')');
	
				landmarkers_manager = new GMarkerManager(map, {trackMarkers: true});
				var batch = [];
				
				
				var min_lat = 181;
				var max_lat = -181;
				
				var min_lon = 181;
				var max_lon = -181;
				
				for (var k=0; k<jsonObject.length; k++)
				{
					landmark_id = jsonObject[k]["landmark_id"];
					
					min_lat = Math.min(min_lat, jsonObject[k]["latitude"]);
					max_lat = Math.max(max_lat, jsonObject[k]["latitude"]);
					
					min_lon = Math.min(min_lon, jsonObject[k]["longitude"]);
					max_lon = Math.max(max_lon, jsonObject[k]["longitude"]);
					
					landmarker = createLandMarker( new GLatLng( jsonObject[k]["latitude"], jsonObject[k]["longitude"] ) , landmark_id, jsonObject[k]["type"] );
					batch.push (landmarker);
			
					landmark_details[landmark_id] = new Array();
					landmark_details[landmark_id]['name'] = jsonObject[k]["name"];
					landmark_details[landmark_id]['link'] = jsonObject[k]["link"];
					landmark_details[landmark_id]['address'] = jsonObject[k]["address"];
					landmark_details[landmark_id]['type'] = jsonObject[k]["type"];
				}
				
		    map_center_lat = min_lat + (max_lat - min_lat)/2;
		    map_center_long = min_lon + (max_lon - min_lon)/2;

				set_map_center(min_lat, max_lat, min_lon, max_lon, map_center_lat, map_center_long);
				
				landmarkers_manager.addMarkers(batch, map_minimum_zoom, map_maximum_zoom);
				landmarkers_manager.refresh();
			}
		);
		hide('map_loading');
}
//=====================================================================================
//=====================================================================================
//=====================================================================================


function add_json_regions_markers(originalRequest)
	{
		Try.these(
				function () { 

					var jsonObject = eval('(' + originalRequest.responseText + ')');
		
					region_markers_manager = new GMarkerManager(map, {trackMarkers: true});
					var batch = [];
					
					
					var min_lat = 181;
					var max_lat = -181;
					
					var min_lon = 181;
					var max_lon = -181;

					
					for (var k=0; k<jsonObject.length; k++)
					{
						
						region_id = jsonObject[k]["region_id"];
						
						min_lat = Math.min(min_lat, jsonObject[k]["latitude"]);
						max_lat = Math.max(max_lat, jsonObject[k]["latitude"]);
						
						min_lon = Math.min(min_lon, jsonObject[k]["longitude"]);
						max_lon = Math.max(max_lon, jsonObject[k]["longitude"]);
						
						landmarker = createLandMarker( new GLatLng( jsonObject[k]["latitude"], jsonObject[k]["longitude"] ) , region_id,  jsonObject[k]["type"] );
						batch.push (landmarker);
				
						landmark_details[region_id] = new Array();
						landmark_details[region_id]['name'] = jsonObject[k]["name"];
						landmark_details[region_id]['link'] = jsonObject[k]["link"];
						landmark_details[region_id]['address'] = jsonObject[k]["address"];
						
						landmark_details[region_id]['type'] = jsonObject[k]["type"];
						
					
					}
					
			    map_center_lat = min_lat + (max_lat - min_lat)/2;
			    map_center_long = min_lon + (max_lon - min_lon)/2;

					set_map_center(min_lat, max_lat, min_lon, max_lon, map_center_lat, map_center_long);
					
					region_markers_manager.addMarkers(batch, map_minimum_zoom, map_maximum_zoom);
					region_markers_manager.refresh();
						
				}
			);
			hide('map_loading');
	}
	
	
	
	
//=====================================================================================

	

function add_json_markers(originalRequest)
{
	//alert ("Starting add_json_markers()");
		
	
	var batch = [];
	/*
	//alert(marker_objects.length);
	for (var m=0; m < marker_objects.length; m++)
	{
		try	
		{
			//alert(m);
			//marker_objects[m].remove();
		}
		catch(e)
		{
					jsError('error 28') ;
		}
	}
	*/
	
	
	Try.these(
		function () { 

			var jsonObject = eval('(' + originalRequest.responseText + ')');


			
			//alert("here");
			for (var k=0; k<jsonObject.length; k++)
			{
				
				hotel_id = jsonObject[k]["hotel_id"];
				
				marker_details[hotel_id] = new Array();
				marker_details[hotel_id]['name']=jsonObject[k]["name"];
				marker_details[hotel_id]['link']=jsonObject[k]["link"];
				marker_details[hotel_id]['thumb_url']=jsonObject[k]["thumb_url"];
				marker_details[hotel_id]['address']=jsonObject[k]["address"];
				marker_details[hotel_id]['distance']=jsonObject[k]['distance'];
				marker_details[hotel_id]['guest_rating']=jsonObject[k]['guest_rating'];
				marker_details[hotel_id]['star_rating_img']=jsonObject[k]['star_rating_img'];
				marker_details[hotel_id]['book_link']=jsonObject[k]['book_link'];
				marker_details[hotel_id]['supplier_image']= jsonObject[k]['supplier_image'];
				
				
				try {
					
						marker_objects[k] = createLabeledMarker( 
							new GLatLng( jsonObject[k]["latitude"], jsonObject[k]["longitude"] ),
							 jsonObject[k]["hotel_id"], 
							 icons[ jsonObject[k]["icon_name"] ], 
							 jsonObject[k]["icon_number"]); 
						
						map.addOverlay(marker_objects[k]);
						//batch.push(marker_objects[k]);
						
					}
					catch (err)
					{
								jsError('error 29');

						marker_objects[k] = new Object();
						marker_objects[k] = null;
					}
				

			}
			//alert("there");
			//alert(batch.length);

		}
	);
	
	
	
	if (batch.length>0)
	{
		hotels_manager = new GMarkerManager(map,  {trackMarkers: true});
		hotels_manager.addMarkers(batch, map_minimum_zoom );
	//alert("muie");
		hotels_manager.refresh();
	}

	hide('map_loading');
	
}






//=====================================================================================
	
function add_json_hotel_map_markers(originalRequest)
{
	
		var min_lat = 181;
		var max_lat = -181;
		
		var min_lon = 181;
		var max_lon = -181;

		var batch = [];
		/*
		//alert(marker_objects.length);
		for (var m=0; m < marker_objects.length; m++)
		{
			try	
			{
				//alert(m);
				//marker_objects[m].remove();
			}
			catch(e)
			{
						jsError('error 30') ;
			}
		}
		*/
		
		
		Try.these(
			function () { 

				var jsonObject = eval('(' + originalRequest.responseText + ')');

				// Center map on first hotel in the list
				map_center_lat = jsonObject["hotels"][0]["latitude"];
				map_center_long = jsonObject["hotels"][0]["longitude"];
				
				for (var k=0; k<jsonObject["hotels"].length; k++)
				{
					
					hotel_id = jsonObject["hotels"][k]["hotel_id"];
					
					marker_details[hotel_id] = new Array();
					marker_details[hotel_id]['name']=jsonObject["hotels"][k]["name"];
					marker_details[hotel_id]['link']=jsonObject["hotels"][k]["link"];
					marker_details[hotel_id]['thumb_url']=jsonObject["hotels"][k]["thumb_url"];
					marker_details[hotel_id]['address']=jsonObject["hotels"][k]["address"];
					marker_details[hotel_id]['distance']=jsonObject["hotels"][k]['distance'];
					marker_details[hotel_id]['guest_rating']=jsonObject["hotels"][k]['guest_rating'];
					marker_details[hotel_id]['star_rating_img']=jsonObject["hotels"][k]['star_rating_img'];
					marker_details[hotel_id]['book_link']=jsonObject["hotels"][k]['book_link'];
					marker_details[hotel_id]['supplier_image']= jsonObject["hotels"][k]['supplier_image'];

					
					min_lat = Math.min(min_lat, jsonObject["hotels"][k]["latitude"]);
					max_lat = Math.max(max_lat, jsonObject["hotels"][k]["latitude"]);
					
					min_lon = Math.min(min_lon, jsonObject["hotels"][k]["longitude"]);
					max_lon = Math.max(max_lon, jsonObject["hotels"][k]["longitude"]);
					
					try {
						
							marker_objects[k] = createLabeledMarker( 
								new GLatLng( jsonObject["hotels"][k]["latitude"], jsonObject["hotels"][k]["longitude"] ),
								 jsonObject["hotels"][k]["hotel_id"], 
								 icons[ jsonObject["hotels"][k]["icon_name"] ], 
								 jsonObject["hotels"][k]["icon_number"]); 
							
							map.addOverlay(marker_objects[k]);
							//batch.push(marker_objects[k]);
							
						}
						catch (err)
						{
							jsError('error 31') ;
							marker_objects[k] = new Object();
							marker_objects[k] = null;
						}
					

				}
				//alert(batch.length);
			}
		);
		
		
		
		if (batch.length>0)
		{
			hotels_manager = new GMarkerManager(map,  {trackMarkers: true});
			hotels_manager.addMarkers(batch, map_minimum_zoom );
		
			hotels_manager.refresh();
		}


		Try.these(
			function () { 

				landmarkers_manager = new GMarkerManager(map, {trackMarkers: true});
				var batch = [];

				var jsonObject = eval('(' + originalRequest.responseText + ')');
				
				
				//alert("here" + jsonObject["landmarks"].length);
				for (var k=0; k<jsonObject["landmarks"].length; k++)
				{
					
					landmark_id = jsonObject["landmarks"][k]["landmark_id"];
					
					min_lat = Math.min(min_lat, jsonObject["landmarks"][k]["latitude"]);
					max_lat = Math.max(max_lat, jsonObject["landmarks"][k]["latitude"]);
					
					min_lon = Math.min(min_lon, jsonObject["landmarks"][k]["longitude"]);
					max_lon = Math.max(max_lon, jsonObject["landmarks"][k]["longitude"]);
					
					landmarker = createLandMarker( new GLatLng( jsonObject["landmarks"][k]["latitude"], jsonObject["landmarks"][k]["longitude"] ) , landmark_id,  jsonObject["landmarks"][k]["type"] );
					batch.push (landmarker);
			
					landmark_details[landmark_id] = new Array();
					landmark_details[landmark_id]['name'] = jsonObject["landmarks"][k]["name"];
					landmark_details[landmark_id]['link'] = jsonObject["landmarks"][k]["link"];
					landmark_details[landmark_id]['address'] = jsonObject["landmarks"][k]["address"];
					landmark_details[landmark_id]['type'] = jsonObject["landmarks"][k]["type"];
				
				}
				
				if (batch.length>0)
				{
					landmarkers_manager.addMarkers(batch, map_minimum_zoom, map_maximum_zoom);
					landmarkers_manager.refresh();
				}
					
			}
		);
		
		set_map_center(min_lat, max_lat, min_lon, max_lon, map_center_lat, map_center_long);

		hide('map_loading');
	
}





//=====================================================================================
	

function set_map_center(min_lat, max_lat, min_lon, max_lon, map_center_lat, map_center_long)
{
		//alert(min_lat + "|" + max_lat + "|" + min_lon + "|" + max_lon + "|");
				
		if (min_lat < 181 && max_lat > -181 && min_lon < 181 && max_lon > -181)
		{
			dist_lat = Math.max( Math.abs(max_lat - map_center_lat) , Math.abs(min_lat - map_center_lat) ) * 2;
			dist_lon =  Math.max( Math.abs(max_lon - map_center_long) , Math.abs(min_lon - map_center_long) ) * 2; 
			
			dist = Math.max(dist_lat * 69.05, dist_lon * 48.99);
			
			if (dist ==0) {
				map_zoom_level = 13;
			}
			else if (dist < 0.2) {
				map_zoom_level = 16;
			}
			else if (dist < 0.4)
			{
				map_zoom_level = 15;
			}
			else if (dist < 0.8)
			{
				map_zoom_level = 14;
			}
			else if (dist < 2)
			{
				map_zoom_level = 13;
			}
			else if (dist < 3)
			{
				map_zoom_level = 12;
			}
			
			if (dist > 5)
			{
				map_zoom_level = 11;
			}
			if (dist > 10)
			{
				map_zoom_level = 10;
			}
			
			if (dist > 20)
			{
				map_zoom_level = 9;
			}
			if (dist > 50)
			{
				map_zoom_level = 8;
			}
			if (dist > 100)
			{
				map_zoom_level = 7;
			}
			if (dist > 200)
			{
				map_zoom_level = 6;
			}
			if (dist > 300)
			{
				map_zoom_level = 5;
			} 
			if (dist > 600)
			{
				map_zoom_level = 4;
			}
			if (dist > 1400)
			{
				map_zoom_level = 3;
			}
			
			map.setCenter(new GLatLng( map_center_lat, map_center_long), map_zoom_level);
			//alert (map_center_lat + "|" + map_center_long + "|" + map_zoom_level);
		}

	return;
}





//=====================================================================================
	
/*
// 4/4/2011 never called. delete

function add_json_default_markers(originalRequest)
{
	
		
		
		var batch = [];
		//alert(marker_objects.length);
		for (var m=0; m < marker_objects.length; m++)
		{
			try	
			{
				//alert(m);
				//marker_objects[m].remove();
			}
			catch(e)
			{
				jsError('error 32') ;
			}
		}
		
		
		Try.these(
			function () { 

				var jsonObject = eval('(' + originalRequest.responseText + ')');


				
				//alert("here");
				for (var k=0; k<jsonObject.length; k++)
				{
					
					hotel_id = jsonObject[k]["hotel_id"];
					
					marker_details[hotel_id] = new Array();
					marker_details[hotel_id]['name']=jsonObject[k]["name"];
					marker_details[hotel_id]['link']=jsonObject[k]["link"];
					marker_details[hotel_id]['thumb_url']=jsonObject[k]["thumb_url"];
					marker_details[hotel_id]['address']=jsonObject[k]["address"];
					marker_details[hotel_id]['distance']=jsonObject[k]['distance'];
					marker_details[hotel_id]['guest_rating']=jsonObject[k]['guest_rating'];
					marker_details[hotel_id]['star_rating_img']=jsonObject[k]['star_rating_img'];
					marker_details[hotel_id]['book_link']=jsonObject[k]['book_link'];
					marker_details[hotel_id]['supplier_image']= jsonObject[k]['supplier_image'];
					
					
					try {
						
							marker_objects[k] = new GMarker( 
								new GLatLng( jsonObject[k]["latitude"], jsonObject[k]["longitude"] )); 
							
							map.addOverlay(marker_objects[k]);
							//batch.push(marker_objects[k]);
							
						}
						catch (err)
						{jsError('error 33') ;
							marker_objects[k] = new Object();
							marker_objects[k] = null;
						}
					

				}
				//alert("there");
				//alert(batch.length);

			}
		);
		
		
		
		if (batch.length>0)
		{
			hotels_manager = new GMarkerManager(map,  {trackMarkers: true});
			hotels_manager.addMarkers(batch, map_minimum_zoom );
		//alert("muie");
			hotels_manager.refresh();
		}

		hide('map_loading');
	
}
*/





function validate_email(field)
{
	var str = field;
//	alert(str);
	if (window.RegExp) {
		var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
		var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
		var reg1 = new RegExp(reg1str);
		var reg2 = new RegExp(reg2str);
		if (!reg1.test(str) && reg2.test(str)) {
			return true;
		}		
		return false;
	} else {
		if(str.indexOf("@") >= 0)
		{
			return true;
		}
		//alert(alert_str);
		//field.select();
		return false;
	}
}






//=====================================================================================
// function top Get Url Params

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}












//=====================================================================================
//=====================================================================================

function hotels_reload(where_mode, where_id, search_id, page, filters_serialized, filters_disable, filters_set)
{
	var url = "ajax.php";
	var pars = 'action=hotels_reload&page='+page+'&where_mode='+where_mode+'&where_id='+where_id+'&search_id='+search_id+'&filters_serialized='+filters_serialized+'&filters_disable='+filters_disable+'&filters_set='+filters_set+'&page_type_widget='+page_type_widget;
	var myAjax = new Ajax.Updater('hotel_results', url,
				{ method: 'get',
				  parameters: pars//,
				  //onComplete: hide_overlay
				}
			 );

	// Dislplay overlay to inform user something is happening
	//show_overlay();
	//var overlay_container_content_div = $('overlay_container_content');
	//overlay_container_content_div.innerHTML = "<div class='overlay_updating'>Updating results...</a>";

	return;
}











//=====================================================================================
//=====================================================================================

function refresh_supplier_search_links(search_id)
{
	var url = "ajax.php";
	var pars = 'action=refresh_supplier_search_links&search_id='+search_id;
	var myAjax = new Ajax.Updater('div_supplier_search_links_container', url,
				{ method: 'get',
				  parameters: pars
				}
			 );

	return;
}











//=====================================================================================
//=====================================================================================

function refresh_latest_searches()
{
	var url = "ajax.php";
	var pars = 'action=refresh_latest_searches';
	var myAjax = new Ajax.Updater('div_recent_searches_container', url,
				{ method: 'get',
				  parameters: pars
				}
			 );

	return;
}












//=====================================================================================
//=====================================================================================

function refresh_read_reviews(hotel_id)
{
	var url = "ajax.php";
	var pars = 'action=refresh_read_reviews&hotel_id='+hotel_id;
	var myAjax = new Ajax.Updater('div_supplier_reviews', url,
				{ method: 'get',
				  parameters: pars
				}
			 );

	return;
}










//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=============== FILTERS =============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================





//=====================================================================================
// Check that user has not unchecked all star rating boxes. If they have, turn all back on.
//=====================================================================================

function filters_button_clicked_star_rating(filters_disable, reload_map)
{ 
	var frm = document.form_filters;
	var filter_stars1 = get_input_value(frm.filter_stars1);
	var filter_stars2 = get_input_value(frm.filter_stars2);
	var filter_stars3 = get_input_value(frm.filter_stars3);
	var filter_stars4 = get_input_value(frm.filter_stars4);
	var filter_stars5 = get_input_value(frm.filter_stars5);
	
	if (filter_stars1 == "" && filter_stars2 == "" && filter_stars3 == "" && filter_stars4 == "" && filter_stars5 == "") {
		set_checkbox('filter_stars1', '1');
		set_checkbox('filter_stars2', '1');
		set_checkbox('filter_stars3', '1');
		set_checkbox('filter_stars4', '1');
		set_checkbox('filter_stars5', '1');
	}
	
	filters_button_clicked('off', 'true');
	
	return;
}	








//=====================================================================================
//=====================================================================================

function filters_button_clicked(filters_disable, reload_map)
{ 
	// filters_disable is empty when called by onchange
	if (filters_disable == 'off') {
		my_event_tracker('hotels_reload', 'filters', 'set');
	}
	else {
		my_event_tracker('hotels_reload', 'filters', 'off');
	}

	
	// Serialize filters to pass to PHP
	var filters_serialized = '';
	var filters_array = Array();
	filters_array = filter_form_values_to_array(document.form_sort, filters_array);
	filters_array = filter_form_values_to_array(document.form_filters, filters_array);
	filters_serialized = serialize(filters_array);

	// Display 'updating' message
	$("hotel_results").innerHTML = "<br><img align='left' src='"+root_path_url+"/images/indicator_circle_ball_big.gif' style='padding:10px;'>Updating...";

	// Check price input
	if (parseInt(filters_array['filter_price_low']) >= parseInt(filters_array['filter_price_high'])) { // todo: remove this when switched to slider control
		alert ("Low price filter must be less than high price filter.");
		return false;
	}
	
	// Reload hotel list
	hotels_reload(filters_where_mode, filters_where_id, search_id, 0, filters_serialized, filters_disable, 1);

	// Reload map and add markers
	if (map_loaded && reload_map == 'true') {
		load_map(latitude, longitude);
		initialise_map(latitude, longitude, filters_where_id, where_type_id);
		add_hotel_markers(filters_where_mode, filters_where_id, search_id, 0, filters_serialized);
	}
	
	return;
}	






//=====================================================================================
// Fetch filter form values into array. 
// Assign all values to window array which holds all global variables
//=====================================================================================

function filter_form_values_to_array(frm, filters_array)
{ 
	for (var i=0; i<frm.length;i++)	{
		var variable_name = frm.elements[i].id;
		var variable_value = get_input_value(frm.elements[i]);
		if (variable_name != "" && variable_value != "") {
			window[variable_name] = variable_value;
			if (variable_name.substring(0, 6) == "filter") {
				filters_array[variable_name] = variable_value;
			}
		}
	}
	return filters_array;
}




//=====================================================================================
//=====================================================================================

function filters_turn_off()
{ 
	// Reload hotel list
	var url = "ajax.php";
	var pars = 'action=filters_turn_off';
	var myAjax = new Ajax.Request(url,
				{ method: 'get',
				  parameters: pars
				}
			 );
			 

	// Reset filter dropdowns and hide
	set_dropdown('filter_price_low', '0');
	set_dropdown('filter_price_high', '9898989');
	set_text_field('filter_hotel_name', '');
	set_checkbox('filter_stars0', '1');
	set_checkbox('filter_stars1', '1');
	set_checkbox('filter_stars2', '1');
	set_checkbox('filter_stars3', '1');
	set_checkbox('filter_stars4', '1');
	set_checkbox('filter_stars5', '1');
	set_dropdown('filter_guest_rating', '0');
	set_dropdown('filter_board_type', '0');
	set_dropdown('filter_distance', '0');
	set_dropdown('filter_order_by', '0');	
	set_dropdown('filter_expand_view', 'off');
	//hide_div('div_filters_fields'); 

	// Reset hotel list and map
	filters_button_clicked("off", "true");

	return;
}	







//=====================================================================================
// Set text field
//=====================================================================================

function set_text_field(dropdown_name, selected_option)
{
	try {
		var selObj = document.getElementById(dropdown_name);
		selObj.value = selected_option;
	}
	catch(err) {}
	return;
}





//=====================================================================================
// Set dropdown to a selected option
//=====================================================================================

function set_dropdown(dropdown_name, selected_option)
{
	try {
		var selObj = document.getElementById(dropdown_name);
		selObj.selectedIndex = selected_option;
	}
	catch(err) {}
	return;
}







//=====================================================================================
// Set checkbox 
//=====================================================================================

function set_checkbox(checkbox_name, selected_option)
{
	try {
		var selObj = document.getElementById(checkbox_name);
		selObj.checked = selected_option;
	}
	catch(err) {}
	return;
}









//=====================================================================================
//=====================================================================================

function refresh_filters(search_id)
{
	var url = "ajax.php";
	var pars = 'action=refresh_filters&search_id='+search_id+'&page_type_widget='+page_type_widget;

	var myAjax = new Ajax.Updater('div_filters_container', url,
					{ method: 'get',
					  parameters: pars
					}
				 );	
				 
	return;
}










//=====================================================================================
//=====================================================================================

function refresh_sort(search_id)
{
	var url = "ajax.php";
	var pars = 'action=refresh_sort&search_id='+search_id+'&page_type_widget='+page_type_widget;

	var myAjax = new Ajax.Updater('div_sort_container', url,
					{ method: 'get',
					  parameters: pars
					}
				 );	
				 
	return;
}












//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=============== TRACKING ============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================



//=====================================================================================
//=====================================================================================

function record_outbound_click(url_id, our_url)
{
	var url = "ajax.php";
	var pars = 'action=record_outbound_click&url_id='+url_id+'&our_url='+escape(our_url);
	var myAjax = new Ajax.Request(url,
				{ method: 'get',
				  parameters: pars
				}
			 );
				 
	return;
}












//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=============== REVIEWS =============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================



function get_input_value(element)
{ 
	var thevalue = "";

	// Get the value depending on type of input field
	switch (element.type) {
		case "checkbox":
			if (element.checked) {
				thevalue = element.value;
			}
			else {
				thevalue = "";
			}
			break;

		case "radio":
			if (element.checked) {
				thevalue = element.value;
			}
			break;

		case "select-one":
		case "textarea":
		case "text":
		case "hidden":
			thevalue = element.value;
			break;

		default:
			break;
	}

	return thevalue;
}




//=====================================================================================
// Check input and then submit to ajax.php
//=====================================================================================

function submit_review()
{ 
	var frm = document.form_write_review;
	
	// Serialize data to pass to PHP
	var data_serialized = '';
	var data_array = Array();
	for (var i=0; i<frm.length;i++)	{
		var variable_name = frm.elements[i].name;
		data_array[variable_name] = get_input_value(frm.elements[i]);
	}
	data_serialized = serialize(data_array);

	// Check input
	/*if (data_array['month'] == 0 || data_array['year'] == 0) {
		alert ("Please enter your date of stay.");
		return false;
	}
	else*/ if (data_array['review_text'].length == 0) {
		alert ("Please enter a review!");
		return false;
	}
	else if (data_array['review_text'].length < 20) {
		alert ("Please enter at least a sentence to give readers more insight.");
		return false;
	}
	else if (data_array['review_text'].search('http://') != -1) {
		alert ("Your review cannot contain web addresses. Please remove the address and re-submit.");
		return false;
	}
	/*
	else if (data_array['rating_rooms'] === undefined) {
		alert ("Please enter a room rating.");
		return false;
	}
	else if (data_array['rating_service'] === undefined) {
		alert ("Please enter a service rating.");
		return false;
	}
	else if (data_array['rating_facilities'] === undefined) {
		alert ("Please enter a facilities rating.");
		return false;
	}
	else if (data_array['rating_beds'] === undefined) {
		alert ("Please enter a beds rating.");
		return false;
	}
	else if (data_array['rating_clean'] === undefined) {
		alert ("Please enter a cleanliness rating.");
		return false;
	}
	else if (data_array['rating_location'] === undefined) {
		alert ("Please enter a location rating.");
		return false;
	}
	else if (data_array['rating_value'] === undefined) {
		alert ("Please enter a value for money rating.");
		return false;
	}
	*/

	my_event_tracker('hotel_page', 'review', 'submit');

	var url = "ajax.php";
	var myAjax = new Ajax.Updater('div_submit_review_result', url,
			{ method: 'post',
			  parameters: $('form_write_review').serialize(true)
			}
		 );

	return;
}	











//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=============== IGADGET =============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================



//=====================================================================================
// Used when customising igadget with where_mode and where_id
//=====================================================================================

function show_destination_ids() 
{
	call_findid_for_where_info();
			
	if (jQuery('#where_id').val() == '') {
		alert('Enter a destination to see the IDs.')
	}
	else {
		alert("where_mode is '" + jQuery('#where_mode').val() + "' and where_id is '" + jQuery('#where_id').val() + "'\n\nEnter these values into the 'Customise your Search Form' boxes.");
	}
	return false;
}








//=====================================================================================
// Date picker for check in
//=====================================================================================

    // check in and check out calendar
    jQuery(function() {
        jQuery("#check_in_date").datepicker({
            showOn: 'both',
            buttonText: '',
            buttonImage: root_path_url+'/images/icons/date_cal.gif',
            buttonImageOnly: true,
            autoSize: true,
            duration: 'fast',
            minDate: 0,
            dateFormat: 'dd-mm-yy',
            onSelect:function(sDate) {
                var d = sDate.split('-');
                var nd = new Date(d[2],(d[1]-1),d[0]).getTime();
                nd = parseInt(nd) + 86400000;
                jQuery("#check_out_date").datepicker('option','minDate',new Date(nd))
            }
        });
    });




//=====================================================================================
// Date picker for check out
//=====================================================================================

     jQuery(function() {
        jQuery("#check_out_date").datepicker({
            showOn: 'both',
            buttonText: '',
            buttonImage: root_path_url+'/images/icons/date_cal.gif',
            buttonImageOnly: true,
            autoSize: true,
            minDate: 1,
            duration: 'fast',
            dateFormat: 'dd-mm-yy'
        });
    });
    
    
    
    
    
//=====================================================================================
// Initialise dates
//=====================================================================================

function initialise_dates () {
		try{
			d = new Date();
			day = parseInt(d.getDate()) > 9 ? d.getDate() : '0'+d.getDate();
			mon = parseInt(d.getMonth()) > 9 ? (parseInt(d.getMonth()+1)) : '0'+(parseInt(d.getMonth()+1));
			td = day+'-'+mon+'-'+d.getFullYear();
			jQuery("#check_in_date").val(td);
			
			d1 = new Date(parseInt(d.getTime())+86400000);
			day1 = parseInt(d1.getDate()) > 9 ? d1.getDate() : '0'+d1.getDate();
			mon1 = parseInt(d1.getMonth()) > 9 ? (parseInt(d1.getMonth()+1)) : '0'+(parseInt(d1.getMonth()+1));
			td1 = day1+'-'+mon1+'-'+d1.getFullYear();
			
			jQuery("#check_out_date").val(td1);
		}
		catch(e){}
    
		return;
}









