var bSelectUseSelect = false;
var bUseLDO = (/ListManager\.asp/).test(window.location.pathname);

function onXMLSearchCancel()
{
	RemoveFormContainer(this.eContainer)
}

function onXMLShowAddress()
{
	var node = this.node;
	if (bUseLDO)
		oLDO.updateInfoXML(node);
	else
	{
		oMapObj.updateLegend(node.getAttribute("Address") + " PIN: " + node.getAttribute("Pin"));
		oDriveObj.getByCountyPin(Number(node.getAttribute("County")), node.getAttribute("Pin"));
	}
	RemoveFormContainer(this.parentNode.eContainer);
}

function onXMLSearchChange()
{
	var sel = this.selectedIndex;
	if (sel>0)
	{
		var node = this.options[this.selectedIndex].node;
		if (bUseLDO)
			oLDO.updateInfoXML(node);
		else
			oDriveObj.getByCountyPin(Number(node.getAttribute("County")), node.getAttribute("Pin"));
		RemoveFormContainer(this.eContainer)
	}
}

function onXMLSelectMouseOver() { this.style.color = "red"; }
function onXMLSelectMouseOut() { this.style.color = ""; }

function prepareSelect()
{
	if (bSelectUseSelect)
	{
		var eSel = document.createElement("SELECT");
		eSel.onchange = onXMLSearchChange;
	}
	else
	{
		eSel = document.createElement("DIV");
		eSel.style.margin = "4px 8px";
	}

	return eSel;
}

function addSelectOption(sAddress, eSelect, curnode)
{
	if (bSelectUseSelect)
	{
		opt = new Option(sAddress, "", false, false);
		eSelect.options[eSelect.options.length] = opt;
		opt.node = curnode;

		eSelect.size = eSelect.options.length;
	}
	else
	{
		if (eSelect.hasChildNodes())
			eSelect.appendChild(document.createElement("BR"));

		var a = document.createElement("SPAN");
		a.onclick = onXMLShowAddress;
		a.style.cursor = "pointer";
		a.style.fontsize = "smaller";
		a.onmouseover = onXMLSelectMouseOver;
		a.onmouseout = onXMLSelectMouseOut;
		a.node = curnode;
		a.appendChild(document.createTextNode(sAddress));

		eSelect.appendChild(a);
	}
}

function ShowXMLGeocode(node)
{
	var sMsg = "Map centered on " + node.getAttribute("Zip");
	oMapObj.getByLatLon(node.getAttribute("Lat"), node.getAttribute("Lon"));
	oMapObj.updateLegend(sMsg);
}

function ShowXMLSearchResults(doc)
{
	var eSelect, opt;
	var sCounty, sPin, sAddress, sLat, sLon, sRun, nPic, nodeRow;
	var nRows = 0;

	var node = doc.firstChild;
	while (node)
	{
		if (node.nodeType==1 && node.nodeName=="row")
		{
			// process prev. node:
			if (nRows)
			{
				if (!eSelect)
					eSelect = prepareSelect();

				addSelectOption(sAddress, eSelect, nodeRow);
			}

			nRows++; 
			sCounty = node.getAttribute("County");
			sPin = node.getAttribute("Pin");
			sAddress = node.getAttribute("Addr");
			sLat = node.getAttribute("Lat");
			sLon = node.getAttribute("Lon");
			sRun = node.getAttribute("Run");
			sPic = node.getAttribute("Pic");
			nodeRow = node;
		}

		node = node.nextSibling;
	}

	switch(nRows)
	{
		case 0:
			alert("Empty search result list.");
			break;
		case 1:
			if (bUseLDO)
				oLDO.updateInfoXML(nodeRow);
			else
			{
				AnnounceDlg("Search Results", sAddress + "\nPIN: " + sPin + "\nLatitude: " + sLat + "\nLongitude: " + sLon + "\n\nPlease wait, about to display property...");
				oDriveObj.getByCountyPin(Number(sCounty), sPin);
			}
			break;
		default:
			addSelectOption(sAddress, eSelect, nodeRow);

			var eButton = document.createElement("BUTTON");
			eButton.onclick = onXMLSearchCancel;
			eButton.appendChild(document.createTextNode("Cancel"));

			var eDiv = document.createElement("DIV");

			eDiv.appendChild(document.createTextNode("Multiple matches.  Select from following list:"));
			eDiv.appendChild(document.createElement("BR"));

			eDiv.appendChild(eSelect);
			eDiv.appendChild(document.createElement("BR"));

			eDiv.appendChild(eButton);

			eButton.eContainer = eSelect.eContainer = MakeDialog("Multiple Matches", eDiv, 300);
			eButton.focus();
			break;
	}
}

function CommonXMLWaiter(r)
{
	var bReady = (r.readyState==4);
	if (bReady)
	{
		var dom = r.responseXML;
		var doc = dom.documentElement;
		var node = doc.firstChild;

		if (node==null)
			alert("Search returned no results.");
		else
		{
			switch (node.nodeName)
			{
				case "Error":
					alert(node.firstChild.data);
					break;
				case "GeoCodeList":
					oMapObj.setRegion(Number(doc.getAttribute("region")));
					ShowXMLGeocode(node.firstChild);
					oPicObj.showNoImageMessage();
					break;
				case "row":
					ShowXMLSearchResults(docEl);
					break;
			}
		}
	}

	return bReady;
}

function AlertNewSearchXML()
{
/*
	if (CommonXMLWaiter(oNewSearchForm.oReq))
	{
		RemoveSearchForm();
	}
*/	
	var xmlDoc, docEl, node, nNodes;
	var nCounty, sPin, sAddress, nLat, nLon;

	if (oNewSearchForm.oReq.readyState==4)
	{
		RemoveSearchForm();

		var req = oNewSearchForm.oReq;
		if (req.status!=200)
			alert("XML Request failed: " + String(req.status) + " (" + req.statusText + ")");

		xmlDoc = req.responseXML;
		docEl = xmlDoc.documentElement;
		node = firstChildEl(docEl);

		if (node==null)
			alert("Search returned no results.");
		else
		{
			switch(node.nodeName)
			{
				case "Error":
					alert(node.firstChild.data);
					break;
				case "GeoCodeList":
					oMapObj.setRegion(Number(docEl.getAttribute("region")));
					ShowXMLGeocode(firstChildEl(node));
					oPicObj.showNoImageMessage();
					break;
				case "row":
					ShowXMLSearchResults(docEl);
					break;
			}
		}
	}
}

function PostXMLSearch()
{
	var sPostData = oNewSearchForm.getPostData();
	var oReq = oNewSearchForm.oReq = GetXMLReq();
	var sURL = oNewSearchForm.eForm.action;

	oReq.open("POST", sURL, true); 
	XMLReqSetHeaders(oReq);
	oReq.onreadystatechange = oNewSearchForm.fOnReady;
	oReq.send(sPostData);

	return false;
}

function XMLSearchCountyPin(nCounty, sPin)
{
	var oReq = GetXMLReq();

	function fwait()
	{
		if (CommonXMLWaiter(oReq))
		{
			oReq.onreadystatechange = null;
			oReq = null;
		}
	}

	oReq.open("POST", sURL, true); 
	XMLReqSetHeaders(oReq);
	oReq.onreadystatechange = fwait;
	oReq.send(sPostData);
}

function PostHttpReq(sURL, sPostData, fWaiter)
{
	var r = GetXMLReq();
	function fwait()
	{
		if (r.readyState==4)
		{
			if (confirmReq(r))
				fWaiter(r);
			r = null;
		}
	}

	r.open("POST", sURL, (fWaiter?true:false));
	r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	r.setRequestHeader("Accept", "text/xml");
	r.setRequestHeader("Cache-Control", "no-cache");
	r.onreadystatechange = (fWaiter?fwait:null);
	r.send(sPostData);
	return r;
	
}

function SetSearchOptionsForRegion(v)
{
	var oNSF = oNewSearchForm;
	var bInt = false;
	var nReg = Number(v);
	var e, n = firstChildEl(xmlRegions);
	while (n)
	{
		if (Number(n.getAttribute("num"))==nReg)
		{
			bInt = n.getAttribute("intersections")!=null;

			e = oNSF.setFieldValue("rname", n.getAttribute("name"));

			var arr = ["str1", "str2", "isearch"];
			for (var i=0; i<arr.length; i++)
			{
				e = oNewSearchForm.findField(arr[i]);
				e.trRow.style.display = bInt?"block":"none";
			}
			break;
		}
		n = nextSiblingEl(n);
	}
}

function DriveToLatLon(lat, lon, region)
{
	function f(r)
	{
		var doc = r.responseXML.documentElement;
		if (doc)
		{
			var n = firstChildEl(r.responseXML.documentElement);
			var sRun = n.getAttribute("run");
			var sPic = n.getAttribute("pic");

			if (sRun && sRun!="null" && sPic && sPic!="null")
				oDriveObj.getByRunPic(sRun, Number(sPic));
			else
			{
				oMapObj.setRegion(region);
				oMapObj.getByLatLon(lat, lon);
				alert("Can't find frame.");
			}
		}
	}

	var sURL = "http://" + window.location.hostname + "/NTour/Data/GetNearestView.asp";
	var sPostData = "lat=" + lat + "&lon=" + lon + "&region=" + region;

	PostHttpReq(sURL, sPostData, f);
}

function onISearchReturn(r)
{
	var xml = r.responseXML;
	var doc = xml.documentElement;

	var node = firstChildEl(doc);
	if (node)
	{
		var nRegion = oNewSearchForm.getFieldValue("Region");
		if (nextSiblingEl(node))
			MakeXMLList(doc, MakeIntersectionLine, Number(nRegion));
		else
			SetMapFromIntNode(node, nRegion);

		RemoveSearchForm();
	}
	else
		alert("Intersection not found.");
}

function DoIntersectionSearch()
{
	var oForm = this.oFieldObj.oForm;
	var str1 = oForm.getFieldValue("str1");
	var str2 = oForm.getFieldValue("str2");

	if (str1.length==0 || str2.length==0)
		alert("Both street field must have at least one character.");
	else
	{
		var sName = oForm.getFieldValue("rname");
		var sURL = "http://" + window.location.hostname
			+ "/NTour/Data/FindIntersections.asp";

		var sPost = "region=" + sName + "&str1=" + str1 + "&str2=" + str2;
		PostHttpReq(sURL, sPost, onISearchReturn);
	}
}

function DoXMLSearch(fOnReady)
{
	var oNSF = oNewSearchForm;
	if (oNSF==null)
	{
		var oNSF = oNewSearchForm = new FormObject(CreateSearchFormArray(), "Scripts/Server/GetFindData.asp", "post", null, RemoveSearchForm);
		oNSF.setSubmit("Search", PostXMLSearch);

		var eForm = oNSF.makeForm("Address");
		oNSF.eForm = eForm;
		oNSF.fOnReady = fOnReady;

		var e = oNSF.findField("Region");
		if (e && e.eInput)
			e.eInput.onchange = function() { SetSearchOptionsForRegion(this.value); }

		e = oNSF.findField("isearch");
		e.eInput.onclick = DoIntersectionSearch;
	}

	oNSF.eContainer = MakeFormContainer("Search for Property", oNSF.eForm);
	e = oNSF.findField("Region");
	SetSearchOptionsForRegion(e.eInput.value);
}



