// JavaScript Document

var map = null;

var RedIcon=new GIcon(G_DEFAULT_ICON);

RedIcon.image="http://www.worldwifinder.com/images/red-marker.png";
RedIcon.shadow="http://www.worldwifinder.com/images/marker-shadow.png";
RedIcon.iconSize = new GSize(32, 32);
RedIcon.shadowSize = new GSize(59, 32);
RedIcon.iconAnchor = new GPoint(16, 32);
RedIcon.infoWindowAnchor = new GPoint(5, 1);

var GreenIcon=new GIcon(G_DEFAULT_ICON);

GreenIcon.image="http://www.worldwifinder.com/images/green-marker.png";
GreenIcon.shadow="http://www.worldwifinder.com/images/marker-shadow.png";
GreenIcon.iconSize = new GSize(32, 32);
GreenIcon.shadowSize = new GSize(59, 32);
GreenIcon.iconAnchor = new GPoint(16, 32);
GreenIcon.infoWindowAnchor = new GPoint(5, 1);

var BlueIcon=new GIcon(G_DEFAULT_ICON);

BlueIcon.image="http://www.worldwifinder.com/images/blue-marker.png";
BlueIcon.shadow="http://www.worldwifinder.com/images/marker-shadow.png";
BlueIcon.iconSize =  new GSize(32, 32);
BlueIcon.shadowSize = new GSize(59, 32);
BlueIcon.iconAnchor = new GPoint(16, 32);
BlueIcon.infoWindowAnchor = new GPoint(5, 1);


function load()
{
	if (GBrowserIsCompatible()) 
	{
		map = new GMap2(document.getElementById("map"));
		map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(0, 0), 1);
		map.clearOverlays();
	}
}

function createMarker(id, point, name, address, city, type, postcode, paidfor) 
{
	var urlnewname=name;
	reg = /\s+/g;
	urlnewname=urlnewname.replace (reg,'-');
	urlnewname=urlnewname.replace (/-&-/g,'_and_');
	eval("var marker"+id);
	if (paidfor=="0")
	{
		eval("marker"+id+" = new GMarker(point,{icon:GreenIcon,title:\"" + name + "\"})");
	}
	else
	{
		eval("marker"+id+" = new GMarker(point,{icon:RedIcon,title:\"" + name + "\"})");
	}
	GEvent.addListener(eval("marker"+id), "click", function() 
	{
    	eval("marker"+id).openInfoWindowHtml("<table border='0'><tr><td colspan='2' align='center'><strong>" + name + "</strong></td></tr><tr><td rowspan='4'></td><td>" + address + "</td></tr><tr><td>" + city + "</td></tr><tr><td>" + type + "</td></tr><tr><td>" + postcode + "</td></tr><tr><td colspan='2' align= 'center'></td></tr></table>");
  	});
	return eval("marker"+id);
}

function btn_submitclk()
{
	
	var location=document.getElementById("tb_location").value;
	var distance=document.getElementById("tb_range").value;
	
	if (location=="")
	{
		document.getElementById("output").innerHTML="<p style='color:#FF0000'>Please enter a location</p>";
	}
	
	if (distance=="")
	{
		document.getElementById("output").innerHTML+="<p style='color:#FF0000'>Please enter a distance</p>";
	}
	
	if (distance!=""&&location!="")
	{
	
		document.getElementById("output").innerHTML="<img src='images/loading.gif' alt='Loading' />";
		
		document.getElementById("map").style.display="block";
		document.getElementById("map").style.width="650px";
		document.getElementById("map").style.height="400px";
		
		document.getElementById("key").style.display="block";
		
		load();
		
		bounds = null;
   		bounds = new GLatLngBounds(); 
		distanceforoutput=distance;
		map.clearOverlays();
		
		//Plot the location
		PlotUserPostcode(location,distance);
	}
}

function PlotUserPostcode(postcode,distance) 
{
	localSearch.setSearchCompleteCallback(null, 
	function() 
	{
		if (localSearch.results[0])
		{		
			var resultLat = localSearch.results[0].lat;
			var resultLng = localSearch.results[0].lng;

			var point = new GLatLng(resultLat,resultLng);
			bounds.extend(point);
					
			var pcmarker = new GMarker(point,BlueIcon);
			pcmarkerpoint=point;

			GEvent.addListener(pcmarker, "click", function() 
			{	
    			pcmarker.openInfoWindowHtml("Posistion for "+postcode+" with a radius of "+distance+" km");
			});
			map.addOverlay(pcmarker);
				
			//Draw the radius circle
			var givenQuality=75;
			//edge colour is black
			var colour="#970479";
			//fill colour is green
			var fillcolour="#00FF00";
			//thickness
			var thick="1";
			
			map.setCenter(point);
			
			drawCircle(point, distance, givenQuality, colour,thick,1,fillcolour,0.5);	
			
			showwithoptions(distance,point.lat(),point.lng());
		}
		else
		{
			document.getElementById("addwifioutput").innerHTML="";
			document.getElementById("panel").innerHTML="";
		}
	});		
	localSearch.execute(postcode);
	
}


function drawCircle(center, radius, nodes, liColor, liWidth, liOpa, fillColor, fillOpa)
{
	var latConv = center.distanceFrom(new GLatLng(Number(center.lat())+Number(0.1), center.lng()))/100;
	var lngConv = center.distanceFrom(new GLatLng(center.lat(), Number(center.lng())+Number(0.1)))/100;

	var points = [];
	var step = parseInt(360/nodes)||10;
	
	for(var i=0; i<=360; i+=step)
	{
		var pint = new GLatLng(Number(center.lat()) + Number((radius/latConv * Math.cos(i * Math.PI/180))), Number(center.lng()) + 	Number((radius/lngConv * Math.sin(i * Math.PI/180))));
		points.push(pint);
		bounds.extend(pint); //this is for fit function
	}
	poly = new GPolygon(points,liColor,liWidth,liOpa,fillColor,fillOpa);
	map.addOverlay(poly);
}

function zoomtofitall(map)
{
	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());
}

function showwithoptions(rangedistance,baselat,baselng) 
{
	if (GBrowserIsCompatible()) 
	{
		var xmlHttp;
		try
    	{
    		// Firefox, Opera 8.0+, Safari
    		xmlHttp=new XMLHttpRequest();
    	}
  		catch (e)
    	{
			// Internet Explorer
			try
			{
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				try
				{
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e)
				{
					alert("Your browser does not support AJAX!");
					return false;
				}
			}
		}
	
		xmlHttp.onreadystatechange=function()
		{
			if(xmlHttp.readyState==4)
			{

				document.getElementById("output").innerHTML="<p>Reading Results...</p>";
				var	texttoshow="<ol>";
				var xml = GXml.parse(xmlHttp.responseText);	
				var markers = xml.documentElement.getElementsByTagName("marker");
				if (markers.length==0)
				{
					document.getElementById("output").innerHTML="<p>Sorry, no WiFi points found! If you know of a WiFi location then please <a href='add-wifi.htm'>add it yourself</a>.</p>";
					document.getElementById("panel").innerHTML="";
				}
				else
				{
					for (var i = 0; i < markers.length; i++) 
					{
						var id = markers[i].getAttribute("id");
						var name = markers[i].getAttribute("name");
						var address = markers[i].getAttribute("address");
						var city = markers[i].getAttribute("city");
						var type = markers[i].getAttribute("type");
						var postcode = markers[i].getAttribute("postcode");
						var paidfor = markers[i].getAttribute("paidfor");
						var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
						var marker = createMarker(id, point, name, address, city, type, postcode, paidfor);
							
						map.addOverlay(marker);
						if (paidfor=="0")
						{
							if(typeof(isadmin) !== 'undefined') 
							{
								texttoshow+="<li><img src='../images/green-marker.png' alt='"+name+" has Free WiFi' /> "+name+" ("+address+") (<a href='edit-wifi.htm?wifipid="+id+"'>edit</a>) (<a href='manager/delete-wifi.php?mode=1&num="+id+"'>delete</a>)</li>";
							}
							else
							{
								texttoshow+="<li><img src='../images/green-marker.png' alt='"+name+" has Free WiFi' /> "+name+" ("+address+") (<a href='edit-wifi.htm?wifipid="+id+"'>edit</a>)</li>";
							}		
						}
						else
						{
							if(typeof(isadmin) !== 'undefined')
							{
								texttoshow+="<li><img src='../images/red-marker.png' alt='"+name+" has Paid For WiFi' /> "+name+" ("+address+") (<a href='edit-wifi.htm?wifipid="+id+"'>edit</a>) (<a href='manager/delete-wifi.php?mode=1&num="+id+"'>delete</a>)</li>";
							}
							else
							{
								texttoshow+="<li><img src='../images/red-marker.png' alt='"+name+" has Paid For WiFi' /> "+name+" ("+address+") (<a href='edit-wifi.htm?wifipid="+id+"'>edit</a>)</li>";
							}					
						}
					};
				
					texttoshow+="</ol>";
					fillpanel(texttoshow,markers.length);
					document.getElementById("output").innerHTML="<p>Done! See the list below</p>";
					zoomtofitall(map);
				}
			}
		};
		var rn=Math.floor(Math.random()*9999);				
		xmlHttp.open("GET","ajax/get-wifi-data.php?rn="+rn+"&rangedistance="+rangedistance+"&baselat="+baselat+"&baselng="+baselng,true);	
		xmlHttp.send(null);
		
	}
}
	  
function fillpanel(texttoshow,nomarkers)
{
	document.getElementById("panel").innerHTML="<h2>"+nomarkers+" Wi-Fi Points Within "+distanceforoutput+" km Range</h2> "+texttoshow+" <br/>";
}
	  	  
function makeurl(inp)
{
	 out=inp.toLowerCase();
	 out=out.replace(/ /g,"-");
	 return out;
}

var localSearch = new GlocalSearch();
function ftn_savepoint()
{
	//alert ("w");
	var postcode=document.getElementById("tb_pc").value;
	if (postcode!="")
	{
		document.getElementById("addwifioutput").innerHTML="<img src='images/loading.gif' alt='Loading' />";
		
		gpc(postcode);
	}
}

function gpc(postcode) 
{
	if (postcode.length>4)
	{
		localSearch.setSearchCompleteCallback(null, 
		function() 
		{
			if (localSearch.results[0])
			{		
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var name=trim(document.getElementById('tb_wifiname').value);
				var address=trim(document.getElementById('tb_add').value);
				var city=trim(document.getElementById('tb_city').value);
				var postcode=document.getElementById('tb_pc').value;
				var type=document.getElementById('tb_type').value;

				savewifitodb(name,address,city,postcode,type,resultLat,resultLng);
			}
		});		
		localSearch.execute(postcode.toUpperCase());
	}
}

function savewifitodb(name,address,city,postcode,type,lat,lng) 
{
	//Create a boolean variable to check for a valid MS instance.
	var xmlhttp = false;
	//Check if we are using IE.
	try 
	{
		//If the javascript version is greater than 5.
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} 
	catch (e) 
	{
		//If not, then use the older active x object.
		try 
		{
			//If we are using IE.
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} 
		catch (E)
		{
			//Else we must be using a non-IE browser.
			xmlhttp = false;
		}
	}
	
	//If we are using a non-IE browser, create a javascript instance of the object.
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{
		xmlhttp = new XMLHttpRequest();
	}
	xmlhttp.onreadystatechange=function()
	{
		if(xmlhttp.readyState==4)
		{
			document.getElementById("addwifioutput").innerHTML="<p>Request Sent!</p>";
		}
	};
	var ran_number= Math.random()*5000;
	xmlhttp.open("GET","ajax/add-new-wi-fi-point.php?name="+name+"&add="+address+"&city="+city+"&postcode="+postcode+"&type="+type+"&lat="+lat+"&lng="+lng+"&rn="+ran_number,true);
	xmlhttp.send(null);	
}

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}


