//<![CDATA[
	var map;
	var lastPoint;
	var bounds;
	var geocoder;
	var barcount = 0;
	var barlist = false;
	var bararray = new Array();	
	var directionsPanel;
	var directions;
	
    var iconRed = new GIcon(); 
    iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png';
    iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconRed.iconSize = new GSize(12, 20);
    iconRed.shadowSize = new GSize(22, 20);
    iconRed.iconAnchor = new GPoint(6, 20);
    iconRed.infoWindowAnchor = new GPoint(5, 1);

    var iconGreen = new GIcon(); 
    iconGreen.image = 'http://labs.google.com/ridefinder/images/mm_20_green.png';
    iconGreen.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconGreen.iconSize = new GSize(12, 20);
    iconGreen.shadowSize = new GSize(22, 20);
    iconGreen.iconAnchor = new GPoint(6, 20);
    iconGreen.infoWindowAnchor = new GPoint(5, 1);
    
    var iconBlack = new GIcon(); 
    iconBlack.image = 'http://labs.google.com/ridefinder/images/mm_20_black.png';
    iconBlack.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconBlack.iconSize = new GSize(12, 20);
    iconBlack.shadowSize = new GSize(22, 20);
    iconBlack.iconAnchor = new GPoint(6, 20);
    iconBlack.infoWindowAnchor = new GPoint(5, 1);
        
    var customIcons = [];
    customIcons["bar"] = iconRed;
    customIcons["dearer"] = iconRed;
    customIcons["cheaper"] = iconGreen;
    customIcons["same"] = iconBlack;

    function createMarker(point, bar_id, name, address, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<a href='/bar/view/bar_id/" + bar_id + "'>" + name + "</a> <br />" + 
      			 "<span style='color:red'>" + address + '</span><br />' +
      			 "<a href='/bar/view/bar_id/" + bar_id + "'>View</a>";
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
 
    function GLoad(clickable) {
		if (GBrowserIsCompatible()) {
	        map = new GMap2(document.getElementById("map"));
	        map.addControl(new GSmallMapControl());
	        map.addControl(new GMapTypeControl());
			bounds = new GLatLngBounds();
			
			map.setCenter(new GLatLng('53.343895', '-6.263518'),14);
		}
		
        if (clickable) {
			GEvent.addListener(map, 'click', setnewmarker);
		}	
	}  

	function setnewmarker(overlay, point) {
		if (overlay) {
			map.removeOverlay(overlay);            	           	
		} else if (point) {
			map.panTo(point);
			var pointmarker = new GMarker(point);
			map.addOverlay(pointmarker);   		
			if (lastPoint) {
				map.removeOverlay(lastPoint);
			}
			lastPoint = pointmarker;    
					
			document.getElementById("lat").value=point.y;
			document.getElementById("lng").value=point.x;    
		}
	}
		
	function GMapPoints(data)
	{
		datasize = data.length;
		for (var i = 0; i < datasize; i++) {          
			var point = new GLatLng(parseFloat(data[i]["lat"]),
									parseFloat(data[i]["lng"]));
			if (data[i]["lat"] != '0.000000') {
				var marker = createMarker(point, data[i]["bar_id"], data[i]["name"], data[i]["address"], data[i]["type"]);
				map.addOverlay(marker);
			    bounds.extend(point);
		    }
		}
		
		if (datasize > 1) {
			map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
		} else if (datasize == 1) {
			map.setZoom(16);
		}	
		map.setCenter(bounds.getCenter());	
	}  

function addBar() {
	barcount++;

	if (!barlist) {
		barlist = document.getElementById('barlist');
	}
	
	GDownloadUrl('/ajax/genmap/bar_id/' + document.getElementById('bar_list').value, setbarmarker);	
}

function setbarmarker(data) {
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
	bar = new Array();
  	for (var i = 0; i < markers.length; i++) {
	    bar['bar_id'] = markers[i].getAttribute("bar_id");
	    bar['name'] = markers[i].getAttribute("name");
	    var address = markers[i].getAttribute("address");
	    var type = markers[i].getAttribute("type");
	    bar['point'] = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
	                            parseFloat(markers[i].getAttribute("lng")));
	    var marker = createMarker(bar['point'], bar['bar_id'], bar['name'], address, 'bar');
	    map.addOverlay(marker);
	    bounds.extend(bar['point']);
	    bar['marker'] = marker;
	}
	
	bararray[barcount] = bar;
 
	var divTag = document.createElement("li"); 
    divTag.id = "bar_" + barcount;  
    	
	divTag.innerHTML = bararray[barcount]['name'] + ' <a href="" onclick="javascript:removeBar(' + barcount + '); return false;">remove</a><input type="hidden" name="bar_id[]" value="' + bararray[barcount]['bar_id'] + '" />';
	
	barlist.appendChild(divTag);
	
	Sortable.create("barlist");
	    
	map.setZoom(map.getBoundsZoomLevel(bounds));
	map.setCenter(bounds.getCenter());	
}

function removeBar(remove_id) {
	map.removeOverlay(bararray[remove_id]['marker']);

	barlist.removeChild( document.getElementById('bar_' + remove_id));
	
	return false;
}	
		
function showCrawl() {
	directionsPanel = document.getElementById("text_directions_div");
	directions = new GDirections(map, directionsPanel);
		  
	directionstring = "from: " + waypoints[0]["lat"]  + "," + waypoints[0]["lng"];

	size = waypoints.length;
	for (x = 1; x < size; x++) {
		directionstring = directionstring + " to: " + waypoints[x]["lat"]  + "," + waypoints[x]["lng"];
	}
	  
	directions.load(directionstring,{travelMode:G_TRAVEL_MODE_WALKING});
}

//Adapted from http://code.google.com/apis/maps/documentation/examples/geocoding-extraction.html

    // addAddressToMap() is called when the geocoder returns an
    // answer.  It adds a marker to the map with an open info window
    // showing the nicely formatted version of the address and the country code.
    function addAddressToMap(response) {
//      map.clearOverlays();
      if (!response || response.Status.code != 200) {
        alert("Sorry, we were unable to geocode that address");
      } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1],
                            place.Point.coordinates[0]);
//        marker = new GMarker(point);
//        map.addOverlay(marker);
//        marker.openInfoWindowHtml(place.address + '<br>' +
//          '<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
        
        setnewmarker(false, point);  
      }
    }

   // findLocation() is used to enter the sample addresses into the form.
    function findLocation() {
      geocoder = new GClientGeocoder();
      var barform = document.getElementById('baradd');
      var index =  barform.county_id.selectedIndex;
      var street = barform.bar_street.value;     
      var town = barform.bar_city.value;
      
      var error = '';
      
      if (street == '') {
      	error = 'You need to enter a street name \n';
      }
 
      if (town == '') {
      	error = error + 'You need to enter a town or city name\n';
      }
      
      if (error == '') {      
	      var address =  street + ", " + town + ", Co. " + barform.county_id.options[index].text + ", Ireland" ;     
	      geocoder.getLocations(address, addAddressToMap);
	  } else {
	  	alert(error);
	  }
    }

//]]>
