﻿function ctl(id){return document.getElementById(id)}

function AddressDetails(placemark)
{if (placemark != null) return placemark.AddressDetails; return null;}

function Country(placemark) {
var addressDetails=AddressDetails(placemark);
if (addressDetails != null) return addressDetails.Country; return null;}

function AdministrativeArea(placemark) {
var country = Country(placemark);
if (country != null) return country.AdministrativeArea; return null;}

function AdministrativeAreaName(placemark) {
var administrativeArea = AdministrativeArea(placemark);
if (administrativeArea != null) return administrativeArea.AdministrativeAreaName; return '';}

function CountryNameCode(placemark) {
var country = Country(placemark);
if (country != null) return country.CountryNameCode; return 'US';}

function Accuracy(placemark) {
var addressDetails=AddressDetails(placemark);
if (addressDetails != null) return addressDetails.Accuracy; return null;}

function PlacemarkZoom(placemark) {
var accuracy = Accuracy(placemark);
if (accuracy == null) return 2;
return accuracyZoom(accuracy);}

function SubAdministrativeArea(placemark) {
var administrativeArea = AdministrativeArea(placemark);
if (administrativeArea != null) return administrativeArea.SubAdministrativeArea; return null;}

function SubAdministrativeAreaName(placemark) {
var subAdministrativeArea = SubAdministrativeArea(placemark);
if (subAdministrativeArea != null) return subAdministrativeArea.SubAdministrativeAreaName; return '';}

function SubAdministrativeLocality(placemark) {
var subAdministrativeArea = SubAdministrativeArea(placemark);
if (subAdministrativeArea != null) return subAdministrativeArea.Locality; return null;}

function AdministrativeLocality(placemark) {
var administrativeArea = AdministrativeArea(placemark);
if (administrativeArea != null) return administrativeArea.Locality; return null;}

function LocalityName(placemark) {
var locality = SubAdministrativeLocality(placemark);
if (locality != null) return CityName(locality.LocalityName,locality.DependentLocality);
locality = AdministrativeLocality(placemark);
if (locality != null) return CityName(locality.LocalityName,locality.DependentLocality); return '';}

function CityName(localityName,dependentLocality) {
if (localityName != null) return localityName;
if (dependentLocality != null) return dependentLocality.DependentLocalityName; return '';}

function LocalityPostalCode(placemark) {
var locality = SubAdministrativeLocality(placemark);
if (locality != null) return locality.PostalCode;
locality =  AdministrativeLocality(placemark);
if (locality != null) return locality.PostalCode; return null;}

function CountryPostalCode(placemark) {
var country = Country(placemark);
if (country != null) return country.PostalCode; return null;}

function AdministrativePostalCode(placemark) {
var administrativeArea = AdministrativeArea(placemark);
if (administrativeArea != null) return administrativeArea.PostalCode; return null;}

function SubAdministrativePostalCode(placemark) {
var subAdministrativeArea = SubAdministrativeArea(placemark);
if (subAdministrativeArea != null) return subAdministrativeArea.PostalCode; return null;}

function PostalCodeNumber(placemark) {
var postalCode = LocalityPostalCode(placemark);
if (postalCode != null) return postalCode.PostalCodeNumber;
postalCode = SubAdministrativePostalCode(placemark);
if (postalCode != null) return postalCode.PostalCodeNumber;
postalCode = AdministrativePostalCode(placemark);
if (postalCode != null) return postalCode.PostalCodeNumber;
postalCode = CountryPostalCode(placemark);
if (postalCode != null) return postalCode.PostalCodeNumber; return '';}

function GetState(placemark) {
switch(CountryNameCode(placemark)) {
case 'GB': return SubAdministrativeAreaName(placemark);
default: return AdministrativeAreaName(placemark);}
}

function Address(placemark)
{if (placemark != null) return placemark.address; return '';}

function accuracyZoom(accuracy) {
var zoom = 1;
switch (accuracy) {
case 1: zoom = 2; break;
case 2: case 3: zoom = 5; break;
case 4: zoom = 8; break;
case 5: case 6: case 7: case 8: zoom = 10; break;
default: zoom = 1; } return zoom;}

function htmlEncode(s) {
var div = document.createElement('div');
var text = document.createTextNode(s);
div.appendChild(text);
return div.innerHTML;
};

function SetSelect(list,value)
{
var u = value.toUpperCase();
list.value=u;
if (list.value!=u)
{
	var i=0;
	for (i=0;i<=list.length-1;i++)
	{
		if (list[i].text.toUpperCase() == u)
			{list.selectedIndex=i;return;}
	}
}
}

function placemarkUrl(placemark) {
var p = placemark.Point.coordinates;
var gCountry = CountryNameCode(placemark);
var code = Accuracy(placemark);
var gState = GetState(placemark);
var gCity = LocalityName(placemark);
var gPostalCode =  '';
zoom = accuracyZoom(code);
if ((zoom < 5) && (CountryNameCode(placemark) == 'JP')) {zoom = 5;}

if (code>4)
{
	if ((gCountry == 'US') || (gCountry == 'AU'))
		gPostalCode = PostalCodeNumber(placemark);
}
return 'javascript:setUserInput("' + gCountry + '","' + escape(gState) + '","' + escape(gCity) + '","' + escape(gPostalCode) + '",' + p[1] + ',' + p[0] + ',' + zoom + ')';
}

function showDidYouMean(result,messageControl) {
if (CountryNameCode(result.Placemark[0]) == 'JP') {return;}
messageControl.innerHTML = "Did you mean:";
for (var i=0; i<result.Placemark.length; i++) {
	var url = placemarkUrl(result.Placemark[i]);
	messageControl.innerHTML += "<br>" + (i+1) + ": <a href=" + url + ">" + Address(result.Placemark[i]) + "</a>";
}
}
function GetSelectText(list)
{
var i=list.selectedIndex;
if (i>=0) return list[i].text; return "";
}

function RemoveWrongPlacemarks(result,country) {
var placemarkLength = result.Placemark.length;
var countryPlacemarks = new Array();
for (var i=0; i<placemarkLength; i++) {
	var placemark = result.Placemark.shift();
	var gCountry = CountryNameCode(placemark);
	if (gCountry == country) {
		countryPlacemarks.push(placemark);
	}
}
result.Placemark = countryPlacemarks;
}

function log(msg) {new Image().src='/bf.ashx?m='+escape(msg);}

function loadMap() {
showMap();
if (!map) {
map = new GMap2(ctl('map'));
map.addControl(new GSmallMapControl);
placeMarkers();
}
}

function switchMap(a) {
if (isMapOn) {hideMap();if(a){a.innerHTML='Show Map';}}
else {loadMap();if(a){a.innerHTML='Hide Map';}}
return false;
}

function placeArrow(lat,lng,zoom) {
var point = new GLatLng(lat,lng);
map.setCenter(point,zoom);
map.addOverlay(createArrow(point));
}

function cookShowArray(linkArr, latlngarr) {
showArr = new Array();
count = linkArr.length;
showArr.length = count;
for (var i = 0; i < count; i++) {showArr[i] = 1;}
for (var i = 0; i < count-1; i++) {
	for (var j = i+1; j < count; j++) {
		if ((latlngarr[i].x == latlngarr[j].x) && (latlngarr[i].y == latlngarr[j].y)) {
		   showArr[j] = 0;
		   if (showArr[i]>0) {showArr[i]++;}
		   linkArr[i] = linkArr[i] + linkArr[j];
		   linkArr[j] = '';
		}
	}
}
return showArr;
}

function cookSmallLinkArr(count) {
var linkArr = new Array();
linkArr.length = count;
for (var i = 0; i < count; i++) {linkArr[i]=cookSmallLink(i);}
return linkArr;
}

function cookBalloonDiv(html) {
return '<div style=\'overflow:auto;height:90px;width:200px;\'>'+ html + '</div>';
}

function createTinyMarker(latlng, baloonHtml) {
var tinyIcon = new GIcon();
tinyIcon.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png';
tinyIcon.shadow = 'http://labs.google.com/ridefinder/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);
var marker = new GMarker(latlng, {icon:tinyIcon});
GEvent.addListener(marker, 'click', function() {marker.openInfoWindowHtml(baloonHtml);});
return marker;
}

function hideMap(){ctl('map').style.display = 'none';isMapOn=false;}

function showMap(){ctl('map').style.display = '';isMapOn=true;var a=ctl('mapSwitch');if(a){a.innerHTML='Hide Map';}}

function createArrow(point) {
var pointIcon = new GIcon();
pointIcon.shadow = 'http://www.google.com/mapfiles/arrowshadow.png';
pointIcon.iconSize = new GSize(39, 34);
pointIcon.shadowSize = new GSize(37, 34);
pointIcon.iconAnchor = new GPoint(9, 34);
pointIcon.infoWindowAnchor = new GPoint(9, 2);
pointIcon.infoShadowAnchor = new GPoint(18, 25);
var icon = new GIcon(pointIcon);
icon.image = 'http://www.google.com/mapfiles/arrow.png';
var marker = new GMarker(point,icon);
return marker;
}

function cleanUp(){if (map) {GUnload();}}

function addLoadEvent(f) {
var old=window.onload;
if(typeof window.onload!='function'){window.onload=f;}
else{
window.onload=function(){
if(old){old();}
f();
}
}
}