	var map;
	var markersArray = [];
	var marker;
	var infoWindow;
	var initZoom = 15;	
	var currentZoom = initZoom;
	var isDeep = 0;
	
	var centerLat = "40.7156444";
	var centerLong = "-73.9535087";
	
	if(isMobile()) {
		location.href = '/mobile/';
	}
	
	
	/* address handling */	
			$.address.init(function(event) {
			    //$('.internal').address();
			    isDeep = event.pathNames[1];
			    handleURL(event.pathNames);	
			}).change(function(event) {
				handleURL(event.pathNames);	
			}).externalChange(function(event) {
			    
			}).history(true);

	
	
	$(document).ready(function() {
		$(window).bind("resize", function(){
			doResize();    
		});
		
		$(".drawer-link").live("click", function(){
			
			//findMarker($(this).attr("vid"));
			//$.address.value('/venue/'+$(this).attr("vid"));
		});
		
		$("#back-link").click(function(){
			hideDetails();
		});
		
		$("#current-category").click(function() {
			$("#instructions").hide();
			if($("#dropdown").is(":visible")) {
				loadVenueList(venueID);
			} else {
				$("#dropdown").slideDown("slow");
				$("#venue-list").html("");
			}
			
		});
		
		$("#dropdown-list a").click(function() {
			$("#current-category").html($(this).html());
			
			$("#dropdown").slideUp("slow", function(){
				
			});

			$("#venue-list").html("");
			venueID = $(this).attr("vid");
			loadVenueList(venueID);
			
		});
		
		$("#btn-plus").click(function() {
			map.setZoom(currentZoom + 1);
		});
		
		$("#btn-minus").click(function() {
			map.setZoom(currentZoom - 1);
		});
		
		$("#nav").hover(function(){
			$(this).animate({left: 0}, 500);
		}, function(){
			$(this).animate({left: -145}, 500);
		});
		
		initialize();
	});
	
	function handleURL(path) {
		switch(path[0]) {
			case "venue":
				if(path.length != 1) {
					showDetails(path[1]);
					findMarker(path[1]);
				}
			break;
		}
	}
	
	function loadVenueList(id) {
		deleteOverlays();
		$.getJSON('/foodapi/venue_type/'+id, function(data) {
			$("#instructions").show();
	    	var venue_string = "<ul>";
	    	for(var i = 0; i< data.length; i++) {
	    		
	    		addMarker(data[i].id, data[i].name, data[i].cuisine, data[i].latitude, data[i].longitude, data[i].recommended);
	    		
	    		if(data[i].recommended == 1) {
	  				venue_string += '<li><a href="#/venue/'+data[i].id+'" vid="'+data[i].id+'" class="drawer-link recco-link">'+data[i].name+'</a></li>';
	  			} else {
	  				venue_string += '<li><a href="#/venue/'+data[i].id+'" vid="'+data[i].id+'" class="drawer-link">'+data[i].name+'</a></li>';
	  			}
	    		
	    	}
	    	
	    	venue_string += "</ul>";
	    	
	    	$("#venue-list").html(venue_string);
	    	var myLatlng = new google.maps.LatLng(centerLat,centerLong);
	    	map.panTo(myLatlng);
	    	map.setZoom(initZoom);
	    	
	    });
	}

	function showDetails(id){
		$("#sidebar").animate({marginLeft: 0}, 500);
		$.ajax({
		  url: '/foodapi/details/'+id,
		  success: function(data){
		    $("#details").html(data);
		  }
		});
	}
	
	
	function hideDetails() {
		$("#sidebar").animate({marginLeft: -260}, 500);
	}
	
	function addMarker(myID, name, cuisine, lat, lang, recco) {
		var img;
		var myLatlng = new google.maps.LatLng(lat, lang);
		if(recco != 1) {
			img = '/images/marker.png';
			marker = new google.maps.Marker({
			  title: name,
		      position: myLatlng,
		      map: map,
		      icon: img,
		      id: myID,
		      content: "<strong>" + name + "</strong><br />" + cuisine
		    });
		} else {
			marker = new google.maps.Marker({
			  title: name,
		      position: myLatlng,
		      map: map,
		      id: myID,
		      content: "<strong>" + name + "</strong><br />" + cuisine
		    });
		}
		
		google.maps.event.addListener(marker, 'click', function() {
			showInfo(this);	   		
	   	});
	    
	    markersArray.push(marker);
	}
 
 	function showInfo(mk) {
		map.panTo(mk.position);
	   	infowindow.content = mk.content;
		infowindow.open(map, mk);
		$.address.value("/venue/"+mk.id);
	   	showDetails(mk.id);
 	}
 
 	// Removes the overlays from the map, but keeps them in the array
  	function clearOverlays() {
    	if (markersArray) {
      	for (i in markersArray) {
        	markersArray[i].setMap(null);
      	}
    	}
  	}
 
  	// Shows any overlays currently in the array
  	function showOverlays() {
    	if (markersArray) {
      		for (i in markersArray) {
       			markersArray[i].setMap(map);
      		}
    	}
  	}
 
  	// Deletes all markers in the array by removing references to them
  	function deleteOverlays() {
    	if (markersArray) {
      		for (i in markersArray) {
        		markersArray[i].setMap(null);
      		}
      		markersArray.length = 0;
    	}
  	}
  
  	// find marker
  	function findMarker(id) {
    	if (markersArray) {
      		for (i in markersArray) {
        		if(markersArray[i].id == id) {
        			showInfo(markersArray[i]);
        		}
      		}
    	}
  	}
	
	function doResize() {
		var wHeight = $(window).height();
		var wWidth = $(window).width();
		
		$("#drawer").height(wHeight);
		$("#sidebar").height(wHeight);
		$("restaurant-list").height(wHeight);
	}

	function initialize() {
	    var myLatlng = new google.maps.LatLng(centerLat,centerLong);
	    var roadAtlasStyles = [
	    {
	      featureType: "road",
	      elementType: "geometry",
	      stylers: [
	        { hue: "#000000" },
	        { visibility: "simplified" },
	        { saturation: -100 }
	      ]
	    },{
	      featureType: "road",
	      elementType: "labels",
	      stylers: [
	        { hue: "#ffffff" },
	        { visibility: "simpliied" },
	        { saturation: -100 }
	      ]
	    },{
	      featureType: "water",
	      elementType: "all",
	      stylers: [
	        { saturation: 20 },
	        { hue: "#00fff6" }
	      ]
	    },{
	      featureType: "poi.park",
	      elementType: "all",
	      stylers: [
	        { visibility: "simplified" },
	        { hue: "#a8ffaa" },
	        { saturation: 60 }
	      ]
	    }
	  ];
		var myOptions = {
	    	zoom: initZoom,
	    	disableDefaultUI: true,
	      	center: myLatlng,
	      	minZoom: initZoom,
	      	mapTypeId: google.maps.MapTypeId.ROADMAP
	    }
	    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	    
	    $.getJSON('/foodapi/', function(data) {
	    	for(var i = 0; i< data.length; i++) {
	    		addMarker(data[i].id, data[i].name, data[i].cuisine, data[i].latitude, data[i].longitude, data[i].recommended);
	    	}
	    	
	    	if(isDeep != 0) {
	    		findMarker(isDeep);
	    	}
	    	
	    });
	    	        
	    var styledMapOptions = { name: "US Road Atlas" }

	  	var usRoadMapType = new google.maps.StyledMapType(roadAtlasStyles, styledMapOptions);
		map.mapTypes.set('usroadatlas', usRoadMapType);
		map.setMapTypeId('usroadatlas');
	    
	    
	    infowindow = new google.maps.InfoWindow();
	    google.maps.event.addListener(infowindow, 'closeclick', function() {
			hideDetails();
		});
		
		google.maps.event.addListener(map, 'zoom_changed', function() {
    		currentZoom = map.getZoom();
  		});
		
    	doResize(); 
	}
	
	function isMobile(){
	    return (
	        (navigator.platform.indexOf("iPhone") != -1) ||
	        (navigator.platform.indexOf("Android") != -1)
	    );
	}
