var xmlHttp;
var nMax;
var nCurrent;
var map;
var geocoder;
var sZip;
var sAssoc;
var sPage;
var sKspec;
var sKcode;
var sKtherapy;
var markers = new Array();
// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon(G_DEFAULT_ICON);

baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(16, 19);
baseIcon.shadowSize = new GSize(20, 25);
baseIcon.iconAnchor = new GPoint(9, 25);
baseIcon.infoWindowAnchor = new GPoint(9, 2);

geocoder = new GClientGeocoder();

function GMapInitialize(response) {
	if (GBrowserIsCompatible()) {
		place = response.Placemark[0];
		if (!response || response.Status.code != 200) {
        	alert("Sorry, we were unable to geocode that address");
      	} else {
			if (typeof(map) == 'undefined')
				map = new GMap2(document.getElementById("map_canvas"));
			
			map.setCenter(new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]), 8);
			map.setUIToDefault();
			
			
		}
	}
}


function createMarker(point, text) {
	// Create a lettered icon for this point using our icon class
	var letteredIcon = new GIcon(baseIcon);

	letteredIcon.image = "http://www.kfed.co.uk/search/KFmarker.png";
	
	// Set up our GMarkerOptions object
	markerOptions = { icon:letteredIcon };
	var marker = new GMarker(point, markerOptions);
	
	GEvent.addListener(marker, "click", function() {
		var t = text.replace("&lt;", "<").replace("&lt;", "<").replace("&lt;", "<").replace("&lt;", "<").replace("&lt;", "<").replace("&lt;", "<").replace("&gt;", ">").replace("&gt;", ">").replace("&gt;", ">").replace("&gt;", ">").replace("&gt;", ">").replace("&gt;", ">");
		marker.openInfoWindowHtml(t);
	});
	
	markers.push(marker);
	
	return marker;
}

function getMax()
{
	xmlHttp = GetXmlHttpObject();
	
	document.getElementById("response").innerHTML="<div align=\"center\" style=\"z-index:2500; float:center; padding-top:50px; font-family:Arial, Helvetica, sans-serif; color:#226666; text-align:center; font-size:15px; background:#FFFFFF; border:2px solid #429760\"><img src=\"/search/ajax-loader.gif\" width=\"50\" height=\"50\" /><br />Processing Practitioner Search, one moment please </div>";
	
	if (xmlHttp == null)
	{
		alert("Browser does not support HTTP Request");
		return;
	}
	
	var url="max.php";
	
	url=url+"?sid="+Math.random();
	
	xmlHttp.onreadystatechange=maxStateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);	
}

function updateDatabase()
{ 
	xmlHttp = GetXmlHttpObject();
	
	if (xmlHttp == null)
	{
		alert("Browser does not support HTTP Request");
		return;
	}
	
	var url="fetch.php";
	
	url=url+"?s="+nCurrent;
	url=url+"&o=1";
	url=url+"&sid="+Math.random();
	
	xmlHttp.onreadystatechange=updateStateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function loadMember(pMember,pZip)
{ 
	sMember = pMember;
	sZip = pZip;
	
	xmlHttp = GetXmlHttpObject();
	
	document.getElementById("response").innerHTML="<div align=\"center\" style=\"padding-top:50px; lfont-family:Arial, Helvetica, sans-serif; color:#226666; text-align:center; font-size:15px\"><img src=\"/search/ajax-loader.gif\" width=\"50\" height=\"50\" /><br />Processing Practitioner Search, one moment please </div>";
	
	if (xmlHttp == null)
	{
		alert("Browser does not support HTTP Request");
		return;
	}
	
	var url="/search/load.php";
	
	url=url+"?m="+pMember;
	url=url+"&q="+pZip;
	url=url+"&kdis=500";
	url=url+"&sid="+Math.random();
	
	xmlHttp.onreadystatechange=memberDataChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function memberDataChanged() 
{
	sPage = 0;
	
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
	{
		var pResponse = xmlHttp.responseText;
		
		if (pResponse.toLowerCase().indexOf("error") == -1)
		{
			var mArray = pResponse.split(",");
			var intArray = new Array(mArray.length);
			var pStr = "";
			
			geocoder.getLocations(sZip, GMapInitialize);
			
			if (typeof(map) == 'undefined')
				map = new GMap2(document.getElementById("map_canvas"));
			
			if (pResponse != "")
			{
				for (i = 0; i < mArray.length; i++)
				{
					intArray[i] = [parseFloat(mArray[i].split("|")[0]), mArray[i].split("|")[1]];
				}
				
				intArray.sort(sortNumber);
				
				for (i = (parseInt(sPage) * 12); i < (((parseInt(sPage) + 1) * 12) < intArray.length ? ((parseInt(sPage) + 1) * 12) : intArray.length); i++)
				{
					if (intArray[i][1] != null)
					{
						var lat = intArray[i][1].split(":")[1];
						var long = intArray[i][1].split(":")[0];
						var bubble = intArray[i][1].split(":")[3].replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("MAILTO", "mailto:").replace("HTTP", "http://").replace("HTTP", "http://");
						var s = "markers[" + i + "].openInfoWindowHtml(&quot;" + bubble + "&quot;)";
						var txt = intArray[i][1].split(":")[2].replace("LINK_HERE", s).replace("MAILTO", "mailto:").replace("HTTP", "http://").replace("HTTP", "http://");
						
						var latlng = new GLatLng(lat,long);
						map.addOverlay(createMarker(latlng, bubble));
						
						pStr += txt;
					}
					else
						i--;
				}
				
				pStr = '<table class="presults" cellpadding="3" cellspacing="0" id="gradient-style" summary="Practitioner Search Results"><thead><tr><td width="100%"></td></tr></thead>' + pStr + '</table>';
				
				document.getElementById("response").innerHTML = pStr;
			}
			else
				document.getElementById("response").innerHTML = "<div align=\"center\" style=\"font-family:Arial, Helvetica, sans-serif; color:#226666; text-align:center; font-size:15px\"><br /><strong>NO RESULTS FOUND </strong><br />Sorry but we were unable to find a practitioner within 50 miles<br />of the postcode/town you submitted. Why not try entering a<br />nearby town name in the postcode field instead?</div>";
		}
		else
			document.getElementById("response").innerHTML = pResponse;
	}
}

function loadData(pZip,pPage,pAssoc,pKspec,pKcode,pKtherapy)
{ 
	sZip = pZip;
	sAssoc = pAssoc;
	
	if (pPage == undefined)
		sPage = 0;
	else
		sPage = pPage;
	
	sKspec = pKspec;
	sKcode = pKcode;
	sKtherapy = pKtherapy;
	
	xmlHttp = GetXmlHttpObject();
	
	document.getElementById("response").innerHTML="<div align=\"center\" style=\"padding-top:50px; lfont-family:Arial, Helvetica, sans-serif; color:#226666; text-align:center; font-size:15px\"><img src=\"/search/ajax-loader.gif\" width=\"50\" height=\"50\" /><br />Processing Practitioner Search, one moment please </div>";
	
	if (xmlHttp == null)
	{
		alert("Browser does not support HTTP Request");
		return;
	}
	
	var url="/search/load.php";
	
	url=url+"?q="+pZip;
	url=url+"&p="+sPage;
	url=url+"&a="+sAssoc;
	url=url+"&s="+sKspec;
	url=url+"&c="+sKcode;
	url=url+"&t="+sKtherapy;
	url=url+"&kdis=75";
	url=url+"&sid="+Math.random();
	
	//alert(url);
	
	xmlHttp.onreadystatechange=stateChanged;
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function sortNumber(a, b)
{
	return a[0] - b[0];
}

function stateChanged() 
{ 
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
	{
		var pResponse = xmlHttp.responseText;
		
		if (pResponse.toLowerCase().indexOf("error") == -1)
		{
			var mArray = pResponse.split(",");
			var intArray = new Array(mArray.length);
			var pStr = "";
			
			geocoder.getLocations(sZip+",UK", GMapInitialize);
			
			if (typeof(map) == 'undefined')
				map = new GMap2(document.getElementById("map_canvas"));
			
			if (pResponse != "")
			{
				for (i = 0; i < mArray.length; i++)
				{
					intArray[i] = [parseFloat(mArray[i].split("|")[0]), mArray[i].split("|")[1]];
				}
				
				intArray.sort(sortNumber);
				
				for (i = (parseInt(sPage) * 12); i < (((parseInt(sPage) + 1) * 12) < intArray.length ? ((parseInt(sPage) + 1) * 12) : intArray.length); i++)
				{
					if (intArray[i][1] != null)
					{
						var lat = intArray[i][1].split(":")[1];
						var long = intArray[i][1].split(":")[0];
						var bubble = intArray[i][1].split(":")[3].replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("LINE_BREAK", "<br />").replace("MAILTO", "mailto:").replace("HTTP", "http://").replace("HTTP", "http://");
						var s = "markers[" + i + "].openInfoWindowHtml(&quot;" + bubble + "&quot;)";
						var txt = intArray[i][1].split(":")[2].replace("<tr>", "<tr><td><a href=# onclick='" + s + "'>" + (i + 1) + "</a></td>").replace("LINK_HERE", "<a href=# onclick='" + s + "'><img src='KFmarker.png' border='0' /></a>");
						
						var latlng = new GLatLng(lat,long);
						map.addOverlay(createMarker(latlng, bubble));
						
						pStr += txt;
					}
					else
						i--;
				}
				
				pStr = '<div style="margin:5px auto; text-align:center; font-size:85%; color:#777">Listed below are the results of your search, if you see an incorrect map, please try refining your search , e.g. St Andrews, Scotland</div><table class="presults" cellpadding="3" cellspacing="0" id="gradient-style" summary="Practitioner Search Results"><thead><tr><td bgcolor="#EEEEEE" style="width: 50px;" scope="col"><strong>#</strong></td><td bgcolor="#EEEEEE" style="width: 400px;" scope="col"><strong>Name</strong></td><td bgcolor="#EEEEEE" style="width: 50px;" scope="col"></td><td bgcolor="#EEEEEE" style="width: 300px;" scope="col"><strong>Address</a></strong></td><td bgcolor="#EEEEEE" style="width: 100px;" scope="col"><strong>Distance</strong></td><td bgcolor="#EEEEEE" style="width: 50px;" scope="col"></td></tr></thead>' + pStr;
				
				if (intArray.length <= 12)
					pStr += '</table>';
				else if (intArray.length <= 24)
					pStr += '</table><div id="paging">View more results >> <ul ><li><a href="javascript:void(0);" onclick="loadData(\'' + sZip + '\',\'0\',\'' + sAssoc + '\',\'' + sKspec + '\',\'' + sKcode + '\',\'' + sKtherapy + '\');">1</a></li><li><a href="javascript:void(0);" onclick="loadData(\'' + sZip + '\',\'1\',\'' + sAssoc + '\',\'' + sKspec + '\',\'' + sKcode + '\',\'' + sKtherapy + '\');">2</a></li></ul></div>';
				else
					pStr += '</table><div id="paging">View more results >> <ul ><li><a href="javascript:void(0);" onclick="loadData(\'' +  sZip + '\',\'0\',\'' + sAssoc + '\',\'' + sKspec + '\',\'' + sKcode + '\',\'' + sKtherapy + '\');">1</a></li><li><a href="javascript:void(0);" onclick="loadData(\'' + sZip  + '\',\'1\',\'' + sAssoc + '\',\'' + sKspec + '\',\'' + sKcode + '\',\'' + sKtherapy + '\');">2</a></li><li><a href="javascript:void(0);" onclick="loadData(\'' + sZip + '\',\'2\',\'' + sAssoc + '\',\'' + sKspec + '\',\'' + sKcode + '\',\'' + sKtherapy + '\');">3</a></li></ul></div>';
				
				
				document.getElementById("response").innerHTML = pStr;
			}
			else
				document.getElementById("response").innerHTML = "<div align=\"center\" style=\"font-family:Arial, Helvetica, sans-serif; color:#226666; text-align:center; font-size:15px\"><br /><strong>NO RESULTS FOUND </strong><br />Sorry but we were unable to find a practitioner within 50 miles<br />of the postcode you submitted. Why not try entering a<br />town name in the postcode field?</div>";
		}
		else
			document.getElementById("response").innerHTML = pResponse;
	}
}

function stripHTML(oldString) {
	var newString = "";
	var inTag = false;

	for(var i = 0; i < oldString.length; i++)
	{
		if(oldString.charAt(i) == '<')
			inTag = true;
		if(oldString.charAt(i) == '>')
		{
			if(oldString.charAt(i+1)!="<")
			{
				inTag = false;
				i++;
			}
		}
		
		if(!inTag) newString += oldString.charAt(i);
	}
	
	return newString;
}

function updateStateChanged()
{
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
	{
		document.getElementById("response").innerHTML=nCurrent+"/"+nMax;
		//alert(xmlHttp.responseText);
		if (nCurrent != (nMax - 1))
		{
			nCurrent++;
			updateDatabase();
		}
	}
}

function maxStateChanged()
{
	if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete")
	{
		nMax = parseInt(xmlHttp.responseText);
		//alert(xmlHttp.responseText);
		nCurrent = 0;
		updateDatabase();
	}
}

function GetXmlHttpObject()
{
	var xmlHttp=null;

	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		//Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	return xmlHttp;
}

