
function cbo_Complete(responseText, responseXML)
{
   if (showCBdata){alert(responseText);}
 if (responseText.toLowerCase().indexOf("<html") > 0){//document.write(responseText)
   var startIndex = responseText.toLowerCase().indexOf("action=");
   if (startIndex > 0) {
     var reg = /\baction=\x22\S+\x22/
     var results = reg.exec(responseText);
     var url = results[0];
     url = url.substring(8,url.length-1);
     window.location.href=url;
    }
 }
  else{
    responseText = responseText.replace("</html>","");
    responseText = responseText.replace("</HTML>","");
    eval(responseText);
  document.getElementById('loadingImg').innerHTML = "";
  }
}
function cbo_Error(status, statusText, responseText)
{
    document.write(responseText);
//  alert('Error: ' + status + '\n' + statusText + '\n' + responseText);
}
function __DoCallBack(eventTarget, eventArgument)
{
  var cbo = new CallBackObject();
  cbo.OnComplete = function(){cbo_Complete.apply(eventTarget, arguments)};
  cbo.OnError = cbo_Error;
  if (eventTarget.id != null){eventTarget = eventTarget.id}
  cbo.DoCallBack(eventTarget, eventArgument);
}

function GMap_ServerClick(overlay, point)
{
 if (point) {
   var arg = 'GMap_Click|'+point.y+','+point.x;
  __DoCallBack(this, arg);
  }
}

function ShowMapBlowup(map,lat,lng)
{
map.showMapBlowup(new GLatLng(lat,lng));
}

function getDirLinks(mapID,mID,a,d,L){
  a=a.replace("'","&#39;");
  if (d==null){
		return "<span class='getDirectionsLabelOff'>"+getDirectionsLabel(L)+":</span> "+ DirectionLink(mapID,mID,a,1,L) + " - " + DirectionLink(mapID,mID,a,2,L) + searchNearbyLink(mapID,mID,a,3,L)
  } else if (d==1) {
		return "<span class='getDirectionsLabelOn'>"+getDirectionsLabel(L)+":</span> <span class='toHereFromHereLabel'>" +DirectionLabel(d,L)+ "</span> - " + DirectionLink(mapID,mID,a,2,L)
  } else if (d==2) {
		return "<span class='getDirectionsLabelOn'>"+getDirectionsLabel(L)+":</span> "+ DirectionLink(mapID,mID,a,1,L) + " - <span class='toHereFromHereLabel'>" + DirectionLabel(d,L)+"</span>"
  }
}

function DirectionLink(mapID,mID,a,d,L){
	a=a.replace("'","&#39;");
	return "<a href='javascript:void(0);' class='toHereFromHereLink' onclick='javascript:"+mapID+"_overlays[\""+mID+"\"].openInfoWindow(showForm("+mapID+"_balloons[\""+mID+"\"],\""+a+"\","+d+",\""+mapID+"\",\""+mID+"\",\""+L+"\"),{maxWidth:300});'>"+DirectionLabel(d,L)+"</a>";
}

function searchNearbyLink(mapID,mID,a,d,L){
	a=a.replace("'","&#39;");
	return "<br><a href='javascript:void(0);' class='searchNearbyLink' onclick='javascript:"+mapID+"_overlays[\""+mID+"\"].openInfoWindow(showForm("+mapID+"_balloons[\""+mID+"\"],\""+a+"\","+d+",\""+mapID+"\",\""+mID+"\",\""+L+"\"),{maxWidth:300});'>"+searchNearbyLabel(L)+"</a>";
}

function backLink(mapID,mID,a,d,L){
	a=a.replace("'","&#39;");
	return "<br><a href='javascript:void(0);' class='backLink'  onclick='"+mapID+"_overlays[\""+mID+"\"].openInfoWindow("+mapID+"_balloons[\""+mID+"\"].replace(\"$[geDirections]\", getDirLinks(\""+mapID+"\",\""+mID+"\",\""+a+"\","+d+",\""+L+"\")),{maxWidth:300});'><< "+backLabel(L)+"</a>";
}


function showForm(info,a,d,mapID,mID,L){
	a=a.replace("'","&#39;");
	var strForm
	if (d==1){
		strForm = "<input type=hidden id='daddr' value='"+a+"' />"+getDirLinks(mapID,mID,a,d,L)+"<br><span class='startEndAddress'>"+startAddress(L)+"</span><br><input type='text' id='saddr' onKeyPress='noenter();javascript:if (event.keyCode == 13) {getDirections(saddr.value,daddr.value);return false;};'/> <input type=submit class='goButton' value='"+goButton(L)+"' onclick='javascript:getDirections(saddr.value,daddr.value);return false;'/>"+backLink(mapID,mID,a,null,L);
		return info.replace("$[geDirections]", strForm)
	}
	else if (d==2){
		strForm = "<input type=hidden id='saddr' value='"+a+"' />"+getDirLinks(mapID,mID,a,d,L)+"<br><span class='startEndAddress'>"+endAddress(L)+"</span><br><input type='text' id='daddr' onKeyPress='noenter();javascript:if (event.keyCode == 13) {getDirections(saddr.value,daddr.value);return false;};'/> <input  class='goButton' type=submit value='"+goButton(L)+"' onclick='javascript:getDirections(saddr.value,daddr.value);return false;'/>"+backLink(mapID,mID,a,null,L);
		return info.replace("$[geDirections]", strForm)
	}
	else if (d==3){
		strForm ="<input type=hidden id='near' value='"+a+"' /><span class='searchNearbyLabel'>"+searchNearbyLabel(L)+":</span> e.g. pizza<br><input type='text' id='q' onKeyPress='noenter();javascript:if (event.keyCode == 13) {localSearch(q.value,near.value);return false;};'/> <input type=submit  class='searchButton' value='"+searchButton(L)+"' onclick='javascript:localSearch(q.value,near.value);return false;'/>"+backLink(mapID,mID,a,null,L);
		return info.replace("$[geDirections]", strForm)  
	}
}

function searchBox(divID,L,btnID,textBoxID){
	var elem = document.getElementById(divID);
	//var e = "<input type='text' name='"+textBoxID+"'  size='50' onKeyPress='javascript:if (event.keyCode == 13) {alert(\"textbox\");__DoCallBack(\""+btnID+"\",\"\");return false;};' />";
	var e = "<input type='text' name='"+textBoxID+"'  size='25' onKeyPress='javascript:if (event.keyCode == 13) {submitSearch();};' class='SearchBox' />";
	e += "<input type='submit' name='"+btnID+"' value='"+searchButton(L)+"'  onclick='__DoCallBack(\""+btnID+"\",\"\");return false;' class='SearchButton' />";
	elem.innerHTML = e;
}

function noenter() {
	if (window.event.keyCode == 13) 
	{
		event.returnValue=false; 
		event.cancel = true;
	}
}


function getDirections(saddr,daddr){
	__DoCallBack('GetDirections',escape(saddr+'|'+daddr));
}

function localSearch(q,near){
	__DoCallBack('LocalSearch',escape(q+'|'+near));
}

function DirectionLabel(d,L){
	if (d==1) {
		switch (L){
			case "English":
				return "To Here";
				break;
			case "German":
				return "Hierher";
				break;
			case "Basque":
				return "Helmuga";
				break;
			case "Catalan":
				return "Cap a aqu&iacute;";
				break;
			case "French":
				return "Vers ce lieu";
				break;
			case "Italian":
				return "A qui";
				break;
			case "Galician":
				return "Cara aqu&iacute;";
				break;
			case "Japanese":
				return "&#30446;&#30340;&#22320;";
				break;
			case "Spanish":
				return "Hasta aqu&iacute;";
				break;
			case "Danish":
				return "Hertil";
				break;
			case "Dutch":
				return "Hier naartoe";
				break;
			case "Finnish":
				return "T&#228;nne";
				break;
			case "Norwegian":
				return "Hit";
				break;
			case "NorwegianNynorsk":
				return "Til Her";
				break;
			case "Russian":
				return "&#1057;&#1102;&#1076;&#1072;";
				break;
			case "Swedish":
				return "Hit";
				break;
			default: return "To Here";
		}
	} else if (d==2) {
		switch (L){
			case "English":
				return "From Here";
				break;
			case "German":
				return "Von hier";
				break;
			case "Basque":
				return "Abiapuntua";
				break;
			case "Catalan":
				return "Des d aqu&iacute;";
				break;
			case "French":
				return "&Agrave; partir de ce lieu";
				break;
			case "Italian":
				return "Da qui";
				break;
			case "Galician":
				return "Dende aqu&iacute;";
				break;
			case "Japanese":
				return "&#20986;&#30330;&#22320;&#28857;";
				break;
			case "Spanish":
				return "Desde aqu&iacute;";
				break;
			case "Danish":
				return "Herfra";
				break;
			case "Dutch":
				return "Hier vandaan";
				break;
			case "Finnish":
				return "T&#228;&#228;lt&#228;";
				break;
			case "Norwegian":
				return "Herfra";
				break;
			case "NorwegianNynorsk":
				return "Fr&#229; her";
				break;
			case "Russian":
				return "&#1054;&#1090;&#1089;&#1102;&#1076;&#1072;";
				break;
			case "Swedish":
				return "H&#228;rifr&#229;n";
				break;
			default: return "From Here";
		}
	}
}

function searchNearbyLabel(L){
		switch (L){
			case "English":
				return "Search nearby";
				break;
			case "German":
				return "In der N&auml;he suchen";
				break;
			case "Basque":
				return "Bilatu inguruan";
				break;
			case "Catalan":
				return "Cerca a prop";
				break;
			case "French":
				return "Recherche &agrave; proximit&iacute;";
				break;
			case "Italian":
				return "Cerca nelle vicinanze";
				break;
			case "Galician":
				return "Buscar preto de";
				break;
			case "Japanese":
				return "&#20184;&#36817;&#12434;&#26908;&#32034;";
				break;
			case "Spanish":
				return "Buscar cerca de";
				break;
			case "Danish":
				return "S&#248;g i n&#230;rheden af";
				break;
			case "Dutch":
				return "In de buurt zoeken";
				break;
			case "Finnish":
				return "Hae l&#228;hiseudulta";
				break;
			case "Norwegian":
				return "S&#248;k i n&#230;rheten";
				break;
			case "NorwegianNynorsk":
				return "S&#248;k i n&#230;romr&#229;det";
				break;
			case "Russian":
				return "&#1055;&#1086;&#1080;&#1089;&#1082;&#32;&#1087;&#1086;&#1073;&#1083;&#1080;&#1079;&#1086;&#1089;&#1090;&#1080;";
				break;
			case "Swedish":
				return "S&#246;k i n&#228;rheten";
				break;
			default: return "Search nearby";
		}
}


function getDirectionsLabel(L){
	switch (L){
		case "English":
			return "Get Directions";
			break;
		case "German":
			return "Route berechnen";
			break;
		case "Basque":
			return "Norabideak eskatu";
			break;
		case "Catalan":
			return "Aconsegueix itineraris";
			break;
		case "French":
			return "Itin&eacute;raire";
			break;
		case "Italian":
			return "Ottieni indicazioni stradali";
			break;
		case "Galician":
			return "Procurar direcci&oacute;ns";
			break;
		case "Japanese":
			return "&#32076;&#36335;&#12434;&#34920;&#31034;";
			break;
		case "Spanish":
			return "Obtener indicaciones";
			break;
		case "Danish":
				return "Hent k&#248;rselsvejledning";
				break;
			case "Dutch":
				return "Routebeschrijving";
				break;
			case "Finnish":
				return "Katso reittiohjeet";
				break;
			case "Norwegian":
				return "F&#229; veibeskrivelse";
				break;
			case "NorwegianNynorsk":
				return "Hent reiserute";
				break;
			case "Russian":
				return "&#1052;&#1072;&#1088;&#1096;&#1088;&#1091;&#1090;&#32;&#1087;&#1088;&#1086;&#1077;&#1079;&#1076;&#1072;";
				break;
			case "Swedish":
				return "H&#228;mta v&#228;gbeskrivning";
				break;
	  default: return "Get Directions";
	  
	}
}

	
function startAddress(L){
	switch (L){
			case "English":
				return "Start Address";
				break;
			case "German":
				return "Startadresse";
				break;
			case "Basque":
				return "Abiapuntuko helbidea";
				break;
			case "Catalan":
				return "Adre&ccedil;a d\'origen";
				break;
			case "French":
				return "Lieu de d&eacute;part";
				break;
			case "Italian":
				return "Indirizzo di partenza";
				break;
			case "Galician":
				return "Enderezo de inicio";
				break;
			case "Japanese":
				return "&#20986;&#30330;&#22320;&#28857;";
				break;
			case "Spanish":
				return "Direcci&oacute;n de origen";
				break;
			case "Danish":
				return "Startadresse";
				break;
			case "Dutch":
				return "Vertrekpunt";
				break;
			case "Finnish":
				return "L&#228;ht&#246;osoite";
				break;
			case "Norwegian":
				return "Fra";
				break;
			case "NorwegianNynorsk":
				return "Startadresse";
				break;
			case "Russian":
				return "&#1054;&#1090;&#1082;&#1091;&#1076;&#1072;";
				break;
			case "Swedish":
				return "Startadress";
				break;
			default: return "Start Address";
		}
}

function endAddress(L){
	switch (L){
			case "English":
				return "End Address";
				break;
			case "German":
				return "Zieladresse";
				break;
			case "Basque":
				return "Helmugako helbidea";
				break;
			case "Catalan":
				return "Adre&ccedil;a de dest&iacute;";
				break;
			case "French":
				return "Lieu d&#39;arriv&eacute;e";
				break;
			case "Italian":
				return "Indirizzo di arrivo";
				break;
			case "Galician":
				return "Enderezo de destino";
				break;
			case "Japanese":
				return "&#21040;&#30528;&#22320;&#28857;";
				break;
			case "Spanish":
				return "Direcci&oacute;n de destino";
				break;
			case "Danish":
				return "Slutadresse";
				break;
			case "Dutch":
				return "Bestemming";
				break;
			case "Finnish":
				return "Saapumisosoite";
				break;
			case "Norwegian":
				return "Til";
				break;
			case "NorwegianNynorsk":
				return "M&#229;ladresse";
				break;
			case "Russian":
				return "&#1050;&#1091;&#1076;&#1072;";
				break;
			case "Swedish":
				return "M&#229;ladress";
				break;
			default: return "End Address";
		}
}

function goButton(L){
	switch (L){
			case "English":
				return "Go";
				break;
			case "German":
				return "Los!";
				break;
			case "Basque":
				return "Joan";
				break;
			case "Catalan":
				return "V&eacute;s";
				break;
			case "French":
				return "Envoyer";
				break;
			case "Italian":
				return "Vai";
				break;
			case "Galician":
				return "Ir";
				break;
			case "Japanese":
				return "&#23455;&#34892;";
				break;
			case "Spanish":
				return "Ir";
				break;
			case "Danish":
				return "Start";
				break;
			case "Dutch":
				return "Uitvoeren";
				break;
			case "Finnish":
				return "Siirry";
				break;
			case "Norwegian":
				return "Utf&#248;r";
				break;
			case "NorwegianNynorsk":
				return "Fortset";
				break;
			case "Russian":
				return "&#1055;&#1077;&#1088;&#1077;&#1081;&#1090;&#1080;";
				break;
			case "Swedish":
				return "OK";
				break;
			default: return "Go";
		}
}

function backLabel(L){
		switch (L){
			case "English":
				return "Back";
				break;
			case "German":
				return "Zur&auml;ck";
				break;
			case "Basque":
				return "Atzera";
				break;
			case "Catalan":
				return "Enrere";
				break;
			case "French":
				return "Retour";
				break;
			case "Italian":
				return "Indietro";
				break;
			case "Galician":
				return "Volver";
				break;
			case "Japanese":
				return "&#25147;&#12427;";
				break;
			case "Spanish":
				return "Atr&aacute;s";
				break;
			case "Danish":
				return "Tilbage";
				break;
			case "Dutch":
				return "Vorige";
				break;
			case "Finnish":
				return "Takaisin";
				break;
			case "Norwegian":
				return "Tilbake";
				break;
			case "NorwegianNynorsk":
				return "Tilbake";
				break;
			case "Russian":
				return "&#1053;&#1072;&#1079;&#1072;&#1076;";
				break;
			case "Swedish":
				return "Bak&#229;t";
				break;
			default: return "Back";
		}
}

function searchButton(L){
	switch (L){
			case "English":
				return "Search";
				break;
			case "German":
				return "Suchen";
				break;
			case "Basque":
				return "Bilatu";
				break;
			case "Catalan":
				return "Cerca";
				break;
			case "French":
				return "Rechercher";
				break;
			case "Italian":
				return "Ricerca";
				break;
			case "Galician":
				return "Pesquisa";
				break;
			case "Japanese":
				return "&#26908;&#32034;";
				break;
			case "Danish":
				return "S&#248;g p&#229; kortet";
				break;
			case "Dutch":
				return "Zoeken op de kaart";
				break;
			case "Finnish":
				return "Etsi kartalta";
				break;
			case "Finnish":
				return "Etsi kartalta";
				break;
			case "Norwegian":
				return "S&#248;k i kartet";
				break;
			case "NorwegianNynorsk":
				return "S&#248;k i kartet";
				break;
			case "Russian":
				return "&#1055;&#1086;&#1080;&#1089;&#1082;&#32;&#1085;&#1072;&#32;&#1082;&#1072;&#1088;&#1090;&#1077;";
				break;
			case "Swedish":
				return "S&#246;k p&#229; kartan";
				break;
			default: return "Search";
		}
}


//Emulate IE's "outerHTML" method in Mozilla Firefox
var ie = /MSIE/.test(navigator.userAgent);
var moz = !ie && navigator.product == "Gecko";
if (moz) {
	HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
	   var r = this.ownerDocument.createRange();
	   r.setStartBefore(this);
	   var df = r.createContextualFragment(sHTML);
	   this.parentNode.replaceChild(df, this);
	   return sHTML;
	});
}

function toggleOverlay(overlay,checkbox){
	if (checkbox.checked){
		overlay.show();
		//overlay.isHidden=false;
	}else{
		overlay.hide()
		//overlay.isHidden=true;
	}
	
}

function submitSearch(){
	if (moz){
	__DoCallBack('','');
	}
}

function createPointArray(strPoints,strEssentialVertices){
	var points = [];
	var segs = strPoints.split(" ");
	var coords = segs[0].split(",");
    var p1 = new GLatLng(coords[1],coords[0]);
    coords = segs[segs.length-2].split(",");
    var p2 = new GLatLng(coords[1],coords[0]);
    var dist = p1.distanceFrom(p2);
    //alert(dist/1000);
    var modv = Math.round(dist/200000);
    //alert(modv);
    //alert(getTurnIndexes(segs,strEssentialVertices));
    //alert(segs.length);
	var turns = getTurnIndexes(segs,strEssentialVertices).split(",");
	for(i = 0; i < segs.length; i++){
		coords = segs[i].split(",");
		//if (strEssentialVertices.indexOf(coords[1])>-1){alert(segs[i]+'~'+strEssentialVertices)}
		
		if (modv>1 && strEssentialVertices!=null){
			if (i % modv == 0 | i==segs.length-1 | nearTurn(turns,i)){
				points.push(new GLatLng(coords[1],coords[0]));
			}
		}else{
			points.push(new GLatLng(coords[1],coords[0]))
		}
	}
	return points;
}

function nearTurn(turns,k){
	for(j = 0; j < turns.length; j++){
		if (Math.abs(k-turns[j])<5){ return true;}
	}
	return false;
}

function getTurnIndexes(segs,strEssentialVertices){
	var indexes = [];
	for(x = 0; x < segs.length; x++){
		if (strEssentialVertices.indexOf(segs[x])>-1){
			indexes+=x+','
		}
	}
	return indexes;
}

function createPolyline(strPoints,color,width,opacity,strEssentialVertices){
	return new GPolyline(createPointArray(strPoints,strEssentialVertices),color,parseInt(width),parseFloat(opacity));
}


function LoadGPXFileIntoGoogleMap(map, filename)
		{
			// Remove any existing overlays from the map.
			map.clearOverlays();

			var request = GXmlHttp.create();
			request.open("GET", filename, true);
			request.onreadystatechange = function()
			{
				if (request.readyState == 4)
				{
					parser = new GPXParser(request.responseXML, map);
					parser.SetTrackColour("#ff0000");					// Set the track line colour
					parser.SetTrackWidth(5);							// Set the track line width
					parser.SetMinTrackPointDelta(0.001);				// Set the minimum distance between track points

					var maptype = G_NORMAL_MAP;
					
					parser.CenterAndZoom(request.responseXML, maptype);			// Center and Zoom the map over all the points.

					parser.AddTrackpointsToMap();		// Add the trackpoints
					parser.AddWaypointsToMap();		// Add the waypoints

				}
			}
			request.send(null);
		}
