//---------------------------------------------------------------------------------------------------------------------//
// Copyright March 2009 by CobraFang Web Solutions Inc.                                                          //
// Use of this code without the expressed written consent of CobraFang Web Solutions Inc.   //
// is strictly prohibited.                                                                                                                      //
//---------------------------------------------------------------------------------------------------------------------//
var gmarkers = [];
var htmls = [];
var from_htmls = [];
var to_htmls = [];
var loc_addr = [];
var from_addr;
var to_addr;
var dir_mode;
var idx = 0;
var gdir;
var directionsPanel;
var sidebar;
var map;

window.onunload = function() {
if (map) {GUnload();}
}

	function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(41.363426, -81.942482), 10);
		
		// Initialize the directions panel variables
		directionsPanel = document.getElementById("route");
		sidebar = document.getElementById("sidebar");
		gdir = new GDirections(map, directionsPanel);
		GEvent.addListener(gdir, "load", onGDirectionsLoad);
		GEvent.addListener(gdir, "error", handleErrors);
		//gdir.load("27041 Pondside Pt, Olmsted Falls, OH to 27089 Schady Rd, Olmsted Falls, OH");
        
        //var url = "phpsqlajax_genxml.php?";
		//var postvars = "id=17";
		//displayOverlays(url, postvars);
		//displayOverlays("phpsqlajax_genxml.php?", "id=17");
        
      }
    }
	
	function displayOverlays(communityid) {
	
	   map.getInfoWindow().hide();
	   map.clearOverlays();
	   
	   gmarkers = [];
	   htmls = [];
	   from_htmls = [];
	   to_htmls = [];
	   loc_addr = [];
       
       var postvars = "id="+communityid;
	   
	   document.getElementById("sidebar").innerHTML = "";
	   document.getElementById("route").innerHTML = "";
	
	   GDownloadUrl("phpsqlajax_genxml.php?", function(data) {
          var xml = GXml.parse(data);
          var community = xml.documentElement.getElementsByTagName("community");
		  var sidebarHeader = createSidebarHeader(community[0].getAttribute("cname"));
		  var markers = xml.documentElement.getElementsByTagName("marker");
		  sidebar.appendChild(sidebarHeader);
		  if (markers.length == 0)
		  {
		   var sidebarEmpty = createSidebarEmpty("No locations have been entered for this organization.");
		   sidebar.appendChild(sidebarEmpty);
		  }
		  else
		  {
            for (var i = 0; i < markers.length; i++) {
		      idx = i;
              var name = markers[i].getAttribute("name");
              var address = markers[i].getAttribute("address");
			  var city = markers[i].getAttribute("city");
			  var state = markers[i].getAttribute("state");
			  var zip = markers[i].getAttribute("zip");
			  var notes = markers[i].getAttribute("notes");
              var point = new GLatLng(parseFloat(markers[i].getAttribute("latitude")),
                                      parseFloat(markers[i].getAttribute("longitude")));
              var marker = createMarker(point, name, address, city, state, zip, notes);
              map.addOverlay(marker);
			  var sidebarEntry = createSidebarEntry(marker, name, address);
              sidebar.appendChild(sidebarEntry);
			  if (i == markers.length - 1)
			  {
			   map.setCenter(point, 12);
			  }
            }
		  }
        }, postvars);
	
	}

    function createMarker(point, name, address, city, state, zip, notes) {
      var marker = new GMarker(point);
	  // Create the initial version of the info window
      var html_addr = "<b>" + name + "</b> <br/>" + address + "<br />" + city + ", " + state + ", " + zip + "<br /><br />";
	  var html_notes = notes.wordWrap(40, '<br /></span>') + "<br/>";
	  var html_link_to = '<br />Directions: <a href="javascript:tohere('+idx+')">To here</a>';
	  var html_link_from = ' - <a href="javascript:fromhere('+idx+')">From here</a>';
	  var html_link_box = 'this address:<br /><INPUT type="text" id="addr" name="addr">';
	  var html_link_dir = '<br /><a href="javascript:showDirections()">Get Directions</a>';
	  var html = "<div>" + html_addr + html_notes + html_link_to + html_link_from + "</div>";
	  // Create the from version of the info window
	  var from_html = '<br />Directions: <a href="javascript:tohere('+idx+')">To here</a> - <b>From here</b><br /><br />To '
	  from_htmls[idx] = html_addr + html_notes + from_html + html_link_box + html_link_dir;
	  // Create the to version of the info window
	  to_html = '<br />Directions: <b>To here</b> - <a href="javascript:fromhere('+idx+')">From here</a><br /><br />From ';
	  to_htmls[idx] = html_addr + html_notes + to_html + html_link_box + html_link_dir;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
	  gmarkers[idx] = marker;
	  htmls[idx] = html;
	  loc_addr[idx] = address + ", " + city + ", " + state;
      return marker;
    }
	
	function fromhere(idx) {
	  from_addr = loc_addr[idx];
	  dir_mode = "F";
      gmarkers[idx].openInfoWindowHtml(from_htmls[idx]);
    }
	
	function tohere(idx) {
	  to_addr = loc_addr[idx];
	  dir_mode = "T";
      gmarkers[idx].openInfoWindowHtml(to_htmls[idx]);
    }
	
	function showDirections() {
	  if (dir_mode == "F") {
	     to_addr = document.getElementById("addr").value;
	  }
	  else {
	     from_addr = document.getElementById("addr").value;
	  }
      directionsPanel.innerHTML = "";
	  map.closeInfoWindow();
	  gdir.load(from_addr + " to " + to_addr);
      
      document.getElementById("wsa_start_loc").value = from_addr;
      document.getElementById("wsa_end_loc").value = to_addr;
      
      var printLink = '<div id="wsa_link"><a href="javascript: submitForm()">Print Directions</a></div>';
      directionsPanel.innerHTML += printLink;
    }
	
	function createSidebarHeader(clubname) {
      var div = document.createElement('div');
      var html = '<b>' + clubname + '</b><br/>';
      div.innerHTML = html;
	  div.style.fontSize = '20px';
      div.style.marginBottom = '5px'; 
      return div;
    }
	
	function createSidebarEmpty(message) {
      var div = document.createElement('div');
      var html = '<b>' + message + '</b><br/>';
      div.innerHTML = html;
      div.style.marginBottom = '5px'; 
      return div;
    }
	
	function onGDirectionsLoad() {
	   //Stub function that can be used to get information from the load
	   // e.g. document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
	}
	
	function handleErrors() {
	  switch(gdir.getStatus().code)
	  {
	    case G_GEO_UNKNOWN_ADDRESS:
	      alert("The address you entered could not be found.  Please check and try again.");
		  break;
		case G_GEO_SERVER_ERROR:
		  alert("A GEO Server Error has occurred.");
          break;
        case G_GEO_MISSING_QUERY:
		  alert("Please enter an address for directions.");
		  break;
		case G_GEO_BAD_KEY:
		  alert("There was an error in the adddress that was entered.");
		  break;
		case G_GEO_BAD_REQUEST:
		  alert("There was an error in the adddress that was entered.");
		  break;
		default:
		  alert("Error getting directions.\nError Code: " + gdir.getStatus().code);
	  }
	}
	
	function createSidebarEntry(marker, name, address) {
      var div = document.createElement('div');
      var html = '<b>' + name + '</b><br/>' + address;
      div.innerHTML = html;
      div.style.cursor = 'pointer';
      div.style.marginBottom = '5px'; 
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(marker, 'click');
      });
      GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#eee';
      });
      GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#fff';
      });
      return div;
    }
	
	String.prototype.wordWrap = function(m, b, c)
    {
     var i, j, l, s, r;
     if(m < 1)
      return this;
     for(i = -1, l = (r = this.split("\n")).length; ++i < l; r[i] += s)
      for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : ""))
          j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
     return r.join("\n");
    };
    
    function submitForm()
    {
     document.printdir.submit();
    }