var businessSearch = false;
var addressSearch = false;
var addressSearchOutput = [];
var businessSearchOutput = [];
	
function Business() {
	this.marker = null;
}


function GX_search(searchTerm, stateRestriction, cityRestriction) {
	searchTerm = searchTerm.trim();
	if(searchTerm == "Address or Business Name" || searchTerm == "")
		return false;
		
	businessSearch = false;
	addressSearch = false;
	addressSearchOutput = [];
	businessSearchOutput = [];
	
	showStatus("Searching...");
	
	var resultText = "<div id=\"fraichecontscroll\"><p class=\"listing\">&nbsp;&nbsp;</p>";
					
	GX_findBusiness(searchTerm, cityRestriction, stateRestriction, function(output) {
		//alert("Business Search: " + output);
		businessSearchOutput = output;
		for(var i=0; i<businessSearchOutput.length; i++) {
			var point = businessSearchOutput[i].Business;
			var name = point.name;
			if(point.streetAddress != "")
				name += ", " + point.streetAddress;
			if(!cityRestriction) {	
				if(point.city != "")
					name += ", " + point.city;
				if(point.state != "")
					name += ", " + point.state;
			}
			resultText += "<div class=\"listing\"><p class=\"display_listing\"><a href=\"javascript:GX_showBusinessSearchResult(" + 
				i + ", 0);\">" + name + "</a></p></div>";	
		}
		businessSearch = true;
		
		var zeroResults = false;
		var defaultShown = false;
		if(businessSearch == true && addressSearch == true) {
			if(businessSearchOutput.length == 1 && addressSearchOutput.length == 0) {
				defaultShown = true;
				GX_showBusinessSearchResult(0, 0);
			} else if(businessSearchOutput.length == 0 && addressSearchOutput.length == 1) {
				defaultShown = true;
				GX_showAddressSearchResult(0, 0);
			} else  if(businessSearchOutput.length == 0 && addressSearchOutput.length == 0) {
				zeroResults = true;
			}
			hideStatus();
			
			if(zeroResults == true) {
				document.getElementById('divRightResults').innerHTML = "<p class=\"listing\">No matches found</p>";
				document.getElementById('divRightHeading').innerHTML = "SEARCH RESULTS";
				document.getElementById('divNewsSort').innerHTML = "";
				selectNewsTab('point');
			} else if(defaultShown == false) {
				document.getElementById('divRightResults').innerHTML = resultText + "</div";
				document.getElementById('divRightHeading').innerHTML = "SEARCH RESULTS";
				document.getElementById('divNewsSort').innerHTML = "";
				selectNewsTab('point');
			}
		}
		
		
	});
	
	
	GX_findAddress(searchTerm, stateRestriction, cityRestriction, function(output) {
		addressSearchOutput = output;
		//alert("Address Search: " + addressSearchOutput);
		
		for(var j=0; j<addressSearchOutput.length; j++) {
			var point = addressSearchOutput[j];
			var name = point.getDisplayText();
			resultText += "<div class=\"listing\"><p class=\"display_listing\"><a href=\"javascript:GX_showAddressSearchResult(" + 
				j + ", 0);\">" + name + "</a></p></div>";	
		}
		
		addressSearch = true;
		
		var zeroResults = false;
		var defaultShown = false;
		if(businessSearch == true && addressSearch == true) {
			if(businessSearchOutput.length == 1 && addressSearchOutput.length == 0) {
				defaultShown = true;
				GX_showBusinessSearchResult(0, 0);
			} else if(businessSearchOutput.length == 0 && addressSearchOutput.length == 1) {
				defaultShown = true;
				GX_showAddressSearchResult(0, 0);
			} else  if(businessSearchOutput.length == 0 && addressSearchOutput.length == 0) {
				zeroResults = true;
			}
			hideStatus();
			if(zeroResults == true) {
				document.getElementById('divRightResults').innerHTML = "<p class=\"listing\">No matches found</p>";
				document.getElementById('divRightHeading').innerHTML = "SEARCH RESULTS";
				document.getElementById('divNewsSort').innerHTML = "";
				selectNewsTab('point');
			} else if(defaultShown == false) {
				document.getElementById('divRightResults').innerHTML = resultText + "</div";
				document.getElementById('divRightHeading').innerHTML = "SEARCH RESULTS";
				document.getElementById('divNewsSort').innerHTML = "";
				selectNewsTab('point');
			}
		}
		
	});
	
	return false;
	
}


function GX_findBusiness(busName, city, state, funcDoneSearch) {
	if(!city) {
		city = "";
	}
	if(!state) {
		state = "";
	}
	
	var url = getServer() + "/searchBusiness?" + 
					"appName=" + getAppName() + "&format=jason" +
					"&companyName=" + URLencode(busName) +
					"&city=" + URLencode(city) +
					"&state=" + URLencode(state);
	
	HttpGetRequest(url, "/searchBusiness", function(JSON_output){	
		funcDoneSearch(eval(JSON_output));			
	});
	
}

function GX_showBusinessSearchResult(idx, showStreetView) {
	var res = businessSearchOutput[idx].Business;	
	
	var tile = TileUtil.getTileCoords(res.latitude, res.longitude,  defaultZoom, false); 
	var tileID = tile.x + "_" + tile.y + "_" + defaultZoom;	
	
	GX_tile_active_feature[tileID] = res.name;
	GX_tile_active_news[tileID] = res.name;
	
	if(GX_isGazetteerTileLoaded(tileID)) {
		GX_showGazetteer(tileID, GX_getGazetteerIndex(tileID, res.name), 0);		
	} else {
		GX_setCenter(res.latitude, res.longitude);
	}
	
	if(GX_isNewsTileLoaded(tileID)) {
		GX_drawNews(tileID, GX_getGazetteerIndex(tileID, res.name), 0);
	}
}

function GX_showAddressSearchResult(idx, showStreetView) {
	var res = addressSearchOutput[idx];	
	if(res.geom != "") {		
		var polygon = GX_createPolygon(res.geom);
		if(polygon) polygon.show();
	}
	
	//Display the parcel marker
	var point = new GLatLng(res.lat, res.lon);
	
	var marker = GX_createMarker(point, GX_getMarker("Parcel"), res.getDisplayText(), 0);
	iconMgr.addMarker(marker, minZoom);
	GX_showMarker(marker, res.getDisplayText() + "<BR><BR>", showStreetView);
}