var centerLatitude = 44.68;
var centerLongitude = -93.594;
var startZoom = 10;
var wsdresult = "";
var lngtxt;
var lattxt;
var radiustxt;
var wsdboundary;
var map;
var townships;

var fromdate;
var todate;
var markernamearray = [];
var placemarker =[];
var togglestate9400 = 0;
var incidentarray = [];
var useaddress = false;
var toggleStateMCDs = 0;


function windowHeight() {
   // Standard browsers (Mozilla, Safari, etc.)
   if (self.innerHeight)
     return self.innerHeight;
   // IE 6
   if (document.documentElement && document.documentElement.clientHeight)
     return document.documentElement.clientHeight;
   // IE 5
   if (document.body)
     return document.body.clientHeight;
   // Just in case.
   return 0;
}

function handleResize() {
   var height = windowHeight() - document.getElementById('toolbar').offsetHeight - 30;
   document.getElementById('map').style.height = height + 'px';
   document.getElementById('sidebar').style.height = height + 'px';
     
}

function toggleMCDs() {
  if (toggleStateMCDs == 1) {
    map.removeOverlay(townships);
    toggleStateMCDs = 0;
  } else {
    map.addOverlay(townships);
    toggleStateMCDs = 1;
  }
}

function requeryaddress(){   

   showLoadingDialog();
   fromdate = document.getElementById('fromdate').value;
   todate = document.getElementById('todate').value;
   
   if((fromdate != "") && (todate != ""))
   {
        var one_day=1000*60*60*24;
   	    var myFromDate = new Date(fromdate);
  	    var myToDate = new Date(todate);

  	    var datediff = (myToDate - myFromDate) / one_day;  	    
   }
   
   var requeryaddress = "";
   geocoder = new GClientGeocoder(); 

   if(datediff <= 180)
   {
       if(requeryaddress == ",, MN")
       {
	    requeryaddress = "";
       }   

       if(requeryaddress == "")
       { 
         useaddress = false;    
         requeryaddress = "600 Country Trail East, Jordan";
       }
       else
       {
	    useaddress = true;
       }
       
       if(radiustxt == "")
       {
	    radiustxt = "250000";
       }
       
       clearList();
       if(useaddress)
       {
	    geocoder.getLocations(requeryaddress, addAddressToMap);
       }
       else
       {
	    geocoder.getLocations(requeryaddress, addAddressNoMap);
       }    
    } 
    else
    {   
        showMaxDateDialog();
        hideLoadingDialog();        
    }
}

function init() {
  if (GBrowserIsCompatible()) {

   handleResize();

   

   var homeaddress = gup('address');
   homeaddress = homeaddress.replace(/%20/g, " ");
   
   var address = homeaddress;   
 
   radiustxt = gup('radius');
	
   
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());   
    map.setCenter(new GLatLng(centerLatitude, centerLongitude), startZoom);    
    map.enableScrollWheelZoom(); 
    geocoder = new GClientGeocoder();

    townships = new GGeoXml("http://gis.co.scott.mn.us/kml/MCDsNoLbls.xml");
    
    
    if(address == "")
   {
     
   }
   else
   {	    
   
    geocoder.getLocations(address, addAddressToMap);
        
   }
    
  }



}

var deselectCurrent = function() {};

function addPlacemarkToMap(lat,lng,info,pid,date,id,price){
      
	var point = new GLatLng(lat,lng);
	placemarker[id] = new GMarker(point);	
	//placemarker.id = id
	var listItem = document.createElement('li');
	var listItemLink = listItem.appendChild(document.createElement('a'));
	listItemLink.href = "#";
	listItemLink.innerHTML = '<strong>PID: ' + pid + '</strong><br />' + 
	    '<span>Recorded Date: '+ date + '</span><br />' +
	    '<span>Est. Value (2008): '+ price + '</span>';
	
	var focusPoint = function() {
	    deselectCurrent();
	    listItem.className = 'current';
          deselectCurrent = function() { listItem.className = ''; }
	    placemarker[id].openInfoWindowHtml(info);
	    map.panTo(point);
	    return false;
	}
	
	GEvent.addListener(placemarker[id],"click",focusPoint);
	
	listItemLink.onclick = focusPoint;
	
	document.getElementById('sidebar-list').appendChild(listItem);
        
    map.addOverlay(placemarker[id]);	
	
}

function clearList(){
	
	for(i=0; i < markernamearray.length;i++)
	{	  
	  map.removeOverlay(placemarker[i]);
	}
	
      try
	{
	  var listdiv = document.getElementById('servicediv');
	  var oldlist = document.getElementById('sidebar-list');
	  listdiv.removeChild(oldlist);
	}
	catch(e)
	{
	 
	}

	var newlistdiv = document.getElementById('servicediv'); 	
 	var newlist = document.createElement('ul');
 	var newlistid = 'sidebar-list';
 	newlist.setAttribute('id',newlistid); 	
 	newlistdiv.appendChild(newlist);

}

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]);
        
	var baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(32,32);
	baseIcon.shadowSize=new GSize(56,32);
	baseIcon.iconAnchor=new GPoint(16,32);
	baseIcon.infoWindowAnchor=new GPoint(16,0);
	var house = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon10.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon10s.png");

	marker[1] = new GMarker(point,{icon: house, draggable: true});	
	
	
      map.setCenter(point, 13); 
      map.addOverlay(marker[1]);
	

	//retrieve the longitude and lattitude of the click point
        var lng = marker[1].getPoint().lng().toFixed(6);
        var lat = marker[1].getPoint().lat().toFixed(6);
	lngtxt = marker[1].getPoint().lng().toFixed(6);
        lattxt = marker[1].getPoint().lat().toFixed(6);	
	
	getXML();                                                       
    	

	//create an HTML DOM form element
        var inputForm = document.createElement("form");
        inputForm.setAttribute("action","");
        inputForm.id='geocache-input'
        inputForm.onsubmit = function() {storeMarker(); return false;};
                  
        inputForm.innerHTML = '<fieldset style="width:200px;">'
            + '<b>' + '</b><br />'
	    + '<b>' + "Please verify that the address was located correctly." + '</b>'
            + '<input type="hidden" id="longitude" name="lng" value="' + lng + '"/>'
            + '<input type="hidden" id="latitude" name="lat" value="' + lat + '"/>'
	    + '</fieldset>';	
	


        marker[1].openInfoWindowHtml(inputForm);

	GEvent.addListener(marker[1], "dragstart", function() {
  		map.closeInfoWindow();
  	});

	GEvent.addListener(marker[1], "dragend", function() {
  		lngtxt = marker[1].getPoint().lng().toFixed(6);
        	lattxt = marker[1].getPoint().lat().toFixed(6);
		
		clearList();
		getXML(); 
		
		inputForm.innerHTML = '<fieldset style="width:200px;">'
            	+ '<b>' + '</b><br />'
	    	+ '<b>' + "Please verify that the address was located correctly." + '</b>'
            	+ '<input type="hidden" id="longitude" name="lng" value="' + lng + '"/>'
            	+ '<input type="hidden" id="latitude" name="lat" value="' + lat + '"/>'
	    	+ '</fieldset>';			

		marker[1].openInfoWindowHtml(inputForm);

		//reverse geocode address on marker move
		reverse();
				
	        
  	});

	GEvent.addListener(marker[1], 'click',function() {
                marker[1].openInfoWindowHtml(inputForm);
        });
	

	//reverse geocode address on innitial geocode
	reverse();
	
	
      }
    }

function addAddressNoMap(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]);
        
	var baseIcon = new GIcon();
	baseIcon.iconSize=new GSize(32,32);
	baseIcon.shadowSize=new GSize(56,32);
	baseIcon.iconAnchor=new GPoint(16,32);
	baseIcon.infoWindowAnchor=new GPoint(16,0);
	var house = new GIcon(baseIcon, "http://maps.google.com/mapfiles/kml/pal2/icon10.png", null, "http://maps.google.com/mapfiles/kml/pal2/icon10s.png");

	marker = new GMarker(point);	

	//retrieve the longitude and lattitude of the click point
        var lng = marker.getPoint().lng().toFixed(6);
        var lat = marker.getPoint().lat().toFixed(6);
	lngtxt = marker.getPoint().lng().toFixed(6);
        lattxt = marker.getPoint().lat().toFixed(6);	
	
	getXML();  
	
	

      }
    }



function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


function getXML(){

var useM$;

try //Internet Explorer
  {
   xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
   xmlDoc.async=true;
   xmlDoc.onreadystatechange = ReadyStateChange;
   useM$ = 1;
  }
catch(e)
  {
  try //Firefox, Mozilla, Opera, etc.
    {
    xmlDoc=document.implementation.createDocument("","",null);
    xmlDoc.async=false;
    useM$ = 0;
    }
  catch(e)
    {
    alert(e.message);
    return;
    }
  }
 
  markernamearray = [];
	
 
  //alert("http://gis.co.scott.mn.us/CrimeWebService/XYQuery.asmx/FindXYData?lat=" + lattxt + "&lng=" + lngtxt + "&radius=" + radiustxt + "&startdate=" + fromdate + "&enddate=" + todate + "&inctype=" + PD + PI + FA );

  xmlDoc.async=false;
  xmlDoc.load("http://gis.co.scott.mn.us/ForeclosureWebService/XYQuery.asmx/FindXYData?lat=" + lattxt + "&lng=" + lngtxt + "&radius=" + radiustxt + "&startdate=" + fromdate + "&enddate=" + todate);
    
  if(useM$ == 0)
  {
    readXMLResults();  
  }  
  
  townships = new GGeoXml("http://gis.co.scott.mn.us/kml/MCDsNoLbls.xml");
  if(toggleStateMCDs == 1)
  {
     map.addOverlay(townships);
  }
 
}

function ReadyStateChange()
{
    resetLoaderGif();
    if(xmlDoc.readyState == 4)
    {
        readXMLResults();
    }
    else
    {
        return null;
    }
}

function readXMLResults(){

  var placemarks = xmlDoc.getElementsByTagName('XYData');

  
  addRecordCount(placemarks.length);

  try
  {
  for(var i = 0; i < placemarks.length ;i++)
  {		
	
	
	var Yearrc;
      if(xmlDoc.getElementsByTagName("Yearrc")[i].hasChildNodes)
 	{
		Yearrc = xmlDoc.getElementsByTagName("Yearrc")[i].childNodes[0].nodeValue;
			      
	}
	else
	{
		Yearrc = "";
	}
	
	var Daterc;
      if(xmlDoc.getElementsByTagName("Daterc")[i].hasChildNodes)
 	{
		Daterc = xmlDoc.getElementsByTagName("Daterc")[i].childNodes[0].nodeValue;
		markernamearray[i] = Daterc;

	}
	else
	{
		Daterc = "";
	}
	
      var Prparc;
      if(xmlDoc.getElementsByTagName("Prparc")[i].hasChildNodes)
 	{
		Prparc = xmlDoc.getElementsByTagName("Prparc")[i].childNodes[0].nodeValue;

	}
	else
	{
		Prparc = "";
	}
	
	var Propa1;
      if(xmlDoc.getElementsByTagName("Propa1")[i].hasChildNodes)
 	{
		Propa1 = xmlDoc.getElementsByTagName("Propa1")[i].childNodes[0].nodeValue;

	}
	else
	{
		Propa1 = "";
	}
	
	var Propa2;
      if(xmlDoc.getElementsByTagName("Propa2")[i].hasChildNodes)
 	{
		Propa2 = xmlDoc.getElementsByTagName("Propa2")[i].childNodes[0].nodeValue;

	}
	else
	{
		Propa2 = "";
	}
	var Cyemvt;
      if(xmlDoc.getElementsByTagName("Cyemvt")[i].hasChildNodes)
 	{
		Cyemvt = xmlDoc.getElementsByTagName("Cyemvt")[i].childNodes[0].nodeValue;

	}
	else
	{
		Cyemvt = "";
	}
	
	
	var distance;
      if(xmlDoc.getElementsByTagName("Distance")[i].hasChildNodes)
 	{
		distance = xmlDoc.getElementsByTagName("Distance")[i].childNodes[0].nodeValue;

	}
	else
	{
		distance = "";
	}
	
    if(useaddress)
    {
        var info = "<table height='160' cellspacing='0' cellpadding='4' border='0' style='border: 1px solid SteelBlue; color: rgb(51, 51, 51); border-collapse: collapse;'>" + 
                      
                      "<tr style='color: White; background-color: rgb(93, 123, 157); font-weight: bold;'>" +
                            "<th scope='col'>Property ID: " + Prparc + "</th>" +
                      "</tr>" +
                      
                      "<tr><td style='color: rgb(51, 51, 51); background-color: rgb(247, 246, 243);'>" +
                            "<b>Address: </b><br/>" + Propa1 + "<br/>" + Propa2 + "</td>" +
                      "</tr>" +
                      
                      "<tr><td>" +
                            "<b>Est. Value (2008): </b>" + Cyemvt + "</td>" +
                      "</tr>" +
                      
                      "<tr><td style='color: rgb(51, 51, 51); background-color: rgb(247, 246, 243);'>" +
                            "<b>Recorded Date: </b>" + Daterc + "</td>" +
                      "</tr>" +
                      
                       "<tr><td>" +
                            "<b>Distance (ft): </b>" + distance + "</td>" +
                      "</tr>" +
                      
                      "<tr><td style='color: rgb(51, 51, 51); background-color: rgb(247, 246, 243);'>" + 
                            "<a target='_blank' href='http://www2.co.scott.mn.us/stellent/idcplg/records/pxs?RowCount=20&currPage=1&ContinueSearch=false&IdcService=SC_PROPERTYTAX_INFO&SearchValue=PropertyInfoRecords&ResultSet=PROPERTY_TAX_INFO&Year=2009&SelectYear=2009&PropertyID=" + Prparc + "'>View Details</a></td>" + 
                      "</tr>" +      
                      
			       "</table>";
    }
    else
    {
        var info = "<table height='160' cellspacing='0' cellpadding='4' border='0' style='border: 1px solid SteelBlue; color: rgb(51, 51, 51); border-collapse: collapse;'>" + 
                      
                      "<tr style='color: White; background-color: rgb(93, 123, 157); font-weight: bold;'>" +
                            "<th scope='col'>Property ID: " + Prparc + "</th>" +
                      "</tr>" +
                      
                      "<tr><td style='color: rgb(51, 51, 51); background-color: rgb(247, 246, 243);'>" +
                            "<b>Address: </b><br/>" + Propa1 + "<br/>" + Propa2 + "</td>" +
                      "</tr>" +
                      
                      "<tr><td>" +
                            "<b>Est. Value (2008): </b>" + Cyemvt + "</td>" +
                      "</tr>" +
                      
                      "<tr><td style='color: rgb(51, 51, 51); background-color: rgb(247, 246, 243);'>" +
                            "<b>Recorded Date: </b>" + Daterc + "</td>" +
                      "</tr>" +                      
                       
                      "<tr><td>" + 
                            "<a target='_blank' href='http://www2.co.scott.mn.us/stellent/idcplg/records/pxs?RowCount=20&currPage=1&ContinueSearch=false&IdcService=SC_PROPERTYTAX_INFO&SearchValue=PropertyInfoRecords&ResultSet=PROPERTY_TAX_INFO&Year=2009&SelectYear=2009&PropertyID=" + Prparc + "'>View Details</a></td>" + 
                      "</tr>" +      
                      
			       "</table>";
    }
	
    addPlacemarkToMap(xmlDoc.getElementsByTagName("Y_WGS84")[i].childNodes[0].nodeValue,xmlDoc.getElementsByTagName("X_WGS84")[i].childNodes[0].nodeValue, info, Prparc, Daterc, i, Cyemvt);
  
  }
  hideLoadingDialog();
  }
  catch(e)
  {
    hideLoadingDialog();
    alert("Error " + e.message);
  }

}
function resetLoaderGif()
{
    var img = document.getElementById("loadingGIF");
    img.src = img.src;
}
function addRecordCount(recordcount) {
 var listItem = document.createElement('li');
 var listItemLink = listItem.appendChild(document.createElement('a'));
 listItemLink.href = "#";
 listItemLink.innerHTML = "<span style='font-size: 12pt'><strong>Number of Foreclosures: " + recordcount + '</strong></span>';
 document.getElementById('sidebar-list').appendChild(listItem);
}

function changeBodyClass(from, to) {
 document.body.className = document.body.className.replace(from, to);
 return false;
}

function hideSidebar(){
 changeBodyClass('sidebar-left', 'nosidebar');
 return
}

function showSidebar(){
 changeBodyClass('nosidebar', 'sidebar-left');
 return
}

function goodresult(placemark) {
 try{
	var drevgeo = document.getElementById('reversegeocode');
	var olddivrevgeo = document.getElementById('revgeoinfodiv');
	drevgeo.removeChild(olddivrevgeo);
 }
 catch(err)
 {
	;
 }
 var nirevgeo = document.getElementById('reversegeocode'); 	
 var newdivrevgeo = document.createElement('revgeoinfo');
 var divIdNamerevgeo = 'revgeoinfodiv';
 newdivrevgeo.setAttribute('id',divIdNamerevgeo);
 newdivrevgeo.innerHTML = placemark.address;
 nirevgeo.appendChild(newdivrevgeo);
}

function badresult() {
 try{
	var drevgeo = document.getElementById('reversegeocode');
	var olddivrevgeo = document.getElementById('revgeoinfodiv');
	drevgeo.removeChild(olddivrevgeo);
 }
 catch(err)
 {
	;
 }
 var nirevgeo = document.getElementById('reversegeocode'); 	
 var newdivrevgeo = document.createElement('revgeoinfo');
 var divIdNamerevgeo = 'revgeoinfodiv';
 newdivrevgeo.setAttribute('id',divIdNamerevgeo);
 newdivrevgeo.innerHTML = "Unable to reverse geocode";
 nirevgeo.appendChild(newdivrevgeo);

}


function alerter(){
	alert("PD :" + PDArray + "\nPI :" + PIArray + "\nFA :" + FAArray);
}

function clearform() {

    map.removeOverlay(marker[1]);
   
    txtStreet = document.getElementById('txtStreetAddressBox');
    txtStreet.value = "";
    
    txtCity = document.getElementById('txtCityAddressBox');
    txtCity.value = "";
    
    txtRadius = document.getElementById('txtRadiusBox');
    txtRadius.value = "";
}


window.onresize = handleResize; 
window.onload = init;
window.onunload = GUnload;