/*******************************************************************************
	MAIN CONTROL SCRIPT: xml_g_maps.js
	LITERADIUS XML LOCATOR
	
	-----------------------------------------------------------------------
	product			: LiteRadius version: 3.0
	released		: May 30, 2008
	copyright		: Copyright 2001-2008 Escape Radius
	email			: info@escaperadius.com
	website			: http://www.escaperadius.com
	-----------------------------------------------------------------------

*******************************************************************************/
var lr_path = 'http://www.mamamellace.com/locator/lr_v31/literadius.php?/locator/';
var icon_path = 'http://www.mamamellace.com/locator/lr_v31/warpcore/literadius/views/map_assets/js_css/markers/';
var custom_icon=[];
var gmarkers;					 
var map_zoom = 14;
var map_lat = 33.13;
var map_lng = 117.28;
var reZoom;
var reCenter;
var click_zoom = 13;
var backbutton;
var map;
var regions = [];
var views;
var address;
var region_id;
var label;
var xml;

/*
// FUNCTION: load	
*/
function load() {
	if (GBrowserIsCompatible()) {
    	geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));        
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());

        initMapView();
    }
}

/*
// FUNCTION: initMapView	
*/
function initMapView(view){
	if(view == null) view = 'init';
	else view = 'init/' + view;

	var searchUrl = lr_path + 'region_view/' + view;

    GDownloadUrl(searchUrl, function(data, responseCode) {
    	if(responseCode == 200) {
			var view_xml = GXml.parse(data);
	     	var map_view = view_xml.documentElement.getElementsByTagName('map_view');
	     	if(map_view.length > 0) {
			    map_zoom = parseInt(map_view[0].getAttribute('zoom'));
				map_lat = parseFloat(map_view[0].getAttribute('latitude'));
				map_lng = parseFloat(map_view[0].getAttribute('longitude'));				
			}
		}
		else if(responseCode == -1) {
		    alert("Data request timed out. Please try again.");
		} 
		else { 
		    alert("Request resulted in error. The server may be unavailable.");
		}
		reZoom = map_zoom;
		reCenter = new GLatLng(map_lat,map_lng);
		map.setCenter(reCenter, map_zoom);
		
    });
	// Initialize marker array
	gmarkers = new Array();
	// Initialize data display element (if it exists)	
	var data_list = document.getElementById('data_list'); 
    if(data_list != null) data_list.innerHTML = '';
    	
    map.clearOverlays();	
}

/*
// FUNCTION: searchLocations	
*/
function searchLocations() {
	address = document.getElementById('addressInput').value;

    geocoder.getLatLng(address, function(latlng) {
		if (!latlng) {
        	alert(address + ' not found');
       	} else {
		    map.clearOverlays();
			set_origin(latlng);
			searchLocationsNear(latlng);
       	}
    });
}

/*
// FUNCTION: staticLoad	
*/
function staticLoad() {
	if (GBrowserIsCompatible()) {
    	geocoder = new GClientGeocoder();
        map = new GMap2(document.getElementById('map'));        
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        reZoom = map_zoom;
		reCenter = new GLatLng(map_lat,map_lng);
		map.setCenter(reCenter, map_zoom);
    }
}

/*
// FUNCTION: log_click_thru	
*/
function log_click_thru(region_id,location_id) 
{
	var path = lr_path + 'click_thru/' + region_id + '/' + location_id + '/' + Math.random();			
	xmlhttp=null;
	if (window.XMLHttpRequest)
	{// code for all new browsers
	  xmlhttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{// code for IE5 and IE6
	  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
		  
	if (xmlhttp!=null)
	{
	  xmlhttp.open("POST",path,true);
	  xmlhttp.send(null);
	}
	  
}

/*
// FUNCTION: staticMapView	
*/
function staticMapView(region_id) {
	if(region_id != '') {
	reZoom = regions[region_id]['zoom'];
	reCenter = new GLatLng(regions[region_id]['latitude'],regions[region_id]['longitude']);
	map.setCenter(reCenter, parseInt(reZoom));
	}
}

/*
// FUNCTION: staticInitMapView	
*/
function staticInitMapView(searchUrl, region_id){
    GDownloadUrl(searchUrl, function(data, responseCode) {
    	if(responseCode == 200) {
    	    var id;
    	    views = new Array();
			var view_xml = GXml.parse(data);
	     	var map_view = view_xml.documentElement.getElementsByTagName('map_view');

			for (var k = 0; k < map_view.length; k++) {	
		    	id = map_view[k].getAttribute('region_id');
		  		regions[id] = new Array();
		     	regions[id].name = map_view[k].getAttribute('name');
		     	regions[id].zoom = parseInt(map_view[k].getAttribute('zoom'));
		     	regions[id].latitude = parseInt(map_view[k].getAttribute('latitude'));
		     	regions[id].longitude = parseInt(map_view[k].getAttribute('longitude')); 	
				views[k] = regions;
			}		     	
			if (typeof region_id == 'undefined' && k > 0) {
				map_zoom = parseInt(map_view[0].getAttribute('zoom'));
				map_lat = parseInt(map_view[0].getAttribute('latitude'));
				map_lng = parseInt(map_view[0].getAttribute('longitude')); 
			}
			else {
				map_zoom = parseInt(regions[region_id].zoom);
				map_lat = parseInt(regions[region_id].latitude);
				map_lng = parseInt(regions[region_id].longitude);
			}
		   		
		}
		else if(responseCode == -1) {
		    alert("XML region data file not found.");
		} 
		else { 
		    alert("Request resulted in error. XML region data file not found.");
		}

		reZoom = map_zoom;
		reCenter = new GLatLng(map_lat,map_lng);
		map.setCenter(reCenter, map_zoom);
		
    });
	// Initialize marker array
	gmarkers = new Array();
	// Initialize data display element (if it exists)	
	var data_list = document.getElementById('data_list'); 
    if(data_list != null) data_list.innerHTML = '';
    	
    map.clearOverlays();	
}
/*
// FUNCTION: staticXMLData	
*/
function staticXMLData(filepath) {
    GDownloadUrl(filepath, function(data, responseCode) {
    	if(responseCode == 200) { 
	    	map.clearOverlays();
			var l_xml = GXml.parse(data);
	        var record = l_xml.documentElement.getElementsByTagName('record');	        
	        if(record.length > 0) setMarkers(record);
	        var filter_form = document.getElementById('filter_form');
	        if(filter_form != null) submitBoxCheck(filter_form);    
	        	        	       
		}
		else if(responseCode == -1) {
		    alert("XML location data file not found.");
		} 
		else { 
			alert("Request resulted in error. XML location data file not found.");
		}
 	});  
}

/*
// FUNCTION: searchLocationsNear	
*/
function searchLocationsNear(center) {
	var region_id = document.getElementById('region_id');
	if(region_id == null) region_id = '';
	else region_id = region_id.value;
    var searchUrl = lr_path + 'get_locations/' + region_id + '/' + center.lng();
    searchUrl +=  '/' + center.lat() + '/' + Math.random();;
    GDownloadUrl(searchUrl, function(data, responseCode) {
    	if(responseCode == 200) {
			var l_xml = GXml.parse(data);
	        var record = l_xml.documentElement.getElementsByTagName('record');
	        setMarkers(record);
	        var filter_form = document.getElementById('filter_form');
	        if(filter_form != null) submitBoxCheck(filter_form);         
		}
		else if(responseCode == -1) {
		    alert("Data request timed out. Please try again.");
		} 
		else { 
			alert("Request resulted in error. The server may be unavailable.");
		}
 	}); 
}

/*
// FUNCTION: set_origin	
*/
function set_origin(center) 
{
	var path = lr_path + 'get_origin/' + Math.random();			
    GDownloadUrl(path, function(data, responseCode) {
    	if(responseCode == 200) {
			var l_xml = GXml.parse(data);
	        var origin = l_xml.documentElement.getElementsByTagName('origin');
			var origin_icon = custom_icon[origin[0].getAttribute("ui_user_origin")];
			var coordinate = new GLatLng(parseFloat(center.lat()),
							   parseFloat(center.lng()));
			var o_marker = new GMarker(coordinate, origin_icon, false); 
			var info = new Array();
			info['name'] = 'Point of Origin';
			info['address_1'] = document.getElementById('addressInput').value;
			info['city'] = 'lat: ' + center.lat() + ' lng: ' + center.lng();
			
			GEvent.addListener(o_marker, "click", function() {  
				o_marker.openInfoWindowHtml(o_infoWindowStyle(info)); 
			});
		
      		map.addOverlay(o_marker);
		}
		else if(responseCode == -1) {
		    alert("Data request timed out. Please try again.");
		} 
		else { 
			alert("Request resulted in error. The server may be unavailable.");
		}
 	});
}

/*
// FUNCTION: setUserOrigin	
*/
function _setUserOrigin(origin){	
		var origin_icon = custom_icon[origin[0].getAttribute("marker")];
		var coordinate = new GLatLng(parseFloat(origin[0].getAttribute('latitude')),
                           parseFloat(origin[0].getAttribute('longitude')));
		var o_marker = new GMarker(coordinate, origin_icon, false); 
		var info = new Array();
		info['name'] = origin[0].getAttribute('name');
		info['address_1'] = origin;
		GEvent.addListener(o_marker, "click", function() {  
			o_marker.openInfoWindowHtml(o_infoWindowStyle(info)); 
		});	
		map.addOverlay(o_marker);
}

/*
// FUNCTION: setMarkers	
*/
function setMarkers(record) {
	gmarkers = new Array();
	var data_list = document.getElementById('data_list');
	if(data_list != null) data_list.innerHTML = '';

	if(record.length > 0) {	
		var bounds = new GLatLngBounds();
		for (var i = 0; i < record.length; i++) {
			var loc = new Array();
	       	loc['region_id'] = record[i].getAttribute('region_id');
	       	loc['location_id'] = record[i].getAttribute('location_id');
	       	loc['name'] = record[i].getAttribute('name');
	       	loc['address_1'] = record[i].getAttribute('address_1');
	       	loc['address_2'] = record[i].getAttribute('address_2');
	       	loc['city'] = record[i].getAttribute('city');
	       	loc['state'] = record[i].getAttribute('state');
	       	loc['postal_code'] = record[i].getAttribute('postal_code');
	       	loc['distance'] = record[i].getAttribute('distance');
	       	loc['phone'] = record[i].getAttribute('phone');
	       	loc['email'] = record[i].getAttribute('email');
	       	loc['url'] = record[i].getAttribute('url');
	       	loc['street_map'] = record[i].getAttribute('street_map');
	       	loc['active_filter'] = record[i].getAttribute('active_filter');
	       	loc['extra_1'] = record[i].getAttribute('extra_1');
	       	loc['extra_2'] = record[i].getAttribute('extra_2');
	       	loc['extra_3'] = record[i].getAttribute('extra_3');
	       	loc['extra_4'] = record[i].getAttribute('extra_4');
	       	loc['icon'] = record[i].getAttribute('icon');

	       	loc['point'] = new GLatLng(parseFloat(record[i].getAttribute('latitude')),
	                                 parseFloat(record[i].getAttribute('longitude')));

	        var marker = createMarker(loc);
	    //     alert(marker.data['name']);
	        map.addOverlay(marker);

	        bounds.extend(loc['point']);

	        if(data_list != null) {
	        	data_list.appendChild(parseLocations(loc, marker));
	        }
		}
	    map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	    					
//	    reZoom = map.getZoom();
//		reCenter = map.getCenter();
//		backbutton = new TextualControl();    
    }
    else {
    	var msg = 'No locations found near ' + address;
    	if(data_list != null) data_list.innerHTML = msg;
    	alert(msg);
    }
}

/*
// FUNCTION: parseLocations	
*/
function parseLocations(location, marker) {
	var div = document.createElement('div');
	div.className = 'dataNode';
	div.id = location['region_id'] + '_' + location['location_id'];

    div.innerHTML = locationLayout(location);
    GEvent.addDomListener(div, 'click', function() {
    	GEvent.trigger(marker, 'click');
    });
    GEvent.addDomListener(div, 'mouseover', function() {
    	div.className = 'dataNode _mouseover';
	    // Initialize elabel 
		label = new ELabel(location['point'], 
						   location['name'], 
						   "elabel_1", 
						   new GSize(-100,25));
    	map.addOverlay(label)
    });
    GEvent.addDomListener(div, 'mouseout', function() {
    	div.className = 'dataNode';
    	map.removeOverlay(label)
    });
    return div;
}

/*
// FUNCTION: locationLayout	
*/
function locationLayout(loc) {	
	var html = '<table class=dataNode  cellpadding="0" cellspacing="0" >';
	html += '<tr class="dataNodeHeader"><td>' + loc['name'] + '</td></tr>';
	html += '<tr class="dataNodeOddRow"><td>' + loc['address_1'] + '</td></tr>';
	html += '<tr class="dataNodeOddRow"><td>'  + loc['city'];
	html += ', '  + loc['state'] + ' '  + loc['postal_code'] +  '</td>';
	html += '</tr>';
    if(loc['phone'].length > 0) {
		html += '<tr class="dataNodeOddRow"><td>';
		html += loc['phone'] + '</td></tr>';
    }
	html += '<tr class="dataNodeOddRow"><td>';    	
    if(loc['email'].length > 0) {
		html += loc['email'] + ' ';
    }    			
    if(loc['url'].length > 0) {
		html += loc['url'] + ' ';
    }
    if(loc['street_map'].length > 0) {
		html += loc['street_map'] + ' ';
    }  
    
	html += '</td></tr></table>';
	return html;	
}

/*
// FUNCTION: createMarker	
*/
function createMarker(location) {

	var location_icon = custom_icon[location['icon']];

	var marker = new GMarker(location['point'], 
							{icon:location_icon});
	
	gmarkers.push(marker);
	marker.data = location;
		 
    GEvent.addListener(marker, 'click', function() {

		marker.openInfoWindowHtml(infoWindowStyle(location));
    });  
	GEvent.addListener(marker, "mouseover", function() {  
		label = new ELabel(location['point'], 
						   location['name'], 
						   "elabel_1", 
						   new GSize(-100,25));
	   	map.addOverlay(label);
	});
	GEvent.addListener(marker, "mouseout", function() {  
    	map.removeOverlay(label);
	});	 

    return marker;
}

function toolTipMessage(loc) {
	var msg= "header=[" + loc['name'] + "] body=[" + loc['distance'] + "]";
	return msg;
}

/*
// FUNCTION: o_infoWindowStyle	
*/
function o_infoWindowStyle(info) {
	var html = '<table class=infoWindow border=0 cellspacing=0 cellpadding=0>';
		html += '<tr class="infoWindowHeader"><td>' + info['name'] + '</td></tr>';
		html += '<tr class="infoWindowRowOdd"><td>' + info['address_1'] + '</td></tr>';  	 
//		html += '<tr class="infoWindowRowOdd"><td>' + info['city'] + '</td></tr>';  	 
		html += '</td></tr></table>';
	return html;
}

/*
// FUNCTION: infoWindowStyle	
*/
function infoWindowStyle(info) {
	var html = '<table class=infoWindow border=0 cellspacing=0 cellpadding=0>';
		html += '<tr class="infoWindowHeader"><td>' + info['name'] + '</td></tr>';
		html += '<tr class="infoWindowRowOdd"><td>' + info['address_1'] + '</td></tr>';
		html += '<tr class="infoWindowRowOdd"><td>'  + info['city'];
		html += ', '  + info['state'] + ' '  + info['postal_code'] +  '</td>';
		html += '</tr>';
    	if(info['phone'].length > 0) {
			html += '<tr class="infoWindowRowOdd"><td>' + info['phone'] + '</td></tr>';
    	}
		html += '<tr class="infoWindowRowOdd"><td>';    	
    	if(info['email'].length > 0) {
			html += info['email'] + ' ';
    	}    			
    	if(info['url'].length > 0) {
			html += info['url'] + ' ';
    	}
    	if(info['street_map'].length > 0) {
			html += info['street_map'] + ' ';
    	}    	 
		html += '</td></tr></table>';
	return html;
}

/*
// FUNCTION: submitBoxCheck	
//
// Iterates through active filter checkboxes and toggles markers on/off
*/
function submitBoxCheck(form) {
	var all_filters = form.filter;
	for (var j=0; j<all_filters.length; j++) {
		checkboxClick(form, all_filters[j].value);
	}
	
}

/*
// FUNCTION: checkboxClick	
//
// Controls active filter checkbox state and toggles marker on/off
*/	
function checkboxClick(form,active_filter) {
	map.closeInfoWindow(); 
	var filters = checkedFilters(form);
	box = document.getElementById(active_filter).checked;
    if (box) {
    	showMarkers(active_filter);
    } 
    else {
		hideMarkers(filters, active_filter);
    }
   	var data_list = document.getElementById('data_list'); 
    if(data_list != null) makeDataList(data_list);
}

/*
// FUNCTION: checkedFilters	
*/
function checkedFilters(form) {
	var checked_filter = new Array();
	var j = 0;
	for (var i=0; i < form.filter.length; i++) {
		if(form.filter[i].checked) {
			checked_filter[j] = form.filter[i];
			j++;
		}
	}
	return checked_filter;
}

/*
// FUNCTION: showMarkers	
//
// Shows all active_filter marker icons
*/
function showMarkers(filter) {
	for (var i=0; i<gmarkers.length; i++) {
    	if (gmarkers[i].data['active_filter'].match(filter)) {
            gmarkers[i].show();
        }
    }
    document.getElementById(filter).checked = true;   
}

/*
// FUNCTION: hideMarkers	
//
// Hides all active_filter marker icons
*/
function hideMarkers(filters, active_filter) {
	for (var i=0; i<gmarkers.length; i++) {     	
    	if (gmarkers[i].data['active_filter'].match(active_filter) != null) {
        	gmarkers[i].hide();
          	for (var j=0; j<filters.length; j++) { 
				if (gmarkers[i].data['active_filter'].match(filters[j].value) != null) {
					gmarkers[i].show()
            	}
       		}
		}
	}
	document.getElementById(active_filter).checked = false;
}

/*
// FUNCTION: makeDataList	
//
// Populates the sidebar to match the markers currently displayed
*/
function makeDataList(data_list) {
    data_list.innerHTML = '';
	var empty = true;
    for (var i=0; i<gmarkers.length; i++) {
    	if (!gmarkers[i].isHidden()) {
        	empty = false
            data_list.appendChild(parseLocations(gmarkers[i].data, gmarkers[i]));
    	}
    }
    if(empty) {
    	var msg = 'No locations found. Please try another search.';
    	data_list.innerHTML = msg;
    }
}

custom_icon['manual_marker.png'] = new GIcon();
custom_icon['manual_marker.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['manual_marker.png'].image = icon_path + "manual_marker.png";
custom_icon['manual_marker.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['manual_marker.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['manual_marker.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['manual_marker.png'].infoWindowAnchor = new GPoint(0.0, 28.0);
custom_icon['manual_marker.png'].infoShadowAnchor = new GPoint(0.0, 28.0);

// Square Markers
custom_icon['marker_00.png'] = new GIcon();
custom_icon['marker_00.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_00.png'].image = icon_path + "marker_00.png";
custom_icon['marker_00.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_00.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_00.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_00.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_00.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_01.png'] = new GIcon();
custom_icon['marker_01.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_01.png'].image = icon_path + "marker_01.png";
custom_icon['marker_01.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_01.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_01.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_01.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_01.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_02.png'] = new GIcon();
custom_icon['marker_02.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_02.png'].image = icon_path + "marker_02.png";
custom_icon['marker_02.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_02.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_02.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_02.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_02.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_03.png'] = new GIcon();
custom_icon['marker_03.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_03.png'].image = icon_path + "marker_03.png";
custom_icon['marker_03.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_03.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_03.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_03.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_03.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_04.png'] = new GIcon();
custom_icon['marker_04.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_04.png'].image = icon_path + "marker_04.png";
custom_icon['marker_04.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_04.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_04.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_04.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_04.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_05.png'] = new GIcon();
custom_icon['marker_05.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_05.png'].image = icon_path + "marker_05.png";
custom_icon['marker_05.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_05.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_05.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_05.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_05.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_06.png'] = new GIcon();
custom_icon['marker_06.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_06.png'].image = icon_path + "marker_06.png";
custom_icon['marker_06.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_06.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_06.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_06.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_06.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_07.png'] = new GIcon();
custom_icon['marker_07.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_07.png'].image = icon_path + "marker_07.png";
custom_icon['marker_07.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_07.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_07.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_07.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_07.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_08.png'] = new GIcon();
custom_icon['marker_08.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_08.png'].image = icon_path + "marker_08.png";
custom_icon['marker_08.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_08.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_08.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_08.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_08.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_09.png'] = new GIcon();
custom_icon['marker_09.png'].shadow = icon_path + "marker_00_shadow.png";
custom_icon['marker_09.png'].image = icon_path + "marker_09.png";
custom_icon['marker_09.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_09.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_09.png'].iconAnchor = new GPoint(10.0, 28.0);
custom_icon['marker_09.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_09.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

// Round Markers
custom_icon['marker_10.png'] = new GIcon();
custom_icon['marker_10.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_10.png'].image = icon_path + "marker_10.png";
custom_icon['marker_10.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_10.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_10.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_10.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_10.png'].infoShadowAnchor = new GPoint(28.0, 15.0);


custom_icon['marker_11.png'] = new GIcon();
custom_icon['marker_11.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_11.png'].image = icon_path + "marker_11.png";
custom_icon['marker_11.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_11.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_11.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_11.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_11.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_12.png'] = new GIcon();
custom_icon['marker_12.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_12.png'].image = icon_path + "marker_12.png";
custom_icon['marker_12.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_12.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_12.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_12.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_12.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_13.png'] = new GIcon();
custom_icon['marker_13.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_13.png'].image = icon_path + "marker_13.png";
custom_icon['marker_13.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_13.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_13.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_13.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_13.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_14.png'] = new GIcon();
custom_icon['marker_14.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_14.png'].image = icon_path + "marker_14.png";
custom_icon['marker_14.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_14.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_14.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_14.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_14.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_15.png'] = new GIcon();
custom_icon['marker_15.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_15.png'].image = icon_path + "marker_15.png";
custom_icon['marker_15.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_15.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_15.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_15.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_15.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_16.png'] = new GIcon();
custom_icon['marker_16.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_16.png'].image = icon_path + "marker_16.png";
custom_icon['marker_16.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_16.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_16.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_16.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_16.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_17.png'] = new GIcon();
custom_icon['marker_17.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_17.png'].image = icon_path + "marker_17.png";
custom_icon['marker_17.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_17.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_17.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_17.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_17.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_18.png'] = new GIcon();
custom_icon['marker_18.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_18.png'].image = icon_path + "marker_18.png";
custom_icon['marker_18.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_18.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_18.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_18.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_18.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

custom_icon['marker_19.png'] = new GIcon();
custom_icon['marker_19.png'].shadow = icon_path + "marker_10_shadow.png";
custom_icon['marker_19.png'].image = icon_path + "marker_19.png";
custom_icon['marker_19.png'].iconSize = new GSize(28.0, 28.0);
custom_icon['marker_19.png'].shadowSize = new GSize(43.0, 28.0);
custom_icon['marker_19.png'].iconAnchor = new GPoint(14.0, 28.0);
custom_icon['marker_19.png'].infoWindowAnchor = new GPoint(14.0, 2.0);
custom_icon['marker_19.png'].infoShadowAnchor = new GPoint(28.0, 15.0);

// Tack Markers
custom_icon['marker_20.png'] = new GIcon();
custom_icon['marker_20.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_20.png'].image = icon_path + "marker_20.png";
custom_icon['marker_20.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_20.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_20.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_20.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_20.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_21.png'] = new GIcon();
custom_icon['marker_21.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_21.png'].image = icon_path + "marker_21.png";
custom_icon['marker_21.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_21.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_21.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_21.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_21.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_22.png'] = new GIcon();
custom_icon['marker_22.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_22.png'].image = icon_path + "marker_22.png";
custom_icon['marker_22.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_22.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_22.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_22.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_22.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_23.png'] = new GIcon();
custom_icon['marker_23.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_23.png'].image = icon_path + "marker_23.png";
custom_icon['marker_23.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_23.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_23.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_23.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_23.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_24.png'] = new GIcon();
custom_icon['marker_24.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_24.png'].image = icon_path + "marker_24.png";
custom_icon['marker_24.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_24.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_24.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_24.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_24.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_25.png'] = new GIcon();
custom_icon['marker_25.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_25.png'].image = icon_path + "marker_25.png";
custom_icon['marker_25.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_25.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_25.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_25.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_25.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_26.png'] = new GIcon();
custom_icon['marker_26.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_26.png'].image = icon_path + "marker_26.png";
custom_icon['marker_26.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_26.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_26.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_26.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_26.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_27.png'] = new GIcon();
custom_icon['marker_27.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_27.png'].image = icon_path + "marker_27.png";
custom_icon['marker_27.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_27.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_27.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_27.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_27.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_28.png'] = new GIcon();
custom_icon['marker_28.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_28.png'].image = icon_path + "marker_28.png";
custom_icon['marker_28.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_28.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_28.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_28.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_28.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['marker_29.png'] = new GIcon();
custom_icon['marker_29.png'].shadow = icon_path + "marker_20_shadow.png";
custom_icon['marker_29.png'].image = icon_path + "marker_29.png";
custom_icon['marker_29.png'].iconSize = new GSize(12.0, 20.0);
custom_icon['marker_29.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['marker_29.png'].iconAnchor = new GPoint(6.0, 20.0);
custom_icon['marker_29.png'].infoWindowAnchor = new GPoint(6.0, 2.0);
custom_icon['marker_29.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

// Origin Markers
custom_icon['origin_00.png'] = new GIcon();
//custom_icon['origin_00.png'].shadow = icon_path + "origin_00_shadow.png";
custom_icon['origin_00.png'].image = icon_path + "origin_00.png";
custom_icon['origin_00.png'].iconSize = new GSize(26.0, 26.0);
//custom_icon['origin_00.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['origin_00.png'].iconAnchor = new GPoint(13.0, 26.0);
custom_icon['origin_00.png'].infoWindowAnchor = new GPoint(13.0, 2.0);
//custom_icon['origin_00.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['origin_01.png'] = new GIcon();
//custom_icon['origin_01.png'].shadow = icon_path + "origin_01_shadow.png";
custom_icon['origin_01.png'].image = icon_path + "origin_01.png";
custom_icon['origin_01.png'].iconSize = new GSize(26.0, 26.0);
//custom_icon['origin_01.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['origin_01.png'].iconAnchor = new GPoint(13.0, 26.0);
custom_icon['origin_01.png'].infoWindowAnchor = new GPoint(13.0, 2.0);
//custom_icon['origin_01.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['origin_02.png'] = new GIcon();
//custom_icon['origin_02.png'].shadow = icon_path + "origin_02_shadow.png";
custom_icon['origin_02.png'].image = icon_path + "origin_02.png";
custom_icon['origin_02.png'].iconSize = new GSize(26.0, 26.0);
//custom_icon['origin_02.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['origin_02.png'].iconAnchor = new GPoint(13.0, 26.0);
custom_icon['origin_02.png'].infoWindowAnchor = new GPoint(13.0, 2.0);
//custom_icon['origin_02.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['origin_03.png'] = new GIcon();
//custom_icon['origin_03.png'].shadow = icon_path + "origin_03_shadow.png";
custom_icon['origin_03.png'].image = icon_path + "origin_03.png";
custom_icon['origin_03.png'].iconSize = new GSize(26.0, 26.0);
//custom_icon['origin_03.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['origin_03.png'].iconAnchor = new GPoint(13.0, 26.0);
custom_icon['origin_03.png'].infoWindowAnchor = new GPoint(13.0, 2.0);
//custom_icon['origin_03.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

custom_icon['origin_04.png'] = new GIcon();
//custom_icon['origin_04.png'].shadow = icon_path + "origin_04_shadow.png";
custom_icon['origin_04.png'].image = icon_path + "origin_04.png";
custom_icon['origin_04.png'].iconSize = new GSize(26.0, 26.0);
//custom_icon['origin_04.png'].shadowSize = new GSize(23.0, 20.0);
custom_icon['origin_04.png'].iconAnchor = new GPoint(13.0, 26.0);
custom_icon['origin_04.png'].infoWindowAnchor = new GPoint(13.0, 2.0);
//custom_icon['origin_04.png'].infoShadowAnchor = new GPoint(12.0, 8.0);

// EXTRA GOODIE FUNCTIONS
/*
// FUNCTION: keypress_submit
//
// Fires address search when user pressess enter key
*/
function enterOverride(e) {
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return false;
	
	if (keycode == 13) {
		searchLocations(); 
		return false;
	}
}

/*
// FUNCTION: TextualControl	
*/
function TextualControl () {}
	TextualControl.prototype = new GControl();
	TextualControl.prototype.initialize = function(map) {
  	var container = document.createElement("div");
	var zoomDiv = document.createElement("div");
  	this.setButtonStyle_(zoomDiv);
  	container.appendChild(zoomDiv);
  	zoomDiv.appendChild(document.createTextNode("Show All Locations"));
  	GEvent.addDomListener(zoomDiv, "click", function() {
		map.closeInfoWindow(); 
		map.setCenter(reCenter, reZoom); 
		map.removeControl(backbutton); 
  	});

	map.getContainer().appendChild(container);
	return container;
}
// 
/*
// PROTOTYPE: TextualControl	
//
// By default, the control will appear in the top right corner of the
// map with 7 pixels of padding.
*/
TextualControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(217, 7));
}
/*
// PROTOTYPE: TextualControl	
//
// Sets the proper CSS for the given button element.
*/
TextualControl.prototype.setButtonStyle_ = function(button) {
	button.style.backgroundColor = "#880000";
  	button.style.padding = "1px";
  	button.style.fontFamily = "Geneva, Vera, Arial, Helvetica, sans-serif";
  	button.style.fontSize = "12px";
  	button.style.fontVariant = "small-caps";
  	button.style.border = "1px solid #999999";
  	button.style.color = "#fff";
  	button.style.cursor = "pointer";
}