//javascript:prompt("",window.gApplication.getMap().getCenter());



function Point(yLong,xLat,label,position){
	var xMax = 137.999267578125;
	var xMin = 128.979492;
	var yMax = -25.99847566457284;
	var yMin = -10.86062814536589;
	
	
	var mapSizeX = 490;
	var mapSizeY = 830;
	
	this.x = (xLat-xMin)/(xMax-xMin)*mapSizeX;
	this.y = (yLong-yMin)/(yMax-yMin)*mapSizeY;
	
	this.xLat = xLat;
	this.yLong = yLong;
	
	this.label = label;
	this.position = (position==null)?"top":position;
}

function ItemDistance(label,distanceArray)
{
	this.label = label;
	this.distanceArray = distanceArray;
}


var LatLongArray=[
	["Alice Springs",133.66000080913116,-22.91609985736372, "right"],
	["Barkly Homestead",135.64808820048674,-19.17331265416606, "right"],
	["Barrow Creek",133.49694535592496,-21.124562961021333],
	["Batchelor",131.04248034406453,-12.96602915973, "top"],
	["Borroloola",136.34130397292878,-15.65700953590035],
	["Cape Crawford",135.61692395547905,-16.35402534149256],
	["Curtin Springs", 131.60962174317072,-24.40456975102338],
	["Daly Waters",133.19671568311023,-15.79954240139746],
	["Darwin",130.9707639243658,-12.388379841419367],
	["Devils Marbles",134.1316246256355,-19.846673293213197],
	["Dunmarra",133.31986323130954,-16.35327756830185,"bottom"],
	["Elliot",133.41508629062716,-17.04221377576031],
	["Erldunda",132.97832666788804,-24.267982594310922, "right"],
	["Hi-Way Inn",133.31150613312082,-15.905306711956353,"right"],
	["Jabiru",132.81766421636584,-12.639452897466242],
	["Katherine",132.22679528517762,-14.19217657041526,"left"],
	["Kings Canyon",131.49842079568612,-23.525881536830184, "left"],
	["Kulgera",133.06568963705902,-24.91099458483762],
	["Larrimah",133.12402365503266,-15.264355657296727],
	["Mataranka",132.8729793706766,-14.62307631196801, "left"],
	["Nourlangie Rock",132.7342414855957,-12.858079744318916,"right"],
	["Renner Springs",133.6878332594865,-17.833521956863724],
	["Roper Bar",134.57836122462638,-14.607190691258095],
	["Tennant Creek",134.00558706771017,-19.08445531306537,"bottom"],
	["Three Ways",134.0365856433705,-18.931253000822792, "right"],
	["Timber Creek",130.5537226355028,-15.386808076867759],
	["Ti Tree",133.1451188852623,-21.83830335236669],
	["Top Springs",131.81720543540442,-16.21006988309605,"left"],
	["Ubirr",132.95836687088013,-12.302776225616777,"top"],
	["Wauchope",134.03459761120226,-19.974761369270293,"left"],
	["Wycliffe Well",134.0161899059408,-20.211860185836187,"right"],
	["Uluru", 	130.98571098103812,-24.31498287510248, "top"]
];

var distanceArray = new Object();
distanceArray["Alice Springs"]=["0","725 km","303 km","1,424 km","1,206 km","1,097 km","348 km","912 km","1,498 km","406 km","863 km","762 km","177 km","908 km","1,477 km","1,181 km","324 km","277 km","1,000 km","1,078 km","1,453 km","678 km","1,246 km","508 km","540 km","1,291 km","195 km","1,100 km","1,521 km","392 km","376 km","432 km"];
distanceArray["Barkly Homestead"]=["0","0","422 km","1,083 km","493 km","384 km","1,072 km","572 km","1,158 km","319 km","523 km","421 km","901 km","567 km","1,137 km","841 km","1,048 km","1,001 km","659 km","737 km","1,112 km","337 km","718 km","217 km","185 km","950 km","531 km","759 km","1,181 km","332 km","349 km","1,157 km"];
distanceArray["Barrow Creek"]=["0","0","0","1,121 km","903 km","795 km","650 km","610 km","1,195 km","103 km","560 km","459 km","479 km","605 km","1,175 km","878 km","626 km","579 km","697 km","775 km","1,150 km","375 km","943 km","205 km","237 km","988 km","109 km","797 km","1,219 km","89.5 km","73.0 km","735 km"];
distanceArray["Batchelor"]=["0","0","0","0","896 km","787 km","1,771 km","514 km","97.8 km","1,018 km","561 km","662 km","1,601 km","516 km","282 km","243 km","1,748 km","1,700 km","424 km","346 km","288 km","746 km","533 km","916 km","899 km","527 km","1,230 km","510 km","320 km","1,032 km","1,048 km","1,856 km"];
distanceArray["Borroloola"]=["0","0","0","0","0","109 km","1,554 km","384 km","970 km","801 km","424 km","525 km","1,383 km","379 km","949 km","653 km","1,530 km","1,483 km","471 km","550 km","925 km","609 km","363 km","698 km","666 km","835 km","1,013 km","644 km","993 km","814 km","830 km","1,638 km"];
distanceArray["Cape Crawford"]=["0","0","0","0","0","0","1,445 km","275 km","861 km","692 km","315 km","416 km","1,274 km","270 km","840 km","544 km","1,421 km","1,374 km","363 km","441 km","816 km","500 km","334 km","589 km","558 km","726 km","904 km","535 km","884 km","705 km","722 km","1,529 km"];
distanceArray["Curtin Springs"]=["0","0","0","0","0","0","0","1,260 km","1,846 km","753 km","1,211 km","1,109 km","183 km","1,255 km","1,825 km","1,529 km","213 km","238 km","1,347 km","1,426 km","1,801 km","1,025 km","1,593 km","855 km","887 km","1,638 km","542 km","1,447 km","1,869 km","740 km","723 km","84.3 km"];
distanceArray["Daly Waters"]=["0","0","0","0","0","0","0","0","588 km","507 km","49.2 km","151 km","1,089 km","4.8 km","567 km","271 km","1,236 km","1,189 km","89.7 km","168 km","543 km","235 km","335 km","405 km","387 km","460 km","719 km","269 km","611 km","520 km","537 km","1,344 km"];
distanceArray["Darwin"]=["0","0","0","0","0","0","0","0","0","1,093 km","635 km","736 km","1,675 km","591 km","255 km","317 km","1,822 km","1,775 km","498 km","420 km","261 km","821 km","607 km","990 km","973 km","601 km","1,305 km","584 km","293 km","1,106 km","1,122 km","1,930 km"];
distanceArray["Devils Marbles"]=["0","0","0","0","0","0","0","0","0","0","458 km","356 km","582 km","502 km","1,072 km","776 km","729 km","682 km","594 km","673 km","1,048 km","272 km","840 km","102 km","134 km","885 km","212 km","694 km","1,116 km","13.2 km","29.7 km","837 km"];
distanceArray["Dunmarra"]=["0","0","0","0","0","0","0","0","0","0","0","101 km","1,040 km","44.4 km","614 km","318 km","1,187 km","1,140 km","137 km","215 km","590 km","186 km","382 km","355 km","338 km","427 km","670 km","236 km","658 km","471 km","487 km","1,295 km"];
distanceArray["Elliot"]=["0","0","0","0","0","0","0","0","0","0","0","0","938 km","146 km","716 km","420 km","1,085 km","1,038 km","238 km","316 km","691 km","84.2 km","484 km","254 km","236 km","529 km","568 km","338 km","760 km","369 km","386 km","1,194 km"];
distanceArray["Erldunda"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","1,084 km","1,654 km","1,358 km","241 km","99.8 km","1,176 km","1,255 km","1,630 km","854 km","1,422 km","684 km","716 km","1,467 km","372 km","1,276 km","1,698 km","569 km","552 km","268 km"];
distanceArray["Hi-Way Inn"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","570 km","274 km","1,231 km","1,184 km","92.2 km","170 km","545 km","230 km","338 km","400 km","382 km","455 km","714 km","264 km","614 km","515 km","532 km","1,339 km"];
distanceArray["Jabiru"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","296 km","1,801 km","1,754 km","478 km","399 km","24.3 km","800 km","586 km","970 km","952 km","580 km","1,284 km","564 km","44.0 km","1,085 km","1,102 km","1,909 km"];
distanceArray["Katherine"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1,505 km","1,458 km","181 km","103 km","272 km","504 km","290 km","673 km","656 km","285 km","988 km","268 km","340 km","789 km","806 km","1,613 km"];
distanceArray["Kings Canyon"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","341 km","1,324 km","1,402 km","1,777 km","1,001 km","1,569 km","832 km","864 km","1,614 km","519 km","1,423 km","1,845 km","716 km","699 km","297 km"];
distanceArray["Kulgera"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1,276 km","1,354 km","1,729 km","954 km","1,522 km","784 km","816 km","1,567 km","471 km","1,376 km","1,798 km","669 km","652 km","322 km"];
distanceArray["Larrimah"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","78.2 km","453 km","322 km","246 km","492 km","474 km","464 km","806 km","357 km","521 km","608 km","624 km","1,432 km"];
distanceArray["Mataranka"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","375 km","401 km","187 km","570 km","553 km","386 km","884 km","370 km","443 km","686 km","702 km","1,510 km"];
distanceArray["Nourlangie Rock"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","775 km","562 km","945 km","928 km","556 km","1,259 km","539 km","68.3 km","1,061 km","1,077 km","1,885 km"];
distanceArray["Renner Springs"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","568 km","170 km","152 km","613 km","484 km","422 km","844 km","285 km","302 km","1,109 km"];
distanceArray["Roper Bar"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","738 km","720 km","573 km","1,052 km","556 km","630 km","853 km","870 km","1,677 km"];
distanceArray["Tennant Creek"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","31.9 km","783 km","314 km","592 km","1,013 km","116 km","132 km","940 km"];
distanceArray["Three Ways"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","765 km","346 km","574 km","996 km","147 km","164 km","972 km"];
distanceArray["Timber Creek"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1,097 km","301 km","624 km","898 km","915 km","1,722 km"];
distanceArray["Ti Tree"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","906 km","1,328 km","199 km","182 km","627 km"];
distanceArray["Top Springs"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","608 km","707 km","724 km","1,532 km"];
distanceArray["Ubirr"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1,129 km","1,146 km","1,953 km"];
distanceArray["Wauchope"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","16.6 km","824 km"];
distanceArray["Wycliffe Well"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","808 km"];
distanceArray["Yulara"]=["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"]

var DistanceHelper=
{
	ItemDistanceArray:null,
	n:0,
	j:0,
	tempDistanceArray:null,
	init:function()
	{
		
		DistanceHelper.ItemDistanceArray = new Array();
		DistanceHelper.tempDistanceArray = new Array();
		DistanceHelper.getDistances();
	},
	getDistances:function()
	{
		if (DistanceHelper.j<=DistanceHelper.n)
		{
			DistanceHelper.tempDistanceArray.push(0);
			if (DistanceHelper.incrementCounter())
				DistanceHelper.getDistances();
			else
				DistanceHelper.drawArray();
			
		}
		else
		{
			var dir = new GDirections();
			GEvent.addListener(dir, "load", DistanceHelper.distanceLoaded);
			GEvent.addListener(dir, "error", DistanceHelper.distanceLoadedError);
			
			var waypoints = new Array();
			var PointOrigin = LatLongArray[DistanceHelper.n][2]+","+LatLongArray[DistanceHelper.n][1];
			var PointDestin = LatLongArray[DistanceHelper.j][2]+","+LatLongArray[DistanceHelper.j][1];
			
			waypoints.push(PointOrigin);
			waypoints.push(PointDestin);
			
			
			
			dir.load(PointOrigin+" to "+PointDestin);
			//dir.load("from:"+LatLongArray[DistanceHelper.n][0]+" NT Australia to:"+LatLongArray[DistanceHelper.j][0]+" NT Australia");
		}		
	},
	distanceLoadedError:function(error)
	{
		alert("Error get distance from "+LatLongArray[DistanceHelper.n][0]+" to "+LatLongArray[DistanceHelper.j][0]);
	},
	distanceLoaded:function(dir)
	{
		var test=dir.getDistance().html;
		DistanceHelper.tempDistanceArray.push(test);
		if (DistanceHelper.incrementCounter())
				DistanceHelper.getDistances();
		else
			DistanceHelper.drawArray();
	},
	incrementCounter: function(){
		DistanceHelper.j++;
		if (DistanceHelper.j == LatLongArray.length) {
			id = new ItemDistance(LatLongArray[DistanceHelper.n][0], DistanceHelper.tempDistanceArray);
			DistanceHelper.ItemDistanceArray.push(id);
			DistanceHelper.tempDistanceArray = new Array();
			DistanceHelper.j = 0;
			DistanceHelper.n++;
		}
		return (DistanceHelper.n != LatLongArray.length);
	},
	drawArray:function()
	{
		var insertion = document.getElementById("insert");
		var output = new Array();
		for (j=0;j<DistanceHelper.ItemDistanceArray.length;j++)
		{
			var line='distanceArray["'+DistanceHelper.ItemDistanceArray[j].label+'"]=[';
			var itemOutput = new Array();
			for (n = 0; n < DistanceHelper.ItemDistanceArray[j].distanceArray.length; n++) {
				var distance = DistanceHelper.ItemDistanceArray[j].distanceArray[n];
				itemOutput.push('"'+distance+'"');
			}
			line+=itemOutput.join(",")+"]";
			output.push(line);
		}
		insertion.innerHTML = output.join(";<br />")
	}
}


var pointData =[ 
	"Alice Springs",
	"Barkly Homestead",
	"Barrow Creek",
	"Batchelor",
	"Borroloola",
	"Cape Crawford",
	"Curtin Springs",
	"Daly Waters",
	"Darwin",
	"Devils Marbles",
	"Dunmarra",
	"Elliot",
	"Erldunda",
	"Hi-Way Inn",
	"Jabiru",
	"Katherine",
	"Kings Canyon",
	"Kulgera",
	"Larrimah",
	"Mataranka",
	"Nourlangie",
	"Ormiston Gorge",
	"Pine Creek",
	"Renner Springs",
	"Roper Bar",
	"Tennant Creek",
	"Three Ways",
	"Timber Creek",
	"Ti Tree",
	"Top Springs",
	"Ubirr",
	"Wauchope",
	"Wycliffe Well",
	"Yulara" 
];

var pointArrayHelper=
{
	pointArray:null,
	init:function(){
		pointArrayHelper.pointArray = new Array();
		pointArrayHelper.getPointInfo();
	},
	getPointInfo:function(){
		for(n=0;n<pointData.length;n++)
		{
			var gPoint =  pointArrayHelper.getLatLongLocation(pointData[n]);
		}
	},
	getLatLongLocation:function(loc){
		var geocoder = new GClientGeocoder();
		var toSearch = loc + " NT Australia";
		return geocoder.getLatLng(
	 	toSearch,pointArrayHelper.loadPointArray);
	},
	loadPointArray:function(gPoint)
	{
		if (gPoint) {
			var point = new Point(gPoint.y, gPoint.x, pointData[pointArrayHelper.pointArray.length]);
			pointArrayHelper.pointArray.push(point);
		}	
		else
		{
			var point = new Point(0, 0, pointData[pointArrayHelper.pointArray.length]);
			pointArrayHelper.pointArray.push(point);
		}
		if (pointArrayHelper.pointArray.length == pointData.length) {
				pointArrayHelper.drawArray();
		}
	},
	drawArray:function()
	{
		var insertion = document.getElementById("insert");
		var output = new Array();
		for(n=0;n<pointArrayHelper.pointArray.length;n++)
		{
			var point = pointArrayHelper.pointArray[n];
			output.push("[\""+point.label+"\","+point.xLat+","+point.yLong+"]");
		}
		insertion.innerHTML = output.join(",<br />")
	}
}

var controller={
	startPoint:null,
	endPoint:null,
	pointArray:null,
	init:function(){
		controller.initMap();
		$("#reset").click(controller.reset);
		controller.pointArray = new Array();
		controller.getPointInfo();
		controller.loadDropDowns();
	},
	initMap:function(){
		if (displayMap) {
			var table = $("#tableDistances");
			table.css("position","absolute");
		}
		else {
			var map = $("#map");
			map.css("display", "none");
		}
		
	},
	loadDropDowns:function(){
		var fromDropDown = $("#fromDropDown");
		var toDropDown = $("#toDropDown");
		fromDropDown[0].options[0] = new Option("--Pick Start Point--", "");
		toDropDown[0].options[0] = new Option("--Pick End Point--", "");
		for (n = 0; n < LatLongArray.length; n++) {
			fromDropDown[0].options[n+1] = new Option(LatLongArray[n][0], LatLongArray[n][0]);
			toDropDown[0].options[n+1] = new Option(LatLongArray[n][0], LatLongArray[n][0]);
		}
		toDropDown[0].disabled=true;
		
		fromDropDown.change(controller.changeDropDown);
		toDropDown.change(controller.changeDropDown);
	},
	getPointInfo:function(){
		for(n=0;n<LatLongArray.length;n++)
		{
			if (LatLongArray[n].length == 4) {
				var point = new Point(LatLongArray[n][2], LatLongArray[n][1], LatLongArray[n][0],LatLongArray[n][3]);
			}
			else
			{
				var point = new Point(LatLongArray[n][2], LatLongArray[n][1], LatLongArray[n][0]);
			}
			controller.pointArray.push(point);
		}
		controller.drawPoints();
	},

	drawPoints:function(){
		for(n=0;n<controller.pointArray.length;n++)
		{
			var point = controller.pointArray[n];
			controller.drawLinkObject(point,n);
		}
	},
	drawLinkObject: function(point,seq){
		var cssObj = new Object;
		var map = $("#map");
		var test = $("<a/>");
		
		cssObj.top = point.y+"px";
		cssObj.left = point.x+"px";
		test.css(cssObj);
		
		test.attr({href:"#"});
		test.addClass("point");
		test.addClass("marker");
		test.text("\u2022");
		test.attr("id",seq+"marker");
		
		var label = $("<a/>");
		label.text(point.label);
		
		map.append(test);
		map.append(label);
		
		switch (point.position) {
			case "top":
				cssObj.top = point.y - 7;
				cssObj.left = point.x -15;
				break;	
			case "bottom":
				cssObj.top = point.y +12;
				cssObj.left = point.x -24;
				break;	
			case "right":
				cssObj.top = point.y;
				cssObj.left = point.x+12 ;
				break;		
			case "left":
				cssObj.top = point.y;
				cssObj.left = point.x-(label.width()+2) ;
				break;		
		}
		label.css(cssObj);
		label.attr("id",seq+"label");
		label.addClass("point");
		label.addClass("label");
		label.attr({href:"#"});
		
		label.mouseout(controller.onMouseOut);
		label.mouseover(controller.onMouseOver);
		label.click(controller.onClick);
	},
	onMouseOver:function(){
		var id = parseInt(this.id);
		$("#"+id+"label").addClass("labelHover").removeClass("label");
		$("#"+id+"marker").addClass("markerHover").removeClass("marker");;
	},
	onMouseOut:function(){
		var id = parseInt(this.id);
		$("#"+id+"label").addClass("label").removeClass("labelHover");
		$("#"+id+"marker").addClass("marker").removeClass("markerHover");;
	},
	onClick:function(e)
	{
		var index = parseInt(this.id);
		var location= controller.pointArray[index].label;
		controller.processChange(e,index,location);
		
	},
	changeDropDown:function(e)
	{
		var index = this.selectedIndex-1;
		var location= controller.pointArray[index].label;
		controller.processChange(e,index,location);
	},
	processChange:function(e,index,location)
	{
		if (controller.startPoint == null) {
			controller.startPoint = index;
			
			//Select from Drop Down on 'location'
			controller.SetElementDropDown("fromDropDown",index);
			//Enable to Drop Down
			$("#toDropDown")[0].disabled=false;
			$("#toDropDown")[0].selectedIndex=0;
			
			$("#distance").text("");
		}
		else 
			if (index != controller.startPoint) {
				controller.endPoint = index;
				controller.SetElementDropDown("toDropDown",index);
				controller.calculateDistance();
			}
		e.preventDefault();
	}
	,
	SetElementDropDown:function(dropdownID,index)
	{
		var dropDown = $("#"+dropdownID)[0];
		dropDown.selectedIndex = index+1;
	},
	calculateDistance:function()
	{
		var spi = controller.startPoint;
		var epi = controller.endPoint;
		
		if (epi<spi)
		{
			var tmp = spi;
			spi=epi;
			epi = tmp;
		}
		var location= controller.pointArray[spi].label;
		var da = distanceArray[location];
		$("#distance").text(da[epi]);
		controller.startPoint=null;
		controller.endPoint=null;
		
	},
	reset:function()
	{
		
		$("#distance").text("");
		$("#fromDropDown")[0].selectedIndex=0;
		$("#toDropDown")[0].disabled=true;
		$("#toDropDown")[0].selectedIndex=0;
		controller.startPoint=null;
		controller.endPoint=null;
	}
	
}

$(document).ready(controller.init);
//$(document).ready(DistanceHelper.init);	
	




