var geocoder;
var previousAddress = "";
var myLatitude;
var myLongitude;
var destLatitude;
var destLongitude;
var distanceBetween;
var sectionReq = "";
var section = ""; // references entire array
var row = 0;
var currRow = section[row];  // references row being accessed in the array defined by section variable
var requestedRecords;	
var prevNumRecs;
var replaceMessage = "";
var responseText = "";
var title = "";

function loadLocationInfo() {  //parses the address string to pass to the getFile2 function

	urlStr = location.search.substr(1);
	pos1 = urlStr.indexOf("&dir=") + 5;
	pos2 = urlStr.indexOf("&title=");
	origDir = urlStr.slice(pos1, pos2); // directory requesting items in it near other items
		//alert(origDir);
	
	// display info from the previous page
	pos3 = urlStr.indexOf("&title=") + 7;
	pos4 = urlStr.indexOf("&dis=");
	pos5 = urlStr.indexOf("&dis=") + 5;
	pos6 = urlStr.indexOf("&find=");
	pos7 = urlStr.indexOf("&find=") + 6;
	pos8 = urlStr.length;
	latStart = urlStr.indexOf("lat=") + 4;
	latEnd = urlStr.indexOf("&lon=");
	refLat = urlStr.slice(latStart,latEnd);
	//alert(refLat);
	lonStart = urlStr.indexOf("lon=") + 4;
	lonEnd = urlStr.indexOf("&dir=");
	refLon = urlStr.slice(lonStart,lonEnd);
	//alert(refLon);
	refTitleEncoded = urlStr.slice(pos3,pos4);
	refTitle = unescape(refTitleEncoded.replace(/\+/g,  " "));
	title = refTitle;
	//alert(title);
	myLatitude = refLat;
	myLongitude = refLon;
	refAddressEncoded = urlStr.slice(pos5,pos8);
	refAddress = unescape(refAddressEncoded.replace(/\+/g,  " "));
	//alert(refAddress);
	//refPhone = urlStr.slice(pos7,pos8);
	refInfo = document.getElementById("rl");
	//refCat = urlStr.slice(pos7,pos8);
	//refDescription = '<h2>Find ' + refCat + ' near...</h2>'; 
	refDescription= '<ul class="listing-header wide">';
	refDescription+= '<div class="map-thumb">';
	refDescription+= '<img src="http://maps.google.com/staticmap?center=';
	refDescription+= refLat;
	refDescription+= ',';
	refDescription+= refLon;
	refDescription+= '&zoom=14&size=110x80&maptype=mobile&markers=';
	refDescription+= refLat;
	refDescription+= ',';
	refDescription+= refLon;
	refDescription+= '&key=ABQIAAAAFUpzEhv6kWb3iq43xO6rWxQSL-k2ja2X1Dj7F_YzAtHZD4XPrxTIIztstKZK3oTl76Bze3V6HO1ltQ&sensor=false" alt="Map" />';
	refDescription+= '</div>';
	refDescription += '<h2>' + refTitle + '</h2>';
	//refDescription += '<div class="listing-address">' + refAddress + '</div>';
	refDescription += '<div class="listing-geo">' + refLat + ', ' + refLon + '</div>';
	refDescription += '</div>';
	refDescription += '<div class="separator"></div>';
	//refInfo.innerHTML = refDescription;
	getFile2(origDir + '.js');         
}
	                                   
function checkCoordinates() {
	
	section = list;
	if (previousAddress == document.getElementById("addrForm").q.value) {
		// withinDistance = document.forms[0].d.value;
		
		getSorted(0, 20, addressNum);
	} else {
		previousAddress = document.getElementById("addrForm").q.value;
		getGeocode();
	}
}

function getGeocode() {
	geocoder = new GClientGeocoder();  
	row = 0;
	currRow = section[row];
	var address = document.getElementById("addrForm").q.value;
	// withinDistance = document.forms[0].d.value;
	geocoder.getLocations(address, saveCoordinates);
}

    // saveCoordinates() is called when the geocoder returns an answer.
function saveCoordinates(response) {
	if (!response || response.Status.code != 200) {                                  
		
        alert("Sorry, we were unable to geocode that address");
    } else {
    place = response.Placemark[0];
	myLatitude = place.Point.coordinates[1];
    myLongitude = place.Point.coordinates[0];
		for (var loopCounter = 0; loopCounter < section.length; loopCounter++){
			destLatitude = currRow[5];
			destLongitude = currRow[6];
			getDistance(myLatitude, myLongitude, destLatitude, destLongitude); // getDistance function fills in the meat of the appended data
			row = row + 1;
			currRow = section[row];
		}
	var newSort = section.sort(); // sort by distance (index 0)
	var getDir = window.location.href;
	var pos1 = getDir.lastIndexOf('/');
	var pos2 = pos1 -1;
 	var dir = getDir.slice(pos2,pos1);
	document.location.href =  'results.shtml?lat=' + myLatitude + '&lon=' + myLongitude + '&dir=' + dir +'&title=' + previousAddress + '&addr=';
    }
}

function getGeocodes() {
	geoloc = location.search.substr(1);
	pos1 = geoloc.indexOf("?lat=") + 5;
	pos2 = geoloc.indexOf("&lon=");
	pos3 = pos2 + 5;
	pos4 = geoloc.indexOf("&dir=");
	pos5 = geoloc.indexOf("&dir=") + 5;
	pos6 = geoloc.indexOf("&title=");
	pos7 = geoloc.indexOf("&dis=") + 5;
	Latitude = geoloc.slice(pos1,pos2);
	Longitude = geoloc.slice(pos3,pos4);
	//addressNum = geoloc.slice(pos5,pos6);
	addressNum = 0;
	daasDis = geoloc.slice(pos7);
	setSection(Latitude,Longitude,addressNum,daasDis);
}


function setSection(Latitude,Longitude,addressNum,daasDis) {
	section = list;
	currRow = section[row];
	lmCoordinates(Latitude,Longitude,addressNum,daasDis);
}

function lmCoordinates(Latitude,Longitude,addressNum,daasDis) {
		for (var loopCounter = 0; loopCounter < section.length; loopCounter++){
			destLatitude = currRow[5];
			destLongitude = currRow[6];
			if (destLatitude > 0) {
				getDistance(Latitude, Longitude, destLatitude, destLongitude); // getDistance function fills in the meat of the appended data
				row = row + 1;
				currRow = section[row];
			}else{
				row = row + 1;
				currRow = section[row];
			}
		}
	var newSort = section.sort(); // sort by distance (index 0) 
	//getSorted(Latitude,Longitude,addressNum);
	// changed from 20 to 40 6/1/09 - CH
	getSorted(0, 40, addressNum, daasDis);
}


	// Haversine formula:
	// if you need to do the brain pretzel, see http://en.wikipedia.org/wiki/Haversine_formula 
function getDistance(lat1, lon1, lat2, lon2) {
	var R = 3959; // earth's mean radius in miles
	var dLat = (lat1-lat2) * Math.PI / 180;
	var dLon = (lon1-lon2) * Math.PI / 180;
	lat1 = lat1 * Math.PI / 180, lat2 = lat2 * Math.PI / 180;
	var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon/2) * Math.sin(dLon/2);
	var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
	// distanceBetween = Math.ceil(R * c); // rounds up
	fullDistance = R * c;  // maintains 6 decimal points
	Number.prototype.toDeg = function() {  // convert radians to degrees (signed)
	  return this * 180 / Math.PI;
	}

	Number.prototype.toBrng = function() {  // convert radians to degrees (as bearing: 0...360)
	  return (this.toDeg()+360) % 360;
	}
	Number.prototype.toDMS = function() {  // convert numeric degrees to deg/min/sec
	  var d = Math.abs(this);  // (unsigned result ready for appending compass dir'n)
	  d += 1/7200;  // add ½ second for rounding
	  var deg = Math.floor(d);
	  //if (deg<100) deg = '0' + deg; if (deg<10) deg = '0' + deg;
		if (deg<23) {
			deg = 'N';
		}else if (deg < 68) {
			deg = 'NW';
		}else if (deg < 113) {
			deg = 'W';
		}else if (deg < 158) {
			deg = 'SW';
		}else if (deg < 203) {
			deg = 'S';
		}else if (deg < 248) {
			deg = 'SE';
		}else if (deg < 293) {
			deg = 'E';
		}else if (deg < 338) {
			deg = 'NE';
		}else deg = 'N';

		return deg;
	}
	
	var y = Math.sin(dLon) * Math.cos(lat2);
	var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
	var z = Math.atan2(y, x).toBrng().toDMS();
	direction = z;
	trimNumber(fullDistance, 2, direction);
}

function trimNumber(number, digits, heading) {
	distanceBetween = Math.round(number * Math.pow(10, digits)) / ((Math.pow(10, digits) * 1.0));
	currRow[1] = heading;
   if (distanceBetween < 10)  {
		if (distanceBetween > .99) {
			distanceBetween = "0" + distanceBetween;
		}
	}
	currRow[0] = distanceBetween; // insert calculated distance into the array 
}

function search() {
	var strBegin = 'http://172.16.34.116/search?q=';
	var searchStr = document.getElementById("searchString").value;
	var strEnd = '&btnG=Google+Search&access=p&entqr=0&ud=1&sort=date%3AD%3AL%3Ad1&output=xml_no_dtd&oe=UTF-8&ie=UTF-8&client=default_frontend&site=wheretraveler&filter=0';
	var wholeEnchilada = strBegin + searchStr + strEnd;
	//window.location = wholeEnchilada;
	getFile(wholeEnchilada, getResponse, content2);
}

function getFile(URL,Func,destDiv) {
    if (window.XMLHttpRequest) {  
        httpRequest=new XMLHttpRequest();
        eval('httpRequest.onreadystatechange='+Func+';');
        httpRequest.open("GET", URL, true); 
        httpRequest.send(null);
    } else if (window.ActiveXObject) {  
        httpRequest=new ActiveXObject('Microsoft.XMLHTTP'); 
        if (httpRequest) {
            eval('httpRequest.onreadystatechange='+Func+';');
            httpRequest.open('GET', URL, false);
            httpRequest.send();
        }
    }

}

function getResponse() { 
	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {
			responseText = httpRequest.responseXML;
			//replaceMessage+= responseText;
		}	
		else
			alert("There was a problem with the request: ");
	}
}

function getResponse2() { 
	if (httpRequest.readyState == 4) {
		if (httpRequest.status == 200) {
			var getHeadTag = document.getElementsByTagName('head')[0];
			setjs = document.createElement('script');
			setjs.setAttribute('type', 'text/javascript');
			getHeadTag.appendChild(setjs);
			setjs.text = httpRequest.responseText;
			getGeocodes();
		}	
		else
			alert("There was a problem with the request:");
	}
}

// function getSorted(prevNumRecs, numRecs) { this was used to deliver pages of 25 listings - worked with iUI
// row = prevNumRecs; same with this one
// function getSorted(Latitude,Longitude,addressNum) {  
	//getSorted(requestedRecords,requestedRecords + 5,addressNum 
		
   function getSorted(prevNumRecs, numRecs, addressNum, daasDis) {
// row = 0;
row = prevNumRecs;
// alert(row);
currRow = section[row];
// var currDist = currRow[0];
var prevDist = -1;
var smallDist = "none";
var listCount = ""; 
//replaceHead("By Distance", linkText);
//var title = escape(title);
		replaceMessage = "";
		for (var loopCounter2 = prevNumRecs; loopCounter2 < numRecs; loopCounter2++){
		// for (var loopCounter2 = 0; loopCounter2 < section.length; loopCounter2++){
			
			if (currRow[0] < daasDis) {
				if (currRow[0] > 0) {
					if (currRow[0] > prevDist) {
						if (currRow[0] < .9) {
							if (currRow[0] < .1) {
								if (smallDist == "none") {
									replaceMessage+= '<div class="sub-category">Less than a 2 minute walk ↓</div>';
									replaceMessage+= '<ul class="listings-results">';
									replaceMessage+= '<li class="listing-results">';
									replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
									replaceMessage+= '<span class="distance">'
									replaceMessage+= currRow[0];
									replaceMessage+= ' mi. ';
									replaceMessage+= currRow[1];
									replaceMessage+= '</span>';
									replaceMessage+= '<h4>' + currRow[3] + '</h4>';
									replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
									replaceMessage+= '</li>';
									smallDist = "full";
								}else{
									replaceMessage+= '<li class="listing-results">';
									replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
									replaceMessage+= '<span class="distance">'
									replaceMessage+= currRow[0];
									replaceMessage+= ' mi. ';
									replaceMessage+= currRow[1];
									replaceMessage+= '</span>';
									replaceMessage+= '<h4>' + currRow[3] + '</h4>';
									replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
									replaceMessage+= '</li>';
								}
							}else if (currRow[0] < .26) {
								replaceMessage+= '</ul>'
								replaceMessage+= '<div class="sub-category">Less than a 5 minute walk ↓</div>';
								replaceMessage+= '<ul class="listings-results">';
								replaceMessage+= '<li class="listing-results">';
								replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
								
								replaceMessage+= '<span class="distance">'
								replaceMessage+= currRow[0];
								replaceMessage+= ' mi. ';
								replaceMessage+= currRow[1];
								replaceMessage+= '</span>';
								replaceMessage+= '<h4>' + currRow[3] + '</h4>';
								replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
								replaceMessage+= '</li>';
							}else if (currRow[0] < .5){
								replaceMessage+= '</ul>'
								replaceMessage+= '<div class="sub-category">Less than a 15 minute walk ↓</div>';
								replaceMessage+= '<ul class="listings-results">';
								replaceMessage+= '<li class="listing-results">';
								replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
								replaceMessage+= '<span class="distance">'
								replaceMessage+= currRow[0];
								replaceMessage+= ' mi. ';
								replaceMessage+= currRow[1];
								replaceMessage+= '</span>';
								replaceMessage+= '<h4>' + currRow[3] + '</h4>';
								replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
								replaceMessage+= '</li>';
							}else if (currRow[0] < .76){
								replaceMessage+= '</ul>'
								replaceMessage+= '<div class="sub-category">Within 3/4 mile ↓</div>';
								replaceMessage+= '<ul class="listings-results">';
								replaceMessage+= '<li class="listing-results">';
								replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
								replaceMessage+= '<span class="distance">'
								replaceMessage+= currRow[0];
								replaceMessage+= ' mi. ';
								replaceMessage+= currRow[1];
								replaceMessage+= '</span>';
								replaceMessage+= '<h4>' + currRow[3] + '</h4>';
								replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
								replaceMessage+= '</li>';
							}else{
								replaceMessage+= '</ul>'
								replaceMessage+= '<div class="sub-category">Within 1 mile ↓</div>';
								replaceMessage+= '<ul class="listings-results">';
								replaceMessage+= '<li class="listing-results">';
								replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
								replaceMessage+= '<span class="distance">'
								replaceMessage+= currRow[0];
								replaceMessage+= ' mi. ';
								replaceMessage+= currRow[1];
								replaceMessage+= '</span>';
								replaceMessage+= '<h4>' + currRow[3] + '</h4>';
								replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
								replaceMessage+= '</li>';
							}
						}else{
								replaceMessage+= '</ul>'
								replaceMessage+= '<div class="sub-category">Within ' + Math.ceil(currRow[0]) + ' miles ↓</div>';
								replaceMessage+= '<ul class="listings-results">';
								replaceMessage+= '<li class="listing-results">';
								replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
								replaceMessage+= '<span class="distance">'
								replaceMessage+= currRow[0];
								replaceMessage+= ' mi. ';
								replaceMessage+= currRow[1];
								replaceMessage+= '</span>';
								replaceMessage+= '<h4>' + currRow[3] + '</h4>';
								replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
								replaceMessage+= '</li>';
							}
						}else{
								replaceMessage+= '<li class="listing-results">';
								replaceMessage+= '<a href="../../../../../' + addressNum + '/' + currRow[4] + '.shtml?' + currRow[7] + '&title=' + title + '&lat=' + myLatitude + '&lon=' + myLongitude + '" class="list-title">';
								replaceMessage+= '<span class="distance">'
								replaceMessage+= currRow[0];
								replaceMessage+= ' mi. ';
								replaceMessage+= currRow[1];
								replaceMessage+= '</span>';
								replaceMessage+= '<h4>' + currRow[3] + '</h4>';
								replaceMessage+= '<span class="tax-label">' + currRow[8] + '</span></a>';
								replaceMessage+= '</li>';
							}
						} 
		if (currRow[0] < .1) {
			prevDist = 0;
		}else if (currRow[0] < .26) {
			prevDist = .25;
		}else if (currRow[0] < .51) {
			prevDist = .5;
		}else if (currRow[0] < .76) {
			prevDist = .75;
		}else{
			prevDist = Math.ceil(currRow[0]);
		}	
		row = row + 1;
		currRow = section[row];
		}
	}
	row = row;
	currRow = section[row];
	prevNumRecs = numRecs;
	requestedRecords = numRecs;
	
	if (currRow[0] < addressNum) {
		if (requestedRecords < section.length) {
			if (requestedRecords + 20 < section.length && row == 20) {
				replaceMessage+= '</ul><div id="pager"><a href="#" onclick="getSorted(requestedRecords,requestedRecords + 20,addressNum);" class="next">Next »</a><span class="prev">« Prev</span></div>';
			}else if (requestedRecords + 20 < section.length && row > 20) {
				replaceMessage+= '</ul><div id="pager"><a href="#" onclick="getSorted(requestedRecords,requestedRecords + 20,addressNum);" class="next">Next »</a><a href="#" onclick="getSorted(requestedRecords - 40,requestedRecords - 20,addressNum);" class="prev">« Prev</a></div>';
			}else{
				replaceMessage+= '</ul><div id="pager"><span class="next">Next »</span><a href="#" onclick="getSorted(requestedRecords - 40,requestedRecords - 20,addressNum);" class="prev">« Prev</a></div>';
			}
			replaceMessage+= '';
		}else{
			replaceMessage+= '</ul>'; // now we're outside of the loop - this is the last line of the appended data
		}	
	}
	document.getElementById('content2').innerHTML = replaceMessage;
}

function getXMLHttpRequestObject()
{
	var XMLHttpRequestObject = false;
		if (window.XMLHttpRequest)
	{
		XMLHttpRequestObject = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return XMLHttpRequestObject;
}

function getFile2(URL) // puts the dis.js file into the head tag
{                     
	var getHeadTag = document.getElementsByTagName('head')[0];
	var setjs = document.createElement('script');
	setjs.setAttribute('type', 'text/javascript');
	XMLHttpRequestObject = getXMLHttpRequestObject();
	if (XMLHttpRequestObject)
	{
		XMLHttpRequestObject.open("GET", URL);
		XMLHttpRequestObject.onreadystatechange = function()
		{
			if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200)
			{
				
				setjs.text = XMLHttpRequestObject.responseText;
				getHeadTag.appendChild(setjs);
				getGeocodes();
			}
		}
		XMLHttpRequestObject.send(null);
	}
} 

