
submitted = false;
autocompleter = null;

var refresh = true;
var lastswlat = 0;
var lastswlong = 0;
var lastnelat = 0;
var lastnelong = 0;

var selected_marker = null;
var guamZipCodes = "96910,96911,96912,96913,96914,96915,96916,96917,96918,96919,96921,96922,96923,96925,96926,96927,96928,96929,96930,96931,96932,guam";


global_markers = new Array; // global
global_locations = new Array; // global
    var events = "";


function search_stores_initial() {
	

	if (GBrowserIsCompatible()) {
		Element.show('gmap');
		map = new GMap2(document.getElementById("map"));
		
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());	
		//map.addControl(new GMapTypeControl(),new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10, 15)));

		        
  	    var get = '' + window.location.search;
	    var query = get.substring((get.indexOf('?'))+1);

	    if(query != '') {
            initialSearch(query); 
        } 
        else {
            map.setCenter(new GLatLng(37.926868, -97.294922));
		    map.setZoom(3);
		    getPoints(map);
        }
        
        //Set event listeners for zooming, moving, and clicking
        GEvent.addListener(map, "moveend", function(){
          getPoints(map);
        });
        GEvent.addListener(map, "zoomend", function(){
          
          
          
          
          if (selected_marker != null)
          {
          	    var my_window = $('overlay');

              // Get the positioning right
	            var vert_loc = parseInt(map_point.y) - my_window.offsetHeight - 44;
	            my_window.style.top = vert_loc  + "px";
	            var horiz_loc = parseInt(map_point.x) - 55;
	            my_window.style.left = horiz_loc + "px";
            	
            	
	            var pan_to = new GLatLng( selected_marker.getPoint().lat(), selected_marker.getPoint().lng() )
            	
            	
	            var gPoint = map.fromLatLngToDivPixel(pan_to);
	            gPoint.x = gPoint.x + 55;
	            gPoint.y = gPoint.y - 85;
	            var new_point = map.fromDivPixelToLatLng(gPoint);

	            map.panTo( new_point );
	            
	            show_custom_info_window(selected_marker); //reposition window

	        }
	        else
	        {
	            close_window();
	        }
          
          
          
          refresh = true;
          getPoints(map);
          
          //updateSearchResultsOnUpdate();
          
          //if the marker went away (grouping, etc...) then close popup
          if (selected_marker != null)
          {
              if (global_markers[selected_marker.internal_id] == undefined)
              {
                close_window();
              }
          }
          
        });
        GEvent.addListener(map, "click", function(marker, point){
          if (!marker) {
            map.closeInfoWindow();
            //close_window();
          }
        });     
    }    
}

function updateSearchResultsOnUpdate()
{
    //if map is zoomed/dragged, we may need to remove some search results as they fall off the map.
//    var locations = $('results_list').getElementsByTagName('li');
//	for(i=0;i<locations.length;i++){
//		var location = locations[i];
//		if (global_markers[location.internal_id] == undefined)
//		{
//			$('results_list').removeChild(location);
//		}
//	}

}

function initialSearch(query)
{
	
	var pairs = query.split('&');
	var keys = new Array();
	for(var i in pairs){
		if(isNaN(i) == false){
			var pair = pairs[i];
			var vals = pair.split('=');
			keys[vals[0]] = vals[1];
		}
	}
	var search = document.forms[0];
	
	if(keys['q'] != '' && keys['q'] != null){
		search.q.value = keys['q'].replace(/\%20/g,' ');
		search.q.value = search.q.value.replace(/\%2C/g,',');
		search.q.value = search.q.value.replace(/\+/g,' ');	
	    get_search_results();
	}	
}

function getPoints(map) {

  var center = map.getCenter();
  var bounds = map.getBounds();
  var mapsw = bounds.getSouthWest();
  var mapne = bounds.getNorthEast();
  var mapswlat = mapsw.lat();
  var mapswlong = mapsw.lng();
  var mapnelat = mapne.lat();
  var mapnelong = mapne.lng();
  
  var dataswlat = mapswlat - ((mapnelat-mapswlat)*2)/2;
  var dataswlong = mapswlong - ((mapnelong-mapswlong)*2)/2;
  var datanelat = mapnelat + ((mapnelat-mapswlat)*2)/2;
  var datanelong = mapnelong + ((mapnelong-mapswlong)*2)/2;


  if (refresh || mapswlat < lastswlat || mapswlong < lastswlong || mapnelat > lastnelat || mapnelong > lastnelong) {
    
        lastswlat = dataswlat;
        lastswlong = dataswlong;
        lastnelat = datanelat;
        lastnelong = datanelong;
    
    map.clearOverlays();
    global_markers.length = 0;
    
    var zoom = map.getZoom();  


 
    var url = "xml_cluster.aspx?concept="+document.forms[0].concept.value+"&zoom="+ zoom +"&swlat="+ mapswlat +"&swlng="+ mapswlong +"&nelat="+ mapnelat +"&nelng=" + mapnelong;
          
          //document.getElementById("message").innerHTML = "URL: " + url;      

    
    
    GDownloadUrl(url, function(data, responseCode) {
      var xml = GXml.parse(data);
      var markers = xml.documentElement.getElementsByTagName("stone");
      
      //document.getElementById("message").innerHTML = "Stores: " + markers.length;      
      
      for (var i = 0; i < markers.length; i++) {
        var point = new GLatLng(parseFloat(markers[i].getAttribute("Latitude")), parseFloat(markers[i].getAttribute("Longitude")));
          map.addOverlay(addStore(point,markers[i]));           
      }
      //document.getElementById("events").innerHTML = "Marker Array Length: " + global_markers.length;


          updateSearchResultsOnUpdate();



    });
    refresh = false;
  } 
}		

function addStore(point, marker_xml){

    var type = marker_xml.getAttribute("type");
    var store_status = marker_xml.getAttribute("StoreStatusId");
    var icon = new GIcon();
    if (type == "cluster") {
        var cluster = $('cluster').src;
        var clusterShadow = $('clusterShadow').src;
        if (cluster != '') { icon.image = cluster;  }
        else { icon.image = "/brands/images/cluster.png"; }
        if (clusterShadow != '') { icon.shadow = clusterShadow;  }
        else { icon.shadow = "/brands/images/clusterShadow.png"; }
        icon.iconSize = new GSize(56, 60);
        icon.shadowSize = new GSize(56, 60);
        icon.iconAnchor = new GPoint(28, 30);
        icon.infoWindowAnchor = new GPoint(11, 1);
    }
    else {
        var Ostore = $('openStore').src;
        var Cstore = $('constructionStore').src;
        var storeShadow = $('storeShadow').src;
        if (store_status == 4)  //open store
        {
            if (Ostore != '') { icon.image = Ostore; }
            else { icon.image = "/brands/images/openStore.png"; }
            icon.shadow = storeShadow;
            icon.iconSize = new GSize(29, 46);
            icon.shadowSize = new GSize(50, 49);
            icon.iconAnchor = new GPoint(14, 49);
            icon.infoWindowAnchor = new GPoint(20, 49);
        }
        else
        {
            if (Cstore != '') { icon.image = Cstore; }
            else { icon.image = "/brands/images/constructionStore.png"; }
            icon.shadow = storeShadow;
            icon.iconSize = new GSize(29, 46);
            icon.shadowSize = new GSize(50, 49);
            icon.iconAnchor = new GPoint(14, 49);
            icon.infoWindowAnchor = new GPoint(20, 49);
        }
    }
    
    var marker = new GMarker(point, icon);  
  
    var id = marker_xml.getAttribute("Id");

    // Give the marker all of it's information
    marker.tabContent = new Object();
    
	

	if (store_status == "3")
    {
        marker.tabContent.location = "<p><strong>Coming Soon!</strong><br/>";    
    }
    else
    {
        marker.tabContent.location = "<p><strong>" + marker_xml.getAttribute("Name") + " #" + marker_xml.getAttribute("StoreNumber") + "</strong><br/>";    
    }
	
	//Bradley - Made changes for address 2 - START
	var address2 = marker_xml.getAttribute("Address2");    

    if(address2!= null && address2.replace(/^\s+|\s+$/, '').length > 0)
    {        
        address2 = address2 + "<br>";
    }
	//Bradley - Made changes for address 2 - END
	
	marker.tabContent.location = marker.tabContent.location + "" +  marker_xml.getAttribute("Address1") + "<br>" + address2 + marker_xml.getAttribute("City") + ", " +  marker_xml.getAttribute("State") + " " + marker_xml.getAttribute("Zip") + "<br >" + marker_xml.getAttribute("Phone") + "<br/>";
    
    if (marker_xml.getAttribute("isKosher") == "true"){
         marker.tabContent.location = marker.tabContent.location + "<em>Kosher Certified</em>" + "<BR>";
    }
	
	//03.05.2009 - Bradley - Made changes for RedirectURL - START
	var redirectURL = marker_xml.getAttribute("redirectURL");    
	
	if(redirectURL!= null && redirectURL.replace(/^\s+|\s+$/, '').length > 0)
	{        
	redirectURL = "<a href=\"http://" + redirectURL + "\" style='margin-left:15px;' target='_blank'>&raquo; Visit Website</a>";
	}
	//Bradley - Made changes for RedirectURL - END

	
	
	
	
	
	
    
//	var get = '' + window.location.search;
//	var query = get.substring((get.indexOf('?'))+1);
//    if (query != '') {
//        marker.tabContent.location = marker.tabContent.location + "~ " + marker_xml.getAttribute("search_distance") + " miles: ";
//    }
    
    marker.tabContent.location = marker.tabContent.location + "<a onclick=\"$('directions_subtab').style.display = 'block';position_window($('overlay'), $('overlay').marker);$('to_addr').focus()\" style='cursor:pointer'>&raquo; Get directions</a>" + redirectURL;
    marker.tabContent.location = marker.tabContent.location + "<p id='directions_subtab' style='display:none'>Start address:<br ><input id='to_addr' type='text' style='width:95%'><br ><button style='cursor:pointer' type='submit' class='directions' onclick=\"submit_gmap_form($('to_addr').value,'" + marker_xml.getAttribute("Address1") + " , " + marker_xml.getAttribute("City") + ", " +  marker_xml.getAttribute("State") + " " + marker_xml.getAttribute("Zip") + "');\">Get Directions</button></p>";
    var ver = getInternetExplorerVersion();
    if (ver > -1) {
        if (ver >= 8.0)
          marker.tabContent.location = marker.tabContent.location + "<p id=\"compatibility_notice\">IE8 requires compatibility mode</p>";
    }

    //marker.tabContent.location = "<p>test</p>";

    marker.tabContent.store_hours = "<p>" + marker_xml.getAttribute("Hours") + "</p>";
    marker.tabContent.store_hours = marker.tabContent.store_hours + "<p>" + marker_xml.getAttribute("CrossStreets") + "</p>";

	
    marker.internal_id = marker_xml.getAttribute("Id");
    marker.id = marker_xml.getAttribute("Id");
	
    // Add the event listeners	
       if (type == "cluster") {
            GEvent.addListener(marker, "click", function() {
              close_window(); 
              selected_marker = null;          
              map.setCenter(marker.getPoint());
              map.zoomIn();
            });
   
      } else {
            GEvent.addListener(marker, "click", function() {
            	
            	//Start by clearing highlighted items on the left list
	            clear_location_highlights();

              show_custom_info_window(marker);
              
                     //document.getElementById("message").innerHTML = "Current Marker: " + selected_marker.tabContent.location;      

              
            });
            GEvent.addListener(marker, "click_action", function() {
                show_custom_info_window(marker);
            });
      }

        // Return marker for gmaps
        global_markers[marker.internal_id] = marker;
   
	return marker
}


function addSearchResult(marker_xml){
	
	//---------------------------------------------------------
	// BEGIN - add the store to the locations sidebar
	//---------------------------------------------------------
	
	var location = document.createElement("li");
	location.internal_id =  marker_xml.getAttribute("Id");
	location.id = "location_" + location.internal_id;
	
	var class_names = ""; // Need to create these...
	if ($('results_list').getElementsByTagName('li').length == 0){ // This is the first location
		class_names += " first";
	}
	location.style.className = class_names;
	

//	// The title
//	var title = document.createElement("h4");
//	title.appendChild(document.createTextNode(title));
//	title.firstChild.nodeValue = marker_xml.getAttribute("Name");
//	location.appendChild(title);
	
	// The address
	var address = document.createElement("p");

	//03.05.2009 - Bradley - Made changes for address 2 - START
	var address2 = marker_xml.getAttribute("Address2");    
	
	if(address2!= null && address2.replace(/^\s+|\s+$/, '').length > 0)
	{        
	address2 = address2 + "<br>";
	}
	//Bradley - Made changes for address 2 - END
	
	
	//03.05.2009 - Bradley - Made changes for RedirectURL - START
	var redirectURL = marker_xml.getAttribute("redirectURL");    
	
	if(redirectURL!= null && redirectURL.replace(/^\s+|\s+$/, '').length > 0)
	{        
	redirectURL = "<br><a href=\"http://" + redirectURL + "\" class=\"visit_url\" target='_blank'>Visit Website</a>";
	}
	//Bradley - Made changes for RedirectURL - END
	

	
	address.innerHTML = marker_xml.getAttribute("Address1") +  "<br>" + address2 + marker_xml.getAttribute("City") + ", " +  marker_xml.getAttribute("State") + " " + marker_xml.getAttribute("Zip") + redirectURL;
	
    var store_status = marker_xml.getAttribute("StoreStatusId");
    if (store_status == "3")
    {
	address.innerHTML = "<strong><em>Coming Soon!</em></strong><br >" + address.innerHTML;
    }
    
    
    //Is Kosher?
    if (marker_xml.getAttribute("isKosher") == "true"){
         address.innerHTML =address.innerHTML + "<br><em>Kosher Certified</em>";
    }
    
    //Add the distance
	address.innerHTML = address.innerHTML  + "<br/><span class=\"distance\" >~" + marker_xml.getAttribute("search_distance") + " miles</font>";

	location.appendChild(address);
	
	global_locations[location.internal_id] = location;
	// Attach the whole thing
	$('results_list').appendChild(location);
	
	//highlight_locations(); // Re-highlight locations
	
	//---------------------------------------------------------
	// END - add the store to the locations sidebar
	//---------------------------------------------------------

}

first_load = true;
//map = false; // global






function search_stores(xml_location, start) {


	if (GBrowserIsCompatible()) {
	// Initialize the map
		Element.show('gmap');
		
		//Power the store locations through XML
		GDownloadUrl(xml_location, function(data, responseCode) {
	
			var xml = GXml.parse(data);
	
            $('page_nav').innerHTML = "";
			if(xml.getElementsByTagName("stone").length > 0)
			{
				document.getElementById("results_heading").innerHTML = "";
				
				$('results_list').className = "locations";
				// Set the center of the map
				var default_location = xml.documentElement.getElementsByTagName("default_location")[0];
				
				
				//map.setCenter(new GLatLng(default_location.getAttribute("Latitude"), default_location.getAttribute("Longitude")));
	
				// Put city and state in search results
				var citystate = default_location.getAttribute("city");
				//document.getElementById("results_heading").innerHTML = "Locations near " + citystate;
				
				// Set the markers
				var markers = xml.documentElement.getElementsByTagName("stone");
				var bounds = new GLatLngBounds;
				
				// Figure out start and end
				// start from function call
				if (markers.length <= 6 || (start + 6) >= markers.length){ end = markers.length; }else{ end = start + 6; }
				var marknum = 0;
				
				
				for (var i = start; i < end; i++) {
					var point = new GLatLng(parseFloat(markers[i].getAttribute("Latitude")), parseFloat(markers[i].getAttribute("Longitude")));

				    addSearchResult(markers[i]);

					//Add the point & extend the neccecary bounds
					bounds.extend(point);
				}		
	
				// Put in the paging links
				if (start > 0){
					paging_prev = document.createElement("a");
					paging_prev.appendChild(document.createTextNode("Previous"));
					paging_prev.className = "prev";
					paging_prev.href = "#";
					paging_prev.onclick = function(){ prev_page(); return false; }
					$('page_nav').appendChild(paging_prev)
				}
				if (start > 0 && ((page_num + 1) < markers.length/8)){
					separator = document.createTextNode(' | ');
					$('page_nav').appendChild(separator);
				}
				if ((page_num + 1) < markers.length/8){
					paging_next = document.createElement("a");
					paging_next.appendChild(document.createTextNode("Next"));
					paging_next.className = "next";
					paging_next.href = "#";
					paging_next.onclick = function(){ next_page(); return false; }
					$('page_nav').appendChild(paging_next)
				}
														
				// Set the zoom level & center to encompass all		
				var center_point = new GLatLng( (bounds.getSouthWest().lat() + bounds.getNorthEast().lat())/2, (bounds.getSouthWest().lng() + bounds.getNorthEast().lng())/2);
				var zoomLevel = map.getBoundsZoomLevel(bounds);
				
				//Custom for our Guam Stores, since the zoom doesn't go down far enough in Guam on Google
				//-------------
				
				if (guamZipCodes.indexOf(document.forms[0].q.value) != -1){
					zoomLevel = 10;
				}				
				//-------------
				
				
				map.setCenter(center_point, zoomLevel);
				
									
			}				
			else if(xml.getElementsByTagName("redirect").length > 0)
			{
                var redirect = xml.documentElement.getElementsByTagName("redirect")[0];

                document.getElementById("results_heading").innerHTML = "Accord Inc. Territory";
                document.getElementById('accord').style.display='block';
			}
			else //if(xml.getElementsByTagName("noresult_xml").length > 0)
			{				
				search_stores_initial();
				document.getElementById("results_heading").innerHTML = "No Results Found";
				//$('results_list').className = "noresults";
				//var noresult = document.createElement("ul");
				//var message = xml.documentElement.getElementsByTagName("message")[0];
				//noresult.innerHTML = message.firstChild.nodeValue;
				//$('results_list').appendChild(noresult)
	
			}
            Effect.Fade('activity',{duration: 0.25, queue: 'front'});   

			//detect if IE7
			var agent 	= navigator.userAgent.toLowerCase();
			var isIE7		= (agent.indexOf('msie 7') != -1);
			
			
			if (is_ie || isIE7){
				Effect.BlindDown('results', {afterFinish: function(){$('results').style.height = "1%";}}); // IE weirdness
			}else{
				Effect.BlindDown('results');
				Effect.Fade('activity',{duration: 0.25, queue: 'end'});
			}
	
		    highlight_locations(); // Re-highlight locations

			submitted = false;
			
		}); // end GDownloadUrl
		
	} else { // Browser is not compatable
	}
}








Event.observe (window,'load',search_stores_initial,false);
Event.observe (window,'load',highlight_locations,false);
Event.observe (window,'load',set_search_form,false);	
Event.observe (window,'load',set_advsearch_slider,false);	
Event.observe (window,'unload',GUnload,false); // Prevent memory leaks
		
/**** Other Functions ****/

selected_location = false;
function highlight_locations(){
	var locations = $('results_list').getElementsByTagName('li');
	for(i=0;i<locations.length;i++){
		var location = locations[i];
		//deactivate_marker(locations[i]); //default
		// Hover
		location.onmouseover = function(){ Element.addClassName(this, 'hover') }
		location.onmouseout = function(){ Element.removeClassName(this, 'hover') }
		// Active
		location.onclick = function(){ 
			activate_marker(this);
		}
	}
}

function clear_location_highlights() {
    var locations = $('results_list').getElementsByTagName('li');
	for(i=0;i<locations.length;i++){
		var location = locations[i];
		deactivate_marker(locations[i]);	
	}
	
	selected_marker = null;
}

		
function activate_marker(element){
	if (selected_location == element){ return false; }
    
	if (global_markers[element.internal_id] == undefined)
	{     
	   get_search_results();
	}

	Element.addClassName(element, 'selected'); 
    GEvent.trigger(global_markers[element.internal_id], "click_action");
    if (selected_location){ Element.removeClassName(selected_location, 'selected'); } 
    selected_location = element; 

}
		
function deactivate_marker(element){
	Element.removeClassName(element, 'selected');
	selected_location = false;
}
		
// Adv search sliding
function set_advsearch_slider(){
	if (!$('advsearch')) return false;
	
	$('advsearch').onclick = function(){
		if (!this.active){
			if (is_ie){
				Effect.BlindDown('advsearch-content', {afterFinish: function(){$('advsearch-content').style.height = "1%";}}); // IE weirdness
			}else{
				Effect.BlindDown('advsearch-content');
			}
			Element.addClassName(this, 'active');
			
			this.active = true;
			return false;
		}else{
			Effect.BlindUp('advsearch-content');
			Element.removeClassName(this, 'active');
			this.active = false;
			return false;
		}
	}
}

	
	
		
// Search form
query = false; // global for paging
page_num = false; // global
function set_search_form(){
	if (!$('search_form')) return false;
	$('search_form').onsubmit = get_search_results;
}


var get_search_results = function(){



	geocoder = new GClientGeocoder();


	var concept = document.forms[0].concept.value;
	var search_term = document.forms[0].q.value;
	var lng;
	var lat;

	//Overrider guam since google doesn't know where it is.
	if (guamZipCodes.indexOf(search_term) != -1){
		lat = 13.44646;
		lng = 144.786613;	
		get_search_results_Callback(concept,search_term, lat, lng);
		return false;				
	}
	else{
		if (geocoder) {
	        geocoder.getLatLng(search_term,
	          function(point) {
	            if (!point) {
	              alert('We\'re sorry, but \"' + search_term + "\" could not be found.  \n\nPlease check your entry and try again.");
	            } else {
					lng = point.x;
					lat = point.y;	
					get_search_results_Callback(concept,search_term, lat, lng);								
	            }
	          }
	        );
	      }	
			
	}

	

    
	return false;
}

function get_search_results_Callback(concept, search_term, lat, lng){
	selected_marker = null;
	if(!submitted) {
		submitted = true;

		close_window(); //Close any open overlays
		Effect.Appear('activity',{duration: 0.25, queue: 'front'});
		query = $('search_form').getAttribute('remoteaction') + '?concept='+concept+'&q=' + encode(search_term) + '&lng='+ lng +'&lat='+ lat +'&results=28';
		$('results_list').innerHTML = '';
		page_num = 0;
		search_stores(query, page_num);
	}
}

		
function next_page(){
	//Effect.BlindUp('gmapwrap', {afterFinish: function(){$('gmapwrap').style.display = 'block';$('gmapwrap').style.visibility = 'hidden';}});			
	Effect.Appear('activity',{duration: 0.25, queue: 'front'});
	Effect.BlindUp('results', {afterFinish: function(){
	
	// Clear the locations list
	$('results_list').innerHTML = "";
	page_num++;
	first_load = false;
	search_stores(query, (page_num)*6);
	
	}});
}

function prev_page(){
	//Effect.BlindUp('gmapwrap', {afterFinish: function(){$('gmapwrap').style.display = 'block';$('gmapwrap').style.visibility = 'hidden';}});			
	Effect.Appear('activity',{duration: 0.25, queue: 'front'});
	Effect.BlindUp('results', {afterFinish: function(){
	
	// Clear the locations list
	$('results_list').innerHTML = "";
	page_num--;
	first_load = false;
	search_stores(query, (page_num)*6);
	
	}});
}
		
function change_tab(element, type){
	var my_window = $('overlay');
	var my_tab = $('overlay_tab');
	var alltabs = my_window.getElementsByTagName('ul')[0];
	// Unselect tabs
	var tabs = element.parentNode.parentNode.getElementsByTagName("a");
	for(i=0;i<tabs.length;i++){
		tab = tabs[i];
		Element.removeClassName(tab, 'selected');
	}
	// Select tab
	Element.addClassName(element, 'selected');
	
	if (type == 'store_hours'){
		//bring second tab forward
		Element.removeClassName(alltabs,'tabs');
		Element.addClassName(alltabs,'tabs2');
		my_tab.innerHTML = my_window.marker.tabContent.store_hours;
	}else{
		//bring first tab forward
		Element.removeClassName(alltabs,'tabs2');
		Element.addClassName(alltabs,'tabs');
		my_tab.innerHTML = my_window.marker.tabContent.location;
	}
	position_window(my_window, my_window.marker);
	
	return false;
}

function close_window(){
    if ($('overlay')) {
	    $('overlay').style.display = 'none';
	    deactivate_marker( $("location_" + $('overlay').marker.internal_id) );
	}	
	return false;
}

function encode(str) {
	var result = "";
	
	for (i = 0; i < str.length; i++) {
		if (str.charAt(i) == " ") result += "+";
		else result += str.charAt(i);
	}
	
	return result;
}




//-------------------------------------
//-
//- POPUP WINDOW AFTER CLICK
//-
//-------------------------------------
		
function show_custom_info_window(marker){
	
	selected_marker = marker;
	
	map_point = map.fromLatLngToDivPixel(marker.getPoint());

	
	if (!$('overlay')){ // need to create the overlay inside the map pane
		var new_obj = document.createElement("div");
		new_obj.style.display = 'none';
		new_obj.innerHTML = $('overlay_temp').innerHTML;
		new_obj.getElementsByTagName('div')[0].id = 'overlay_tab';
		new_obj.id = 'overlay';
		document.body.appendChild(new_obj);
	}
	
	var my_window = $('overlay');
	
	
	// Attach the marker
	my_window.marker = marker;

	// make sure the first tab is in front
	var alltabs = my_window.getElementsByTagName('ul')[0];
	Element.removeClassName(alltabs,'tabs2');
	Element.addClassName(alltabs,'tabs');

	// Unselect tabs
	var tabs = alltabs.getElementsByTagName("a");
	for(i=0;i<tabs.length;i++){
		tab = tabs[i];
		Element.removeClassName(tab, 'selected');
	}
	// Select tab
	Element.addClassName(tabs[0], 'selected');
	
	// Populate content
	var my_tab = $('overlay_tab');
	my_tab.innerHTML = marker.tabContent.location;

	
	// Stick it to the map
	map.getPane(G_MAP_MARKER_PANE).appendChild(my_window);
	my_window.style.display = 'block';
	
	position_window(my_window, marker);
	
	highlight_locations();
	
}	
		
function position_window(my_window, marker){

	// Get the positioning right
	var vert_loc = parseInt(map_point.y) - my_window.offsetHeight - 44;
	my_window.style.top = vert_loc  + "px";
	var horiz_loc = parseInt(map_point.x) - 55;
	my_window.style.left = horiz_loc + "px";
	
	
	var pan_to = new GLatLng( marker.getPoint().lat(), marker.getPoint().lng() )
	
	
	var gPoint = map.fromLatLngToDivPixel(pan_to);
	gPoint.x = gPoint.x + 55;
	gPoint.y = gPoint.y - 85;
	var new_point = map.fromDivPixelToLatLng(gPoint);

	map.panTo( new_point );
	
} 
		
function submit_gmap_form(from_addr, to_addr){
    if (from_addr == null || from_addr == '') { return false; }
	var query = "from: " + from_addr + " to: " + to_addr;
	$('gmaps_form_query').value = query;
	$('gmaps_form').submit();
	return false;
}

function getInternetExplorerVersion() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}
