//<![CDATA[

var map;
var selButton;

var a1 = new GLatLng(-31.972751623262013,115.81187903881073);
var gridLngOffset = 0.00071;
var gridLatOffset = 0.000653;

var latCenter = -31.977921000068807;
var lngCenter = 115.81868648529053;
var zoomCenter = 16;

//used to compensate for the movement of google satellite images.
var lngOffset = 0.000;
var latOffset = 0.000; 

var uwaOverlay;
var mm;
var gmarkers = [];
var pmarkers = [];
var tmarkers = [];

var baseIcon = new GIcon();
baseIcon.iconSize=new GSize(32,32);
baseIcon.shadowSize=new GSize(56,32);
baseIcon.iconAnchor=new GPoint(16,32);
baseIcon.infoWindowAnchor=new GPoint(16,0);
	  
var pIcon = new GIcon(baseIcon, "/templates/gmap/images/icons/icon7.png", null, "/templates/gmap/images/icons/icon7s.png");
var tIcon = new GIcon(baseIcon, "/templates/gmap/images/icons/icon22.png", null, "/templates/gmap/images/icons/icon22s.png");


function CustomGetTileUrlClear(a,b) {
	var output = "";
	if (b==16 && a.x>=53850 && a.x<=53853 && a.y>=38916 && a.y<= 38919) {
		output = "/templates/gmap/images/zoom16maps/"+(a.x)+"_"+(a.y)+"_"+b+".png";
	}
	else if (b==17 && a.x>=107701 && a.x<=107706 && a.y>=77832 && a.y<= 77838) {
		output = "/templates/gmap/images/zoom17maps/"+(a.x)+"_"+(a.y)+"_"+b+".png";
	}
	else if (b==18 && a.x>=215403 && a.x<=215412 && a.y>=155665 && a.y<= 155677) {
		output = "/templates/gmap/images/zoom18maps/"+(a.x)+"_"+(a.y)+"_"+b+".png";
	}
	else if (b==15 && a.x>=26925 && a.x<=26926 && a.y>=19458 && a.y<= 19459) {
		output = "/templates/gmap/images/zoom15maps/"+(a.x)+"_"+(a.y)+"_"+b+".png";
	}
	else {
	  //return G_NORMAL_MAP.getTileLayers()[0].getTileUrl(a,b);
		//output = G_SATELLITE_MAP.getTileLayers()[0].getTileUrl(a,b);
		output = "http://www.google.com/mapfiles/transparent.gif";
	}
	return output;
}

function CustomGetTileUrlSolid(a,b) {
	var output = "";
	if (b==16 && a.x>=53850 && a.x<=53853 && a.y>=38916 && a.y<= 38919) {
		output = "/templates/gmap/images/zoom16maps/"+(a.x)+"_"+(a.y)+"_"+b+".gif";
	}
	else if (b==17 && a.x>=107701 && a.x<=107706 && a.y>=77832 && a.y<= 77838) {
		output = "/templates/gmap/images/zoom17maps/"+(a.x)+"_"+(a.y)+"_"+b+".gif";
	}
	else if (b==18 && a.x>=215403 && a.x<=215412 && a.y>=155665 && a.y<= 155677) {
		output = "/templates/gmap/images/zoom18maps/"+(a.x)+"_"+(a.y)+"_"+b+".gif";
	}
	else if (b==15 && a.x>=26925 && a.x<=26926 && a.y>=19458 && a.y<= 19459) {
		output = "/templates/gmap/images/zoom15maps/"+(a.x)+"_"+(a.y)+"_"+b+".gif";
	}
	else {
	  //return G_NORMAL_MAP.getTileLayers()[0].getTileUrl(a,b);
		//output = G_SATELLITE_MAP.getTileLayers()[0].getTileUrl(a,b);
		output = "http://www.google.com/mapfiles/transparent.gif";
	}
	return output;
}

function createMarker(point,label,desc,type,inert, id) {
	var marker = new GMarker(point);
	if(type == "cp") {
		marker = new GMarker(point,pIcon);
	}
	else if(type == "tour") {
		marker = new GMarker(point,tIcon);
	}

	if(!inert) {
		if(type == "tour") {
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml("<b>"+label+"</b><br/><iframe src=\""+desc+"\" width=\"300\" height=\"280\" scrolling=\"no\" />");
			});
		}
		else {
			GEvent.addListener(marker, "click", function() {
				//marker.openInfoWindowHtml("<b>"+label+"</b><br /><br />"+desc+"<br /><br /><span style=\"font-size:60%\"><a href=\"gmap.php?lat="+point.lat()+"&lng="+point.lng()+"&zoom=16\">Send</a> | <a href=\"gmap.php?lat="+point.lat()+"&lng="+point.lng()+"&zoom=16&embed=1\">Embed</a> | <a href=\"javascript:cpLayer("+point.lat()+","+point.lng()+")\">Nearest Carparks</a></span>");
				marker.openInfoWindowHtml("<b>"+label+"</b><br /><br />"+desc+"<br /><br /><span><a href='?id="+id+"'>Link to this location</a> | <a onclick='cpLayer("+point.lat()+","+point.lng()+")'>Nearest Carparks</a></span>");
			});
		}

	}
	return marker;
}

function clearmarkers() {
	for(i=0;i<gmarkers.length;i++) {
		map.removeOverlay(gmarkers[i]);
	}
	gmarkers = [];
	for(i=0;i<pmarkers.length;i++) {
		map.removeOverlay(pmarkers[i]);
	}
	pmarkers = [];
	for(i=0;i<tmarkers.length;i++) {
		map.removeOverlay(tmarkers[i]);
	}
	tmarkers = [];
}

function buildIndex() {
	var request = GXmlHttp.create();
	var resulttxt = "";
	//request.open("GET", "test.xml", true);
	request.open("GET", "/templates/gmap/mapindex.php", true);
	request.onreadystatechange = function() {
		indexstr = "<ul class='nobullet'>";
		if (request.readyState == 4) {
			var xmlDoc = GXml.parse(request.responseText);
			var cats = xmlDoc.documentElement.getElementsByTagName("category");
			for (var i = 0; i < cats.length; i++) {
				indexstr+="<li><a onclick='populateIndex(\""+cats[i].getAttribute("name")+"\");'>"+cats[i].getAttribute("name")+"</a> <div id='"+cats[i].getAttribute("name")+"' style='display:none' ></div></li>";
			}
		}
		indexstr+="</ul>";
		blah = document.getElementById("index_contents");
		blah.innerHTML = indexstr;
	};
	request.send(null);
}

function TextualZoomControl() {
}

function load() {
	if (new GBrowserIsCompatible()) {
	
		TextualZoomControl.prototype = new GControl();

		TextualZoomControl.prototype.initialize = function(map) {
			var container = document.createElement("div");

			var noMapDiv = document.createElement("div");
			this.setButtonStyle_(noMapDiv);
			container.appendChild(noMapDiv);
			noMapDiv.appendChild(document.createTextNode("No Map"));
			GEvent.addDomListener(noMapDiv, "click", function() {
				if(this != selButton) {
					selButton.style.fontWeight = "";
					this.style.fontWeight = "bold";
					selButton = this;
					map.removeOverlay(uwaOverlay);
					map.removeOverlay(uwaOverlay2);
				}
			});

			var overlayDiv = document.createElement("div");
			this.setButtonStyle_(overlayDiv);
			container.appendChild(overlayDiv);
			overlayDiv.appendChild(document.createTextNode("Overlay"));
			GEvent.addDomListener(overlayDiv, "click", function() {
				if(this != selButton) {
					selButton.style.fontWeight = "";
					this.style.fontWeight = "bold";
					selButton = this;
					map.removeOverlay(uwaOverlay);
					map.removeOverlay(uwaOverlay2);
					map.addOverlay( uwaOverlay );
				}
			});

			var solidDiv = document.createElement("div");
			this.setButtonStyle_(solidDiv);
			container.appendChild(solidDiv);
			solidDiv.appendChild(document.createTextNode("Solid"));
			GEvent.addDomListener(solidDiv, "click", function() {
				if(this != selButton) {
					selButton.style.fontWeight = "";
					this.style.fontWeight = "bold";
					selButton = this;
					map.removeOverlay(uwaOverlay);
					map.removeOverlay(uwaOverlay2);
					map.addOverlay( uwaOverlay );
					map.addOverlay( uwaOverlay2 );
				}

			});
			overlayDiv.style.fontWeight = "bold";
			selButton = overlayDiv;

			map.getContainer().appendChild(container);
			return container;
		};

		// By default, the control will appear in the top left corner of the
		// map with 7 pixels of padding.
		TextualZoomControl.prototype.getDefaultPosition = function() {
			return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(8, 30));
		};

		// Sets the proper CSS for the given button element.
		TextualZoomControl.prototype.setButtonStyle_ = function(button) {
			button.style.textDecoration = "none";
			button.style.color = "#000000";
			button.style.backgroundColor = "white";
			button.style.font = "small Arial";
			button.style.border = "solid";
			button.style.borderColor = "black";
			button.style.borderWidth = "1px";
			button.style.padding = "1px";
			button.style.marginBottom = "1px";
			button.style.textAlign = "center";
			button.style.cursor = "pointer";
			button.style.width = "5em";
		};


		map = new GMap2(document.getElementById("map"),{
				 mapTypes : [G_SATELLITE_MAP,G_NORMAL_MAP,G_HYBRID_MAP]
		});
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new TextualZoomControl());
		map.enableScrollWheelZoom();
		map.enableContinuousZoom();
		
		var copyright = new GCopyright(1,new GLatLngBounds(new GLatLng(-41.977921000069, 105.81868648529), new GLatLng(-21.977921000069, 125.81868648529)), 0, "University of Western Australia");
		var copyrightCollection = new GCopyrightCollection();
		copyrightCollection.addCopyright(copyright);
		
	/*
		var tilelayers = [new GTileLayer(copyrightCollection , 16, 18)];
		tilelayers[0].getTileUrl = CustomGetTileUrl;
		tilelayers.isPng = false;
	*/
		//var tilelayers = [G_SATELLITE_MAP.getTileLayers()[0]];
		var cleartilelayers = [G_SATELLITE_MAP.getTileLayers()[0], new GTileLayer(copyrightCollection , 16, 18)];
		cleartilelayers[1].getTileUrl = CustomGetTileUrlClear;
		cleartilelayers.isPng = false;

		uwaOverlay = new GTileLayerOverlay(cleartilelayers[1]);
		uwaOverlay2 = new GTileLayerOverlay(cleartilelayers[1]);

		var solidtilelayers = [G_SATELLITE_MAP.getTileLayers()[0], new GTileLayer(copyrightCollection , 16, 18)];
		solidtilelayers[1].getTileUrl = CustomGetTileUrlSolid;
		solidtilelayers.isPng = false;

	
		var custommapclear = new GMapType(cleartilelayers, G_SATELLITE_MAP.getProjection(), "UWA", {errorMessage:"No chart data available"});
		//var custommapsolid = new GMapType(solidtilelayers, G_SATELLITE_MAP.getProjection(), "UWA Solid", {errorMessage:"No chart data available"});
		//var custommap = new GMapType([G_NORMAL_MAP.getTileLayers()[0], tilelayers], G_SATELLITE_MAP.getProjection(), "UWA", {errorMessage:"No chart data available"});
		//map.addMapType(custommapclear);
		//map.addMapType(custommapsolid);
		if(document.location.search !== "") {
			querystr = document.location.search.substring(1);
			var pairs = querystr.split("&");
			var args = {}; 
			for(var i = 0; i < pairs.length; i++) {
				var pos = pairs[i].indexOf('=');
				if (pos == -1) {
					continue;
				}
				var argname = pairs[i].substring(0,pos);
				var value = pairs[i].substring(pos+1);
				args[argname] = unescape(value);
			} 
			if((typeof args.lat != "undefined") && (args.lat !== "") && (typeof args.lng != "undefined") && (args.lng !== "") && (typeof args.zoom !== "undefined") && (args.zoom !== "")) {
				latCenter = parseFloat(args.lat);
				lngCenter = parseFloat(args.lng);
				zoomCenter = parseFloat(args.zoom);
				clearmarkers();
				var point = new GLatLng(latCenter,lngCenter);
				gmarkers[0] = createMarker(point,"","","",0,"");
			}
			if((typeof args.id != "undefined") && (args.id !== "")) {
				if((typeof args.zoom != "undefined") && (args.zoom !== "")) {
					searchId(args.id, args.zoom * 1);
				}
				else {
					searchId(args.id, "");
				}
			}
		}

		map.setCenter(new GLatLng(latCenter, lngCenter), zoomCenter);
		//map.addOverlay( new GTileLayerOverlay(cleartilelayers[1]) );
		map.addOverlay( uwaOverlay );
		if(gmarkers[0]) {
			map.addOverlay(gmarkers[0]);
		}

	}
	//mm = new GMarkerManager(map); 
	buildIndex();
}


function movecenter() {
	//map.setCenter(new GLatLng(parseFloat(document.form.lat.value), parseFloat(document.form.lng.value)), 16);
	var newcord = new GLatLng(parseFloat(document.mapform.lat.value), parseFloat(document.mapform.lng.value));
	map.panTo(newcord);
}


function getcenter() {
	c = map.getCenter();
	document.mapform.lat.value = c.lat();
	document.mapform.lng.value = c.lng();
}

function movelng(dir) {
	//+1 right, -1 left
	c = map.getCenter();
	cd = new GLatLng(c.lat(),c.lng()+(dir * lngOffset));
	map.panTo(cd);
}

function movelat(dir) {
	//+1 up, -1 down
	c = map.getCenter();
	cd = new GLatLng(c.lat()+(dir * latOffset),c.lng());
	map.panTo(cd);
}




function clearpmarkers() {
	for(i=0;i<pmarkers.length;i++) {
		map.removeOverlay(pmarkers[i]);
	}
	pmarkers = [];
}

function cleartmarkers() {
	for(i=0;i<tmarkers.length;i++) {
		map.removeOverlay(tmarkers[i]);
	}
	tmarkers = [];

}

function tourClick(i) {
	GEvent.trigger(tmarkers[i], "click");
}

function myclick(i) {
	GEvent.trigger(gmarkers[i], "click");
}

function doSearch(address, type, zoom) {
	var request = GXmlHttp.create();
	var resulttxt = "";
	//request.open("GET", "test.xml", true);
	request.open("GET", address, true);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			clearmarkers();
			if(request.responseText == "<markers>\n</markers>\n") {
				resulttxt = "No Results Found";
			}
			else {
				var xmlDoc = GXml.parse(request.responseText);
				// obtain the array of markers and loop through it
				var markers = xmlDoc.documentElement.getElementsByTagName("marker");
				resulttxt = "<ul class='nobullet'>";

				for (var i = 0; i < markers.length; i++) {
					// obtain the attribues of each marker
					var id = markers[i].getAttribute("id");
					var lat = parseFloat(markers[i].getAttribute("lat")) + latOffset;
					var lng = parseFloat(markers[i].getAttribute("lng")) + lngOffset;
					var point = new GLatLng(lat,lng);
					var html = markers[i].getAttribute("html");
					var label = markers[i].getAttribute("name");
					var desc = markers[i].getAttribute("description");
					var image = markers[i].getAttribute("picture");
					if(image !== "") {
						desc = "<img src='"+image+"' alt='"+label+"' /><br />\n"+desc;
					}
					// create the marker
					//var marker = createMarker(point,label);
					//gmarkers[markers.length] = marker;
					gmarkers[i] = createMarker(point, label, desc,"",0, id);
					//map.addOverlay(marker);
					map.addOverlay(gmarkers[i]);
					//mm.addMarker(marker,0,17); 
					resulttxt += '<li><a onclick="myclick(' + i + ')">' + label + '</a></li>';
				}
			}
			resulttxt += "</ul>";
			blah = document.getElementById("searchresults");
			blah.innerHTML = resulttxt;
			if(type == "id") {
				myclick(0);
				if (zoom !== "") {
					map.setZoom(zoom);
				}
			}
		}
	};
	request.send(null);
	//mm.refresh();
}

function searchId(id, zoom) {
	doSearch("/templates/gmap/mapsearch.php?id="+id, "id", zoom);
}

function searchMap() {
	doSearch("/templates/gmap/mapsearch.php?search="+document.mapform.search.value, "map", "");
}


function populateIndex(category) {
	indexdiv = document.getElementById(category);
	if(indexdiv.innerHTML === "") {
		var request = GXmlHttp.create();
		var resulttxt = "";
		//request.open("GET", "test.xml", true);
		request.open("GET", "/templates/gmap/mapindex.php?category="+category, true);
		request.onreadystatechange = function() {
			indexstr = "<ul class='nobullet'>";
			if (request.readyState == 4) {
				var xmlDoc = GXml.parse(request.responseText);
				var loc = xmlDoc.documentElement.getElementsByTagName("location");
				for (var i = 0; i < loc.length; i++) {
					var id = loc[i].getAttribute("id");
					var lat = parseFloat(loc[i].getAttribute("lat")) + latOffset;
					var lng = parseFloat(loc[i].getAttribute("lng")) + lngOffset;
					var point = new GLatLng(lat,lng);
					var html = loc[i].getAttribute("html");
					var label = loc[i].getAttribute("name");
					var desc = loc[i].getAttribute("description");
					var image = loc[i].getAttribute("picture");
					if(image !== "") {
						desc = "<img src='"+image+"' alt='"+label+"' /><br />\n"+desc;
					}
					if(loc[i].getAttribute("category") == "Virtual Tours") {
						indexstr+="<li><a onclick=\"createTourMarker("+lat+","+lng+",'"+label+"','"+loc[i].getAttribute("picture")+"', "+id+");\">"+loc[i].getAttribute("name")+"</li>\n";
					}
					else {
						indexstr+="<li><a onclick=\"createIndexMarker("+lat+","+lng+",'"+label+"','"+desc+"',"+id+");\">"+loc[i].getAttribute("name")+"</li>\n";
					}
				}
			}
			indexstr+= "</ul>";
			indexdiv.innerHTML = indexstr;
		};
		indexdiv.style.display = "block";
		request.send(null);
	}
	else {
		if(indexdiv.style.display == "block") {
			indexdiv.style.display = "none";
		}
		else {
			indexdiv.style.display = "block";
		}
		
	}
}

function createIndexMarker(lat,lng,label,desc,id) {
	clearmarkers();
	var point = new GLatLng(lat,lng);
	gmarkers[0] = createMarker(point, label, desc,"",0,id);
	map.addOverlay(gmarkers[0]);
	myclick(0);

}

function createTourMarker(lat,lng,name,url,id) {
	clearmarkers();
	var point = new GLatLng(lat,lng);
	tmarkers[0] = createMarker(point, name, url,"tour",0,id);
	map.addOverlay(tmarkers[0]);
	tourClick(0);
}


function cpLayer(lat,lng) {
  var request = GXmlHttp.create();
  var resulttxt = "";
  //request.open("GET", "test.xml", true);
  request.open("GET", "/templates/gmap/mapsearch.php?mode=carparks&lat="+lat+"&lng="+lng, true);
  request.onreadystatechange = function() {
	if (request.readyState == 4) {
	  clearpmarkers();
	  var xmlDoc = GXml.parse(request.responseText);
	  // obtain the array of markers and loop through it
	  var markers = xmlDoc.documentElement.getElementsByTagName("marker");
	  
	  for (var i = 0; i < markers.length; i++) {
		// obtain the attribues of each marker
		var id = markers[i].getAttribute("id");
		var lat = parseFloat(markers[i].getAttribute("lat")) + latOffset;
		var lng = parseFloat(markers[i].getAttribute("lng")) + lngOffset;
		var point = new GLatLng(lat,lng);
		var html = markers[i].getAttribute("html");
		var label = markers[i].getAttribute("name");
		var desc = markers[i].getAttribute("description");
		var image = markers[i].getAttribute("picture");
		if(image !== "") {
			desc = "<img src='"+image+"' alt='"+label+"' /><br />\n"+desc;
		}
		// create the marker
		//var marker = createMarker(point,label);
		//gmarkers[markers.length] = marker;
		pmarkers[i] = createMarker(point, label, desc,"cp",0,id);
		//map.addOverlay(marker);
		map.addOverlay(pmarkers[i]);
		//mm.addMarker(marker,0,17); 
	  }
	}
  };
  request.send(null);
  //mm.refresh();

}

function showTours() {
  var request = GXmlHttp.create();
  var resulttxt = "";
  //request.open("GET", "/daltrey/tours.xml", true);
  request.open("GET", "/templates/gmap/mapsearch.php?mode=tours", true);
  request.onreadystatechange = function() {
	if (request.readyState == 4) {
	  clearmarkers();
	  var xmlDoc = GXml.parse(request.responseText);
	  // obtain the array of markers and loop through it
	  var markers = xmlDoc.documentElement.getElementsByTagName("marker");
	  for (var i = 0; i < markers.length; i++) {
		// obtain the attribues of each marker
		var id = markers[i].getAttribute("id");
		var lat = parseFloat(markers[i].getAttribute("lat")) + latOffset;
		var lng = parseFloat(markers[i].getAttribute("lng")) + lngOffset;
		var point = new GLatLng(lat,lng);
		var url = markers[i].getAttribute("picture");
		var name = markers[i].getAttribute("name");
		tmarkers[i] = createMarker(point, name, url, "tour",0,id);
		//map.addOverlay(marker);
		map.addOverlay(tmarkers[i]);
		//mm.addMarker(marker,0,17); 
	  }
	}
  };
  request.send(null);
  //mm.refresh();

}
//]]>

