/*
 ******************************************************************
 *  Author: Daniel Penrod
 *  Purpose: Google Map API Development
 *  Uses: Google API Version: 2
 *  Updated Last: March 28, 2007
 ******************************************************************
 */
    
/*
 ******************************************************************
 *  function initialize_map()
 *  Set locations
 *  set_lat = initial latitude
 *  set_lng = initial longitude
 *  set_xml = data file location
 ******************************************************************
 */
  
function initialize_map()
{
  set_lat = 34.99115600983878;
  set_lng = -78.88655662536621;
  set_xml = "xml/data.xml";
} 

/*
 ******************************************************************
 *  function setup_controls(objmap)
 *  Puts the controls on the map
 ******************************************************************
 */
 
function setup_controls(objmap)
{
  objmap.addControl(new GSmallMapControl());
  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()
{
  if(GBrowserIsCompatible()){
    var map = new GMap2(document.getElementById("map"));
    initialize_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),15);
    set_markers(map);
  }
  
  return 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)),13);
    marker.openInfoWindowHtml("<p><b>" + sitename + "</b>" +
    "<br /><a href='javascript:void(0);' onclick='GUnload();load();'>Reset Map</a></p>" + 
    "<p><a href='" + href + "' onclick='GUnload();load();'>" + img + "</a>" + 
    "<br />" + straddress + "<br />" + citystate + "<br />" + phonenum + "</p>");
  }
  );
  return marker;
}

/*
 ******************************************************************
 *  showAddress(address)
 *  Takes an address and finds the point on the map
 *  where the address resides
 ******************************************************************
 */
 
function showAddress(address)
{
   GUnload();
   var map = new GMap2(document.getElementById("map"));
   initialize_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;
    }
    );
   var geocoder = new GClientGeocoder();
   geocoder.getLatLng(address,function (point)
   {
     if ( ! point)
     {
      alert(address + " not found");
      GUnload();
      load();
     } 
     else
     {
      map.setCenter(point,15);
      var marker = new GMarker(point);
      map.addOverlay(marker);
      marker.openInfoWindowHtml(address + 
      "<p><a href='javascript:void(0);'" + 
      "onclick='GUnload();load();'>Reset Map</a></p>");
     }
   }
  );
}

 /*
 ******************************************************************
 *  aboutMap()
 *  Opens text file
 ******************************************************************
 */

function aboutMap()
{
  GDownloadUrl("about.txt",function(data,responseCode){
    alert(data);
  }
  );
}
