//<--![CDATA[

var map;

function load() {
    if (GBrowserIsCompatible()) {
        var points = new Array();
        var popupContents = new Array();
        var polylines = new Array();
        var markerLabels = new Array();
        // Build array of markers from page contents
        if (document.getElementById('markers')) {
            var markersXml = loadXML(document.getElementById('markers').innerHTML);
            var markers = markersXml.getElementsByTagName('marker');
            for (i = 0; i < markers.length; i++) {
                popupContents[i] = markers[i].getElementsByTagName('popup')[0].childNodes[0].nodeValue.replace("[CDATA[", " ").replace("]]", " ");
                points[i] = new GLatLng(markers[i].getElementsByTagName('latitude')[0].childNodes[0].nodeValue, markers[i].getElementsByTagName('longitude')[0].childNodes[0].nodeValue);
                markerLabels[i] = markers[i].getElementsByTagName('label')[0].childNodes[0].nodeValue;
            }
        }
        
        // Build array of routes from page contents
        if (document.getElementById('routes')) {
            var routesXml = loadXML(document.getElementById('routes').innerHTML);
            var routes = routesXml.getElementsByTagName('route');
            for (i = 0; i < routes.length; i++) {
                var routePoints = routes[i].getElementsByTagName('point');
                var polylinePoints = new Array();
                for (j = 0; j < routePoints.length; j++) {
                    polylinePoints[j] = new GLatLng(routePoints[j].getElementsByTagName('latitude')[0].childNodes[0].nodeValue, routePoints[j].getElementsByTagName('longitude')[0].childNodes[0].nodeValue);
                }
                polylines[i] = new GPolyline(polylinePoints, "#0000ff", 6, .5);
            }
        }
        loadMap(document.getElementById('map'), points, popupContents, markerLabels, polylines);
    }
}


function loadMap(mapDiv, points, popupContents, markerLabels, polyLines,tooltips)  {
    map = new GMap2(mapDiv);
    map.setCenter(new GLatLng(0, 0), 8);

   	// Enable zoom on scrollwheel, and prevent scroll on page.
    map.enableScrollWheelZoom();
    function wheelevent(e)
    {
        if (!e) e = window.event;
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    }
    GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", wheelevent);
    map.getContainer().onmousewheel = wheelevent; 
	     
    resizeMap(map, points);
    addMapMarkers(map, points, markerLabels, popupContents, tooltips);
    loadMapControls(map);
    addRoutes(map, polylines);
    map.savePosition();
}
// Like the previous loader, but without the polyline param
function loadMap(mapDiv, points, popupContents, markerLabels, tooltips)  {
    map = new GMap2(mapDiv);
    map.setCenter(new GLatLng(0, 0), 8);

   	// Enable zoom on scrollwheel, and prevent scroll on page.
    map.enableScrollWheelZoom();
    function wheelevent(e)
    {
        if (!e) e = window.event;
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    }
    GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", wheelevent);
    map.getContainer().onmousewheel = wheelevent; 

    resizeMap(map, points);
    addMapMarkers(map, points, markerLabels, popupContents, tooltips);
    loadMapControls(map);
    map.savePosition();
}

function loadRoute(polyline) {
	var polylines = new Array();
	polylines[0] = polyline;
	addRoutes(map, polylines);
}

function loadMapControls(map) {
	map.addMapType(G_PHYSICAL_MAP);
	if (locatorUseSmallMapControls) {
		map.addControl(new GSmallMapControl());
	} else {
		map.addControl(new GLargeMapControl());
	}
	map.addControl(new GHierarchicalMapTypeControl(locatorUseSmallMapControls));
	map.addControl(getTrafficControl());
}

function addRoutes(map, polylines) {
    for (i = 0; i < polylines.length; i++) {
        map.addOverlay(polylines[i]);
    }
}

function addRoute(map, polyline) {
     map.addOverlay(polyline);
}

function addMapMarkers(map, points, popupContents) {
    for (i = 0; i < points.length; i++) {
        var marker;
        if (popupContents[i]) {
            marker = createMarker(points[i], popupContents[i]);
        } else {
            marker = createMarker(points[i]);
        }
        map.addOverlay(marker);
    }
}

function addMapMarkers(map, points, markerLabels, popupContents, tooltips) {
    for (i = 0; i < points.length; i++) {
        var marker;
        if (popupContents[i]) {
        	if(tooltips != null && tooltips.length > 0){
          	  marker = createMarker(points[i], markerLabels[i], popupContents[i], tooltips[i]);
            }else{
              marker = createMarker(points[i], markerLabels[i], popupContents[i]);
            }
        } else {
            marker = createMarker(points[i]);
        }
        map.addOverlay(marker);
    }
}

function createMarker(point) {
  var marker = new GMarker(point);
  return marker;
}

function createMarker(point, popupContents) {
  var marker = new GMarker(point);

  if (popupContents) {
      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(popupContents);
      });
    }
  return marker;
}

function createMarker(point, labelUrl, popupContents, tooltiptxt) {

    var label;
    var icon;
    var marker;
    var tooltip = new Object();
    
   	tooltip.clickable = true;
   	if( tooltiptxt != null && tooltiptxt.length > 0){
   		tooltip.title = tooltiptxt;
   	}
	
	if (labelUrl=='start') {
	    icon = new GIcon(G_DEFAULT_ICON, "http://maps.google.com/mapfiles/dd-start.png");
	    tooltip.icon = icon;
	    marker = new GMarker(point, tooltip);
    } else if (labelUrl=='end') {
	    icon = new GIcon(G_DEFAULT_ICON, "http://maps.google.com/mapfiles/dd-end.png");
	    tooltip.icon = icon;
	    marker = new GMarker(point, tooltip);
    } else {
        label = {"url":labelUrl, "anchor":new GPoint(4,4), "size":new GSize(12,12)};       
	    icon = new GIcon(G_DEFAULT_ICON, "http://www.google.com/intl/en_us/mapfiles/marker.png", label);
	     tooltip.icon = icon;
	    marker = new GMarker(point,  tooltip);
	}
	
    if (popupContents) {
      GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(popupContents);
      });
    }
  return marker;
}

function createTinyMarker(point) {
    var icon = new GIcon();
    icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);
    marker = new GMarker(point, icon);
    return marker;
}

// Functions below set up Goole onload and onunload without adding to the body tag
function extendOnload() {
    if(window.extraOnload) { 
        window.extraOnload(); 
    }
}

function extendOnunload() {
    GUnload();
    if(window.extraOnunload) { 
        window.extraOnunload(); 
    }
}

if(window.addEventListener) {
    window.addEventListener( 'load', extendOnload, false );
    window.addEventListener( 'unload', extendOnunload, false );
} else if(document.addEventListener) {
    document.addEventListener('load' , extendOnload, false );
    document.addEventListener( 'unload', extendOnunload, false );
} else if(window.attachEvent) {
    window.attachEvent( 'onload', extendOnload );
    window.attachEvent( 'onunload', extendOnunload );
} else {
    if(window.onload) {
        window.extraOnload = window.onload;
    }
    
    if(window.onunload) {
        window.extraOnunload = window.onunload;
    }
    
    window.onload = extendOnload;
    window.onunload = extendOnunload;
}

function loadXML(xml)    {
    //load xml file
    // code for IE
    var xmlDoc;
    if (window.ActiveXObject)  {
      xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      xmlDoc.async=false;
      xmlDoc.loadXML(xml);
      }
    // code for Mozilla, etc.
    else if (document.implementation && document.implementation.createDocument)  {
        var parser = new DOMParser();
        xmlDoc = parser.parseFromString(xml, "text/xml"); 
    } else  {
        // failure
    }
    return xmlDoc;
}        

function getTrafficControl() {
	var trafficOverlay = new GTrafficOverlay();
	// Traffic Control
	function TrafficControl() {
	}
	TrafficControl.prototype = new GControl();
	
	
	// Creates a one DIV for each of the buttons and places them in a container
	// DIV which is returned as our control element. We add the control to
	// to the map container and return the element for the map class to
	// position properly.
	TrafficControl.prototype.initialize = function(map) {
	  var container = document.createElement("div");
	  container.appendChild(document.createTextNode(locatorCommon["traffic"]));
	  this.setButtonStyle_(container);
	  GEvent.addDomListener(container, "click", function(control) {
	    if (this.trafficShown) {
	    	 map.removeOverlay(trafficOverlay);
	    	 this.trafficShown = false;
	    	this.style.fontWeight = "normal";
	    } else {
	    	map.addOverlay(trafficOverlay);
	    	this.trafficShown = true;
	    	this.style.fontWeight = "bold";
	    }
	  });
	
	  map.getContainer().appendChild(container);
	  return container;
	}
	
	TrafficControl.prototype.getDefaultPosition = function() {
	  var trafficLocation;
	  if (locatorUseSmallMapControls) {
	  	trafficLocation = new GSize(7, 30);
	  } else {
	  	trafficLocation = new GSize(220, 7);
	  }
	  return new GControlPosition(G_ANCHOR_TOP_RIGHT, trafficLocation);
	}
	
	// Sets the proper CSS for the given button element.
	TrafficControl.prototype.setButtonStyle_ = function(button) {
	  button.style.color = "#000000";
	  button.style.backgroundColor = "white";
	  button.style.font = "small Arial";
	  button.style.fontWeight = "normal";
	  button.style.textAlign = "center";
	  button.style.width = "5em";
	  button.style.cursor = "pointer";
	  button.style.border = "1px solid black";
	}
	return new TrafficControl();
}

function loadAirportMap(mapDiv, points, popupContents, markerLabels, tooltips)  {
	map = new GMap2(mapDiv);
    map.setCenter(new GLatLng(0, 0), 8);

   	// Enable zoom on scrollwheel, and prevent scroll on page.
    map.enableScrollWheelZoom();
    function wheelevent(e)
    {
        if (!e) e = window.event;
        if (e.preventDefault) e.preventDefault();
        e.returnValue = false;
    }
    GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", wheelevent);
    map.getContainer().onmousewheel = wheelevent; 
    resizeAirportMap(map, points);
    addMapMarkers(map, points, markerLabels, popupContents, tooltips);
    loadMapControls(map);
    map.savePosition();
}

//]]-->