var map;
var geocoder;
var directionsPanel;
var directions;
var b=1;

function initialize(address) {
  searchLocations();
  directionsPanel = document.getElementById("my_textual_div");
  directionsPanel.innerHTML='';
  directions = new GDirections(map, directionsPanel);
  var ad=document.getElementById('addressInput');
  var add=ad.value;
  if(add=='' || add=='Rochester, NY'){
	  add=prompt('Please enter your address','Rochester,NY');ad.value=add;
  }
  directions.load(add+" to: "+address);
};

function load() {
  if (GBrowserIsCompatible()) {
	geocoder = new GClientGeocoder();
	map = new GMap2(document.getElementById('map'));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(40, -100), 4);
	map.enableScrollWheelZoom();
	searchLocations();
	setTimeout("document.getElementById('load').className='hide'",5000);
	setTimeout("document.loca.radiusSelect.selectedIndex=1",5500);
  }
};

function searchLocations() {
 var address = document.getElementById('addressInput').value;
 if (b===1){address='Rochester,NY';b=2;document.getElementById('addressInput').value='Rochester,NY';}
 geocoder.getLatLng(address, function(latlng) {
   if (!latlng) {
	 alert(address + ' not found');
   } else {
	 var holder = document.getElementById('side');
     while(holder.hasChildNodes()){
     	holder.removeChild(holder.lastChild);
     }	   
	 searchLocationsNear(latlng);
   }
 });
};

function searchLocationsNear(center) {
 document.getElementById('side').innerHTML='';
 createSidediv(1);
 var radius = document.getElementById('radiusSelect').value;
 var searchUrl = 'phpsqlsearch_genxml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
 GDownloadUrl(searchUrl, function(data) {
	   var xml = GXml.parse(data);
	   var markers = xml.documentElement.getElementsByTagName('marker');
	   map.clearOverlays();	
	   var sidebar = document.getElementById('sidebar1');
	   if (markers.length == 0) {
		 sidebar.innerHTML = 'No results found.';
		 map.setCenter(new GLatLng(40, -100), 4);
		 return;
	   }
	   var lat;
	   var lng;
	   var bounds = new GLatLngBounds();
	   for (var i = 0; i < markers.length; i++) {
		 if(i%10==0 && i!=0){
		   var sideb = createPageseek(Math.ceil(markers.length/10));
		   sidebar.appendChild(sideb);
		   var q=((i/10)+1);
		   var y='sidebar'+q
		   createSidediv(q);
		   sidebar=document.getElementById(y);
		 }
		 var name = markers[i].getAttribute('name');
		 var address = markers[i].getAttribute('address');
		 var distance = parseFloat(markers[i].getAttribute('distance'));
		 lat=markers[i].getAttribute('lat');
		 lng=markers[i].getAttribute('lng');
		 var point = new GLatLng(parseFloat(lat),parseFloat(lng));         
		 var marker = createMarker(point, name, address,lat,lng);
		 map.addOverlay(marker);
		 var sidebarEntry = createSidebarEntry(marker, name, address, distance,lat,lng);
		 sidebar.appendChild(sidebarEntry);
		 bounds.extend(point);
	   }
	   var sidebarEntry = createPageseek(Math.ceil(markers.length/10));
	   sidebar.appendChild(sidebarEntry);
	   street(markers[0].getAttribute('lat'),markers[0].getAttribute('lng'));
	   map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
	 });
};


function createMarker(point, name, address, lat, lng) {
	var marker = new GMarker(point);
	var html = "<span style='color:#000000'><b>" + name + "</b> <br/>" + address + "<br/> </span><a style=\"cursor:pointer;color:blue\" onclick=\"initialize('" + address + "')\">Get Directions</a>";
	GEvent.addListener(marker, "click", function () {marker.openInfoWindowHtml(html);street(lat, lng);});
	return marker;
};


function createSidebarEntry(marker, name, address, distance, lat, lng) {
	var div = document.createElement("div");
	var html = "<b>" + name + "</b> (" + distance.toFixed(1) + ")<br/>" + address;
	div.innerHTML = html;
	div.style.cursor = "pointer";
	div.style.marginBottom = "5px";
	GEvent.addDomListener(div, "click", function () {GEvent.trigger(marker, "click");});
	GEvent.addDomListener(div, "mouseover", function () {div.style.backgroundColor = "#696969";div.style.color='#ffffff';});
	GEvent.addDomListener(div, "mouseout", function () {div.style.backgroundColor = "transparent";div.style.color='#ffffff';});
	return div;
};


function createPageseek(num) {
	var html = "<b>Page </b>";
	for (i = 1; i <= num; i++) {
		var div = document.createElement("div");
		html = html + "<a style=\"color:blue;\" href=\"javascript:page(" + i + ","+num+")\">" + i + "</a> &nbsp;";
	}
	div.innerHTML = html;
	div.style.cursor = "pointer";
	div.style.marginBottom = "5px";
	div.style.textAlign = "center";
	return div;
};

function street(lat, lng) {
	var place = new GLatLng(lat, lng);
	panoramaOptions = {latlng: place};
	var myPano = new GStreetviewPanorama(document.getElementById("pano"), panoramaOptions);
};

function createSidediv(num){
	var div = document.createElement('div');
	div.id='sidebar'+num;
	if(num==1){div.className='show side';}
	else{div.className='hide side';}
	document.getElementById('side').appendChild(div);
};


function page(tdiv,totalmarkers) {
	for (i = 1; i <= totalmarkers; i++) {
		var obj = document.getElementById("sidebar" + i);
		var arr = obj.className.split(" ");
		arr.splice(0, 1);
		arr.splice(0, 0, "hide");
		obj.className = arr.join(" ");
	}
	obj = document.getElementById("sidebar" + tdiv);
	arr = obj.className.split(" ");
	arr.splice(0, 1);
	arr.splice(0, 0, "show");
	obj.className = arr.join(" ");
};