//var bounds = new GLatLngBounds();
var clusterManager;
var geocoder;
// === create a GDirections Object ===
var gdir;
var searchMarker = null;
var markerarray3;
function load() {
	if (GBrowserIsCompatible()) {
    	geocoder = new GClientGeocoder();
		var map = new GMap2(document.getElementById("map"));
		map.addControl(new GLargeMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(38.9625, -77.9799), 9);
		gdir = new GDirections(map, document.getElementById("directions"));
		clusterManager = new Clusterer(map);
		for(i=0; i<data.length; i++) {
			 clusterManager.AddMarker(createMarker(data[i], i), data[i]['name']);
			//map.addOverlay(createMarker(data[i]));
		}
		var col_left = "";
		var col_mid = "<div class='locationblock'><div class='locationblockcontent'>";
		var col_right = "<div class='locationblock'><div class='locationblockcontent'>";
		var col_head = "";
		var city_state="";
		var add_ress="";
		var zip="";
		var phone="";
		var fax="";
		var add_link="";
		var bot_tab1 = "<table width='750px'>";
		var bot_tab2 = "<table width='750px'>";
		var bot_tab3 = "<table width='750px'>";		
		max_entries = clusterManager.markers.length/3;
		//alert(clusterManager.markers.length);
		
		for ( i = 0; i < clusterManager.markers.length; ++i )
		{
			marker = clusterManager.markers[i];
			
			if(marker != null)
			{				
				//str_markers += '<a href="#" onclick="GEvent.trigger(clusterManager.markers[' + i + '], \'click\')">' + marker.title + '</a><br>';
				//alert(data[i]['Area']);
				//if(col_head != data[i]['Area']) {
				//	alert(data[i]['Area']);
				//	col_head = data[i]['Area'];
				//}
				if(i <= max_entries + 1) {
				//if((i+1) % 3 == 0) {
					//alert(col_head);
					if(col_head != data[i]['Area']) {
						col_head = data[i]['Area'];
						city_state=data[i]['CityState'];
						add_ress=data[i]['address'];
						zip=data[i]['Zip'];
						add_link=data[i]['link'];
						col_left += "<div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
						bot_tab1 += "<tr><td style='font-weight:bold' bgcolor='#FFFED7'>" + city_state + "</td><td><td><td bgcolor='#FFFED7' align='center'><a href='#'>" + 'info/map' + "</a></td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'order online' + "</a></td></tr>";
					}
					col_left += '<a href="#" onclick="showWin(clusterManager.markers[' + i + ']); return false;">' + marker.title + '</a><br>';
					bot_tab1 += '<tr><td bgcolor="#FFFFFF" width="500px">' + add_ress + ',' + zip + '</td></tr>';
					bot_tab1 += '<tr><td bgcolor="#FFFFFF">' + 'Phone: ' + 'NA' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fax:' +'</td></tr>';
				}
				else if(i < max_entries*2) {
				//else if((i+1) % 3 == 1) {
					if(col_mid.length == 61)
						if(data[i]['Area'] == data[i-1]['Area']) {
							col_mid = "<div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
							bot_tab2 += "<tr><td style='font-weight:bold' bgcolor='#FFFED7'>" + city_state + "</td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'info/map' + "</a></td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'order online' + "</a></td></tr>";
						}
						else {
							col_mid = "";
							//bot_tab2 = "";
						}
					if(col_head != data[i]['Area']) {
						col_head = data[i]['Area'];
						city_state=data[i]['CityState'];
						add_ress=data[i]['address'];
						zip=data[i]['Zip'];
						if(col_mid == "") {
							col_mid += "<div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
							bot_tab2 += "<tr><td style='font-weight:bold' bgcolor='#FFFED7'>" + city_state + "</td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'info/map' + "</a></td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'order online' + "</a></td></tr>";
						}
						else {							
							col_mid += "</div></div><div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
							bot_tab2 += "<tr><td style='font-weight:bold' bgcolor='#FFFED7'>" + city_state + "</td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'info/map' + "</a></td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'order online' + "</a></td></tr>";
						}
					}
					col_mid += '<a href="#" onclick="showWin(clusterManager.markers[' + i + ']); return false;">' + marker.title + '</a><br>';
					bot_tab2 += '<tr><td bgcolor="#FFFFFF" width="500px">' + add_ress + ',' + zip + '</td></tr>';
					bot_tab2 += '<tr><td bgcolor="#FFFFFF">' + 'Phone: ' + 'NA' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fax:' +'</td></tr>';
				}
				else {
				//else if((i+1) % 3 == 2) {
					if(col_right.length == 61)
						if(data[i]['Area'] == data[i-1]['Area'])
							col_right = "<div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
						else {
							col_right = "";
							//bot_tab3 = "";
						}
					if(col_head != data[i]['Area']) {
						col_head = data[i]['Area'];
						city_state=data[i]['CityState'];
						add_ress=data[i]['address'];
						zip=data[i]['Zip'];
						if(col_right == "") {
							col_right += "<div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
							bot_tab3 += "<tr><td style='font-weight:bold' bgcolor='#FFFED7'>" + city_state + "</td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'info/map' + "</a></td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'order online' + "</a></td></tr>";
						}
						else {
							col_right += "</div></div><div class='locationblock'><div class='locationblockhead'>" + col_head + "</div><div class='locationblockcontent'>";
							bot_tab3 += "<tr><td style='font-weight:bold' bgcolor='#FFFED7'>" + city_state + "</td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'info/map' + "</a></td><td><td><td align='center' bgcolor='#FFFED7'><a href='#'>" + 'order online' + "</a></td></tr>";
						}
					}
					col_right += '<a href="#" onclick="showWin(clusterManager.markers[' + i + ']); return false;">' + marker.title + '</a><br>';
					bot_tab3 += '<tr><td bgcolor="#FFFFFF" width="500px">' + add_ress + ',' + zip + '</td></tr>';
					bot_tab3 += '<tr><td bgcolor="#FFFFFF">' + 'Phone: ' + 'NA' + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fax:' +'</td></tr>';
				}
			}
		}
		bot_tab1 += "</table>"
		bot_tab2 += "</table>"
		bot_tab3 += "</table>"
		///////////////document.getElementById('col_left').innerHTML = col_left + '</div>';
		///////////////document.getElementById('col_mid').innerHTML = col_mid + '</div>';
		///////////////document.getElementById('col_right').innerHTML = col_right + '</div>';
		document.getElementById('bot_tab').innerHTML = bot_tab1 + bot_tab2 + bot_tab3;
	}

	

////////////	if(readCookie('map_zoom')) {

////////////		map_zoom = readCookie('map_zoom');

////////////		map_point = readCookie('map_center');

////////////

////////////		map_point = map_point.split(',');

////////////		

////////////		for(i=0; i<clusterManager.markers.length; i++)

////////////		{

////////////			marker_point = clusterManager.markers[i].getPoint();

////////////			if(marker_point.lat() == map_point[0] && marker_point.lng() == map_point[1])

////////////			{

////////////				showWin(clusterManager.markers[i]);

////////////				break;

////////////			}

////////////		}

////////////

////////////		//map.setCenter(new GLatLng(map_point[0], map_point[1]), map_zoom);

////////////	}

////////////	else {

////////////		map.setCenter(new GLatLng(38.9625, -77.9799), 9);

////////////	}

////////////	GEvent.addListener( map, 'dragend', function() { setCookie(); });

	////////////////////////SPECIAL

	/////////////////////////map.setCenter(clusterManager.map.getBounds().getCenter(),9);
		var bounds = new GLatLngBounds();
		for(i=0; i<clusterManager.markers.length; i++)
		{
			var marker_point = clusterManager.markers[i].getPoint();
			bounds.extend(marker_point);
		}
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));	 
}


function searchLocations() {

        var search = document.getElementById("addressInput").value;

		document.getElementById("nearbyrest").style.display = "none";

        document.getElementById("nearbyrest").innerHTML = "";

		

        // ====== Perform the Geocoding ======

        geocoder.getLocations(search, function (result)

          {

           // map.clearOverlays();

            if (result.Status.code == G_GEO_SUCCESS) {

              // ===== If there was more than one result, "ask did you mean" on them all =====

              if (result.Placemark.length > 1) {

            	document.getElementById("message").style.display = "block";

                document.getElementById("message").innerHTML = "Did you mean:";

                // Loop through the results

                for (var i=0; i<result.Placemark.length; i++) {

                  var p = result.Placemark[i].Point.coordinates;

				  document.getElementById("message").innerHTML += "<br>"+(i+1)+": <a href='javascript:place(" +p[1]+","+p[0]+")'>"+ result.Placemark[i].address+"</a>";



                }

              }

              // ===== If there was a single marker =====

              else {

            	document.getElementById("addressInput").value = result.Placemark[0].address;

            	//document.getElementById("message").style.display = "block";

                //document.getElementById("message").innerHTML = result.Placemark[0].address;

                var p = result.Placemark[0].Point.coordinates;

				//alert(p[1]+','+p[0]);

                place(p[1],p[0]);

              }

            }

            // ====== Decode the error status ======

            else {

              var reason="Code "+result.Status.code;

              if (reasons[result.Status.code]) {

                reason = reasons[result.Status.code]

              }

              alert('Could not find "'+search+ '" ' + reason);

            }

          }

        );

}





      // ====== Plot a marker after an addess is found ======

      function place(lat,lng) {

      	var direction = document.getElementById("addressInput").value;

        var point = new GLatLng(lat,lng);

		markerarray3 = new Array(null, null, null);

		var distarray3 = new Array(99999.00, 99999.00, 99999.00);

		var nodelmark = new Array(0,0,0);

		

		//Substitute your home address for the one below or uncomment the next line to use a LatLong

        //html = "";

			//'<br> <a href="http://maps.google.com/maps?saddr=' + direction + '&daddr=' + mlat + ',' + mlng + '" target ="_blank">Directions to Restaurant</a>';

              //html = '<br> <a href="http://maps.google.com/maps?saddr=38.2566,-85.7589&daddr=' + point.toUrlValue() + '" target ="_blank">Directions</a>';

		if (searchMarker != null)

			clusterManager.map.removeOverlay(searchMarker);

			  

        clusterManager.map.setCenter(point,12);

		searchMarker = new GMarker(point);

        clusterManager.map.addOverlay(searchMarker);

		

		//alert(clusterManager.markers.length);

		var distarray = new Array();

		for(i=0; i<clusterManager.markers.length; i++)

		{

			marker_point = clusterManager.markers[i].getPoint();

			var d=point.distanceFrom(marker_point)/1000;

			distarray[i] = d.toFixed(2);

		}



		for(i=0; i<distarray.length; i++)

		{

			if (parseFloat(distarray[i]) <= parseFloat(distarray3[0]))

			{

				distarray3[2] = distarray3[1];

				distarray3[1] = distarray3[0];

				distarray3[0] = distarray[i];

				markerarray3[2] = markerarray3[1];

				markerarray3[1] = markerarray3[0];

				markerarray3[0] = clusterManager.markers[i];

				nodelmark[0] = i;

			}

			else

			{

				if (parseFloat(distarray[i]) <= parseFloat(distarray3[1]))

				{

					distarray3[2] = distarray3[1];

					distarray3[1] = distarray[i];

					markerarray3[2] = markerarray3[1];

					markerarray3[1] = clusterManager.markers[i];

					nodelmark[1] = i;

				}

				else

				{

					if (parseFloat(distarray[i]) <= parseFloat(distarray3[2]))

					{

						distarray3[2] = distarray[i];

						markerarray3[2] = clusterManager.markers[i];

						nodelmark[2] = i;

					}

				}

			

			}

			//alert(distarray3[0] + ':' + distarray3[1] + ':' + distarray3[2]);

		}



		

		//////////////////////////////////////////////////////////////////////////////////clusterManager.RemoveMarkerList(markerarray3);

//		var mlen = clusterManager.markers.length;

//		//for(i=0; i<mlen; i++)

//		for(i=mlen-1; i>=0; i--)

//		{

//			if ((i != nodelmark[0]) && (i != nodelmark[1]) && (i != nodelmark[2]))

//			{

//				//clusterManager.map.removeOverlay(clusterManager.markers[i]);

//				clusterManager.RemoveMarker(clusterManager.markers[i]);

//			}

//		}



		var str = "<br>Nearby Restaurants: <br>";

		var bounds = new GLatLngBounds();

		bounds.extend(point);



		for(i=0; i<distarray3.length; i++)

		{

			if (markerarray3[i] != null) {

				var marker_point = markerarray3[i].getPoint();

				bounds.extend(marker_point);



//        		//Create a base icon for all of our markers that specifies the

//        		//shadow, icon dimensions, etc.

//				var baseIcon = new GIcon(G_DEFAULT_ICON);

//				baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";

//				baseIcon.iconSize = new GSize(20, 34);

//				baseIcon.shadowSize = new GSize(37, 34);

//				baseIcon.iconAnchor = new GPoint(9, 34);

//				baseIcon.infoWindowAnchor = new GPoint(9, 2);

//

//				// Create a lettered icon for this point using our icon class

//				var letter = String.fromCharCode("A".charCodeAt(0) + i);

//				var letteredIcon = new GIcon(baseIcon);

//				var iconstr = "http://www.google.com/mapfiles/marker" + letter + ".png";

//				letteredIcon.image = iconstr;

//

//				var mar = new GMarker(clusterManager.markers[nodelmark[i]].getPoint(), letteredIcon);

//				clusterManager.map.addOverlay(mar);



				str += '<b><a href="javascript:myclick(' + String(i) + ')">' + String.fromCharCode("A".charCodeAt(0) + i) + '. ' + markerarray3[i].title + '</b> : ' + distarray3[i] + ' km </a><br>';

			}

			//alert(str);

		}

		clusterManager.map.setCenter(bounds.getCenter(), clusterManager.map.getBoundsZoomLevel(bounds));	 



		//You can customize the info balloon text here.

        //if (polygon.Contains(point)) { var side = "inside" }

        //else {var side = "outside" }

        //map.openInfoWindowHtml(point, "<b>You are "+side+" of the delivery area.</b>" + html);



      	document.getElementById("nearbyrest").style.display = "block";

        document.getElementById("nearbyrest").innerHTML = str;

       	document.getElementById("message").style.display = "none";

        document.getElementById("message").innerHTML = "";



}



	// This function picks up the click and opens the corresponding info window

      function myclick(i) {

        GEvent.trigger(markerarray3[i], "click");

      }



      // ===== request the directions =====

      function getDirections() {

        // ==== Set up the walk and avoid highways options ====

        var opts = {};

        if (document.getElementById("walk").checked) {

           opts.travelMode = G_TRAVEL_MODE_WALKING;

        }

        if (document.getElementById("highways").checked) {

           opts.avoidHighways = true;

        }

        // ==== set the start and end locations ====

		var faddr = document.getElementById("saddr").value;

	    geocoder.getLatLng(faddr, function(latlng) {

    	   if (!latlng) {

		 		alert('Problem geocoding');

       		} else {

				var saddr = faddr + "@"+ latlng.lat() + "," + latlng.lng();

        		var daddr = document.getElementById("daddr").value;

				//alert(saddr + '-' + daddr);

        		gdir.load("from: "+saddr+" to: "+daddr, opts);

		 		

       		}

     	});

		

      }



function showWin(marker) {

	

	if(marker.inCluster) {

		clusterManager.map.setCenter(marker.getPoint());

		clusterManager.map.setZoom(clusterManager.map.getZoom()+3);

	}

	

	GEvent.trigger(marker, "click");

}



function createMarker(data, index) {

	

	var jimage = new Image();

	jimage.src = "../working2/icon/" + data['addr_handle'] + ".png";

	

	var icon = new GIcon();

	/////////////////////////////////////////////////////////////////icon.image = "images/pocketsmapicon2.gif";

	icon.image = "../working2/icon/" + data['addr_handle'] + ".png"; 

	//icon.image = "images/travelodge.png";

	//icon.shadow = "images/travelodge_shadow.png";

	//icon.iconSize = new GSize(33, 33);

	//icon.shadowSize = new GSize(24, 20);

	icon.iconSize = new GSize(jimage.width, jimage.height);

	icon.iconAnchor = new GPoint(10, 8);

	icon.infoWindowAnchor = new GPoint(10, 8);

		

	var marker = new GMarker(new GLatLng(data['lat'],data['lng']), icon);

	//bounds.extend(marker.getPoint());

	GEvent.addListener(marker, "click",

		function() {

						

			var html = '<table width="200" border="0" cellpadding="0" cellspacing="0" id="mapwindow"><tr><td align="left" valign="top"><strong>' + data['name'] + '</strong><br>' + data['description'] + '<br>' + data['schedule'] + '<br>Directions: <a href="#" onClick="setTO(clusterManager.markers[' + index + ']); return false;" class="brown">To here</a> - <a class="brown" href="#" onClick="setFROM(clusterManager.markers[' + index + ']); return false;">From here</a></td></tr><tr><td align="center"><br><a href="' + data['link'] + '"><img src="images/orderonline.jpg" border="0" /></a>    </td></tr></table>';



		marker.openInfoWindowHtml(html);

		setCookie(marker);

		}

	);



	GEvent.addListener(marker, "click_tohere",

		function() {

			var html = '<table width="200" border="0" cellpadding="0" cellspacing="0" id="mapwindow"><tr><td align="left" valign="top"><strong>' + data['name'] + '</strong><br>' + data['description'] + '<br>' + data['schedule'] + '<br><br>Directions: To here - <a class="brown" href="#" onClick="setFROM(clusterManager.markers[' + index + ']); return false;">From here</a><form id="frmTO" name="frmTO" method="get" action="http://maps.google.com/" target="_blank"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td align="left">Start Address</td></tr><tr><td><input type="text" name="saddr" id="saddr" /><input name="daddr" type="hidden" id="daddr" value="' + data['address'] + ',' + data['CityState'] + '@' + data['lat'] + ',' + data['lng'] + '" /><input type="button" name="button" id="button" value="GoX" onclick="javascript:getDirections()" /></td></tr><tr><td><a href="#" class="brown" onClick="goback(clusterManager.markers[' + index + ']);return false;">&laquo;Back</a></td></tr></table></form></td></tr><tr><td align="center">      <a href="' + data['link'] + '"><img src="images/orderonline.jpg" border="0" /></a>    </td></tr></table>';



		marker.openInfoWindowHtml(html);

		//marker.closeInfoWindow();

		}

	);



	GEvent.addListener(marker, "click_fromhere",

		function() {

			var html = '<table width="200" border="0" cellpadding="0" cellspacing="0" id="mapwindow"><tr><td align="left" valign="top"><strong>' + data['name'] + '</strong><br>' + data['description'] + '<br>' + data['schedule'] + '<br><br>Directions: <a href="#" onClick="setTO(clusterManager.markers[' + index + ']); return false;" class="brown">To here</a> - From here<form id="frmFROM" name="frmFROM" method="get" action="http://maps.google.com/" target="_blank"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td align="left">End Address</td></tr><tr><td><input type="text" name="daddr" id="daddr" /><input name="saddr" type="hidden" id="saddr" value="' + data['address'] + ',' + data['CityState'] + '" /><input type="submit" name="button2" id="button2" value="Go" /></td></tr><tr><td><a href="#" class="brown" onClick="goback(clusterManager.markers[' + index + ']);return false;">&laquo;Back</a></td></tr></table></form></td></tr><tr><td align="center">      <a href="' + data['link'] + '"><img src="images/orderonline.jpg" border="0" /></a>    </td></tr></table>';



		marker.openInfoWindowHtml(html);

		//marker.closeInfoWindow();

		}

	);



	return marker;

}



// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //



function setCookie(marker) {



	if(readCookie('map_zoom')) {

		eraseCookie('map_zoom');

		eraseCookie('map_center');

	}

	

	createCookie('map_zoom',clusterManager.map.getZoom());

	//center = clusterManager.map.getCenter();

	center = marker.getPoint();

	createCookie('map_center',center.lat() + ',' + center.lng());

}



function createCookie(name,value,days) {



	if (days) {

		var date = new Date();

		date.setTime(date.getTime()+(days*24*60*60*1000));

		var expires = "; expires="+date.toGMTString();

	}

	else var expires = "";

		

	document.cookie = name+"="+value+expires+"; path=/";

}



function readCookie(name) {

	var nameEQ = name + "=";

	var ca = document.cookie.split(';');

	for(var i=0;i < ca.length;i++) {

		var c = ca[i];

		while (c.charAt(0)==' ') c = c.substring(1,c.length);

		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);

	}

	return null;

}



function eraseCookie(name) {

	createCookie(name,"",-1);

}



function setFROM(marker) {

	GEvent.trigger(marker, 'click_fromhere');

	//document.frmTO.style.display='none';

	//document.frmFROM.style.display='block';

}



function setTO(marker) {

	GEvent.trigger(marker, 'click_tohere');

	//document.frmFROM.style.display='none';

	//document.frmTO.style.display='block';

}



function goback(marker) {

	GEvent.trigger(marker, 'click');

	//document.frmFROM.style.display='none';

	//document.frmTO.style.display='none';

}



function restore_map() {



	document.getElementById("message").style.display = "none";

    document.getElementById("message").innerHTML = "";

	document.getElementById("nearbyrest").style.display = "none";

    document.getElementById("nearbyrest").innerHTML = "";



	if (searchMarker != null)

		clusterManager.map.removeOverlay(searchMarker);

		

	for(i=0; i<clusterManager.markers.length; i++)

		clusterManager.markers[i].closeInfoWindow();

/////////////////////////	clusterManager.map.setCenter(new GLatLng(38.9625, -77.9799), 9);

		var bounds = new GLatLngBounds();

		for(i=0; i<clusterManager.markers.length; i++)

		{

			var marker_point = clusterManager.markers[i].getPoint();

			bounds.extend(marker_point);

		}

		clusterManager.map.setCenter(bounds.getCenter(), clusterManager.map.getBoundsZoomLevel(bounds));	 



}