var sViewerWinName = "GV_Viewer";
var sManagerWinName = "GV_Manager";

var oNewSearchForm = null;
var oSearchForm = null;

var eCurDlg = null;


function BCMouseOver()
{
	if (this.className!="ButtonInactive")
		this.className = "ButtonHover";
}
function BCMouseOut()
{
	if (this.className!="ButtonInactive")
		this.className = "Button";
}
function SetupButton(eB)
{
	eB.className = "Button";
	eB.onmouseover = BCMouseOver;
	eB.onmouseout = BCMouseOut;
}

function SetupButtons()
{
	var arrBC = document.getElementsByName("ButtonC");
	var nStop = arrBC.length;
	for (var i=0; i<nStop; i++)
		SetupButton(arrBC[i]);
}

function NTourOpenViewer(sArgString, sWindowName)
{
	var sName = arguments.length>1 ? sWindowName : "NTourViewer";
	var w = window.open("NTour.asp?" + sArgString, sName, "width=760,height=490,resizable");
	w.focus();
}

function MakeCaptionBanner(sCaption)
{
	var eImg, eTR, eTD, eTBody, eTable;
	
	eTR = document.createElement("TR");

	eImg = document.createElement("IMG");
	eImg.src = "NTourGfx/BanLeft.gif";
	eTD = document.createElement("TD");
	eTD.className = "BanLeft";
	eTD.appendChild(eImg);
	eTR.appendChild(eTD);

	eTD = document.createElement("TD");
	eTD.className = "BanMiddle";
	eTD.appendChild(document.createTextNode(sCaption));
	eTR.appendChild(eTD);

	eImg = document.createElement("IMG");
	eImg.src = "NTourGfx/BanRight.gif";
    eTD = document.createElement("TD");
	eTD.className = "BanRight";
	eTD.appendChild(eImg);
	eTR.appendChild(eTD);

	eTBody = document.createElement("TBODY");
	eTBody.appendChild(eTR);

    eTable = document.createElement("TABLE");
	eTable.className = "PopBanner";
	eTable.cellSpacing = "0px";
	eTable.cellPadding = "0px";
	eTable.appendChild(eTBody);

	return eTable;
}

function GetElWidth(el)
{
	var sVis = el.style.visibility;
	el.style.visibility = "hidden";
	document.body.appendChild(el);
	var nWidth = el.offsetWidth;
	document.body.removeChild(el);
	el.style.visibility = sVis;
	return nWidth;
}

function StringToDiv(sString)
{
	var eDiv = document.createElement("DIV");
	var eSpan;
	var nWidth, nMaxWidth = 0;
	var aLines = sString.split("\n");
	var nStop = aLines.length;
	for (var i=0; i<nStop; i++)
	{
		eSpan = document.createElement("SPAN");
		eSpan.appendChild(document.createTextNode(aLines[i]));

		nWidth = GetElWidth(eSpan);
		if (nWidth>nMaxWidth)
			nMaxWidth = nWidth;

		if (i)
			eDiv.appendChild(document.createElement("BR"));
		eDiv.appendChild(eSpan)
	}

	eDiv.nWidth = nMaxWidth;
	return eDiv;
}

function MakeDialog(sCaption, eContents, nMaxWidth)
{
	if (top.HideFormPageProblems)
		top.HideFormPageProblems(true);

	var eDiv = document.createElement("DIV");
	eDiv.className = "FormDiv";
	var eBanner = MakeCaptionBanner(sCaption);
	eDiv.appendChild(eBanner);
	eDiv.appendChild(eContents);

	document.body.appendChild(eDiv);

	if (nMaxWidth)
		eDiv.style.width = String(nMaxWidth+16) + "px";

	eDiv.style.visibility = "visible";

	return eDiv;
}

function MakeFormContainer(sCaption, eForm)
{
	var nWidth = 0;
	if (eForm.SavedWidth)
		nWidth = eForm.SavedWidth;
	else
	{
		var eTR, eTB = eForm.eTable.firstChild;
		var nStop = eTB.childNodes.length;
		var i;

		document.body.appendChild(eForm);
		nWidth = eForm.eTable.offsetWidth;
		document.body.removeChild(eForm);

		eForm.SavedWidth = nWidth;

		for (var i=0; i<nStop; i++)
		{
			eTR = eTB.childNodes[i];
			if (eTR.style.display=="none")
				eTR.style.display = "";
		}
	}

	var eDiv = MakeDialog(sCaption, eForm, nWidth);
	if (eForm.eFirstField)
		eForm.eFirstField.focus();

	return eDiv;
}

function RemoveFormContainer(eContainer)
{
	document.body.removeChild(eContainer);

	if (top.HideFormPageProblems)
		top.HideFormPageProblems(false);
}


function DlgClose()
{
	RemoveFormContainer(eCurDlg);
	eCurDlg = null;
}

function AnnounceDlg(sCaption, sString)
{
	if (eCurDlg)
		RemoveFormContainer(eCurDlg);

	var eDiv = StringToDiv(sString);

	var eDivB = document.createElement("DIV");
	eDivB.style.whiteSpace = "nowrap";
	eDivB.style.textAlign = "center";
	var eB = document.createElement("BUTTON");
	SetupButton(eB);
	eB.onclick = DlgClose;
	eB.appendChild(document.createTextNode("OK"));
	eB.style.width = "40px";

	eDivB.appendChild(eB);
	eDiv.appendChild(eDivB);

	eCurDlg = MakeDialog(sCaption, eDiv, eDiv.nWidth);
	eB.focus();
}

function RemoveSearchForm()
{
	if (oSearchForm)
	{
		RemoveFormContainer(oSearchForm.eContainer);
		oSearchForm.eContainer = null;
	}
	if (oNewSearchForm)
	{
		RemoveFormContainer(oNewSearchForm.eContainer);
		oNewSearchForm.eContainer = null;
	}
}



function CreateSearchFormArray()
{
	var nReg = 0;
	if (top.nRegion)
		nReg = top.nRegion;
	else if (oMapObj)
		nReg = oMapObj.getRegion();

	return	[
				new FieldObject("hidden", "Height", nImageHeight),
				new FieldObject("message", null, "Confirm region, then enter the Property ID Number (PIN) alone, or enter the Address with either City or Zip."),
				new FieldObject("hidden", "rname", ""),
				new FieldObject("select", "Region", nReg, "Region", arrRegions, 10),
				new FieldObject("text", "str1", "", "Street 1 (at least 1 character)", 25, 25),
				new FieldObject("text", "str2", "", "Street 2 (at least 1 character)", 25, 25),
				new FieldObject("button", "isearch", "Start Search", "Intersection Search"),
				new FieldObject("text", "Address", "", "Address", 25, 40),
				new FieldObject("text", "City", "", "City", 25, 25),
				new FieldObject("text", "Zip", "", "Zipcode", 10, 10),
				new FieldObject("text", "PIN", "", "PIN", 18, 18)
			];
}

function GetXMLReq()
{
	var oReq = null;
	try
	{
		if (window.XMLHttpRequest)
			oReq = new XMLHttpRequest();
		else
		{
			try { oReq = new ActiveXObject("Msxml2.XMLHTTP"); }
			catch(e)
			{
				try { oReq = new ActiveXObject("Microsoft.XMLHTTP"); }
				catch(e){;}
			}
		}
	}
	catch(e)
	{
		alert("Caught exception: " + e.description);
	}

	return oReq;
}

function XMLReqSetHeaders(r)
{
	r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	r.setRequestHeader("Accept", "text/xml");
	r.setRequestHeader("Cache-Control", "no-cache");
}

function confirmReq(r)
{
	var sErr;
	if (r.status==200)
	{
		var rx, doc;
		if (rx=r.responseXML)
		{
			if (doc=rx.documentElement)
			{
				var node = doc.hasChildNodes()?firstChildEl(doc):doc;
				if (node.tagName=="Error")
					sErr = node.getAttribute("message");
				else
					return true;
			}
			else
				sErr = "empty document";
		}
		else
			"not xml";
	}
	else
		sErr = "status=" + String(r.status) + " (" + r.statusText + ")";

	alert("Error, " + sErr);
	return false;
}

function firstChildEl(node)
{
	var n = node.firstChild;
	while (n && n.nodeType!=1)
		n = n.nextSibling;
	return n;
}

function nextSiblingEl(node)
{
	var n = node.nextSibling;
	while (n && n.nodeType!=1)
		n = n.nextSibling;
	return n;
}

function DoSearch()
{
	if (oSearchForm==null)
	{
		oSearchForm = new FormObject(CreateSearchFormArray(), "Scripts/Server/GetSearchData.asp", "post", "SearchResults", RemoveSearchForm);
		oSearchForm.setSubmit("Search");

		var eForm = oSearchForm.makeForm("Address");
		oSearchForm.eForm = eForm;
	}

	oSearchForm.eContainer = MakeFormContainer("Search for Property", oSearchForm.eForm);
}

function GetRegions()
{
	var req = GetXMLReq();

	function fwait()
	{
		if (req.readyState==4)
		{
			if (confirmReq(req))
			{
				var doc = xmlRegions = req.responseXML.documentElement;
				var arr = new Array();
				var n = firstChildEl(doc);
				while (n)
				{
					arr.push([Number(n.getAttribute("num")), n.getAttribute("label")]);
					n = nextSiblingEl(n);
				}

				arrRegions = arr;
			}

			req = null;
		}
	}

	try
	{
		var sURL = "/NTour/Scripts/Server/GetRegionData.asp";
		req.open("POST", sURL, true);
		XMLReqSetHeaders(req);
		req.onreadystatechange = fwait;
		req.send("");
	}
	catch(e)
	{
		alert("Error prepare to get region info: " + e.message);
	}
}


