var HOME_POINT = new Object;
var MARKER_LIMIT = 100;
var arrDataRows = new Array();
var gArrMarkers = new Array();
var milesInDegrees= 0.025;
var bounds = new GLatLngBounds();
var BASEURL="http://crimemap.scoopytube.com/crimemap/map.html";
var PRINTURL="http://crimemap.scoopytube.com/crimemap/print.html";

  var homeIcon = new GIcon();
      homeIcon.image = "home.png";
     homeIcon.shadow = "shadow.png";
	homeIcon.iconSize = new GSize(20, 34);
	homeIcon.shadowSize = new GSize(37, 34);
	homeIcon.iconAnchor = new GPoint(9, 34);
	homeIcon.infoWindowAnchor = new GPoint(9, 2);
	homeIcon.infoShadowAnchor = new GPoint(18, 25);


function geocodeAddy(obj){

	var point;

	if(obj.address ==null || obj.address==undefined)
		obj.address="";

	geocoder.getLatLng( (obj.address+" "+obj.city+", CA") , function(point){


		

		if(point){

			doFoo(obj.q, obj.st, point.lat(), point.lng(), obj.varStr, obj.city, obj.address, obj.radius, obj.radim, obj.fday, obj.lday);
			
		}else{
		
			alert("Your address could not be found. (Note: Do not include zip code or state in the address field) Try using Sacramento or the nearest incorporated area in the \"City\" field.");
			return(null);
		}
	});
		
	
}


function doFoo(q, st, lat, lng, varStr, zipcode, city, address, radius, radim, fday, lday){
//pre: form inputs or query variables have been validated. If geocodeAddy ran, then obj.point exists
//post: variables passed to php, then processXML is run

	resetState();

	var getVars= "?q="+q+"&st="+st;
	
//	showLoader(1);


	if(lat !=0 && lng != 0 && lat != undefined && lat != null){
		getVars +="&lng="+lng + "&lat="+lat;
		//lng = point.lng();
		//lat = point.lat();
		HOME_POINT.longitude = lng;
		HOME_POINT.latitude = lat;
		HOME_POINT.address = address;
		HOME_POINT.city = city;		
		loadHome();
	}
	

	
	getVars += "&pad=0"+ varStr;
	
	holdVars.lng = lng;
	holdVars.lat = lat;
	holdVars.st = st;
	holdVars.q = q;
	holdVars.varStr = varStr;
	
	

	var rs = document.getElementById("resultSearch");
	rs.innerHTML = "Loading...";
	rs.style.border = "1px solid #f77";

	trace("go.php"+getVars);
	  $.ajax({ type: "GET", url: "go.php"+getVars, dataType: "xml", success: function(xml){
	  
	 
	  	processXMLFoo(xml);
	  }
	  });
	  
	 
}	

 





function processXMLFoo(xmlroot){
//pre: xmlroot is xmlDoc.documentElement, php successfully returns xml file
//post: xml received, html is produced, map markers are marked


	var rs = document.getElementById("resultSearch");



	var alltotal = xmlroot.getElementsByTagName("metadata")[0].getAttribute("alltotal") ;	

	if(alltotal <= 0){
		rs.innerHTML = "No properties match your search criteria.";
		return;
	}

	var addrNodes = xmlroot.getElementsByTagName("address");
	
	
	
	
	var mlimit;
	if(addrNodes.length < MARKER_LIMIT){
		mlimit = addrNodes.length;
	}else{
		mlimit = MARKER_LIMIT;
	}
	


	var arrMarkers = new Array();
	arrMarkers.length=0;
	for(var i=0; i<mlimit; i++){ 		
	



		
	
	
		
		var mObj = new Object();
	
		
		
		mObj.longitude = 		addrNodes[i].getAttribute("longitude");
		mObj.latitude =			addrNodes[i].getAttribute("latitude");
		mObj.address = 			addrNodes[i].getAttribute("value");	
		mObj.city = 			addrNodes[i].getAttribute("city");
		mObj.dateclosed = 		addrNodes[i].getAttribute("dateclosed");
		mObj.repo_amt = 		addrNodes[i].getAttribute("repo_amt");
		mObj.dollarvalue = 		addrNodes[i].getAttribute("dollarvalue");
		mObj.sqft = 			addrNodes[i].getAttribute("sqft");
		mObj.odate = 			addrNodes[i].getAttribute("odate");
		mObj.type = 			addrNodes[i].getAttribute("type");
		mObj.zipcode = 			addrNodes[i].getAttribute("zipcode");

	
			var id = mObj.address+mObj.city;
			arrMarkers[i] = mObj;		
			arrMarkers.length++;
			
			

	
	trace(i+". "+mObj.address+ " " + mObj.dollarvalue);
	
				
			
				
	}
	trace("length: " + arrMarkers.length);
	loadMarks(arrMarkers);
	
	
//now add the results search tools


	
	var endval;
	var t1="";
	if( alltotal-holdVars.st < MARKER_LIMIT){
	
		endval=(alltotal);
	}	
	else{
	
		endval=MARKER_LIMIT+holdVars.st;
		
		if(alltotal - endval > MARKER_LIMIT){
			
			var addval = MARKER_LIMIT	;
		}
		else{
			var addval = alltotal - endval;
		}
		t1+='Skip forward to properties<a href="#mapanchor" onclick="doFoo('+holdVars.q+','+(endval)+','+holdVars.lat+','+holdVars.lng+',\''+holdVars.varStr+'\')"> '+(endval+1)+'-'+(endval+addval)+ '</a>';
		
	
	
		if(alltotal - holdVars.st - 1000 > 0){
			var taddval;
			if(alltotal- (holdVars.st+1000) > MARKER_LIMIT){
				taddval=holdVars.st + 1000+ MARKER_LIMIT;
			}
			else{
				taddval = alltotal;
			}
			//t1+='See properties<a href="#" onclick="doFoo('+holdVars.q+','+(holdVars.st+1000)+','+holdVars.lat+','+holdVars.lng+',\''+holdVars.varStr+'\')"> '+(holdVars.st+1000)+'-'+(taddval)+ '</a><br />';
			t1+=", " + '<a href="#mapanchor" onclick="doFoo('+holdVars.q+','+(holdVars.st+1000)+','+holdVars.lat+','+holdVars.lng+',\''+holdVars.varStr+'\')"> '+(holdVars.st+1000+1)+'-'+(taddval)+ '</a>';
		}
	
	}
	
	if(holdVars.st > 0){
	
		var bval;
		t1+="<br /><br />Skip back to properties";
		
		if(holdVars.st-1000 >= 0){
			
			//t1 +='See properties<a href="#" onclick="doFoo('+holdVars.q+','+(holdVars.st-1000)+','+holdVars.lat+','+holdVars.lng+',\''+holdVars.varStr+'\')"> '+(holdVars.st-1000+1)+'-'+(holdVars.st-1000+MARKER_LIMIT)+ '</a>';
			t1 += '<a href="#" onclick="doFoo('+holdVars.q+','+(holdVars.st-1000)+','+holdVars.lat+','+holdVars.lng+',\''+holdVars.varStr+'\')"> '+(holdVars.st-1000+1)+'-'+(holdVars.st-1000+MARKER_LIMIT)+ '</a>, ';

		}
		
		( holdVars.st-MARKER_LIMIT > 0) ? bval=holdVars.st-MARKER_LIMIT : bval=0;
		t1 +='<a href="#" onclick="doFoo('+holdVars.q+','+(bval)+','+holdVars.lat+','+holdVars.lng+',\''+holdVars.varStr+'\')"> '+(bval+1)+'-'+(holdVars.st)+ '</a>';
		
		
	
	}
	rs.innerHTML = "You are viewing properties <b>" + (holdVars.st+1) + "-" + endval + "</b> from a list of <b>" + alltotal + "</b> properties that fit your search criteria";
	rs.innerHTML += "<p>"+t1+"</p>";

	rs.style.border = "1px solid #f77";

//make the table
	
	var tablerows ='<table class="sortable" id="tableForeclosures" cellpadding="3" ><thead><tr><th>Address</th><th>City</th><th>Zip</th><th>Date</th><th>Value</th><th>Repo. value</th><th>Type</th><th>Sq. Ft.</th></tr></thead>';
	for (id in arrDataRows){
		tablerows+=arrDataRows[id];	
	}
	tablerows+="</table>";
	
	document.getElementById("resultsMenu").innerHTML = tablerows;



centerAndZoomOnBounds(bounds) ;

//showLoader(0);

//sorttable.makeSortable(document.getElementById("tableCrimes"));
	
	
	
}


function loadHome(){
//pre: HOME_POINT is defined
	
	var pt = new GPoint(HOME_POINT.longitude, HOME_POINT.latitude);
	
	bounds.extend(new GLatLng(HOME_POINT.latitude, HOME_POINT.longitude));
	var mk = new GMarker(pt, homeIcon);
	
	
	
	
		var clickHome = function(){
			mk.openInfoWindowHtml("This is the address you entered in the search box");
			map.panTo(mk.getPoint());

		}
		
		
		GEvent.addListener(mk, 'click', clickHome);
	
	map.addOverlay(mk);
	
	

}


var arrT = new Array();

function loadMarks(arr){

	var pt, mk;
	var addr, city, htext, mhtext, atext, etext, jtext, numtext, onetext, rectext, addrlink, extext;


	for(var id in arr){

		pt = new GPoint(arr[id].longitude, arr[id].latitude);
		bounds.extend(new GLatLng(arr[id].latitude, arr[id].longitude));	
		
		addr = arr[id].address;
		city = arr[id].city;
		var tid = addr+city;
		
		
		if(gArrMarkers[tid] == undefined || gArrMarkers[tid] == ""){
			mk = new GMarker(pt);
			gArrMarkers[tid] = mk;
			mk.htext = "<p style='font-size:0.8em'>"+arr[id].address + " in <b>" + arr[id].city+"</b></p>" ;

			mk.htext += "<div class='item'>";
			if(arr[id].sqft >= 0){
				mk.htext +=  arr[id].sqft+" sq. ft. ";
			}
			mk.htext += arr[id].type+" foreclosed on "+arr[id].dateclosed+" <br /> Valued at: "+formatMoney(arr[id].dollarvalue)+ " Repossessed for: "+formatMoney(arr[id].repo_amt)+"</div>";			
			map.addOverlay(mk);
			myAddListener(mk);
		}else{
			mk = gArrMarkers[tid];
			mk.htext += "<div class='item'>";
			if(arr[id].sqft >= 0){
				mk.htext +=  arr[id].sqft+" sq. ft. ";
			}
			mk.htext += arr[id].type+" foreclosed on "+arr[id].dateclosed+" <br /> Valued at: "+formatMoney(arr[id].dollarvalue)+ " Repossessed for: "+formatMoney(arr[id].repo_amt)+"</div>";			

		}
	
		
	
		
	
	
		arrDataRows.push('<tr><td><a href="#mapanchor" onclick="gotoMarker(gArrMarkers[\''+tid+'\'])">'+addr+"</a></td>"+"<td>"+city+"</td>"+"<td>"+arr[id].zipcode+"</td>"+"<td>"+arr[id].dateclosed+"</td>"+"<td style='text-align:right'>"+formatMoney(arr[id].dollarvalue)+"</td>"+"<td style='text-align:right'>"+formatMoney(arr[id].repo_amt)+"</td>"+"<td>"+arr[id].type+"</td>"+"<td style='text-align:center'>"+arr[id].sqft+"</td>"+"</tr>");
					
		
		
		
	
	
		
		

	}
}

function myAddListener(mk){

		var clickPoint = function(){
			mk.openInfoWindowHtml(mk.htext);
			map.panTo(mk.getPoint());

		}
		
		
		GEvent.addListener(mk, 'click', clickPoint);


}

function gotoMarker(mk){ //function for the table, to jump to marker on map
	map.panTo(mk.getPoint());
	mk.openInfoWindowHtml(mk.htext);
}


function centerAndZoomOnBounds(bounds) { //function for centering map around all markers
var center = bounds.getCenter();
var newZoom = map.getBoundsZoomLevel(bounds);
  if (map.getZoom() != newZoom) {

		map.setCenter(center, newZoom);
  } else {
		map.panTo(center);
  }
} 
