	var map; 
	var greenIcon;
	var startIcon;
	var finishIcon;
	var currentOp;
	var xtra_params;
	var map_focus;
	var DEFAULT_LAT = 35.036040449168695;
	var DEFAULT_LONG = -89.97751235961914;
	var ROUTE_FOCUS = "route";
	var MARKER_FOCUS = "marker";
	var route_array = new Array();
	var marker_array = new Array();	
	var marker_idx;
	
	function initMapShow(){
		onResize();
		//intialize the map
		map = new GMap2($("map"));
		map.clearOverlays();
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
        //hookMouseWheelHandlers('map'); // wheel zoom functionality
        map.enableDoubleClickZoom();
        map.enableContinuousZoom();
		
		greenIcon = new GIcon();
		greenIcon.image = "/images/markers/mm_20_green.png";
		greenIcon.shadow = "/images/markers/mm_20_shadow.png";
		greenIcon.iconSize = new GSize(12, 20);
		greenIcon.shadowSize = new GSize(22, 20);
		greenIcon.iconAnchor = new GPoint(6, 20);
		greenIcon.infoWindowAnchor = new GPoint(5, 1);

		greenImageIcon = new GIcon();
		greenImageIcon.image = "/images/markers/mm_20_green_and_image.png";
		greenImageIcon.shadow = "/images/markers/mm_20_shadow.png";
		greenImageIcon.iconSize = new GSize(12, 20);
		greenImageIcon.shadowSize = new GSize(22, 20);
		greenImageIcon.iconAnchor = new GPoint(6, 20);
		greenImageIcon.infoWindowAnchor = new GPoint(5, 1);

		yellowIcon = new GIcon();
		yellowIcon.image = "/images/markers/mm_20_yellow.png";
		yellowIcon.shadow = "/images/markers/mm_20_shadow.png";
		yellowIcon.iconSize = new GSize(12, 20);
		yellowIcon.shadowSize = new GSize(22, 20);
		yellowIcon.iconAnchor = new GPoint(6, 20);
		yellowIcon.infoWindowAnchor = new GPoint(5, 1);

		yellowImageIcon = new GIcon();
		yellowImageIcon.image = "/images/markers/mm_20_yellow_and_image.png";
		yellowImageIcon.shadow = "/images/markers/mm_20_shadow.png";
		yellowImageIcon.iconSize = new GSize(12, 20);
		yellowImageIcon.shadowSize = new GSize(22, 20);
		yellowImageIcon.iconAnchor = new GPoint(6, 20);
		yellowImageIcon.infoWindowAnchor = new GPoint(5, 1);
		
		startIcon = new GIcon();
		startIcon.image = "/images/markers/mm_34_red_start.png";
		startIcon.shadow = "/images/markers/shadow50.png";
		startIcon.iconSize = new GSize(20, 34);
		startIcon.shadowSize = new GSize(37, 34);
		startIcon.iconAnchor = new GPoint(9, 34);
		startIcon.infoWindowAnchor = new GPoint(9, 2);
		startIcon.infoShadowAnchor = new GPoint(18, 25);

		finishIcon = new GIcon();
		finishIcon.image = "/images/markers/mm_34_yellow_finish.png";
		finishIcon.shadow = "/images/markers/shadow50.png";
		finishIcon.iconSize = new GSize(20, 34);
		finishIcon.shadowSize = new GSize(37, 34);
		finishIcon.iconAnchor = new GPoint(9, 34);
		finishIcon.infoWindowAnchor = new GPoint(9, 2);
		finishIcon.infoShadowAnchor = new GPoint(18, 25);

		
		var centerUSA = new GLatLng(DEFAULT_LAT, DEFAULT_LONG) ;
		map.setCenter(centerUSA, 4);
		marker_idx = 0;
        Event.observe(document, "keyup", this.keypressHandler.bindAsEventListener(this)); 
		Event.observe(window, "resize", onResize, false);
	}
		
	function keypressHandler(event) {
      var key = event.which || event.keyCode;
	  switch (key) {
	    case Event.KEY_UP:
	      navMarker(-1);
	      break;
	    case Event.KEY_DOWN:
	      navMarker(1);
	      break;
	  }
	}
	
	function navMarker(inc) {
	//alert("navMarker.marker_idx = "+marker_idx);
	   marker_idx += inc;
	   if (marker_idx >= marker_array.length) marker_idx = 0;
	   if (marker_idx < 0) marker_idx = marker_array.length - 1;
	   selectMarker(marker_idx);
	}
		
	function selectMap(id) {
	    map_focus = MARKER_FOCUS;
		$('status').innerHTML = '<br/><img src=\"/images/cog.gif\">Retrieving route...<br/><br/>';
        new Ajax.Request("/browser/show_route/"+id,
                         {method: 'get',                         
              onComplete: function(request) {
                 var xmlDoc = request.responseXML;
                 initMarkerMap(xmlDoc);
                 //initMarkerTable(xmlDoc);
                 $('status').style.display='none'
                 $('route_header').style.display='block';
                 $('route_footer').style.display='block';
                 $('route_detail_panel').style.display='block';
	          }
	       }
	    );  		    
	}
	
	function initMarkerMap(xmlDoc) {
	    doListenerGC();
		pline = new PolylineMgr();			
        route = xmlDoc.documentElement;
	    var type = route.getAttribute("map_type");
        var pLinePts = new Array();
        
		switch(type) {
	  	   case (type="1"):
			    map.setMapType(G_MAP_TYPE);
				break;
		   case (type="2"):
			  	map.setMapType(G_SATELLITE_TYPE);
			    break;
		   default : map.setMapType(G_MAP_TYPE);
	    }
	    $('route_detail_panel').innerHTML=xmlDoc.getElementsByTagName("marker_table_tag")[0].childNodes[0].data;
	    $('route_detail_panel').style.display='block';
	    
		var points = route.getElementsByTagName("point");	            
	    
	    var mkr_table = "<table cellspacing=\"0\" cellpadding=\"0\">";
	    
	    var bounds = new GLatLngBounds();
	    
	    
	    
	    for (var i = 0; i < points.length; i++) {
	      var point = new GLatLng(parseFloat(points[i].getAttribute("lat")),
	                              parseFloat(points[i].getAttribute("long")));
		  //pline.addPoint(point);
          bounds.extend(point);
          pLinePts.push(point)  

	      var markerElem = points[i].getElementsByTagName("marker");
	      if (markerElem.length == 1) {
	         var seq_id = markerElem[0].getAttribute("seq_id");
	         marker_array[seq_id] = (createPtMarker(point, markerElem[0]));			      
	         map.addOverlay(marker_array[seq_id]);
	         mkr_table += markerElem[0].getElementsByTagName("marker_table_row")[0].childNodes[0].data;	         
	      }
	    }
	    map.addOverlay(new GPolyline(pLinePts));
	    mkr_table += "</table>";

	    $('route_detail_panel').innerHTML = mkr_table;

		var startPoint = new GPoint(parseFloat(points[0].getAttribute("lat")),
	      						    parseFloat(points[0].getAttribute("long")));
  		map.addOverlay(new GMarker(startPoint, startIcon));
        
		var endPoint = new GPoint(parseFloat(points[points.length-1].getAttribute("lat")),
	       						  parseFloat(points[points.length-1].getAttribute("long")));
  		map.addOverlay(new GMarker(endPoint, finishIcon));

		//map.addOverlay(new GPolyline(pline.currentPolyline));
		
		//for (var i = pline.polylines.length - 1 ; i >= 0 ; i--) {
		//    map.addOverlay(new GPolyline(pline.polylines[i]));
		//}
        var zoomLevel = map.getBoundsZoomLevel(bounds);
        map.setZoom(zoomLevel);
        map.setCenter(bounds.getCenter(), zoomLevel);
		
	}
	
    function createPtMarker(point, xmlDoc) {
      var mk_icon;
      var no_image = (xmlDoc.getElementsByTagName("image_url")[0].firstChild==null);
      if (xmlDoc.getAttribute("backlit")=="1") {
         mk_icon = no_image?yellowIcon:yellowImageIcon;
      } else {
         mk_icon = no_image?greenIcon:greenImageIcon;
      }
	  var marker = new GMarker(point, mk_icon);
	  var id = xmlDoc.getAttribute("seq_id");
	  // Show this marker's index in the info window when it is clicked
	  GEvent.addListener(marker,"mouseover", function() {
          //marker.openInfoWindowXslt(xmlDoc,"/marker_info_window.xsl");
          marker.openInfoWindowHtml(xmlDoc.getElementsByTagName("gmap_bubble_html")[0].childNodes[0].data);
          $("marker_"+id).style.color="red";
          marker_idx = xmlDoc.getAttribute("seq_id" ) - 0;
      });        
	  GEvent.addListener(marker,"infowindowclose", function() {
          $("marker_"+id).style.color="blue";
      });        
	  
	  return marker;
	}
	
    function selectMarker(id) {
        GEvent.trigger(marker_array[id],"mouseover");
    }
	
	function showMkr(_v, id) {
	   if (_v) {
	       func = "selectMarker("+id+")";
	       timer=setTimeout(func,500);	          
	   } else {
	       if (timer) {
	           clearTimeout(timer);
	           timer=null;
	       }
	   }
	}
	
	function doListenerGC() {	       
	   while (pt_mkr = marker_array.pop()) {
	       GEvent.clearListeners(pt_mkr,"mouseover");
	       GEvent.clearListeners(pt_mkr,"infowindowclose");
	   }
	   marker_array = new Array();
	   map.clearOverlays();
	}
	
	