//searchCode.js
//Stickymap code that contains the functions used for stickymap searching.
//Created June 10th, 2006

//This variable is set to true if title search mode is on.
var titleSearchMode = 0;
var titleSearchParam = "";

function locationSearch(){
	titleSearchMode = 0;
	var input=document.getElementById('geoinput').value;
	var sendurl='yahoogeocoder.php?input=' + input;
	doWithFile(sendurl, true, function(xmlDoc) {
		var docEl = xmlDoc.documentElement;

		if (!docEl) {
			var el = document.getElementById("geosearchMessage");
			el.innerHTML = "<BR> <font color='red'>*</font>Location not found.";
			return;
		}

		var results = docEl.getElementsByTagName('Result');
		var result = results[0];
		
		if (!result) {
			var el = document.getElementById("geosearchMessage");
			el.innerHTML = "<BR> <font color='red'>*</font>Location not found.";
			return;
		}
		
		var lat = result.getElementsByTagName('Latitude')[0].firstChild;
		var lng = result.getElementsByTagName('Longitude')[0].firstChild;
		
		if (!lat || !lng) {
			var el = document.getElementById("geosearchMessage");
			el.innerHTML = "<BR> <font color='red'>*</font>Location not found.";
			return;
		}
		document.getElementById('geosearchMessage').innerHTML = "";
		map.setCenter(new GLatLng(parseFloat(lat.nodeValue), parseFloat(lng.nodeValue)), 14);
	});
}	

function enterSearchMode() {
	document.getElementById("searchPage").style.display = "block";
}

function exitSearchMode() {
	if (titleSearchMode) {
		titleSearchMode = 0;
		loadMarkers();
	}

	if (inSortByIconMode) {
		inSortByIconMode = 0;
		loadMarkers();
	}
	
	
	//Let's clean up after ourselves
	document.getElementById('geoinput').value = "";
	document.getElementById('buisiness_category_input').value = "";
	document.getElementById('buisiness_location_input').value = "";
	document.getElementById('title_search_input').value = "";
	
	document.getElementById('yellow_pages_search_results').innerHTML = "";
	document.getElementById('title_search_results').innerHTML = "";
	makeInvisible("searchPage");
}

function buisinessCategorySearch() {
	titleSearchMode = 0;
	var NUM_RESULTS = 10;
	
	var input = document.getElementById('buisiness_category_input').value;
	var location = document.getElementById('buisiness_location_input').value;

	var sendurl = 'yahoolocal.php?query=' + input + '&location=' + location + '&results=' + NUM_RESULTS;
	document.getElementById('yellow_pages_search_results').innerHTML='Loading '+ input + ' in ' + location;
	doWithFile(sendurl, true, function(xmlDoc) {
		if (!xmlDoc) {
			document.getElementById('yellow_pages_search_results').innerHTML='No results found. <BR>';
			return;
		}

		document.getElementById('yellow_pages_search_results').innerHTML='Results Loaded <BR>';
		var results = xmlDoc.documentElement.getElementsByTagName('Result');
		var result;
		for(var i = 0; i < results.length ; i++) {
			result = results[i];
			var lat = result.getElementsByTagName('Latitude')[0].firstChild.nodeValue;
			var lng = result.getElementsByTagName('Longitude')[0].firstChild.nodeValue;
			
			var titleString = "";
			var searchResults = "";
			var futureMarkerTemplate = "";
			var buisinessURL = "";
						
			if (result.getElementsByTagName('Title')[0].firstChild) {
				titleString += result.getElementsByTagName('Title')[0].firstChild.nodeValue;
				searchResults += "Title: " + titleString + "<BR>";
			}
			if (result.getElementsByTagName('Address')[0].firstChild){
				var addr = result.getElementsByTagName('Address')[0].firstChild.nodeValue;
				searchResults += "Address: " + addr + "<BR>";
			}
			if (result.getElementsByTagName('City')[0].firstChild){
				searchResults += "City: " + result.getElementsByTagName('City')[0].firstChild.nodeValue;
				searchResults += "<BR>";
			}
			if (result.getElementsByTagName('State')[0].firstChild){
				searchResults += "State: " + result.getElementsByTagName('State')[0].firstChild.nodeValue;
				searchResults += "<BR>";
			}
			if (result.getElementsByTagName('Phone')[0].firstChild){
				searchResults += "Phone number: " + result.getElementsByTagName('Phone')[0].firstChild.nodeValue;
				searchResults += "<BR>";
			}
			
			//Cut off template here, since we don't need distance, lat, lng in it
			futureMarkerTemplate = searchResults;
			
			if (result.getElementsByTagName('BusinessUrl')[0].firstChild) {
				businessURL = result.getElementsByTagName('BusinessUrl')[0].firstChild.nodeValue;
				searchResults += "BusinessUrl: " + '<a href="' + businessURL + '" target="_blank">' + businessURL + "</a>";
				searchResults += "<BR>";
			}
			
			
			var jsFound = "javascript:foundBusiness(" + lat + "," + lng + "," 
			jsFound += "'" + titleString.replace(/'/g, "\\'") + "'"; 
			jsFound += ", '" + futureMarkerTemplate.replace(/'/g, "\\'") + "'";
			jsFound += ");";

			searchResults += "<a" + mkAttr("href", jsFound) + "> See it on stickymap! </a>";
			searchResults += "<BR> <BR>";
			
			document.getElementById('yellow_pages_search_results').innerHTML += searchResults;
		}
	} );
}

function foundBusiness(lat, lng, title, futureTemplate) {
	exitSearchMode();

	var point = new GLatLng(lat, lng);
	map.setCenter(point, 17);
	
	var windowHTML = title + BR + "Don't see a marker?" + BR; 
	windowHTML += "<a href=\"javascript:addMarkerFromLocalSearch("+lat+","+lng+",'" + title.replace(/'/g, "\\'") + "', '" +futureTemplate.replace(/'/g, "\\'") + "')\"> Add It! </a>" /* title.replace("'", "\\'") + "', '" +futureTemplate.replace("'", "\\'") becomes title.replace("\'", "\\'") + "', '" +futureTemplate.replace("\'", "\\'") */
	map.openInfoWindowHtml(point, windowHTML);
}

function addMarkerFromLocalSearch(lat, lng, title, template) {
	switchTab(2);
	streamlineCreateMarkerForm(lat, lng, title, template);
}

function titleSearch() {
	titleSearchMode = 1;
	titleSearchParam = document.getElementById("title_search_input").value;
	loadMarkersForTitleSearch();
}

function gotTitleSearchResults(markers) {
	var resultString = "<b>Search Results for " + titleSearchParam + "</b><br>";
	resultString += "<font" + mkAttr("style", "font-size: 11px") + ">";
	
	for(var i = 0; i < markers.length; i++) {
		var marker = markers[i];
		var title = marker.getAttribute("title");
		var id = marker.getAttribute("id");
		
		//resultString += "<a" + mkAttr("href", "javascript:viewMarker(" + id + ")") + ">";
		resultString += "<a" + mkAttr("href", "javascript:virtuallyClickMarker(" + id + ")") + ">";
		resultString += title + "</a><br>";
	}
	resultString += "<BR></font>";
	
	document.getElementById('title_search_results').innerHTML = resultString;
}

//Similar to loadMarkers().  Made for Titlesearch
function loadMarkersForTitleSearch() {
	map.clearOverlays();
	
	var URL = "getMarkersXml.php?";
	URL += "titlesearch=" + titleSearchParam + "&iebug=" + Math.random();
	
	if (document.getElementById("title_search_inbounds").checked) {
		//get bounds
		var bounds = map.getBounds();
		var sw = bounds.getSouthWest();
		var ne = bounds.getNorthEast();
		
		var apparentZoomLevel = map.getZoom();
		
		URL += "&maxLat=" + ne.lat() + "&minLat=" + sw.lat() + "&maxLng=" + ne.lng() + "&minLng=" + sw.lng();
	}
	
	doWithFile(URL, true, function(xmlDoc) {
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		
		if (markers.length > 100) {
			document.getElementById('title_search_results').innerHTML = "The search \"" + titleSearchParam + "\" returned too many results.  Please narrow your search and try again";
		}
		else {
			//Go through each marker.
			for(var i = 0; i < markers.length; i++) {			
				var markerInfo = markers[i];
				
				var point = new GLatLng(markerInfo.getAttribute("y"), markerInfo.getAttribute("x"));
				var title = markerInfo.getAttribute("title");
				var id = markerInfo.getAttribute("id");
				var iconid = markerInfo.getAttribute("icon");
				
				createMarker(point, title, iconid, id);		
			}
		
			gotTitleSearchResults(markers);
		}
	});
}

//Moves the marker into view
function viewMarker(id) {
	currentID = id;

	var filename = "getMarkerInfo.php?id=" + id;
	//The IE bug: it appears that getMarkerInfo.php?id=x is stored in the cache.
	//So, we'll also give it a random number so that it thinks its accessing a different page.		
	filename += "&iebug=" + Math.random();
	
	doWithFile(filename, true, function(xmlDoc) {
		var markers = xmlDoc.documentElement.getElementsByTagName("marker");
		var marker = markers[0];

		var point = new GLatLng(marker.getAttribute("latitude"), marker.getAttribute("longitude"));
		
		//Now move the map to that marker
		map.setCenter(point, marker.getAttribute("minZoom"));
	});
}