var map;

function showDirections(directionsHeader, directions) 
{
    if (directions == null)
        return;

    directions = decodeURIComponent(directions.replace(/\+/g," "));

    document.getElementById('locationsDirections').innerHTML = "<h2 class='locations'>" + directionsHeader +
            "</h2><h3 class='locations'>" + decodeURI(directions) + '</h3>';

    document.getElementById('locationsDirections').style.visibility = "visible";
}

function popBubble(lat, lon)
{
    for (var i=0; i<map.m_Markers.length; i++) {
        var marker = map.m_Markers[i];
        var latlng = marker.getLatLng();
        if (latlng.lat() == lat) {
            marker.openInfoWindow(map.m_Markers_info[i]);
            break;
        }
    }
}

function animate(lat, lon, directionsheader, directions) {
    map.centerGMap(lat, lon, 9);
    popBubble(lat,lon);
    showDirections(directionsheader,directions);
}

function LoadGMap()
{
  var stateGMAPData = new Array();

  stateGMAPData['ALL'] = new Array("39.81", "-96.556",4);
  stateGMAPData['alabama'] = new Array("32.7646","-86.3272",7);
  stateGMAPData['alaska'] = new Array("61.3850","-152.2683",7);
  stateGMAPData['arizona'] = new Array("33.7646","-112.3272",7);
  stateGMAPData['arkansas'] = new Array("34.9513","-92.3809",7);
  stateGMAPData['california'] = new Array("36.1700","-119.7462", 7);
  stateGMAPData['colorado'] = new Array("39.0646","-105.3272",7);
  stateGMAPData['connecticut'] =new Array ("41.5834","-72.7622",7);
  stateGMAPData['delaware'] = new Array("39.3498","-75.5148",7);
  stateGMAPData['florida'] = new Array("27.8333","-81.7170",6);
  stateGMAPData['georgia'] = new Array("32.7646","-84.3272",7);
  stateGMAPData['hawaii'] = new Array("21.1098","-157.5311",7);
  stateGMAPData['idaho'] = new Array("44.2394","-114.5103",7);
  stateGMAPData['illinois'] = new Array("40.3363","-89.0022",7);
  stateGMAPData['indiana'] = new Array("39.8647","-86.2604",7);
  stateGMAPData['iowa'] = new Array("42.0046","-93.2140",7);
  stateGMAPData['kansas'] = new Array("38.5111","-96.8005",7);
  stateGMAPData['kentucky'] = new Array("37.6690","-84.6514",7);
  stateGMAPData['louisiana'] = new Array("31.1801","-91.8749",7);
  stateGMAPData['maine'] = new Array("42.2373","-71.5314",7);
  stateGMAPData['maryland'] = new Array("39.0724","-76.7902",7);;
  stateGMAPData['massachusetts'] = new Array("32.7673","-89.6812",7);;
  stateGMAPData['michigan'] = new Array("43.3504","-84.5603",7);
  stateGMAPData['minnesota'] = new Array("45.7326","-93.9196",7);;
  stateGMAPData['mississippi'] = new Array("32.7646","-88.3272",7);
  stateGMAPData['missouri'] = new Array("38.4623","-92.3020",7);
  stateGMAPData['montana'] = new Array("46.9048","-110.3261",6);
  stateGMAPData['nebraska'] = new Array("41.1289","-98.2883",7);
  stateGMAPData['nevada'] = new Array("38.4199","-117.1219",7);
  stateGMAPData['new hampshire'] = new Array("43.4108","-71.5653",7);
  stateGMAPData['new jersey'] = new Array("40.3140","-74.5089",7);
  stateGMAPData['new mexico'] = new Array("34.8375","-106.2371",7);
  stateGMAPData['new york'] = new Array("42.1497","-74.9384",7);
  stateGMAPData['north carolina'] = new Array("35.6411","-79.8431",7);
  stateGMAPData['north dakota'] = new Array("47.5362","-99.7930",7);
  stateGMAPData['ohio'] = new Array("40.3736","-82.7755",7);
  stateGMAPData['oklahoma'] = new Array("35.0","-98.5",7);
  stateGMAPData['oregon'] = new Array("44.5672","-122.1269",7);
  stateGMAPData['pennsylvania'] = new Array("40.5773","-77.2640",7);
  stateGMAPData['rhode island'] = new Array("41.6772","-71.5101",7);
  stateGMAPData['south carolina'] = new Array("33.8191","-80.9066",7);
  stateGMAPData['south dakota'] = new Array("44.0","-100.5",7);
  stateGMAPData['tennessee'] = new Array("35.7646","-85.8272",7);
  stateGMAPData['texas'] = new Array("31.1060","-97.6475",6);
  stateGMAPData['utah'] = new Array("40.1135","-111.8535",7);
  stateGMAPData['vermont'] = new Array("44.0407","-72.7093",7);
  stateGMAPData['virginia'] = new Array("38.0001","-64.8199",7);
  stateGMAPData['washington'] = new Array("47.3917","-121.5708",7);
  stateGMAPData['west virginia'] = new Array("38.4680","-80.9696",7);
  stateGMAPData['wisconsin'] = new Array("44.2563","-89.6385",7);
  stateGMAPData['wyoming'] = new Array("42.7475","-107.2085",7);
  
  map = new LoadMap("map", 39.81, -96.556, 4);

  var frow = new GIcon();
  frow.image = '/images/icons/FR_icon.png';
  frow.iconSize = new GSize(32, 32);
  frow.iconAnchor = new GPoint(6, 20);
  frow.infoWindowAnchor = new GPoint(0, 0);

  var oebe = new GIcon();
  oebe.image = '/images/icons/OEBE_icon.png';
  oebe.iconSize = new GSize(32, 32);
  oebe.iconAnchor = new GPoint(6, 20);
  oebe.infoWindowAnchor = new GPoint(0, 0);

  var dmc = new GIcon();
  dmc.image = '/images/icons/DMC_icon.png';
  dmc.iconSize = new GSize(32, 32);
  dmc.iconAnchor = new GPoint(6, 20);
  dmc.infoWindowAnchor = new GPoint(0, 0);

  map.SetCustomMarkers("DEFAULT", frow);
  map.SetCustomMarkers("OEBE", oebe);
  map.SetCustomMarkers("DMC", dmc);
  
  GDownloadUrl("/xml/googleData.xml", function(data){
    var xml = GXml.parse(data); 
    sc_markers = xml.documentElement.getElementsByTagName("sc_marker");

    for (var i = 0 ; i < sc_markers.length; i++)
      {
        var info = sc_markers[i].getAttribute("info");
        var icon = sc_markers[i].getAttribute("tag");
        var point = new GLatLng(sc_markers[i].getAttribute("lat"), sc_markers[i].getAttribute("lng"));
        map.AddMarker(point, info, icon);
    }
    
    sa_markers = xml.documentElement.getElementsByTagName("sa_marker");
    
    for (var i = 0 ; i < sa_markers.length; i++)
    {
        var info = sa_markers[i].getAttribute("info");
        var icon = sa_markers[i].getAttribute("tag");
        var point = new GLatLng(sa_markers[i].getAttribute("lat"), sa_markers[i].getAttribute("lng"));
        map.AddMarker(point, info, icon);
    }
  
  });

  getStateParam(stateGMAPData, map);
  map.SlowShow();
}

function getStateParam(stateGMAPData, map)
{
	var gmapData = stateGMAPData;
	var gmap = map;
	var state=getURLParam('state')
	var lat=getURLParam('lat')
	var lon=getURLParam('lon')
    if (lat != 'unset' && lon != 'unset') {
        if  (state == 'unset')
            gmap.centerGMap(lat, lon, 10);    
        else
            gmap.centerGMap(lat, lon, 7);    
    }
	else if (state == 'unset')
	{
		var cntry_latitude = gmapData['ALL'][0];
		var cntry_longitude = gmapData['ALL'][1];
		var cntry_level = gmapData['ALL'][2];
		gmap.centerGMap(cntry_latitude, cntry_longitude, cntry_level);
	}
	else if (state != 'unset')
	{
		var latitude = gmapData[state][0];
		var longitude = gmapData[state][1];
		var level = gmapData[state][2];
		gmap.centerGMap(latitude, longitude, level);
	}
}

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


/***********************************************************************/
function LoadMap(_mapDivId, _centerLat, _centerLong, _zoomLevel) {
  this.m_Map = '';
  this.m_MapDivId = _mapDivId;
  this.m_CustomIcons = [];
  this.m_CenterLat = _centerLat;
  this.m_CenterLong = _centerLong;
  this.m_ZoomLevel = _zoomLevel;
  this.m_Markers = [];
  this.m_Markers_info = [];
  this.m_Index = 0;
  this.m_TimeoutId = 0;

  if (GBrowserIsCompatible()) {
    this.m_Map = new GMap2(document.getElementById(this.m_MapDivId));
    var mapControl = new GMapTypeControl();
    this.m_Map.addControl(mapControl);
    this.m_Map.addControl(new GSmallMapControl());
    this.m_Map.setCenter(new GLatLng(this.m_CenterLat, this.m_CenterLong), this.m_ZoomLevel);
  }

  this.SetCustomMarkers = function SetCustomMarkers(_index, _gIcon)
  {
    this.m_CustomIcons[_index] = _gIcon;
  }

  this.AddMarker = function AddMarker(_point, _info, _icon)
  {
      var marker = new GMarker(_point, this.m_CustomIcons[_icon]);

     // var html = "<b>" + name + "</b> <br/>" + address;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(_info);
      });
      try
      {
        this.m_Map.addOverlay(marker);
      }
      catch(err) {document.write("Error adding overlay");};

      this.m_Markers_info[this.m_Index] = _info;
      this.m_Markers[this.m_Index++] = marker;
  }

  this.ShowMarker = function ShowMarker()
  {
    if(this.m_Index == this.m_Markers.length)
      clearTimeout(this.m_TimeoutId);
    else
    {
      var obj = this;
      var i=0;
      for (i=0;i<=this.m_Markers.length;i++)
      {
        try
        {
          this.m_Map.addOverlay(this.m_Markers[this.m_Index++]);
        }
        catch(err) {document.write("Error adding overlay");};
      }
      //this.m_Map.addOverlay(this.m_Markers[this.m_Index++]);
      //this.m_TimeoutId = setTimeout(function(){ obj.ShowMarker() }, 50);
    }
  }
  this.centerGMap = function centerGMap(lat, lng, level)
  {
  	this.m_Map.setCenter(new GLatLng(lat, lng), level);
  }

  this.SlowShow = function SlowShow()
  {
    var obj = this;
    this.m_Index = 0;
    //this.m_TimeoutId = setTimeout(function(){ obj.ShowMarker() }, 100);
  }
}


