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 = 35000; //(35 seconds) 
var error_message = '';

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 toggle_filters(search_form_colour_id)
{
	var filters_button = $('button_search_filters');	
	
	if (filters_hidden == 1)
	{
		filters_hidden = 0;
		$('filters_hidden').value = 0;
		show("search_form_filter_stars");
		show("search_form_filter_radius");
		hide("search_form_filter_txt");
		filters_button.src= root_path_url+"/images/search_form/" + search_form_colour_id + "/search_filters_minimize.gif";
	}
	else
	{
		filters_hidden = 1;
		$('filters_hidden').value = 1;
		hide("search_form_filter_stars");
		hide("search_form_filter_radius");
		show("search_form_filter_txt");
		filters_button.src= root_path_url+"/images/search_form/" + search_form_colour_id + "/search_filters_maximize.gif";
	}
}






//=====================================================================================
// 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 photos_div_element = $("hotel_" + tab_type + "_images");
	
	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 photos_div_button_element = $("hotel_" + tab_type + "_images_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";
	photos_div_element.style.display = "none";
	
	description_div_button_element.className = "";
	reviews_div_button_element.className = "";
	prices_div_button_element.className = "";
	photos_div_button_element.className = "";
	
	active_tab_div_button.className='current';
	active_tab_div.style.display = "block";
}




//=====================================================================================

function check_availability_landmark(landmark_id, landmark_name)
{
	//alert ("Starting check_availability_landmark()");

  $('destination_changed').value = 0;
	document.search_form.elements["landmark_id"].value = landmark_id;
	$("landmark_name").value= landmark_name;
	$("where_mode").value= "L";
	hideBox('overlay_box','overlay_hotel_details');
	return validate_search_form_start_search();
}



//=====================================================================================

function check_availability_hotel(hotel_id, hotel_name, page_type_widget, preset_search_form)
{
	//alert("check_availability_hotel() hotel_id=" + hotel_id);

  $('destination_changed').value = 0;
	document.search_form.elements["hotel_id"].value = hotel_id;
	$("hotel_id").value= hotel_id;
	$("hotel_name").value= hotel_name;
	$("where_mode").value= "H";
	hideBox('overlay_box','overlay_hotel_details');

	if (preset_search_form == 1) {
	  show_search_tab('H', page_type_widget);
		alert("\"" + hotel_name + "\" is now in the search form (top of page on right).\n\nEnter your travel dates and click 'Check Availability'.");
		show_widget_search_form();
	}
  else {
		return validate_search_form_start_search();
	}
	
	return false;
}




//=====================================================================================

function check_availability_region(region_id, region_name)
{
  $('destination_changed').value = 0;
	document.search_form.elements["region_id"].value = region_id;
	$("region_name").value= region_name;
	$("where_mode").value= "R";
	hideBox('overlay_box','overlay_hotel_details');
	return validate_search_form_start_search();
}



//=====================================================================================

function check_availability_postcode(postcode_id, postcode_name)
{
  $('destination_changed').value = 0;
	document.search_form.elements["postcode_id"].value = postcode_id;
	$("postcode_name").value= postcode_name;
	$("where_mode").value= "P";
	hideBox('overlay_box','overlay_hotel_details');
	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;

	var myAjax = new Ajax.Updater( 'hotel_inpage_description' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
	
}




//=====================================================================================

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
							}
						 );


	
}








//=====================================================================================
//=====================================================================================

function load_region_map(region_id, starting_search)
{
	//alert ("Starting load_region_map()");
	
	var url = "ajax.php";
	var pars = 'action=center_map_on_region&region_id='+region_id+'&starting_search='+starting_search;

	var myAjax = new Ajax.Request( url,
							{ method: 'get',
							  parameters: pars,
							  onComplete: start_load_region_map
							}
						 );
}


//=====================================================================================

function start_load_region_map(originalRequest)
{
	//alert ("Starting start_load_region_map()");

	Try.these(
		function () { 
		
			var jsonObject = eval('(' + originalRequest.responseText + ')');
			
			landmark_details[current_region_id] = new Array();
			landmark_details[current_region_id]['name'] = jsonObject["region_details"][current_region_id]["name"];
			landmark_details[current_region_id]['link'] = jsonObject["region_details"][current_region_id]["link"];
			landmark_details[current_region_id]['address'] = jsonObject["region_details"][current_region_id]["address"];
			landmark_details[current_region_id]['type'] = jsonObject["region_details"][current_region_id]["type"];

			load_map(jsonObject["map_center_lat"], jsonObject["map_center_long"]);
			initialise_map(jsonObject["map_center_lat"], jsonObject["map_center_long"], current_region_id, 6);

			if (jsonObject["starting_search"] == 0) {
				add_hotel_markers("R", current_region_id, 0, '');
			}
		}
	);
}





//=====================================================================================

function load_landmark_map(landmark_id, starting_search)
{
	//alert ("Starting load_landmark_map()");
	
	var url = "ajax.php";
	var pars = 'action=center_map_on_landmark&landmark_id='+landmark_id+'&starting_search='+starting_search;

	var myAjax = new Ajax.Request( url,
							{ method: 'get',
							  parameters: pars,
							  onComplete: start_load_landmark_map
							}
						 );
 
}


//=====================================================================================

function start_load_landmark_map(originalRequest)
{
	//alert ("Starting start_load_landmark_map()");

	Try.these(
		function () { 
		
			var jsonObject = eval('(' + originalRequest.responseText + ')');

			landmark_details[current_landmark_id] = new Array();
			landmark_details[current_landmark_id]['name'] = jsonObject["landmark_details"][current_landmark_id]["name"];
			landmark_details[current_landmark_id]['link'] = jsonObject["landmark_details"][current_landmark_id]["link"];
			landmark_details[current_landmark_id]['address'] = jsonObject["landmark_details"][current_landmark_id]["address"];
			landmark_details[current_landmark_id]['type'] = jsonObject["landmark_details"][current_landmark_id]["type"];

			load_map(jsonObject["map_center_lat"], jsonObject["map_center_long"]);
			initialise_map(jsonObject["map_center_lat"], jsonObject["map_center_long"], current_landmark_id, jsonObject["landmark_details"][current_landmark_id]["type"]);
			
			if (jsonObject["starting_search"] == 0) {
				add_hotel_markers("L", current_landmark_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)
{
	showBox('overlay_box','overlay_hotel_details');

	// 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=hotel_details_overlay&hotel_id='+hotel_id;

	var myAjax = new Ajax.Updater( 'overlay_hotel_details_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );

}







//=====================================================================================

function open_tell_a_friend_box(where_mode, where_id)
{
	//alert(hotel_id);
	//alert("image_in");
	showBox('overlay_box','overlay_hotel_details');
	//alert("image_out");
	//do the ajax request here
	
	my_event_tracker('tell_friend', '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;

	var myAjax = new Ajax.Updater( 'overlay_hotel_details_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
}









//=====================================================================================

function open_feedback_box()
{
	showBox('overlay_box','overlay_hotel_details');
	
	//my_event_tracker('tell_friend', 'open_message_box', 'where_mode='+where_mode+'; where_id='+where_id);
	
	var url = "ajax.php";
	var pars = 'action=feedback_form';

	var myAjax = new Ajax.Updater( 'overlay_hotel_details_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('tell_friend', 'send', '');

		var url = "ajax.php";
		var pars = 'action=send_feedback&your_email='+your_email_value+'&message='+message_value;
		var myAjax = new Ajax.Updater( 'overlay_hotel_details_content' , url,
								{ method: 'get',
								  parameters: pars
								}
							 );
	}
	else
	{
		alert(alert_message);
	}

}







//=====================================================================================

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 your friend's email address \n";
		error = true;
	}
	else if (!validate_email(friend_email_value))
	{
		alert_message += "Your friend's 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('tell_friend', '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_hotel_details_content' , url,
								{ method: 'get',
								  parameters: pars
								}
							 );
	}
	else
	{
		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, page)
{
	my_event_tracker('hotels_reload', 'change_page', 'page=' + page);

	hotels_reload(where_mode, where_id, search_id, page, '', '', 0);
	
	return;
}






//======================================================================================
function toggle_hotel_details(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);
	
	// Expand the display
	if (hotel_details_expand.style.display == "none")	{

		div_result_outer.style.margin = "1px 0px 20px 0px";
		div_result_outer.style.border = "1px solid #9f9f9f";

		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 {
			details_prices.innerHTML = "hide prices";
		}
		catch(err){}
	}

	// Collapse	
	else{

		div_result_outer.style.margin = "1px 0px 1px 0px";
		div_result_outer.style.border = "0px";
		div_result_outer.style.borderTop = "1px solid #9f9f9f";

		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 {
			details_prices.innerHTML = "show prices";
		}
		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() );
}





//=====================================================================================

function search_button_clicked(where_added)
{ 
	//do an ajax request to store this "click"

	var url = "ajax.php";
	var pars = 'action=store_search_button_clicked&where_added=' + where_added;
	var frm = document.search_form;
	for (var i=0; i<frm.length;i++)	{
	  pars+= ('&' + frm.elements[i].name + '=' + frm.elements[i].value);
	}
	
	var myAjax = new Ajax.Request( url,
			{ method: 'get',
			  parameters: pars
			}
		 );
		 
	return validate_search_form_start_search();
}	








//=====================================================================================
// Check search form input
//=====================================================================================
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;
	}

  // 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;
			}
		}
	}
	
}




//=====================================================================================

// Validate search form and start search
function validate_search_form_start_search()
{
	if (validate_rooms_input() == false) {
		return false;
	}

	// Nights
	nights = document.getElementById("nights");
	if (nights.value == 0) {
		alert("Please select number of nights on search form.");
		return false;
	}

	// Check country
	/*
  if ($("country_id").value == 0)  {
  	alert("Please select country.")
		return false;
  }
  */
  
	// Check-in date
	
	// Convert slashes to dashes
	check_in_date_input = document.getElementById("check_in_date");
	check_in_date_value = check_in_date_input.value;
	check_in_date_value = check_in_date_value.replace(/\//g, "-");
	check_in_date_input.value = check_in_date_value;
	
	check_in_date_ok = true;
	if (date_values = explode("-", check_in_date_value))
	{
		doa_yy = date_values[2];
		doa_mm = date_values[1] - 1;
		doa_dd = date_values[0];

		if (date_values != null && date_values.length == 3)
		{
			if (checkdate (doa_dd, doa_mm, doa_yy) ) 	
			{
				//date is valid, let's see if it is in the next 12 months
				var server_date = new Date();
				server_date.setFullYear(server_year);
				server_date.setMonth(server_month-1);
				server_date.setDate(server_day);
				
				var next_year = new Date();
				next_year.setFullYear(server_year + 1);
				next_year.setMonth(server_month-1);
				next_year.setDate(server_day);

				var check_in_date = new Date();
				check_in_date.setFullYear(doa_yy);
				check_in_date.setMonth(doa_mm);
				check_in_date.setDate(doa_dd);

				if (check_in_date < server_date) {
					alert('Check-in date can not be before today.');
					return false;
				}
				else if (check_in_date > next_year)	{
					alert('Check-in date must be within the next 12 months.');
					return false;
				}
					
			}
			else {
		    alert('Check-in date is not valid (you entered ' + check_in_date_input.value + '). Please enter check-in date as dd-mm-yyyy.');
				return false;
				check_in_date_ok = false;
			}
		}
		else
		{
			check_in_date_ok = false;
		}
	}
	else
	{
		check_in_date_ok = false;
	}
	
	if (!check_in_date_ok) {
		alert('Date format shoud be: dd-mm-yyyy');
		return false;
	}


	// If user has changed search form destination field, look up whatever has been entered
	if ($('destination_changed').value == 1) {
	  	
		switch($("where_mode").value )
		{
			case "L":			   
        start_landmark_match();
				break;
	
			case "R":		
        start_region_match();
				break;
			
			case "H":
			  start_hotel_match();
				break;
			
			case "P":
				start_postcode_match();
				break;
		}

		return false;
	}
  
  
  
  
  // Redirect user to appropriate page when selected search form item not same as page URL
  if (page_name_value != "widget.php") {
	
		switch($("where_mode").value)
		{
			case "H":
				var current_hotel_id = document.getElementById('current_hotel_id').value ;
			  if ((page_name_value != "hotel_page.php") || (current_hotel_id != document.search_form.elements["hotel_id"].value)) {
				  document.forms["search_form"].submit();
				  return true;
				}
				break;
	
			case "R":
			  var current_region_id = document.getElementById('current_region_id').value ;
		    if ((page_name_value != "search_results.php") || ( current_region_id != document.search_form.elements["region_id"].value) ) {
				  document.forms["search_form"].submit();
				  return true;
			  }
				break;
	
			case "L":
	  	  if ((page_name_value != "search_results.php") ||($('current_landmark_id').value != document.search_form.elements["landmark_id"].value)) {
		  		document.forms["search_form"].submit();
			  	return true;
			  }
				break;
		 }
	}

	
	//start the search 
	start_sletoh_request();	
	return false;
	
}






//=====================================================================================

function start_sletoh_request()
{
	//alert('Starting start_sletoh_request()');
	
	sletoh_request_status = "started";

	// Widget components
	hide("how_to");
 	show("suitcase_middle");
	hide("suitcase_stand");

	try {
      show_search_in_progress();
			show("hotel_results");
			show("map_container");
   		show('div_show_hide_search_form'); 
   		hide('howto_image'); 
   		hide('div_recommended_accommodation');
			hide_widget_search_form();
	}
	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++) {
	  pars+= ('&' + frm.elements[i].name + '=' + frm.elements[i].value);
	  
	}

	// Clear filters box and set hotel_results
	try{document.getElementById('div_filters_container').innerHTML = "";}catch(e){}
	$("hotel_results").innerHTML = "<div class=\"div_search_results_title\" id='list_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
	}

	showBox('overlay_box','overlay_hotel_details');

	sletoh_xml_timeout_sec = Math.round(sletoh_xml_timeout / 1000);
	
	var overlay_hotel_details_content_div = $('overlay_hotel_details_content');
	
  search_in_progress_html = '<div style="padding:10px;">We are searching lots of hotel web sites for availability and prices. When the search finishes, click prices to book rooms.</div>';
  
  search_in_progress_html += ''
  		+'<div style="width:400px;padding:10px;" id="search_in_progress">'
				+'<div style="width:20px;"><img src="'+ root_path_url +'/images/indicator_circle_ball_big.gif"></div>'
				+'<div style="font-weight:bold;">Search progress:&nbsp;</div>'
				+'<div style="font-weight:bold;" id="search_in_progress_percent">0</div>'
				+'<div style="font-weight:bold; width:20px">%</div>'
				+'<br><br>'
				+'<div id="div_search_in_progress_max_time_left" style=\"display:none;\">'
					+'<div style="font-weight:bold;">Maximum time left:&nbsp;</div>'
					+'<div style="font-weight:bold;" id="search_in_progress_time_left">'+sletoh_xml_timeout_sec+'</div>'
					+'<div style="font-weight:bold;">&nbsp;seconds</div>'
					+'<div class="clr"></div>'
				+'</div>'
			+'</div>';    
    
	overlay_hotel_details_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_hotel_details_close_div = document.getElementById('overlay_hotel_details_close');
	overlay_hotel_details_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)
{
	showBox('overlay_box','overlay_hotel_details');

	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_hotel_details_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;
	}

	showBox('overlay_box','overlay_hotel_details');
	
	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_hotel_details_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;
	}

	showBox('overlay_box','overlay_hotel_details');
	
	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_hotel_details_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;
	}

	showBox('overlay_box','overlay_hotel_details');

	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_hotel_details_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;
	}

	showBox('overlay_box','overlay_hotel_details');
	
	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_hotel_details_content' , url,
							{ method: 'get',
							  parameters: pars
							}
						 );
	

							 
	
}

//=====================================================================================
	
function postcode_match_complete(originalRequest)
{
	//alert("finished");
	Try.these(
			function () { 
				var jsonObject = eval('(' + originalRequest.responseText + ')');
				
				if (jsonObject["error"] == 1)
				{
					//alert(jsonObject["error_message"]);
					var overlay_hotel_details_content_div = $('overlay_hotel_details_content');
					overlay_hotel_details_content_div.innerHTML = jsonObject["error_message"]; 
				}
				else
				{
					$("postcode_id").value = jsonObject["postcode_id"];
					hideBox('overlay_box','overlay_hotel_details');
					start_sletoh_request();
				}


			}
		);
	
}

//=====================================================================================

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) > 40 && 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) {
			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;
		}
   	
   	setTimeout(update_search_in_progress_time_left, 1000);
	}
}



//=====================================================================================

function toggle_search_form()
{
	if ($('search_form_iframe').style.display == "block") {
		hide_widget_search_form();
	}
	else {
		show_widget_search_form();
	}
}


//=====================================================================================

function show_widget_search_form()
{
 	try {
		show('search_form_iframe');
		hide('div_map_iframe');
		var o = $('div_show_hide_search_form_text') ;
		
		if (o != 'undefined') {
		  o.innerHTML = "<b>HIDE</b> search form</a>";
		}
	}
	catch(e)
	{
		jsError('error 20');
	}
}




//=====================================================================================
//=====================================================================================

function hide_widget_search_form()
{
 	try {
		hide('search_form_iframe');
		show('div_map_iframe');
		$('div_show_hide_search_form_text').innerHTML = "<b>SHOW</b> search form</a>";
	}
	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_hotel_details_close_div = document.getElementById('overlay_hotel_details_close');
	overlay_hotel_details_close_div.style.display = "block";
	
	// Close overlay
	$('search_in_progress_percent').innerHTML = "0";
	hideBox('overlay_box','overlay_hotel_details');
	

	// No results
	if (no_availability_message != "") {

		$("list_title").innerHTML = "<div class='div_search_problem'><div class='div_search_error'>" + no_availability_message + "</div></div>";  
		show_widget_search_form();
	}

	// Hotels available
	else if (parseInt(sletoh_search_hotels_available)> 0) {

		//alert("hotels available");
		hide_widget_search_form();
		
  	refresh_filters(search_id);
  	add_hotel_markers('', '', search_id, '');
		hotels_reload('', '', search_id, 0, '', '', 0);
	}
}





//=====================================================================================
//=====================================================================================
//=============== 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_regions_markers()
{
	
	var url = "ajax.php";
	var pars = "action=add_region_markers&region_id="+current_region_id;
	var myAjax = new Ajax.Request( url,
								{ method: 'get',
								  parameters: pars,
								  onComplete: add_json_regions_markers
								}
							 );
	
}		


//=====================================================================================
//=====================================================================================
function add_landmark_markers(landmark_type_id)
{
	var url = "ajax.php";
	var pars = "action=add_landmark_markers&region_id="+current_region_id+"&landmark_type_id="+landmark_type_id;
	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, filters_serialized)
{
	//alert ("Starting add_hotel_markers()");
	var url = "ajax.php";
	var pars = "action=add_hotel_markers&where_mode="+where_mode+'&where_id='+where_id+'&search_id='+search_id+'&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.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;
}





//=====================================================================================
	

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;
	var myAjax = new Ajax.Updater('hotel_results', url,
				{ method: 'get',
				  parameters: pars
				}
			 );

	return;
}










//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=============== FILTERS =============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================



//=====================================================================================
//=====================================================================================

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');
	}

	
	// Get all variable values from form and assign to window array which holds all global variables
	var frm = document.form_filters;
	for (var i=0; i<frm.length;i++)	{
	  window[frm.elements[i].id] = frm.elements[i].value;
	}
	
	// Serialize filters to pass to PHP
	var filters_serialized = '';
	var filters_array = Array();
	for (var i=0; i<frm.length;i++)	{
		var variable_name = frm.elements[i].id;
		var input_type = frm.elements[i].type;
		if (variable_name.substring(0, 6) == "filter") {

			// Get the value depending on type of input field
			switch (input_type) {
				case "checkbox":
				case "radio":
					if (frm.elements[i].checked) {
						filters_array[variable_name] = frm.elements[i].value;
					}
					else {
						filters_array[variable_name] = "";
					}
					break;

				case "select-one":
				case "textarea":
				case "text":
					filters_array[variable_name] = frm.elements[i].value;
					break;
					
				default:
					break;
			}
		}
	}
	filters_serialized = serialize(filters_array);


	// 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;
	}
	
	// Display 'updating' message
	$("hotel_results").innerHTML = "<br><img align='left' src='"+root_path_url+"/images/indicator_circle_ball_big.gif' style='padding:10px;'>Updating...";
	

	// 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 (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, filters_serialized);
	}
	
	return;
}	







//=====================================================================================
//=====================================================================================

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_dropdown('filter_star_rating', '0');
	set_dropdown('filter_guest_rating', '0');
	set_dropdown('filter_board_type', '0');
	set_dropdown('filter_distance', '0');
	set_dropdown('filter_order_by', '0');	
	set_checkbox('filter_expand_view', '');
	hide_div('div_filters_fields'); 

	// Reset hotel list and map
	filters_button_clicked("on", "true");

	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 to a selected option
//=====================================================================================

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;

	var myAjax = new Ajax.Updater('div_filters_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 =============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================



//=====================================================================================
// Check input and then submit to ajax.php
//=====================================================================================

function submit_review()
{ 
	var frm = document.form_write_review;
	// todo - delete this:
	// Get all variable values from form and assign to window array which holds all global variables
	/*
	for (var i=0; i<frm.length;i++)	{
	  window[frm.elements[i].name] = frm.elements[i].value;
	}
	*/

	
	// 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;
		var input_type = frm.elements[i].type;
		
		// Get the value depending on type of input field
		switch (input_type) {
			case "checkbox":
				if (frm.elements[i].checked) {
					data_array[variable_name] = frm.elements[i].value;
				}
				else {
					data_array[variable_name] = "";
				}
				break;

			case "radio":
				if (frm.elements[i].checked) {
					data_array[variable_name] = frm.elements[i].value;
				}
				break;

			case "select-one":
			case "textarea":
			case "text":
			case "hidden":
				data_array[variable_name] = frm.elements[i].value;
				break;

			default:
				break;
		}
	}
	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('review', 'submit', '');

	var url = "ajax.php";
	var myAjax = new Ajax.Updater('div_review_form', url,
			{ method: 'post',
			  parameters: $('form_write_review').serialize(true)
			}
		 );

	return;
}	











//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=============== IGOOGLE =============================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================
//=====================================================================================



//=====================================================================================
// Used when customising igoogle gadget with where_mode and where_id
//=====================================================================================

function get_where_info() {

	// find the destination id 
	destination = document.getElementById("destination");
	
	$.ajax({
		type: "GET",
		url: "./findid.php",
		data: "city="+escape(destination.value),
		async:false, // dont submit the form until get the id and R/L
		success: function(msg){
			d = msg.split('_');
			$('#where_id').val(d[0]);
			$('#where_mode').val(d[1]);
			
			// if no id found for destination then don't submit the form
			if ($('#where_id').val() == '') {
				alert('Enter a destination to see the IDs.')
			}
			else {
				alert("where_mode is '" + $('#where_mode').val() + "' and where_id is '" + $('#where_id').val() + "'\n\nEnter these values into the 'Customise your Search Form' boxes.");
			}
			return false;
		}
	});

	return false;
}








//=====================================================================================
// Date picker for check in
//=====================================================================================

    // check in and check out calendar
    $(function() {
        $("#check_in_date").datepicker({
            showOn: 'both',
            buttonImage: './images/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;
                $("#check_out_date").datepicker('option','minDate',new Date(nd))
            }
        });
    });




//=====================================================================================
// Date picker for check out
//=====================================================================================

     $(function() {
        $("#check_out_date").datepicker({
            showOn: 'both',
            buttonImage: './images/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();
			$("#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();
			
			$("#check_out_date").val(td1);
		}
		catch(e){}
    
		return;
}





