﻿//Load map google library. Some version investigation should be done and a specific version should be choosen
//in case the api becomes incompatible in the future
//ATTN: Code dependant on google API.
//google.load("maps", "2");
var stateBorders;
var stateCodes;
var fillColor;
var isPostBack;
var selectedState;
var selectedStateCode;
var enableStateClickHighlight;

var map; //keep map global

//Init methods for the map. This method also gets the required data from the webservice.
function InitMap(args) {
    //alert(G_API_VERSION);
    // TODO: Remove bTest - is here just for testing feedback messaging to server
    var bTest = true;
    //wait for asi to be defined
    if (lastMapResultVersion != "") {
    	lastMapResultVersionPrev = lastMapResultVersion;
    	lastMapResultVersion = "";
    }
    if (typeof ASI != "undefined") {
        ASI.Framework.WebUI.GoogleMapService.GetUpdatedMap(bTest, OnComplete, OnTimeout, OnError);
    }
    else {
        setTimeout('InitMap(\'\')', 500);
    }
};

// custom properties
var enableStateZoom;

function ReloadMap() {
	//alert(G_API_VERSION);
	// TODO: Remove bTest - is here just for testing feedback messaging to server
	var bTest = true;
	//wait for asi to be defined
	if (lastMapResultVersion != "") {
		lastMapResultVersionPrev = lastMapResultVersion;
		lastMapResultVersion = "";
	} 
	if (typeof ASI != "undefined") {
		ASI.Framework.WebUI.GoogleMapService.GetUpdatedMap(bTest, OnReComplete, OnTimeout, OnError);
	}
	else {
		setTimeout('InitMap(\'\')', 500);
	}
}

function ResetGMap() {
    OnCompleteInit(LastMapServiceResult);
    OnCompletePart2_Reload(LastMapServiceResult);
}

var oldMapDiv;
var resultGlobalCarrierBecauseSetTimeOutNeedsIt;
var LastMapServiceResult;
var lastMapResultVersion = "";
var lastMapResultVersionPrev = "";

function OnComplete(result) {
	LastMapServiceResult = result;
	if ((result == null) || (result.MapDiv == null) || ((lastMapResultVersion == "") && (result.Version == lastMapResultVersionPrev)))
	{
		//alert("love is predead");
		setTimeout('InitMap("")', 10);
		return;
	}
	resultGlobalCarrierBecauseSetTimeOutNeedsIt = result;
	if (document.getElementById(result.MapDiv) == null) {
		//alert("love is dead");
		setTimeout('OnComplete(resultGlobalCarrierBecauseSetTimeOutNeedsIt)', 100);
		return;
	}
	lastMapResultVersion = result.Version;
	OnCompleteInit(result);
	OnCompletePart2_Reload(result);
}

function OnReComplete(result) {
	LastMapServiceResult = result;
	if ((result == null) || (result.MapDiv == null) || ((lastMapResultVersion == "") && (result.Version == lastMapResultVersionPrev)))
	{
		//alert("love is predead");
		setTimeout('ReloadMap()', 10);
		return;
	}
	resultGlobalCarrierBecauseSetTimeOutNeedsIt = result;
	if (document.getElementById(result.MapDiv) == null) {
		//alert("love is dead");
		setTimeout('OnReComplete(resultGlobalCarrierBecauseSetTimeOutNeedsIt)', 100);
		return;
	}
	lastMapResultVersion = result.Version;
	// new div!
	if ((oldMapDiv != result.MapDiv) || result.ForceMapReInit)
	    OnCompleteInit(result);
	OnCompletePart2_Reload(result);
	
	//remember the previous div
	oldMapDiv = result.MapDiv;
}

//Once all data has been received from the webservice without error display the map.
function OnCompleteInit(result) {

    //if div is not found return

    enableStateZoom = result.EnableStateZoom;
    enableStateClickHighlight = result.EnableStateClickHighlight
    // set up custom Properties - see server side code to see what can be set
    //SetupCustomProperties();

    map = new GMap2(document.getElementById(result.MapDiv));
    oldMapDiv = result.MapDiv;
    gmarkers = [];
    
    //set center to us center
    //TODO: Add code for optimal centering of the map (LVI_18_Nov_2008)
    // only set center and zoom level in postback mode, when the map is first being invoked
    //old setting 1: map.setCenter(new GLatLng(37.09024, -95.712891), 4);
    //old setting 2: map.setCenter(new GLatLng(50.474288, -110.141603), 3);
    
    map.setCenter(new GLatLng(45.09024, -100.712891), 3);
    //set map controls
    if (result.ShowZoom) {
    	map.addControl(new GLargeMapControl());
    }

//    map = new GMap2(document.getElementById(result.MapDiv));
//    map.setCenter(new GLatLng(37.4419, -122.1419), 13);

//    GEvent.addListener(map, "click", function(overlay, point) {
//    	var myHtml = "The GPoint value is: " + map.fromLatLngToDivPixel(point) + " at zoom level " + map.getZoom();
//    	map.openInfoWindow(point, myHtml);
//    });
//    map.addControl(new GSmallMapControl());
//    map.addControl(new GMapTypeControl());
};

function OnCompletePart2_Reload(result) {

	//draw direction if set
	if (result.Direction != null) {
		AddDirection(result.Direction);
	}

	//draw markers
	//NOTE: Do not use foreach because IE does not execute it right (grrr..)

	for (var i = 0; i < result.Markers.length; i++) {
		map.addOverlay(CreateMarker(result.Markers[i]));
	}
	//if we don't have direction center map to us
	if (result.Direction != null && isPostBack != true) {
		//autozoom and center map
		CenterMap();
	}

	// check if we are have state zoom enabled (custom properties)
	if (enableStateZoom) {
		//define state boundaries
	    stateBorders = {
		    'DC': [new GLatLng(38.995707, -77.041283), new GLatLng(38.892903, -76.911507), new GLatLng(38.791824, -77.039223), new GLatLng(38.879274, -77.044029), new GLatLng(38.934443, -77.119732), new GLatLng(38.995707, -77.041283)],
			'WA': [new GLatLng(48.400032, -124.628906), new GLatLng(45.828800, -123.925781), new GLatLng(46.134171, -117.158203), new GLatLng(48.980217, -117.158203), new GLatLng(48.922501, -123.046875), new GLatLng(48.224674, -123.134766), new GLatLng(48.400032, -124.628906)],
			'OR': [new GLatLng(42.032974, -124.277344), new GLatLng(42.098221, -116.982422), new GLatLng(46.073231, -116.982422), new GLatLng(45.706181, -123.837891), new GLatLng(42.032974, -124.277344)],
			'CA': [new GLatLng(32.620869, -117.246094), new GLatLng(32.768799, -114.873047), new GLatLng(34.452217, -114.433594), new GLatLng(39.027718, -119.794922), new GLatLng(41.967659, -119.970703), new GLatLng(42.032974, -124.365234), new GLatLng(39.639538, -123.837891), new GLatLng(35.029995, -120.673828), new GLatLng(33.651207, -117.773438), new GLatLng(32.620869, -117.246094)],
			'ID': [new GLatLng(42.163403, -116.982422), new GLatLng(42.098221, -111.005859), new GLatLng(44.653023, -111.269531), new GLatLng(44.402393, -112.939453), new GLatLng(45.521744, -114.082031), new GLatLng(45.460133, -114.697266), new GLatLng(46.619263, -114.433594), new GLatLng(47.989922, -116.191406), new GLatLng(49.037868, -116.103516), new GLatLng(48.922501, -117.158203), new GLatLng(42.163403, -116.982422)],
			'NV': [new GLatLng(34.907144, -114.533594), new GLatLng(35.960224, -114.697266), new GLatLng(36.315125, -114.0), new GLatLng(37.090240, -113.994141), new GLatLng(41.902279, -114.169922), new GLatLng(41.967659, -119.794922), new GLatLng(39.027718, -119.794922), new GLatLng(34.907144, -114.533594)],
			'MT': [new GLatLng(48.980217, -104.062500), new GLatLng(45.089035, -104.062500), new GLatLng(45.151054, -111.181641), new GLatLng(44.527843, -111.093750), new GLatLng(44.402393, -113.027344), new GLatLng(45.583290, -114.082031), new GLatLng(45.336700, -114.873047), new GLatLng(46.739861, -114.433594), new GLatLng(47.219566, -116.103516), new GLatLng(49.037868, -116.015625), new GLatLng(48.980217, -104.062500)],
			'TX': [new GLatLng(36.315125, -103.007812), new GLatLng(36.456635, -100.107422), new GLatLng(34.524662, -100.019531), new GLatLng(33.724339, -96.855469), new GLatLng(33.797409, -95.537109), new GLatLng(33.504761, -93.955078), new GLatLng(30.751278, -93.691406), new GLatLng(30.600094, -92.988281), new GLatLng(28.459032, -96.943359), new GLatLng(26.902477, -97.734375), new GLatLng(25.641525, -97.119141), new GLatLng(26.588528, -99.404297), new GLatLng(27.994402, -99.755859), new GLatLng(29.764378, -101.425781), new GLatLng(29.764378, -102.744141), new GLatLng(28.767658, -103.095703), new GLatLng(29.611670, -104.501953), new GLatLng(30.524412, -105.117188), new GLatLng(32.026707, -106.611328), new GLatLng(32.175613, -102.919922), new GLatLng(36.315125, -103.007812)],
			'ND': [new GLatLng(48.922501, -97.207031), new GLatLng(45.828800, -96.591797), new GLatLng(46.012222, -104.150391), new GLatLng(49.095451, -104.062500), new GLatLng(48.922501, -97.207031)],
			'MN': [new GLatLng(43.452919, -96.416016), new GLatLng(43.516689, -91.318359), new GLatLng(43.961189, -91.230469), new GLatLng(44.902576, -92.900391), new GLatLng(45.644768, -92.900391), new GLatLng(46.437859, -92.109375), new GLatLng(47.931065, -89.478125), new GLatLng(49.037868, -95.185547), new GLatLng(49.037868, -97.294922), new GLatLng(47.040180, -96.328125), new GLatLng(43.452919, -96.416016)],
			'SD': [new GLatLng(43.068890, -103.974609), new GLatLng(42.940338, -98.437500), new GLatLng(42.553082, -96.328125), new GLatLng(45.951149, -96.503906), new GLatLng(46.073231, -104.062500), new GLatLng(43.068890, -103.974609)],
			'LA': [new GLatLng(33.137550, -93.867188), new GLatLng(33.284618, -91.230469), new GLatLng(32.101189, -90.878906), new GLatLng(30.751278, -91.757812), new GLatLng(31.128199, -89.648438), new GLatLng(29.152161, -89.033203), new GLatLng(29.382175, -91.757812), new GLatLng(29.993002, -93.779297), new GLatLng(33.137550, -93.867188)],
			'AZ': [new GLatLng(32.546814, -115.092773), new GLatLng(31.278551, -110.961914), new GLatLng(31.316101, -109.072266), new GLatLng(37.055176, -109.379883), new GLatLng(37.055176, -114.0), new GLatLng(36.315125, -114.0), new GLatLng(35.995785, -114.609375), new GLatLng(34.379711, -114.389648), new GLatLng(32.546814, -115.092773)],
			'NM': [new GLatLng(31.353638, -108.940430), new GLatLng(31.353638, -108.105469), new GLatLng(31.840233, -108.149414), new GLatLng(31.989443, -106.567383), new GLatLng(32.212803, -102.919922), new GLatLng(36.985004, -103.007812), new GLatLng(37.020100, -109.116211), new GLatLng(31.353638, -108.940430)],
			'CO': [new GLatLng(40.913513, -102.172852), new GLatLng(36.985004, -102.084961), new GLatLng(37.055176, -109.116211), new GLatLng(41.046219, -109.116211), new GLatLng(40.913513, -102.172852)],
			'KS': [new GLatLng(40.010788, -102.041016), new GLatLng(40.010788, -94.921875), new GLatLng(39.402245, -95.009766), new GLatLng(38.822590, -94.526367), new GLatLng(36.985004, -94.746094), new GLatLng(37.090240, -102.084961), new GLatLng(40.010788, -102.041016)],
			'NE': [new GLatLng(43.068890, -104.106445), new GLatLng(43.036777, -98.437500), new GLatLng(42.553082, -96.416016), new GLatLng(39.943436, -95.273438), new GLatLng(40.178871, -102.172852), new GLatLng(40.979897, -102.084961), new GLatLng(41.013065, -104.150391), new GLatLng(43.068890, -104.106445)],
			'FL': [new GLatLng(30.259068, -87.539062), new GLatLng(30.977610, -87.583008), new GLatLng(31.052935, -85.034180), new GLatLng(30.600094, -81.474609), new GLatLng(29.535231, -81.298828), new GLatLng(26.824072, -80.024414), new GLatLng(25.125393, -80.507812), new GLatLng(26.115986, -81.782227), new GLatLng(27.605671, -82.749023), new GLatLng(28.806173, -82.617188), new GLatLng(30.145126, -83.891602), new GLatLng(30.031055, -84.550781), new GLatLng(29.688053, -85.209961), new GLatLng(30.334953, -86.264648), new GLatLng(30.259068, -87.539062)],
			'MS': [new GLatLng(34.921970, -88.110352), new GLatLng(30.334953, -88.461914), new GLatLng(30.221102, -89.516602), new GLatLng(31.203405, -89.736328), new GLatLng(31.015280, -91.538086), new GLatLng(31.690783, -91.538086), new GLatLng(32.212803, -91.010742), new GLatLng(33.760883, -91.186523), new GLatLng(34.957996, -90.175781), new GLatLng(34.921970, -88.110352)],
			'GA': [new GLatLng(34.957996, -85.693359), new GLatLng(32.287132, -84.946289), new GLatLng(31.690783, -85.166016), new GLatLng(31.015280, -85.034180), new GLatLng(30.713505, -81.606445), new GLatLng(32.175613, -80.859375), new GLatLng(33.284618, -81.826172), new GLatLng(34.597042, -83.144531), new GLatLng(35.101933, -83.276367), new GLatLng(34.957996, -85.693359)],
			'SC': [new GLatLng(33.870415, -78.574219), new GLatLng(34.813805, -79.672852), new GLatLng(35.029995, -81.035156), new GLatLng(35.281502, -82.529297), new GLatLng(34.885929, -83.276367), new GLatLng(32.249973, -80.815430), new GLatLng(33.027088, -79.409180), new GLatLng(33.468109, -79.057617), new GLatLng(33.870415, -78.574219)],
			'NC': [new GLatLng(36.633163, -75.893555), new GLatLng(36.562599, -81.606445), new GLatLng(36.102375, -82.265625), new GLatLng(35.532227, -83.496094), new GLatLng(35.101933, -84.375000), new GLatLng(34.994003, -83.100586), new GLatLng(35.317368, -82.397461), new GLatLng(34.849876, -79.497070), new GLatLng(33.760883, -78.530273), new GLatLng(34.849876, -76.948242), new GLatLng(35.532227, -75.805664), new GLatLng(36.633163, -75.893555)],
			'VA': [new GLatLng(36.562599, -83.891602), new GLatLng(37.474850, -82.045891), new GLatLng(37.361427, -81.760254), new GLatLng(37.300270, -81.430656), new GLatLng(37.474850, -80.288078), new GLatLng(38.591114, -79.639893), new GLatLng(38.419167, -79.420166), new GLatLng(38.634037, -79.189453), new GLatLng(38.822590, -79.024658), new GLatLng(38.779781, -78.815918), new GLatLng(39.436192, -78.299561), new GLatLng(39.121536, -77.871094), new GLatLng(39.308800, -77.684326), new GLatLng(38.754082, -76.948242), new GLatLng(38.341648, -77.387688), new GLatLng(37.892189, -76.113281), new GLatLng(37.622932, -76.376953), new GLatLng(37.361427, -76.289062), new GLatLng(37.265308, -76.508781), new GLatLng(36.976227, -76.223145), new GLatLng(37.011326, -75.827637), new GLatLng(36.650791, -75.959473), new GLatLng(36.562599, -83.891602)],
			'AL': [new GLatLng(34.957996, -88.154297), new GLatLng(34.994003, -85.649414), new GLatLng(32.324276, -84.946289), new GLatLng(31.653381, -85.078125), new GLatLng(31.015280, -84.946289), new GLatLng(30.939924, -87.583008), new GLatLng(30.448673, -87.495117), new GLatLng(30.448673, -88.505859), new GLatLng(34.957996, -88.154297)],
			'OK': [new GLatLng(33.651207, -94.526367), new GLatLng(35.532227, -94.482422), new GLatLng(36.914764, -94.790039), new GLatLng(37.055176, -102.919922), new GLatLng(36.244274, -102.963867), new GLatLng(36.491974, -100.063477), new GLatLng(34.488449, -100.107422), new GLatLng(33.687782, -96.635742), new GLatLng(33.651207, -94.526367)],
			'AR': [new GLatLng(36.597889, -94.570312), new GLatLng(36.562599, -90.175781), new GLatLng(35.853439, -90.395508), new GLatLng(36.031330, -89.648438), new GLatLng(33.797409, -91.142578), new GLatLng(33.284618, -91.230469), new GLatLng(33.100746, -93.911133), new GLatLng(33.614620, -94.042969), new GLatLng(33.724339, -94.526367), new GLatLng(35.924644, -94.526367), new GLatLng(36.597889, -94.570312)],
			'MO': [new GLatLng(40.613953, -91.450195), new GLatLng(39.808537, -91.494141), new GLatLng(38.719807, -90.219727), new GLatLng(36.633163, -89.033203), new GLatLng(36.031330, -89.736328), new GLatLng(35.924644, -90.483398), new GLatLng(36.703659, -90.131836), new GLatLng(36.597889, -94.790039), new GLatLng(39.027718, -94.482422), new GLatLng(39.436192, -94.921875), new GLatLng(39.977119, -94.833984), new GLatLng(40.111691, -95.405273), new GLatLng(40.647305, -95.493164), new GLatLng(40.613953, -91.450195)],
			'TN': [new GLatLng(36.527294, -89.121094), new GLatLng(36.527294, -81.738281), new GLatLng(34.957996, -84.550781), new GLatLng(35.101933, -90.439453), new GLatLng(36.527294, -89.121094)],
			'UT': [new GLatLng(41.967659, -114.038086), new GLatLng(37.125286, -114.082031), new GLatLng(37.090240, -109.072266), new GLatLng(41.013065, -109.116211), new GLatLng(41.046219, -111.225586), new GLatLng(42.032974, -111.093750), new GLatLng(41.967659, -114.038086)],
			'WY': [new GLatLng(41.145569, -111.181641), new GLatLng(40.979897, -103.974609), new GLatLng(45.058002, -104.194336), new GLatLng(45.151054, -111.093750), new GLatLng(41.145569, -111.181641)],
			'IL': [new GLatLng(37.020100, -89.208984), new GLatLng(38.925228, -90.175781), new GLatLng(39.842285, -91.538086), new GLatLng(40.580585, -91.406250), new GLatLng(41.112469, -90.966797), new GLatLng(41.508575, -91.142578), new GLatLng(41.771313, -90.219727), new GLatLng(42.130821, -90.131836), new GLatLng(42.455887, -90.615234), new GLatLng(42.553082, -87.890625), new GLatLng(41.705730, -87.451172), new GLatLng(39.130058, -87.670898), new GLatLng(38.719807, -87.495117), new GLatLng(38.065392, -88.022461), new GLatLng(37.090240, -88.505859), new GLatLng(37.020100, -89.208984)],
			'KY': [new GLatLng(37.544579, -82.045898), new GLatLng(38.134556, -82.661133), new GLatLng(38.616871, -82.661133), new GLatLng(38.719807, -83.452148), new GLatLng(38.822590, -84.418945), new GLatLng(39.164143, -84.902344), new GLatLng(38.134556, -85.869141), new GLatLng(37.857506, -87.187500), new GLatLng(37.857506, -88.198242), new GLatLng(37.055176, -88.505859), new GLatLng(37.090240, -89.165039), new GLatLng(36.527294, -89.033203), new GLatLng(36.527294, -83.803711), new GLatLng(37.544579, -82.045898)],
			'IN': [new GLatLng(39.164143, -84.814453), new GLatLng(41.738529, -84.858398), new GLatLng(41.804077, -86.572266), new GLatLng(41.541477, -87.583008), new GLatLng(39.232254, -87.714844), new GLatLng(38.719807, -87.495117), new GLatLng(37.961521, -88.198242), new GLatLng(37.857506, -87.011719), new GLatLng(38.238178, -85.957031), new GLatLng(39.164143, -84.814453)],
			'IA': [new GLatLng(43.484814, -96.416016), new GLatLng(42.455887, -96.416016), new GLatLng(40.613953, -95.537109), new GLatLng(40.613953, -91.406250), new GLatLng(41.211723, -90.966797), new GLatLng(41.574360, -91.098633), new GLatLng(41.804077, -90.175781), new GLatLng(42.195969, -90.219727), new GLatLng(42.747013, -91.010742), new GLatLng(43.516689, -91.318359), new GLatLng(43.484814, -96.416016)],
			'WI': [new GLatLng(46.830135, -92.065430), new GLatLng(46.649437, -90.351562), new GLatLng(45.859413, -87.934570), new GLatLng(45.182037, -87.583008), new GLatLng(45.429298, -86.923828), new GLatLng(44.245197, -87.670898), new GLatLng(42.585445, -87.978516), new GLatLng(42.423458, -90.659180), new GLatLng(42.811523, -91.098633), new GLatLng(43.961189, -91.318359), new GLatLng(44.809120, -92.812500), new GLatLng(45.675484, -92.900391), new GLatLng(46.377254, -92.153320), new GLatLng(46.830135, -92.065430)],
			'MI': [new GLatLng(41.804077, -86.660156), new GLatLng(42.455887, -86.176758), new GLatLng(43.675819, -86.484375), new GLatLng(44.840290, -86.132812), new GLatLng(46.5, -90.4), new GLatLng(48.023733, -89.498291), new GLatLng(48.302198, -88.333741), new GLatLng(45.955733, -83.587647), new GLatLng(44.370987, -83.452148), new GLatLng(43.929550, -83.891602), new GLatLng(44.150681, -82.968750), new GLatLng(42.908161, -82.265625), new GLatLng(42.326061, -83.276367), new GLatLng(41.934978, -83.276367), new GLatLng(41.738529, -83.979492), new GLatLng(41.804077, -86.660156)],
			'OH': [new GLatLng(38.376114, -82.661133), new GLatLng(38.582527, -82.221680), new GLatLng(39.002110, -82.056885), new GLatLng(39.740986, -80.859375), new GLatLng(40.363289, -80.595703), new GLatLng(42.098221, -80.507812), new GLatLng(41.475658, -82.309570), new GLatLng(41.804077, -83.891602), new GLatLng(41.705730, -85.034180), new GLatLng(39.027718, -84.726562), new GLatLng(38.376114, -82.661133)],
			'WV': [new GLatLng(39.842285, -80.771484), new GLatLng(39.732536, -80.507812), new GLatLng(39.707188, -79.508057), new GLatLng(39.698734, -78.244629), new GLatLng(38.814030, -78.804932), new GLatLng(38.822590, -79.024658), new GLatLng(38.444984, -79.398193), new GLatLng(38.599701, -79.683838), new GLatLng(37.474857, -80.244141), new GLatLng(37.309013, -81.474609), new GLatLng(37.483578, -82.045898), new GLatLng(38.125916, -82.650146), new GLatLng(38.350273, -82.628174), new GLatLng(38.444984, -82.287598), new GLatLng(38.993572, -82.056885), new GLatLng(39.842285, -80.771484)],
			'MD': [new GLatLng(38.479397, -75.146484), new GLatLng(38.548164, -75.761719), new GLatLng(39.673370, -75.849609), new GLatLng(39.774769, -77.958984), new GLatLng(39.478607, -78.299561), new GLatLng(39.172661, -77.882080), new GLatLng(39.334297, -77.673340), new GLatLng(38.822590, -76.948242), new GLatLng(38.341656, -77.387695), new GLatLng(37.892197, -76.113281), new GLatLng(36.809284, -76.113281), new GLatLng(38.479397, -75.146484)],
			'PA': [new GLatLng(42.326061, -79.936523), new GLatLng(41.967659, -79.628906), new GLatLng(42.130821, -75.366211), new GLatLng(41.409775, -74.750977), new GLatLng(40.580585, -75.234375), new GLatLng(40.111691, -74.750977), new GLatLng(39.673370, -75.893555), new GLatLng(39.757881, -80.562744), new GLatLng(42.000324, -80.507812), new GLatLng(42.326061, -79.936523)],
			'NY': [new GLatLng(44.980343, -73.322754), new GLatLng(45.058002, -74.772949), new GLatLng(44.182205, -76.333008), new GLatLng(43.500751, -76.223145), new GLatLng(43.229195, -77.453613), new GLatLng(43.389084, -78.046875), new GLatLng(43.261208, -79.189453), new GLatLng(42.811523, -78.815918), new GLatLng(42.163403, -79.760742), new GLatLng(41.951321, -79.541016), new GLatLng(42.081917, -75.344238), new GLatLng(41.376808, -74.816895), new GLatLng(41.062786, -73.937988), new GLatLng(40.497093, -74.289551), new GLatLng(40.563896, -73.575439), new GLatLng(40.996483, -71.784668), new GLatLng(41.178654, -72.290039), new GLatLng(41.004776, -72.674561), new GLatLng(40.855370, -73.718262), new GLatLng(40.996483, -73.652344), new GLatLng(42.666283, -73.322754), new GLatLng(43.644028, -73.300781), new GLatLng(44.087585, -73.454590), new GLatLng(44.980343, -73.322754)],
			'DE': [new GLatLng(38.822590, -75.135498), new GLatLng(39.436192, -75.476074), new GLatLng(39.876019, -75.498047), new GLatLng(39.673370, -75.937500), new GLatLng(38.513786, -75.717773), new GLatLng(38.462193, -75.025635), new GLatLng(38.822590, -75.135498)],
			'NJ': [new GLatLng(40.513798, -74.311523), new GLatLng(41.062786, -73.959961), new GLatLng(41.376808, -74.772949), new GLatLng(40.613953, -75.234375), new GLatLng(40.195660, -74.816895), new GLatLng(39.825413, -75.498047), new GLatLng(39.487083, -75.541992), new GLatLng(38.993572, -74.860840), new GLatLng(39.520992, -74.311523), new GLatLng(40.245991, -73.959961), new GLatLng(40.513798, -74.311523)],
			'VT': [new GLatLng(42.763145, -72.641602), new GLatLng(42.795403, -73.366699), new GLatLng(43.659924, -73.344727), new GLatLng(44.182205, -73.520508), new GLatLng(45.026951, -73.366699), new GLatLng(45.026951, -71.433105), new GLatLng(44.699898, -71.652832), new GLatLng(44.433781, -71.652832), new GLatLng(44.276672, -71.960449), new GLatLng(43.628124, -72.399902), new GLatLng(42.763145, -72.641602)],
			'NH': [new GLatLng(42.940338, -70.817871), new GLatLng(43.357140, -70.905762), new GLatLng(45.274887, -71.191406), new GLatLng(45.274887, -71.411133), new GLatLng(44.731125, -71.674805), new GLatLng(44.418087, -71.652832), new GLatLng(44.245197, -72.092285), new GLatLng(43.508720, -72.421875), new GLatLng(42.755081, -72.608643), new GLatLng(42.650124, -71.323242), new GLatLng(42.940338, -70.817871)],
			'MA': [new GLatLng(42.795403, -73.344727), new GLatLng(42.730873, -72.575684), new GLatLng(42.674358, -71.257324), new GLatLng(42.827641, -71.059570), new GLatLng(43.020714, -70.883789), new GLatLng(42.642040, -70.675049), new GLatLng(42.358543, -71.015625), new GLatLng(42.261047, -70.784912), new GLatLng(41.934978, -70.543213), new GLatLng(41.828644, -69.938965), new GLatLng(41.672913, -69.960938), new GLatLng(41.401535, -70.268555), new GLatLng(41.335575, -70.751953), new GLatLng(41.590797, -71.015625), new GLatLng(42.049294, -71.499023), new GLatLng(42.057449, -73.432617), new GLatLng(42.795403, -73.344727)],
			'CT': [new GLatLng(42.016651, -71.806641), new GLatLng(41.335575, -71.828613), new GLatLng(41.269550, -72.971191), new GLatLng(40.996483, -73.652344), new GLatLng(42.065605, -73.454590), new GLatLng(42.016651, -71.806641)],
			'RI': [new GLatLng(41.327328, -71.817627), new GLatLng(41.450962, -71.059570), new GLatLng(41.705730, -71.147461), new GLatLng(42.041134, -71.466064), new GLatLng(42.016651, -71.806641), new GLatLng(41.664703, -71.784668), new GLatLng(41.327328, -71.817627)],
			'ME': [new GLatLng(44.855869, -66.862793), new GLatLng(45.213005, -67.214355), new GLatLng(45.166546, -67.456055), new GLatLng(45.598667, -67.500000), new GLatLng(45.752193, -67.851562), new GLatLng(47.129951, -67.807617), new GLatLng(47.457809, -68.334961), new GLatLng(47.204643, -68.906250), new GLatLng(47.457809, -69.191895), new GLatLng(46.739861, -70.026855), new GLatLng(46.422714, -70.158691), new GLatLng(46.149395, -70.334473), new GLatLng(45.583290, -70.686035), new GLatLng(45.259422, -71.081543), new GLatLng(42.988575, -70.839844), new GLatLng(44.119141, -69.016113), new GLatLng(44.386692, -68.115234), new GLatLng(44.855869, -66.862793)],
			'AK': [new GLatLng(60.383462, -140.991213), new GLatLng(69.727245, -141.079103), new GLatLng(71.365494, -156.547853), new GLatLng(68.37652, -166.918947), new GLatLng(66.118959, -161.769104), new GLatLng(66.107837, -163.713684), new GLatLng(66.698216, -164.194338), new GLatLng(65.596616, -167.885744), new GLatLng(64.446268, -166.567385), new GLatLng(64.672799, -161.469728), new GLatLng(63.832918, -160.678713), new GLatLng(61.992652, -166.831056), new GLatLng(57.671261, -159.536135), new GLatLng(52.765551, -169.291994), new GLatLng(57.102839, -152.153322), new GLatLng(59.813895, -148.549806), new GLatLng(59.5922, -140.815431), new GLatLng(58.461528, -137.299806), new GLatLng(54.630292, -133.688049), new GLatLng(54.677960, -130.611878), new GLatLng(56.088282, -130.090027), new GLatLng(59.801463, -135.467835), new GLatLng(59.099282, -137.475588), new GLatLng(60.556739, -139.057619), new GLatLng(60.383462, -140.991213)],
			'HI': [new GLatLng(18.421248, -155.844728), new GLatLng(19.421009,-154.603272), new GLatLng(22.498348,-159.393311), new GLatLng(21.806428,-160.447998), new GLatLng(21.11115,-158.074952), new GLatLng(18.421248, -155.844728)],
			'PR': [new GLatLng(17.954174, -67.204285), new GLatLng(18.267435, -67.187805), new GLatLng(18.350876, -67.281189), new GLatLng(18.491591, -67.132874), new GLatLng(18.481172, -66.116638), new GLatLng(18.361303, -65.633240), new GLatLng(18.383589, -65.177994), new GLatLng(18.099257, -65.212326), new GLatLng(17.969850, -65.869446), new GLatLng(17.954174, -67.204285)],
			'GU': [new GLatLng(13.242151, 144.703560), new GLatLng(13.262202, 144.657555), new GLatLng(13.341721, 144.630089), new GLatLng(13.403847, 144.656868), new GLatLng(13.444588, 144.615669), new GLatLng(13.469964, 144.638329), new GLatLng(13.488661, 144.760551), new GLatLng(13.659765, 144.855022), new GLatLng(13.606048, 144.915447), new GLatLng(13.604379, 144.958019), new GLatLng(13.516703, 144.930840), new GLatLng(13.412530, 144.790764), new GLatLng(13.291607, 144.770851), new GLatLng(13.247498, 144.737205), new GLatLng(13.242151, 144.703560)],
			'VI': [new GLatLng(17.645723,-64.484482), new GLatLng(17.575041,-64.985733), new GLatLng(18.457856,-65.103836), new GLatLng(18.352310, -64.645157), new GLatLng(17.645723,-64.484482)]
		};
		
		labelBorders = [
			['MD', 4, [new GLatLng(32.569037, -76.743166), new GLatLng(33.673154, -76.743166), new GLatLng(33.673154, -72.524416), new GLatLng(32.569037, -72.524416), new GLatLng(32.569037, -76.743166)], null],
			['MD', 4, [new GLatLng(34.183633, -74.194338), new GLatLng(34.979602, -74.194338), new GLatLng(34.979602, -69.975588), new GLatLng(34.183633, -69.975588), new GLatLng(34.183633, -74.194338)], null],
			['DE', 4, [new GLatLng(35.195358, -72.260744), new GLatLng(35.910409, -72.260744), new GLatLng(35.910409, -67.778322), new GLatLng(35.195358, -67.778322), new GLatLng(35.195358, -72.260744)], null],
			['NJ', 4, [new GLatLng(36.265536, -71.64551), new GLatLng(37.11127, -71.64551), new GLatLng(37.11127, -66.196291), new GLatLng(36.265536, -66.196291), new GLatLng(36.265536, -71.64551)], null],
			['CT', 4, [new GLatLng(38.016939, -72.348635), new GLatLng(38.774643, -72.348635), new GLatLng(38.774643, -66.723635), new GLatLng(38.016939, -66.723635), new GLatLng(38.016939, -72.348635)], null],
			['RI', 4, [new GLatLng(39.252674, -70.32715), new GLatLng(39.997323, -70.32715), new GLatLng(39.997323, -64.174806), new GLatLng(39.252674, -64.174806), new GLatLng(39.252674, -70.32715)], null],
			['MA', 4, [new GLatLng(40.266114, -68.9209), new GLatLng(40.933435, -68.9209), new GLatLng(40.933435, -61.977541), new GLatLng(40.266114, -61.977541), new GLatLng(40.266114, -68.9209)], null],
			['NH', 4, [new GLatLng(41.264595, -67.778322), new GLatLng(41.987261, -67.778322), new GLatLng(41.987261, -60.571291), new GLatLng(41.264595, -60.571291), new GLatLng(41.264595, -67.778322)], null],
			['VT', 4, [new GLatLng(42.182945, -67.075197), new GLatLng(42.959639, -67.075197), new GLatLng(42.959639, -63.032228), new GLatLng(42.182945, -63.032228), new GLatLng(42.182945, -67.075197)], null],
			['MD', 5, [new GLatLng(37.065698, -75.329591), new GLatLng(37.867915, -75.329591), new GLatLng(37.867915, -72.868653), new GLatLng(37.065698, -72.868653), new GLatLng(37.065698, -75.329591)], null],
			['RI', 5, [new GLatLng(41.122401, -69.968263), new GLatLng(41.944783, -69.968263), new GLatLng(41.944783, -68.21045), new GLatLng(41.122401, -68.21045), new GLatLng(41.122401, -69.968263)], null],
			['RI', 6, [new GLatLng(40.284554, -71.436768), new GLatLng(40.718952, -71.436768), new GLatLng(40.718952, -70.535889), new GLatLng(40.284554, -70.535889), new GLatLng(40.284554, -71.436768)], null],
			['RI', 7, [new GLatLng(40.37417, -71.21521), new GLatLng(40.608114, -71.21521), new GLatLng(40.608114, -70.720825), new GLatLng(40.37417, -70.720825), new GLatLng(40.37417, -71.21521)], null],
			['DE', 3, [new GLatLng(35.503612, -74.033207), new GLatLng(37.062191, -74.033207), new GLatLng(37.062191, -71.396488), new GLatLng(35.503612, -71.396488), new GLatLng(35.503612, -74.033207)], null],
			['NJ', 3, [new GLatLng(35.646584, -70.3418), new GLatLng(36.921792, -70.3418), new GLatLng(36.921792, -67.880863), new GLatLng(35.646584, -67.880863), new GLatLng(35.646584, -70.3418)]],
			['CT', 3, [new GLatLng(39.273089, -72.978519), new GLatLng(40.620624, -72.978519), new GLatLng(40.620624, -70.693363), new GLatLng(39.273089, -70.693363), new GLatLng(39.273089, -72.978519)], null],
			['RI', 3, [new GLatLng(38.176024, -68.056644), new GLatLng(39.409036, -68.056644), new GLatLng(39.409036, -66.298832), new GLatLng(38.176024, -66.298832), new GLatLng(38.176024, -68.056644)], null],
			['MA', 3, [new GLatLng(40.353243, -67.880863), new GLatLng(41.81063, -67.880863), new GLatLng(41.81063, -65.244144), new GLatLng(40.353243, -65.244144), new GLatLng(40.353243, -67.880863)], null],
			['NH', 3, [new GLatLng(42.33256, -66.12305), new GLatLng(43.491189, -66.12305), new GLatLng(43.491189, -63.486332), new GLatLng(42.33256, -63.486332), new GLatLng(42.33256, -66.12305)], null],
			['MD', 3, [new GLatLng(33.328693, -76.494144), new GLatLng(35.073167, -76.494144), new GLatLng(35.073167, -73.681644), new GLatLng(33.328693, -73.681644), new GLatLng(33.328693, -76.494144)], null]
		];

		stateCodes = [
{ code: 'AL', name: 'Alabama' },
{ code: 'AK', name: 'Alaska' },
{ code: 'AZ', name: 'Arizona' },
{ code: 'AR', name: 'Arkansas' },
{ code: 'CA', name: 'California' },
{ code: 'CO', name: 'Colorado' },
{ code: 'CT', name: 'Connecticut' },
{ code: 'DC', name: 'District of Columbia' },
{ code: 'DE', name: 'Delaware' },
{ code: 'FL', name: 'Florida' },
{ code: 'GA', name: 'Georgia' },
{ code: 'GU', name: 'Guam' },
{ code: 'HI', name: 'Hawaii' },
{ code: 'ID', name: 'Idaho' },
{ code: 'IL', name: 'Illinois' },
{ code: 'IN', name: 'Indiana' },
{ code: 'IA', name: 'Iowa' },
{ code: 'KS', name: 'Kansas' },
{ code: 'KY', name: 'Kentucky' },
{ code: 'LA', name: 'Louisiana' },
{ code: 'ME', name: 'Maine' },
{ code: 'MD', name: 'Maryland' },
{ code: 'MA', name: 'Massachusetts' },
{ code: 'MI', name: 'Michigan' },
{ code: 'MN', name: 'Minnesota' },
{ code: 'MS', name: 'Mississippi' },
{ code: 'MO', name: 'Missouri' },
{ code: 'MT', name: 'Montana' },
{ code: 'NE', name: 'Nebraska' },
{ code: 'NV', name: 'Nevada' },
{ code: 'NH', name: 'New Hampshire' },
{ code: 'NJ', name: 'New Jersey' },
{ code: 'NM', name: 'New Mexico' },
{ code: 'NY', name: 'New York' },
{ code: 'NC', name: 'North Carolina' },
{ code: 'ND', name: 'North Dakota' },
{ code: 'OH', name: 'Ohio' },
{ code: 'OK', name: 'Oklahoma' },
{ code: 'OR', name: 'Oregon' },
{ code: 'PA', name: 'Pennsylvania' },
{ code: 'PR', name: 'Puerto Rico' },
{ code: 'RI', name: 'Rhode Island' },
{ code: 'SC', name: 'South Carolina' },
{ code: 'SD', name: 'South Dakota' },
{ code: 'TN', name: 'Tennessee' },
{ code: 'TX', name: 'Texas' },
{ code: 'UT', name: 'Utah' },
{ code: 'VT', name: 'Vermont' },
{ code: 'VI', name: 'U.S. Virgin Islands' },
{ code: 'VA', name: 'Virginia' },
{ code: 'WA', name: 'Washington' },
{ code: 'WV', name: 'West Virginia' },
{ code: 'WI', name: 'Wisconsin' },
{ code: 'WY', name: 'Wyoming' }
];
		for (stateCode in stateBorders) {
			var polygon = createPoly(stateCode, map, enableStateClickHighlight);
			map.addOverlay(polygon);
		}
		for (var i = 0; i < labelBorders.length; i++) {
			var polygon = createPolyHidden(map, labelBorders[i][0], labelBorders[i][1], labelBorders[i][2], enableStateClickHighlight);
			labelBorders[i][3] = polygon;
			map.addOverlay(polygon);
		}

		GEvent.addListener(map, 'zoomend', function(oldLevel, newLevel) {
			for (var i = 0; i < labelBorders.length; i++) {
				if (newLevel == labelBorders[i][1])
					labelBorders[i][3].show();
				else
					labelBorders[i][3].hide();
			}
		});
	}
	if (typeof (CustomGoogleMapOnLoad) != 'undefined')
		CustomGoogleMapOnLoad(map);

};

//method for detecting autozoom levels and centering the map so all markers are in view
//TODO: Implement a more advanced method (LVI_25_Nov_2008)
function CenterMap() {
    //if only one marker center on it
    if (gmarkers.length == 1) {
        var marker = gmarkers.pop();
        map.setCenter(marker.getLatLng());
    }
    else {
        var botLeft = new GLatLng(minMarkerLat, minMarkerLng);
        var topRight = new GLatLng(maxMarkerLat, maxMarkerLng);
        var bounds = new GLatLngBounds(botLeft, topRight);
        map.setCenter(new GLatLng(((maxMarkerLat + minMarkerLat) / 2.0), ((maxMarkerLng + minMarkerLng) / 2.0)), map.getBoundsZoomLevel(bounds));
    }
    if (nodirection) {
        map.setZoom(8);
    }

}

//method for modifying the resulting google direction to add our custom icons
//Params: div of the result, the icons to put at start and end points
function ModifyDirections(directionDiv, startIcon, endIcon) {
    var directionsDiv = document.getElementById(directionDiv);
    //TODO: Finalize the format of the direction div that we want to display (LVI_20_Nov_2008)
    directionsDiv.innerHTML = directionsDiv.innerHTML.replace("https://localhost/ASI.JSSN.WebUI/Events/GoogleProxy?http://maps.google.com/intl/en_ALL/mapfiles/icon_greenA.png", startIcon);
    directionsDiv.innerHTML = directionsDiv.innerHTML.replace("https://localhost/ASI.JSSN.WebUI/Events/GoogleProxy?http://maps.google.com/intl/en_ALL/mapfiles/icon_greenB.png", endIcon);
}

//GDirection Support
function AddDirection(direction) {
    var eventLatLng = new GLatLng(direction.EndMarker.Latitude, direction.EndMarker.Longitude);
    var addressLatLng = new GLatLng(direction.StartMarker.Latitude, direction.StartMarker.Longitude);

    map.addOverlay(CreateMarker(direction.EndMarker));
    map.addOverlay(CreateMarker(direction.StartMarker));

    var directionsPanel = document.getElementById(direction.DirectionDiv);
    var directions = new GDirections(null, directionsPanel);
    GEvent.addListener(directions, "load", function() {
        //TODO: Verify direction return status - Gdirection.getStatus() (LVI_14_Nov_2008)
        //draw direction path
        var poly = directions.getPolyline();
        map.addOverlay(poly);
        //replace icons of the directions inside div
        //NOTE: timeout needed because there is no after load GEvent and directions take a while to be computed
        setTimeout('ModifyDirections("' + direction.DirectionDiv + '", "' + direction.StartMarker.Icon + '", "' + direction.EndMarker.Icon + '")', 1);
    });
    directions.load("from: " + eventLatLng.lat() + "," + eventLatLng.lng() + " to: " + addressLatLng.lat() + "," + addressLatLng.lng(), { getPolyline: true, getSteps: true });
    if (eventLatLng.lat() == addressLatLng.lat() && eventLatLng.lng() == addressLatLng.lng()) {
        nodirection = true;

    }
}

//GMarker support
var gmarkers = [];
var nodirection = false;
var count = 0;
var maxMarkerLat = 0; //stores the maximum Latitude of the markers to be displayed
var minMarkerLat = 0; //stores the minimum Latitude of the markers to be displayed
var maxMarkerLng = 0; //stores the minimum Longitute of the markers to be displayed
var minMarkerLng = 0; //stores the maximum Longitute of the markers to be displayed
var showHtmlInfoPanel = true;
var useCustomMarkerJS = false;
function CreateMarker(marker) {	
    //if first marker init the min/max Lat/Lng values
    //TODO: Move this up one level so this check is not done each time (LVI_25_Nov_2008)
    if (count == 0) {
        maxMarkerLat = marker.Latitude;
        minMarkerLat = marker.Latitude;
        maxMarkerLng = marker.Longitude;
        minMarkerLng = marker.Longitude;
    }

    //if new min/max values found modify the globals
    if (marker.Latitude < minMarkerLat) minMarkerLat = marker.Latitude;
    if (marker.Latitude > maxMarkerLat) maxMarkerLat = marker.Latitude;
    if (marker.Longitude < minMarkerLng) minMarkerLng = marker.Longitude;
    if (marker.Longitude > maxMarkerLng) maxMarkerLng = marker.Longitude;

    count++;
    //draw address icon
    var icon = new GIcon();
    icon.image = marker.Icon;
    icon.shadow = marker.Shadow;
    //icon.iconSize=new GSize(32,18);
    icon.iconAnchor = new GPoint(14, 30);
    icon.infoWindowAnchor = new GPoint(14, 30);
    var markerLatLng = new GLatLng(marker.Latitude, marker.Longitude);

    var gMarker = new GMarker(markerLatLng, { icon: icon });
    gMarker.content = count;
    gmarkers.push(gMarker);

    if (showHtmlInfoPanel) {
    	GEvent.addListener(gMarker, "click", function() {
    		actual = gMarker; // Store this clicked marker
    		gMarker.openInfoWindowHtml("<img src=" + gMarker.getIcon().image + "><b>" + marker.HtmlInfoPanel + "</b>");
    	});
    }
    if (useCustomMarkerJS) {
    	GEvent.addListener(gMarker, "click", function() {
    		eval(marker.HtmlInfoPanel);
    	});
    }
    return gMarker;
};


function OnTimeout(args) {
    //TODO: Implement timeout handling (LVI_13_Nov_2008)
    if (document.getElementById(GoogleMapControl_ClientID) != null)
        alert("Timeout receiving google map data. Please try again later.");
    //InitMap();
};

function OnError(args) {
    //TODO: Implement error handling (LVI_13_Nov_2008)
    if (document.getElementById(GoogleMapControl_ClientID) != null)
        alert("Error receiving google map data. Please contact technical support if the problem persists.");
};

var reloadMapOnEndRequestHandler = true;

//!!!(DO NOT USE) - Test handler for update requests
function endRequestHandler() {
	//by Liviu - InitMap();
	//by Mikhail -
	if (reloadMapOnEndRequestHandler)
		ReloadMap();
    //ASGoogleMap.GetUpdatedMap(OnComplete);
}

//!!!(DO NOT USE) - Test method for registering an update request handler
function pageLoad() {

    if (!Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
        isPostBack = false;
    }
    else {
        isPostBack = true;
    }
}

var SelectedStatePolygon;

function createPoly(stateCode, zemap, zeenableStateClickHighlight) {
    //GPolygon(latlngs:GLatLng[], strokeColor?:String, strokeWeight?:Number, strokeOpacity?:Number, fillColor?:Number, fillOpacity?:Number, opts?:GPolygonOptions)
    var polygon = new GPolygon(stateBorders[stateCode], "#000000", 1, 0, "#000000", 0);
    GEvent.addListener(polygon, "click", function(latlng) {
    	//map.openInfoWindow(latlng, "You clicked " + stateCode);
    	for (st in stateCodes) {
    		if (stateCodes[st]['code'] == stateCode) {
    			if (zeenableStateClickHighlight) {
    				selectedState = stateCodes[st]['name'];
    				selectedStateCode = stateCodes[st]['code'];
    			}
    			//if enableStateClickHighlight set drawing the polygon around it
    			GMapSetSelectedUSState(zemap, stateCodes[st]['code'], zeenableStateClickHighlight);
    			if (typeof window.OnStateSelect == 'function') {
    				// function exists, so we can now call it
    				OnStateSelect();
    			}
    		}
    	}

    });
    return polygon;
}

function createPolyHidden(zemap, stateCode, zoomLevel, coords, zeenableStateClickHighlight) {
	//GPolygon(latlngs:GLatLng[], strokeColor?:String, strokeWeight?:Number, strokeOpacity?:Number, fillColor?:Number, fillOpacity?:Number, opts?:GPolygonOptions)
	var polygon = new GPolygon(coords, "#000000", 1, 0, "#000000", 0);
	if (zemap.getZoom() != zoomLevel)
		polygon.hide();
	else
		polygon.show();
	GEvent.addListener(polygon, "click", function(latlng) {
		//zemap.openInfoWindow(latlng, "You clicked " + stateCode);
		if (zemap.getZoom() != zoomLevel)
			return;
		for (st in stateCodes) {
			if (stateCodes[st]['code'] == stateCode) {
				if (zeenableStateClickHighlight) {
					selectedState = stateCodes[st]['name'];
					selectedStateCode = stateCodes[st]['code'];
				}
				//if enableStateClickHighlight set drawing the polygon around it
				GMapSetSelectedUSState(zemap, stateCodes[st]['code'], zeenableStateClickHighlight);
				if (typeof window.OnStateSelect == 'function') {
					// function exists, so we can now call it
					OnStateSelect();
				}
			}
		}

	});
	return polygon;
}

function GMapSetSelectedUSState(zemap, stateCode, zeenableStateClickHighlight)
{
	//if enableStateClickHighlight set drawing the polygon around it
	if (zeenableStateClickHighlight) {
		GMapClearSelectedUSState(zemap);
		//Modify here depending on how the selected map should look like
		SelectedStatePolygon = new GPolygon(stateBorders[stateCode], "#f38126", 3, .8, "#FFFFFF", 0);
		zemap.addOverlay(SelectedStatePolygon);
	} else {
		zemap.setCenter(centerOfState(stateBorders[stateCode]), 14);
		zemap.setZoom(6);
	}
}

function GMapClearSelectedUSState(zemap) {
	if (typeof (SelectedStatePolygon) != 'undefined') {
		zemap.removeOverlay(SelectedStatePolygon);
	}
}

function centerOfState(polygonPoints) {
	// here X is lat and Y is lng, reversed, i know...
	var maxX = 0, minX = 0, minY = 0; minY = 0;
	for (var i = 0; i < polygonPoints.length; i++) {
		var x_lat = polygonPoints[i].lat();
		var y_lng = polygonPoints[i].lng();
		if (i == 0) {
			maxX = minX = x_lat;
			maxY = minY = y_lng;
		}
		if (x_lat < minX)
			minX = x_lat;
		if (x_lat > maxX)
			maxX = x_lat;
		if (y_lng < minY)
			minY = y_lng;
		if (y_lng > maxY)
			maxY = y_lng;
	}
	return new GLatLng((maxX + minX) / 2, (maxY + minY) / 2);
}

//After the map google module has been loaded start requesting the data from the web service.
//TODO: Find if there is some async way to poll web service data while loading the module (LVI_13_Nov_2008)
//google.setOnLoadCallback(InitMap);
setTimeout('InitMap(\'\')', 1000);
//InitMap("");