var search_done = 0;

function myopen(filename,windowname,properties)
	{
	mywindow = window.open(filename,windowname,properties);
	}

function getXMLHTTPRequest()
	{
	var request = false;

	if (window.XMLHttpRequest)
		{
		request = new XMLHttpRequest();
		}
	else
		{
		if (window.ActiveXObject)
			{
			try
				{
				request = new ActiveXObject("Msml2.XMLHTTP");
				}
			catch (err1)
				{
				try
					{
					request = new ActiveXObject("Microsoft.XMLHTTP");
					}
				catch (err2)
					{
					request = false;
					}
				}
			}
		}

	return request;
	}

var myRequest = getXMLHTTPRequest();

function getMethod(myurl, query, div_name)
	{
	var myRand = new Date().getTime();
	var modurl = myurl + "?" + query + "&rand=" + myRand;
	myRequest.open("GET", modurl, true);
	myRequest.onreadystatechange = useHttpResponse(div_name);
	myRequest.send(null);
	}

var div_id = '';

function postMethod(myurl, query, div_name, thisform)
	{
	if (thisform)
		{
		var query = '';

		for (i=0,n=thisform.elements.length;i<n;i++)
			{
			if (thisform.elements[i].type == 'radio')
				{
				if (thisform.elements[i].checked == true)
					{
					query = query + '&' + escape(thisform.elements[i].name) + '=' + escape(thisform.elements[i].value);
					}
				}
			else if (thisform.elements[i].type == 'checkbox')
				{
				if (thisform.elements[i].checked == true)
					{
					query = query + '&' + escape(thisform.elements[i].name) + '=' + escape(thisform.elements[i].value);
					}
				}
			else
				{
				query = query + '&' + escape(thisform.elements[i].name) + '=' + escape(thisform.elements[i].value);
				}
			}
		}

	div_id = div_name;
	myRequest.open("POST", myurl, true);
	myRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	myRequest.onreadystatechange = useHttpResponse;
	myRequest.send(query);
	}

function useHttpResponse()
	{
	if (myRequest.readyState == 4)
		{
		if (myRequest.status == 200)
			{
			var response = myRequest.responseText;
//			document.getElementById(div_id).innerHTML = response;
			sethtml(div_id,response);
			}
		else
			{
			alert("An error has occured:" + myRequest.statusText);
			}
		}
	}

// ---------- geocode ----------
function postMethod_geocode(myurl, query)
	{
	myRequest.open("POST", myurl, true);
	myRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	myRequest.onreadystatechange = useHttpResponse_geocode;
	myRequest.send(query);
	}

function useHttpResponse_geocode()
	{
	if (myRequest.readyState == 4)
		{
		if (myRequest.status == 200)
			{
			var response = myRequest.responseText;

			if (response == 'failed')
				{
				alert('Geocode was unsuccessful. Please ensure that your postcode is correct, or manually enter the latitute and longitude.');
				}
			else
				{
				var elements = response.split('|');
				document.getElementById('id_lat').value = elements[0];
				document.getElementById('id_lon').value = elements[1];
				}
			}
		else
			{
			alert("An error has occured:" + myRequest.statusText);
			}
		}
	}
// ---------- geocode ----------

// ---------- find businesses ----------
function postMethod_find_businesses(myurl, query)
	{
	myRequest.open("POST", myurl, true);
	myRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	myRequest.onreadystatechange = useHttpResponse_find_businesses;
	myRequest.send(query);
	}

function createMarker(point,html)
	{
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
		});
	return marker;
	}

function useHttpResponse_find_businesses()
	{
	if (myRequest.readyState == 4)
		{
		if (myRequest.status == 200)
			{
			var response = myRequest.responseText;

			if (response == 'none')
				{
				document.getElementById('id_raw_timer').innerHTML = 'stop';
//				document.getElementById('id_results').innerHTML = 'No establishments were found in the vicinity. You might like to try again with a greater distance. [ <a href="/">Try Again</a> ]';
				document.getElementById('id_results').innerHTML = 'We are sorry we are unable to find any vacancies matching the dates and location you are requesting. You might like to try again but with a greater distance. [ <span style="text-decoration: underline; cursor: pointer;" onClick="JavaScript: document.getElementById(\'id_search_contents\').style.display = \'block\'; document.getElementById(\'id_search_contents_2\').style.display = \'none\'; document.getElementById(\'box2\').style.display = \'none\';  document.getElementById(\'box2-footer\').style.display = \'none\';">Try Again</span> ]';
				}
			else if (response == 'queued')
				{
				document.getElementById('id_raw_timer').innerHTML = 'stop';
				document.getElementById('id_results').innerHTML = 'Due to the late hour now, your request will only be sent at 8 a.m. the next morning and we will get back to you as soon as we have the results.';
				}
			else if (response == 'failed')
				{
				document.getElementById('id_raw_timer').innerHTML = 'stop';
//				document.getElementById('id_results').innerHTML = 'No establishments accepted your booking. You might like to try again with a greater distance. [ <a href="./search2.php">Try Again</a> ]';
				document.getElementById('id_results').innerHTML = 'We are sorry we are unable to find any vacancies matching the dates and location you are requesting, due to a very high demand for rooms at that time. You might like to try again but with a greater distance. [ <span style="text-decoration: underline; cursor: pointer;" onClick="JavaScript: document.getElementById(\'id_search_contents\').style.display = \'block\'; document.getElementById(\'id_search_contents_2\').style.display = \'none\'; document.getElementById(\'box2\').style.display = \'none\';  document.getElementById(\'box2-footer\').style.display = \'none\';">Try Again</span> ]';
				}
			else if (response == 'repeat')
				{
				document.getElementById('id_raw_timer').innerHTML = 'stop';
				document.getElementById('id_results').innerHTML = 'We are sorry but there is a limit of 4 requests within a 24-hour period.';
				}
			else
				{
				var businesses = response.split('~');

				for (var i=0; i<businesses.length; i++)
					{
					var this_business = businesses[i].split('|');

					var this_business_id = this_business[0];
					var this_business_name = this_business[1];
					var this_html = this_business[2];
					var this_lat = this_business[3];
					var this_lon = this_business[4];
					var this_distance = this_business[5];

					var point = new GPoint(this_lon, this_lat);
					var marker = createMarker(point,this_html)
					map.addOverlay(marker);
					}

				var results_count = businesses.length;

				document.getElementById('id_raw_timer').innerHTML = 'stop';
				document.getElementById('id_timer').innerHTML = 'completed';

				if (results_count == 1)
					{
					document.getElementById('id_results').innerHTML = '<strong>Received ' + results_count + ' reply</strong>. Click the flags on the map for more details. If you left your number you will be called shortly.';
					}
				else
					{
					document.getElementById('id_results').innerHTML = '<strong>Received ' + results_count + ' replies</strong>. Click the flags on the map for more details. If you left your number you will be called shortly.';
					}

				search_done = 1;
				}

			document.getElementById('loader').style.background = 'none';
			}
//		else
//			{
//			alert("An error has occured:" + myRequest.statusText + ' ' + myRequest.status);
//			}
		}
	}
// ---------- find businesses ----------


// ---------- update search status to prevent timeout ----------
var myRequest2 = getXMLHTTPRequest();

function postMethod_update_search_status(query)
	{
	myRequest2.open("POST", 'http://www.getbacktome.co.uk/ajax_update_search_status.php', true);
	myRequest2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	myRequest2.onreadystatechange = useHttpResponse_update_search_status;
	myRequest2.send(query);
	}

function useHttpResponse_update_search_status()
	{
	if (myRequest2.readyState == 4)
		{
		if (myRequest2.status == 200)
			{
			var response = myRequest2.responseText;

			if (response == 'failed')
				{
				document.getElementById('id_raw_timer').innerHTML = 'stop';
				document.getElementById('id_results').innerHTML = 'No establishments accepted your booking. You might like to try again with a greater distance. [ <a href="./search2.php">Try Again</a> ]';
				}
			else if (response == 'pending')
				{
//				document.getElementById('id_results').innerHTML = 'Still searching... ' + new Date().getTime();
				document.getElementById('id_results').innerHTML = 'Still searching... ';
				}
			else
				{
				var businesses = response.split('~');

				for (var i=0; i<businesses.length; i++)
					{
					var this_business = businesses[i].split('|');

					var this_business_id = this_business[0];
					var this_business_name = this_business[1];
					var this_html = this_business[2];
					var this_lat = this_business[3];
					var this_lon = this_business[4];
					var this_distance = this_business[5];

					var point = new GPoint(this_lon, this_lat);
					var marker = createMarker(point,this_html)
					map.addOverlay(marker);
					}

				var results_count = businesses.length;

				document.getElementById('id_raw_timer').innerHTML = 'stop';

				if (results_count == 1)
					{
					document.getElementById('id_results').innerHTML = '<strong>Received ' + results_count + ' reply</strong>, see the map for more details. The establishment will contact you shortly.';
					}
				else
					{
					document.getElementById('id_results').innerHTML = '<strong>Received ' + results_count + ' replies</strong>, see the map for more details. One or more of these will contact you shortly.';
					}
				}

			document.getElementById('loader').style.background = 'none';
			}
//		else
//			{
//			alert("An error has occured:" + myRequest2.statusText);
//			}
		}
	}
// ---------- update search status to prevent timeout ----------

function sethtml(div,content) { 
         var search = content; 
         var script; 
         var is_singleq = 0; var singleq = "'"; 
         var is_doubleq = 0; var doubleq = '"'; 
         var is_escaped = 0; var escap = "\\"; 
         var layer = 0; 
                
         while( script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/)) { 
            search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length); 
            if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) break; 
            block = search.substr(0, search.indexOf(RegExp.$1)); 
            search = search.substring(block.length + RegExp.$1.length); 
             
            while(func = block.match(/(function(.+?)\((.*?)\)\s*\{)/)) { 
               eval(block.substr(0,block.indexOf(RegExp.$1))); 
               // for evaluating non functions 
                
               block = block.substr(block.indexOf(RegExp.$1) + RegExp.$1.length); 
               name = RegExp.$2; 
               param = RegExp.$3; 
                
               is_singleq = 0; 
               is_doubleq = 0; 
               is_escaped = 0; 
               layer = 0; 
                
                
               for(i=0;i<block.length;i++) { 
                  c = block.substr(i,1); 
                   
                  if ((is_singleq || is_doubleq) && is_escaped) { 
                     is_escaped = 0; 
                  } else if (!is_doubleq && (c==singleq)) { 
                     is_singleq = !is_singleq; 
                  } else if (!is_singleq && (c==doubleq)) { 
                     is_doubleq = !is_doubleq; 
                  } else if ((is_singleq || is_doubleq) && (c==escap)) { 
                     is_escaped = 1; 
                  } else if ( c=="{") { 
                     layer++; 
                  } else if ( c=="}") { 
                     if ( layer==0 ) { 
                        break; 
                     } 
                     layer--; 
                  } 
               } 
                
               code = block.substr(0,i-1); 
               block = block.substr(i +1); 
                
               code = code.replace(/\n/g, '\\n'); 
               code = code.replace(/\r/g, '\\r'); 
               code = code.replace(/'/g,"\\'"); 
                
               eval(name + " = new Function('"+param+"','"+code+"');"); 
            } 
            eval(block); // for evaluating non functions 
         } 
         document.getElementById(div).innerHTML=content; 
      }

function display_message(div_id, msg)
	{
	document.getElementById(div_id).innerHTML = msg; 
	}

function show_hide_section(id)
	{
	if (document.getElementById(id).style.display == 'none')
		{
		document.getElementById(id).style.display = 'block';
		}
	else
		{
		document.getElementById(id).style.display = 'none';
		}
	}

