/*
 ******************************************************************
 *  Author: Daniel Penrod
 *  Purpose: Google Map API Development
 *  Uses: Google API Version: 2
 *  Updated Last: Jun 23, 2006
 ******************************************************************
 */
     
/*
 ******************************************************************
 *  function initialize_map()
 *  Set locations
 *  set_lat = initial latitude
 *  set_lng = initial longitude
 *  set_xml = data file location
 ******************************************************************
 */
 
 function initialize_map(CNGXML)
 {
    set_lat = 35.054464;
    set_lng = -78.883847;
    set_xml = CNGXML;
 }

/*
 ******************************************************************
 *  function setup_controls(objmap)
 *  Puts the controls on the map
 ******************************************************************
 */
 
 function setup_controls(objmap)
 {
    objmap.addControl(new GLargeMapControl());
    objmap.addControl(new GMapTypeControl());
 }
 
 /*
 ******************************************************************
 *  function roundNumber(num, dec)
 *  Used to round lat / lng output to a set decimal place
 ******************************************************************
 */
 
 function roundNumber(num, dec) 
 {
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
    return result;
 }
 
 /*
 ******************************************************************
 *  function split_lat_lng(center_value)
 *  Formats center value of the GEvent.addListener(map, "move")
 *  function to allow lat / lng rounding
 *  Uses  roundNumber(num, dec)
 ******************************************************************
 */
     
 function split_lat_lng(center_value)
 {
    var arr_lat_lng = center_value.split( "," );
    var lat = roundNumber(Number(arr_lat_lng[0].substr(1)), 5);
    var rparenth = arr_lat_lng[1].indexOf(")", 0);
    var lng = roundNumber(Number(arr_lat_lng[1].substr(0,rparenth)), 5);
    return "(" + lat.toString() + "," + lng.toString() + ")";   
 }
     
/*
 ******************************************************************
 *  function load()
 *  Main function triggered when page loads
 *  Uses initialize_map function
 *  Uses set_upcontrols function
 *  Uses set_markers function
 *  Uses browser.js
 ******************************************************************
 */
 
 function load(DATALOAD) 
 {
    if (browser == "Opera")
    {
      document.getElementById("resetbuttontop").onclick = "window.location.reload();";
      document.getElementById("resetbuttonbot").onclick = "window.location.reload();";
    }

    if (GBrowserIsCompatible()) {
      initialize_map(DATALOAD);
      var map = new GMap2(document.getElementById("map"));
      setup_controls(map);
      GEvent.addListener(map, "move", function() {
        var center = map.getCenter();
        var lat_lng_value = split_lat_lng(center.toString());
        document.getElementById("messagetop").innerHTML = lat_lng_value;
        document.getElementById("messagebot").innerHTML = lat_lng_value;
      });
      map.setCenter(new GLatLng(set_lat, set_lng), 11);
      set_markers(map);
    }
 }
 
/*
 ******************************************************************
 *  set_markers(objmap)
 *  Parses xml data and sets up markers
 *  Uses creatMarker function
 ******************************************************************
 */
 
 function set_markers(objmap)
 {    
    GDownloadUrl(set_xml, function(data, responseCode) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("marker");
      for (var i = 0; i < markers.length; i++) {
        var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
        parseFloat(markers[i].getAttribute("lng")));
        objmap.addOverlay(createMarker(point, 
          markers[i].getAttribute("sitename"), 
          markers[i].getAttribute("straddress"),
          markers[i].getAttribute("citystate"),
          markers[i].getAttribute("phonenum"),
          markers[i].getAttribute("img"),
          objmap,
          markers[i].getAttribute("lat"),
          markers[i].getAttribute("lng"),
          markers[i].getAttribute("href")
        ));
      }
    });
 }
   
/*
 ******************************************************************
 *  createMarker(point, sitename)
 *  This function actually creates the markers
 *  When you click a marker it zooms in to that location
 ******************************************************************
 */
 
 function createMarker(point, sitename, straddress, 
 citystate, phonenum, img, objmap, lat, lng, href) 
 {
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
      objmap.setCenter(new GLatLng(parseFloat(lat), parseFloat(lng)), 17);
      marker.openInfoWindowHtml(
        "<p><b>" + sitename + "</b></p>" 
        + "<p><a href='" + href + "'>" + img + "</a>" 
        + "<br />" + straddress
        + "<br />" + citystate
        + "<br />" + phonenum 
        + "</p>"
      );
    });
    return marker;
 }
 
 /*
 ******************************************************************
 *  aboutMap()
 *  Opens text file
 ******************************************************************
 */
 
 function aboutMap(popcontent)
 {
  GDownloadUrl(popcontent, function(data, responseCode) {
    alert(data);
  });
 }
        
