// JavaScript Document

//global variables:
var map;
var baseIcon;
var xmlToLoad;

function zoomToCounty(selectCtrl)
{
    var i = selectCtrl.selectedIndex - 1; 
    var selCounty;
    if (i > -1) {
        selCounty = selectCtrl.options[selectCtrl.selectedIndex].text;
        var newX;
        var newY;
        switch(selCounty)
        {
            case "ALAMANCE": newX=-79.39952; newY=36.04390; break;
            case "ALEXANDER": newX=-81.17726; newY=35.92095; break;
            case "ALLEGHANY": newX=-81.12958; newY=36.49198; break;
            case "ANSON": newX=-80.10278; newY=34.97385; break;
            case "ASHE": newX=-81.50089; newY=36.43452; break;
            case "AVERY": newX=-81.92260; newY=36.07663; break;
            case "BEAUFORT": newX=-76.84481; newY=35.48555; break;
            case "BERTIE": newX=-76.96680; newY=36.06557; break;
            case "BLADEN": newX=-78.56331; newY=34.61429; break;
            case "BRUNSWICK": newX=-78.23719; newY=34.07067; break;
            case "BUNCOMBE": newX=-82.53035; newY=35.61117; break;
            case "BURKE": newX=-81.70483; newY=35.74979; break;
            case "CABARRUS": newX=-80.55188; newY=35.38694; break;
            case "CALDWELL": newX=-81.54654; newY=35.95299; break;
            case "CAMDEN": newX=-76.16396; newY=36.34496; break;
            case "CARTERET": newX=-76.53910; newY=34.89650; break;
            case "CASWELL": newX=-79.33378; newY=36.39336; break;
            case "CATAWBA": newX=-81.21484; newY=35.66266; break;
            case "CHATHAM": newX=-79.25556; newY=35.70255; break;
            case "CHEROKEE": newX=-84.06353; newY=35.13380; break;
            case "CHOWAN": newX=-76.60214; newY=36.12650; break;
            case "CLAY": newX=-83.75026; newY=35.05716; break;
            case "CLEVELAND": newX=-81.55552; newY=35.33392; break;
            case "COLUMBUS": newX=-78.65517; newY=34.26526; break;
            case "CRAVEN": newX=-77.08198; newY=35.11781; break;
            case "CUMBERLAND": newX=-78.82740; newY=35.04858; break;
            case "CURRITUCK": newX=-75.96357; newY=36.36295; break;
            case "DARE": newX=-75.72158; newY=35.66630; break;
            case "DAVIDSON": newX=-80.21284; newY=35.79335; break;
            case "DAVIE": newX=-80.54461; newY=35.92908; break;
            case "DUPLIN": newX=-77.93336; newY=34.93646; break;
            case "DURHAM": newX=-78.87625; newY=36.03584; break;
            case "EDGECOMBE": newX=-77.59707; newY=35.91283; break;
            case "FORSYTH": newX=-80.25631; newY=36.13052; break;
            case "FRANKLIN": newX=-78.28573; newY=36.08276; break;
            case "GASTON": newX=-81.18025; newY=35.29438; break;
            case "GATES": newX=-76.70037; newY=36.44482; break;
            case "GRAHAM": newX=-83.83370; newY=35.35018; break;
            case "GRANVILLE": newX=-78.65300; newY=36.30398; break;
            case "GREENE": newX=-77.67555; newY=35.48497; break;
            case "GUILFORD": newX=-79.78895; newY=36.07949; break;
            case "HALIFAX": newX=-77.65210; newY=36.25753; break;
            case "HARNETT": newX=-78.86931; newY=35.36867; break;
            case "HAYWOOD": newX=-82.98238; newY=35.55608; break;
            case "HENDERSON": newX=-82.47984; newY=35.33620; break;
            case "HERTFORD": newX=-76.98093; newY=36.35853; break;
            case "HOKE": newX=-79.23703; newY=35.01732; break;
            case "HYDE": newX=-76.16124; newY=35.42083; break;
            case "IREDELL": newX=-80.87364; newY=35.80715; break;
            case "JACKSON": newX=-83.14091; newY=35.28752; break;
            case "JOHNSTON": newX=-78.36589; newY=35.51765; break;
            case "JONES": newX=-77.35467; newY=35.02214; break;
            case "LEE": newX=-79.17153; newY=35.47503; break;
            case "LENOIR": newX=-77.64140; newY=35.23889; break;
            case "LINCOLN": newX=-81.22386; newY=35.48617; break;
            case "MACON": newX=-83.42228; newY=35.15052; break;
            case "MADISON": newX=-82.70578; newY=35.85806; break;
            case "MARTIN": newX=-77.10621; newY=35.84116; break;
            case "MCDOWELL": newX=-82.04862; newY=35.68098; break;
            case "MECKLENBURG": newX=-80.83272; newY=35.24685; break;
            case "MITCHELL": newX=-82.16364; newY=36.01332; break;
            case "MONTGOMERY": newX=-79.90541; newY=35.33237; break;
            case "MOORE": newX=-79.48127; newY=35.31054; break;
            case "NASH": newX=-77.98647; newY=35.96719; break;
            case "NEW HANOVER": newX=-77.88421; newY=34.23212; break;
            case "NORTHAMPTON": newX=-77.39685; newY=36.41771; break;
            case "ONSLOW": newX=-77.42817; newY=34.73049; break;
            case "ORANGE": newX=-79.12061; newY=36.06135; break;
            case "PAMLICO": newX=-76.66986; newY=35.15057; break;
            case "PASQUOTANK": newX=-76.24923; newY=36.26495; break;
            case "PENDER": newX=-77.90565; newY=34.52449; break;
            case "PERQUIMANS": newX=-76.40753; newY=36.17705; break;
            case "PERSON": newX=-78.97174; newY=36.39009; break;
            case "PITT": newX=-77.37458; newY=35.59346; break;
            case "POLK": newX=-82.16960; newY=35.27923; break;
            case "RANDOLPH": newX=-79.80616; newY=35.71025; break;
            case "RICHMOND": newX=-79.74799; newY=35.00590; break;
            case "ROBESON": newX=-79.10337; newY=34.63998; break;
            case "ROCKINGHAM": newX=-79.77534; newY=36.39611; break;
            case "ROWAN": newX=-80.52486; newY=35.63967; break;
            case "RUTHERFORD": newX=-81.91978; newY=35.40229; break;
            case "SAMPSON": newX=-78.37123; newY=34.99146; break;
            case "SCOTLAND": newX=-79.48047; newY=34.84095; break;
            case "STANLY": newX=-80.25076; newY=35.31195; break;
            case "STOKES": newX=-80.23956; newY=36.40176; break;
            case "SURRY": newX=-80.68874; newY=36.41473; break;
            case "SWAIN": newX=-83.49300; newY=35.48684; break;
            case "TRANSYLVANIA": newX=-82.79826; newY=35.20226; break;
            case "TYRRELL": newX=-76.17064; newY=35.87279; break;
            case "UNION": newX=-80.53076; newY=34.98837; break;
            case "VANCE": newX=-78.40832; newY=36.36470; break;
            case "WAKE": newX=-78.65037; newY=35.78996; break;
            case "WARREN": newX=-78.10692; newY=36.39651; break;
            case "WASHINGTON": newX=-76.57214; newY=35.83690; break;
            case "WATAUGA": newX=-81.69698; newY=36.23126; break;
            case "WAYNE": newX=-78.00429; newY=35.36373; break;
            case "WILKES": newX=-81.16364; newY=36.20649; break;
            case "WILSON": newX=-77.91856; newY=35.70478; break;
            case "YADKIN": newX=-80.66531; newY=36.16042; break;
            case "YANCEY": newX=-82.30760; newY=35.89884; break;
        }
        map.setCenter(new GLatLng(newY, newX), 9);
        document.getElementById("map").focus();
        //map.focus();
    } 
    
}

function createMarker(point,descHtml,tableHtml,icon) {
    var marker = new GMarker(point,icon);
    GEvent.addListener(marker, "click", function() 
        {
            marker.openInfoWindowHtml(descHtml);
        }
    );
    GEvent.addListener(marker, "click", function() 
        {
            displayRangeInfoInTable(tableHtml);
        }
    );
    GEvent.addListener(marker, "infowindowclose", function ()
        {
            clearRangeInfoInTable();
        }
    );
return marker;
}

function displayRangeInfoInTable(tableHtml)
{
    var sb=document.getElementById("sidebar");
    sb.innerHTML=tableHtml;
    sb.style.display="block";
}

function clearRangeInfoInTable()
{
    var sb=document.getElementById("sidebar");
    sb.innerHTML="";
    sb.style.display="none";
}




function AddRangesFromXml()
{
      // Read the data from kml
      var request = GXmlHttp.create();
      request.open("GET", xmlToLoad, true);
      request.onreadystatechange = function() {
        if (request.readyState == 4) {
          var xmlDoc = GXml.parse(request.responseText);
          // obtain the array of markers and loop through it
          var markers = xmlDoc.documentElement.getElementsByTagName("S_Range");
          
          for (var i = 0; i < markers.length; i++) {
            // obtain the attribues of each marker
            //var latLng = markers[i].childNodes[3].childNodes[0].childNodes[0].nodeValue;
            //var idx=reIdx(3, browser);
            //var latLng = markers[i].childNodes[idx].childNodes[0].childNodes[0].nodeValue;
            var latLng = markers[i].getElementsByTagName('Point')[0].getElementsByTagName('coordinates')[0].childNodes[0].nodeValue;
            //alert("Coord = " + latLng);
            var lat = parseFloat(latLng.split(",")[1]);
            var lng = parseFloat(latLng.split(",")[0]);
            var point = new GLatLng(lat, lng);
            var tmi=markers[i];

            var gName = tmi.getElementsByTagName('name')[0].childNodes[0].nodeValue;
            var contactName = tmi.getElementsByTagName('Contact')[0].childNodes[0].nodeValue;
            var county = tmi.getElementsByTagName('County')[0].childNodes[0].nodeValue;
            var mailingAddress = tmi.getElementsByTagName('MailingAddress')[0].childNodes[0].nodeValue;
            var city = tmi.getElementsByTagName('City')[0].childNodes[0].nodeValue;
            var zipCode = tmi.getElementsByTagName('Zip')[0].childNodes[0].nodeValue;
            var phone = tmi.getElementsByTagName('Phone')[0].childNodes[0].nodeValue;
            var altPhone = tmi.getElementsByTagName('AltPhone')[0].childNodes[0].nodeValue;
            var operatingHours = tmi.getElementsByTagName('OperatingHours')[0].childNodes[0].nodeValue;
            var email = tmi.getElementsByTagName('Email')[0].childNodes[0].nodeValue;
            var website = tmi.getElementsByTagName('Website')[0].childNodes[0].nodeValue;
            var access = tmi.getElementsByTagName('Access')[0].childNodes[0].nodeValue;
            var indoorPistol = tmi.getElementsByTagName('IndoorPistol')[0].childNodes[0].nodeValue;
            var indoorRifle = tmi.getElementsByTagName('IndoorRifle')[0].childNodes[0].nodeValue;
            var outdoorPistol = tmi.getElementsByTagName('OutdoorPistol')[0].childNodes[0].nodeValue;
            var outdoorRifle = tmi.getElementsByTagName('OutdoorRifle')[0].childNodes[0].nodeValue;
            var services = tmi.getElementsByTagName('ServicesProvided')[0].childNodes[0].nodeValue;
            var physAddress = tmi.getElementsByTagName('PhysicalAddress')[0].childNodes[0].nodeValue;
            var state = "NC";
            
            //var html = ConstructGmlMarkerHtml(gName, label);
            //var descHtml="<br/><div style='font-size: large; font-weight: bold; vertical-align: middle; text-align:center; height:1em'>" +  gName; + "</div>"
            var descHtml="<span class='iwStyle'><br/>" +  gName; + "</span>"
            var tableHtml=CreateTableFromRangeInfo(gName, contactName, county, mailingAddress, city, zipCode, phone, altPhone, operatingHours, email, website, access, indoorPistol, indoorRifle, outdoorPistol, outdoorRifle, services, physAddress);
            // create the marker
            var marker = createMarker(point,descHtml,tableHtml, baseIcon);
            map.addOverlay(marker);
          }
        }
      }
      request.send(null);
}

function CreateTableFromRangeInfo(gName, contactName, county, mailingAddress, city, zip, phone, altPhone, operatingHours, email, website, access, indoorPistol, indoorRifle, outdoorPistol, outdoorRifle, services, physAddress)
{
    var tHtml;
    tHtml = '<table border="0" cellpadding="0" cellspacing="0" class="rangeInfoTable"><tr style="width: 100%; text-align: center; height:20px;"><td colspan="2" class="rangeTdHead1">';
    tHtml = tHtml + gName;
    tHtml = tHtml + '</td></tr><tr style="vertical-align:top;"><td style="border-right: #3399cc 1px solid; width:100%; width:50%"><table id="tblContactInfo" style="border-right-color: Gray; width:100%; padding-right: 0px; padding-left: 0px; padding-bottom: 0px; padding-top: 0px;"><tr><td colspan="2" class="rangeTdHead2">Contact Information</td></tr>';
    tHtml = tHtml + getRangeRow("Contact Name:", contactName);
    //tHtml = tHtml + getRangeRow("Email:", email);
    tHtml = tHtml + getEmailRow(email);
    tHtml = tHtml + getRangeRow("Phone:", phone);
    tHtml = tHtml + getRangeRow("Alternate Phone:", altPhone);
    tHtml = tHtml + getRangeRow("Operating Hours:", operatingHours);
    tHtml = tHtml + getWebsiteRow(website);
    tHtml = tHtml + getAddressRow("Mailing Address:", mailingAddress, city, zip, "NC");
    tHtml = tHtml + getAddressRow("Physical Address:", physAddress, city, zip, "NC");
    tHtml = tHtml + '</table></td><td><table id="rangeInfo" style="width:100%; padding-right: 0px; padding-left: 0px; padding-bottom: 0px; padding-top: 0px;"><tr><td colspan="2" class="rangeTdHead2">Range Information</td></tr>';
    tHtml = tHtml + getRangeRow("Access:", access);
    tHtml = tHtml + getRangeRow("Indoor Pistol:", indoorPistol);
    tHtml = tHtml + getRangeRow("Indoor Rifle:", indoorRifle);
    tHtml = tHtml + getRangeRow("Outdoor Pistol:", outdoorPistol);
    tHtml = tHtml + getRangeRow("Outdoor Rifle:", outdoorRifle);
    tHtml = tHtml + getRangeRow("Services:", services);
    tHtml = tHtml + '</table></td></tr></table>';
     
   return tHtml;
}

function getRangeRow(title, value)
{
    var rowHtml=""
    rowHtml='<tr><td class="rangeTdHead3">' + title  + '</td><td class="rangeTdValue">' + value + '</td></tr>';
    return rowHtml;
}

function getEmailRow(value)
{
    var rowHtml=""
    var regExp=/@/;
    var matchPos=value.search(regExp);
    if (matchPos != -1)
    {
        rowHtml='<tr><td class="rangeTdHead3">Email:</td><td class="rangeTdValue"><a href="mailto:' + value + '">' + value + '</a></td></tr>';
    } else {
        rowHtml='<tr><td class="rangeTdHead3">Email:</td><td class="rangeTdValue">n/a</td></tr>';
    }
    return rowHtml;
}

function getWebsiteRow(value)
{
    var rowHtml="";
    var regExp=/./;
    //var regExp = new RegExp("n/a");


    var valLength = value.length;
    if (valLength > 5)
    {
        if (value.substr(0,7) != "http://" )
        {
            value = "http://" + value;
        }
        rowHtml='<tr><td class="rangeTdHead3">Website:</td><td class="rangeTdValue"><a href="' + value + '" target="_blank">' + value + '</a></td></tr>';
    } else {
        rowHtml='<tr><td class="rangeTdHead3">Website:</td><td class="rangeTdValue">n/a</td></tr>';
    }
    return rowHtml;
}

function getAddressRow(title, addr, city, zip, state)
{
    var rowHtml="";
    var value;
    if (addr.length > 5)
    {
        value=addr + '<br/>' + city + ', NC  ' + zip;
        
    } else {
        value=city + ', NC  ' + zip;
    }
    rowHtml='<tr><td class="rangeTdHead3">' + title  + '</td><td class="rangeTdValue">' + value + '</td></tr>';
    return rowHtml;
}
var overlayControl;

function AddOverview()
{
      //  ======== Add a map overview ==========
      //  ======== save a reference to the control =========
      overlayControl = new GOverviewMapControl(new GSize(200,200)); 
      map.addControl(overlayControl);
      setTimeout("checkOverview()",100);


}

function checkOverview() {
  overmap = overlayControl.getOverviewMap();
  if (overmap) {      
    GEvent.addListener(overmap,'maptypechanged',function() {
  overmap.setMapType(G_NORMAL_MAP);
    });
    //overmap.setZoom(13);
//    GEvent.addListener(map,'zoomend',function() {
//        overmap.setZoom(5);
//        alert(overmap.getZoom());
//    });
  } else {
    // === The control_api module has not yet loaded, wait again
    setTimeout("checkOverview()",100);
  }
}



function onLoad() {

if (GBrowserIsCompatible()) {

  //xmlToLoad="http://jhammermann.googlepages.com/rangesKmlFromShape.xml";
  xmlToLoad="rangesKmlFromShape.xml";


  //create map and controls:
  map = new GMap2(document.getElementById("map")); 
  map.addMapType(G_PHYSICAL_MAP);
  map.addMapType(G_NORMAL_MAP);
  map.addMapType(G_HYBRID_MAP);
  map.setMapType(G_PHYSICAL_MAP);
  map.removeMapType(G_SATELLITE_MAP);

  
  //restrict the range of zoom levels:
  var mt=map.getMapTypes();
  for (var i = 0; i<mt.length; i++)
  {
    mt[i].getMinimumResolution = function(){return 7;};
  }
  map.setCenter(new GLatLng(35.8089, -79.6179), 7);
  map.addControl(new GLargeMapControl());
  map.addControl(new GMapTypeControl());
  map.enableScrollWheelZoom();
   
    
        //<![CDATA[
    
      //create the icon
      baseIcon = new GIcon();
          baseIcon.iconSize=new GSize(24,24);
          baseIcon.shadowSize=new GSize(46,24);
          //baseIcon.iconAnchor=new GPoint(12,24);
          baseIcon.iconAnchor=new GPoint(12,12);
          baseIcon.infoWindowAnchor=new GPoint(12,12);
          baseIcon.image="http://maps.google.com/mapfiles/kml/pal3/icon20.png";
          baseIcon.shadow="http://maps.google.com/mapfiles/kml/pal3/icon20s.png";

    

    }
    
    // display a warning if the browser was not compatible
    else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }

    //]]>
    
        //AddGmlInfoFromKml();
    AddRangesFromXml();
    map.setCenter(new GLatLng(35.2, -79.6179), 7);
    AddOverview();
  
} 
