
var activeAddressList;
var activeAddressListItemCount;
var activeAddressListIndex;

function zoomAllConfirm(){
	showRetrieving();
	__doPostBack("lnkZoomAll","");
	return false;
}

function disclaimer(){
	var newWin = window.open("Disclaimer.htm","Disclaimer","height=400,width=700,left=0,top=0,menubar=0,resizable=0,toolbar=0",false); 
}

function contact(){
	var contactWin = window.open("Contact.htm","Contact","height=200,width=300,left=0,top=0,menubar=0,resizable=0,toolbar=0",false); 
}

function Open_Card(searchField,searchType){
	if(searchField.length>0){
		var txt = document.forms[0].txtServiceName.value
		window.open('propertycards/frmPropertyCard.aspx?lotids=' + escape(searchField) + '&s=' + searchType + '&service=' + txt,'card','',false);
	}else{
		alert("No parcels selected");
	}	 
}

function Open_Mailing(){
	var searchField = document.forms[0].txtMailingLabels.value	
	if(searchField.length > 0){
		var winLabels = window.open('mailingLabels/MailingLabels.aspx?guid=' + searchField ,'card','',false);
		winLabels.focus();
		return false;
	}else{
		alert("No Parcels were selected");
		return false;
	} 
}

// Mark Horila (Sep 11, 2007): Similar to Export_CSV() but it creates a PDF
function PrintParcels(){
	var searchField = document.forms[0].txtMailingLabels.value	
	if(searchField.length > 0){
		var wnd = window.open('ExportParcelsToPDF/frmExportParcelsToPDF.aspx?guid=' + searchField ,'card','',false);
		wnd.focus();
		return false;
	}else{
		alert("No Parcels were selected");
		return false;
	} 
}

function Export_CSV(){
	var searchField = document.forms[0].txtMailingLabels.value	
	if(searchField.length > 0){
		var wnd = window.open('ExportToCSV/ExportToCSV.aspx?guid=' + searchField ,'card','',false);
		wnd.focus();
		return false;
	}else{
		alert("No Parcels were selected");
		return false;
	} 
}

function Export_RTF(){
	var searchField = document.forms[0].txtMailingLabels.value	
	if(searchField.length > 0){
		var wnd = window.open('ExportToRTF/ExportToRTF.aspx?guid=' + searchField ,'card','',false);
		wnd.focus();
		return false;
	}else{
		alert("No Parcels were selected");
		return false;
	} 
}

function validateScale(obj,txtMessage){
	var errors = 0
	var erMsg = "Scale requires a number greater than 1"
	try{
		var theScale = new Number()
		theScale = obj.value
		theScale = theScale/theScale
		
		if(isNaN(theScale)){
			errors=1
		}		
		if(obj.value < 1){
			errors=1
		}
		if(errors==1){
			alert(erMsg);
			obj.focus();
			obj.select();
			return false;
		}
		return true;
		
	}catch(ex){
		alert(ex.message)
		return false;
	}
}

function scaleKeyDown(evt){
	try{
		evt = (evt) ? evt : event;
		var charCode =(evt.charCode) ? evt.charCode:((evt.which) ? evt.which : evt.keyCode);
		if(charCode==13 || charCode == 3){  //trap enter key
			if(validateScale(document.forms[0].txtScale,"Scale")==true){
				showRetrieving();
				__doPostBack("anchZoomScale","")
				return false;			
			}else{
				return false;
			}		
		}
		//evt.cancelBubble = true;
		
	}catch(e){
		alert(e.description);
		return false;
	}
}

function toggleResultPanel(lnk,pnl){  //toggle results child panel

	try{
		var tbl = document.getElementById(pnl);
		var onOff = 1;
		var lnkImg = lnk.firstChild //get child image
		if(tbl.style.display=="none"){
			tbl.style.display="block";
			lnkImg.src = eval("minus").src;
			onOff = "1";
		}else{
			tbl.style.display="none";
			lnkImg.src = eval("plus").src;
			onOff="0";
		}
		
	}catch(ex){
		alert("Error in 'toggleResultPanel()': \n" + ex.message);
	}
}

function toggleChildPanel(idx){
	var arPlyrs = new Array();
	var blnGotIt=false;
	var lyr, checked;
	var pnlLayer, pnlLayerID, pnlLayerOnOff;
	var lyrs = document.forms[0].txtParentLayers;

	try{
		var pnl = document.getElementById("pnl" + idx);
		if(pnl.style.display=="none"){
			document.getElementById("lnk" + idx).childNodes[0].src = eval("minus").src;	
			pnl.style.display="block"	;
		}else{
			document.getElementById("lnk" + idx).childNodes[0].src = eval("plus").src;
			pnl.style.display="none";
		}
		var lyrs1 = lyrs.value.split(",");
		lyrs.value="";
		for(j=0;j<lyrs1.length-1;j++){
			pnlLayer = lyrs1[j]
			pnlLayerID = pnlLayer.substring(0,pnlLayer.indexOf(":"))
			pnlLayerOnOff = pnlLayer.charAt(pnlLayer.indexOf(":")+1)
			if(parseInt(pnlLayerID)!=parseInt(idx)){
				lyrs.value += lyrs1[j] + ",";
			}else{
				if(pnlLayerOnOff=="1"){
					pnlLayerOnOff = "0";
				}else{
					pnlLayerOnOff = "1";
				}
				lyrs.value += pnlLayerID + ":" + pnlLayerOnOff + ",";
			}		
		}
		
	}catch(e){
		alert(e.message)
	}
}

function toggleChildLayers(obj){
	//this is run from the layer category checkboxes
	//turns on/off child layers in category
	//toggles group layers textbox for server
	//process of display of layers
	
	//3 things need to occur
	// 1. toggle all the child layer checkboxes. 2.toggle child layers textbox  3. toggle parent layers textbox.
	var i,idx,layerId, groupLayers,arGroupLayers, groupLayer, groupLayerId, groupLayerOnOff
	var groupId = obj.id.substring(8,obj.id.length)
	
	try{
		//toggle group layers
		//idx = obj.id.substring(8,obj.id.length)
		var isChecked = obj.checked
		var txtLayerListCheckboxes = document.forms[0].txtLayerList
		var checked
		var artxtLayerList = document.forms[0].txtLayerList.value.split(",")
		
		//1.check all child layer checkboxes
		for(i=0;i<layerScales.length-1;i++){
			layerId = layerScales[i][0]
			groupLayerId = layerScales[i][4]
			if(groupId==groupLayerId){
				if(document.getElementById("chk" + layerId)){
					document.getElementById("chk" + layerId).checked = isChecked
				}
				if(isChecked){
					checked="1"
				}else{
					checked="0"
				}
				//2. update child layers textbox
				for(x=0;x<artxtLayerList.length-1;x++){
					checkBox = artxtLayerList[x]
					checkBoxId = checkBox.substring(0,checkBox.indexOf(":"))
					if(checkBoxId==layerId){
						artxtLayerList[x]=checkBoxId + ":" + checked
						break;
					}
				}		 
			}
		}
		//repopulate checkBoxes textbox
		txtLayerListCheckboxes.value = artxtLayerList.join(",")
		
		if(obj.checked){
			isChecked="1";
		}else{
			isChecked="0";
		}		
		//3. update parent layers textbox state
		var blnGotLayerID = false;
		groupLayers = document.forms[0].txtGroupLayersChecked
		if(groupLayers.value.length==0){
			if(isChecked=="1"){
				groupLayers.value = groupId + ":1,"
			}else{
				groupLayers.value = groupId + ":0,"
			}		
			return;
		}else{
			arGroupLayers = groupLayers.value.split(",")
			groupLayers.value=""
			for(i=0;i<arGroupLayers.length-1;i++){
				groupLayer = arGroupLayers[i]
				groupLayerID = groupLayer.substring(0,groupLayer.indexOf(":"))
				if(groupLayerID==groupId){
					if(isChecked=="1"){
						groupLayers.value += groupId + ":1,"
					}else{
						groupLayers.value += groupId + ":0,"
					}
					blnGotLayerID = true;
				}else{
					groupLayers.value += groupLayer + ","
				}				
			}
			if(!blnGotLayerID){
				groupLayers.value += groupId + ":" + isChecked + ","
			}
		}  
		//alert("1. checkboxes='" + txtLayerListCheckboxes.value + "', grouplayers='" + groupLayers.value + "'")
	}
	catch (e){
		alert(e.description);
	}
}

function toggleParentGroupLayers(idx){
	//if grouplayerid is found in textbox, remove it.
	//this is run from the child layer checkboxes
	//child checkboxes remove parent layer checkbox from 
	//layer list for server processing
	
	var groupLayers, arGroupLayers,newGroupLayers,groupLayer,groupLayerId,groupLayerToggle	
	var i
	
	try{
		groupLayers = document.forms[0].txtGroupLayersChecked
		if(groupLayers.value.length==0){
			return;
		}
		//find groupLayerID from layerScales array
		for(i=0;i<layerScales.length-1;i++){
			if(idx==layerScales[i][0]){
				groupLayerId = layerScales[i][4];
				break;
			}
		}
		
		//remove groupLayerId from groupLayer list of checkboxes
		arGroupLayers = groupLayers.split(",")
		//clear textbox for refresh
		groupLayers.value=""
		for(i=0;i<arGroupLayers-2;i++){
			groupLayer = arGroupLayers[i];
			groupLayerId = groupLayer.substring(0,groupLayer.indexOf(":")-1)
			groupLayerOnOff = groupLayer.substring(groupLayer.indexOf(":"),groupLayer.length)
			//if current groupLayerId <> this grouplayerid then copy it back into textbox
			//remove it so not processed on server
			if(groupLayerId != idx){
				groupLayers.value += grouplayer + ","
			}
		}
		alert(groupLayers.value)
	}catch (e){
		alert(e.message)
	}
}

function checkOwner(evt){
	//this takes the keydown event of txtOwner 
	//and click event of btnOwner
	
	var eventObj = ""
	if(window.event){
		eventObj = window.event.srcElement.id
	}else{
		eventObj = evt.target.id;
	}
	if(eventObj.toUpperCase()=="TXTOWNER"){
		if(evt.keyCode==13){
			if(window.event){
				evt.cancelBubble=true
				evt.returnValue=false;
			}else{
				evt.preventDefault();
			}
			if(document.Form1.txtOwner.value==""){
				hideRetrieving()
				alert("Owner's name is required.");	
				document.Form1.txtOwner.focus();	
				return false;
			}else{
				showRetrieving();
				__doPostBack("btnOwner","");
				return false;
			}
		}
	}else if(eventObj.toUpperCase()=="BTNOWNER"){
		if(document.Form1.txtOwner.value==""){
				hideRetrieving()
				alert("Owner's name is required.");
				document.Form1.txtOwner.focus();		
				return false;
		}else{
			showRetrieving();
			__doPostBack("btnOwner","");
			return false;
		}
	}
	return true;
}

function doZoomToParcel(parcelNumber){
	if(parcelNumber.length==0){
		alert("No parcel number defined");
		return;
	}
	document.forms[0].txtZoomToParcelNumber.value=parcelNumber
	showRetrieving();
	__doPostBack("btnZoomToParcel","")
}

function toggleTabs(idx){
	var tSearch, tLayers, tPrint, tResults, txtIndex
	tSearch = document.getElementById("tblSearch")
	tLayers = document.getElementById("tblLayers")
	tPrint = document.getElementById("tblPrint")
	tResults = document.getElementById("tblResults")
	tMarkup	= document.getElementById("tblMarkup")
	txtIndex = document.Form1.txtTabIndex
	txtIndex.value = parseInt(idx)
	
	try{
		switch (idx){
			case 1:
				tSearch.style.display = "block";
				tResults.style.display= "none";
				tLayers.style.display = "none";
				tMarkup.style.display="none";				
				tPrint.style.display = "none";
				updateImageButtons();
				break;
			case 2:
				tSearch.style.display = "none";
				tResults.style.display= "block";
				tLayers.style.display = "none";
				tMarkup.style.display="none";
				tPrint.style.display = "none";
				break;
			case 3:
				tSearch.style.display = "none";
				tResults.style.display= "none";
				tLayers.style.display = "block";
				tMarkup.style.display="none";
				tPrint.style.display = "none";
				break;
			case 4:
				tSearch.style.display = "none";
				tResults.style.display= "none";
				tLayers.style.display = "none";
				tMarkup.style.display="block";
				tPrint.style.display = "none";
				break;	
			case 5:
				tSearch.style.display = "none";
				tResults.style.display= "none";
				tLayers.style.display = "none";
				tMarkup.style.display="none";
				tPrint.style.display = "block";
				break;	
		}
	}catch (ex){
		alert(ex.description);
	}	
}

function setMapCursor(cursorType){
	var map = document.getElementById('mapImage').style;
	if(map == null || cursorType == null || cursorType == '') return;
	
	switch(cursorType.toLowerCase()){
		case 'measure': map.cursor = "url('images/Measure.cur'),default"; break;
		case 'measurefeet': map.cursor = "url('images/MeasureFeet.cur'),default"; break;		
		case 'zoomin': map.cursor = "url('images/ZoomIn.cur'),default"; break;		
		case 'zoomout': map.cursor = "url('images/ZoomOut.cur'),default"; break;		
		case 'pan': map.cursor = "url('images/Pan.cur'),default"; break;
		case 'latlong': map.cursor = "url('images/LatLong.cur'),default"; break;
		case 'northeast': map.cursor = "url('images/NorthingEasting.cur'),default"; break;
		case 'identify': map.cursor = "url('images/Identify.cur'),default"; break;
		default: map.cursor = cursorType;
	}
}

function showStatus(idx){
	switch(idx){
		//Toolbar
		case 1: document.getElementById("divMsg").innerHTML="Toggle Overview Map"; break; //tab 1
		case 2: document.getElementById("divMsg").innerHTML="Full Extent"; break; //tab 2
		case 3: document.getElementById("divMsg").innerHTML="Zoom In"; break; //tab 3
		case 4: document.getElementById("divMsg").innerHTML="Zoom Out"; break; //tab 4
		case 5: document.getElementById("divMsg").innerHTML="Zoom Last"; break; //toolbar
		case 6: document.getElementById("divMsg").innerHTML="Zoom to Scale"; break; //toolbar 
		case 7: document.getElementById("divMsg").innerHTML="Pan"; break; //toolbar
		case 8: document.getElementById("divMsg").innerHTML="Identity"; break; //toolbar
		case 9: document.getElementById("divMsg").innerHTML="Select Tool"; break; //toolbar
		case 34: document.getElementById("divMsg").innerHTML="Select by Radius"; break; //toolbar
		case 10: document.getElementById("divMsg").innerHTML="Hyperlink to documents"; break; //toolbar
		case 11: document.getElementById("divMsg").innerHTML="Print Mailing Labels"; break; //toolbar
		case 12: document.getElementById("divMsg").innerHTML="View Help"; break; //toolbar
		case 13: document.getElementById("divMsg").innerHTML="Refresh Page"; break; //toolbar
		case 14: document.getElementById("divMsg").innerHTML="Clear selected features"; break; //toolbar
		
		case 15: document.getElementById("divMsg").innerHTML="Parcel Search"; break; //tabs
		case 16: document.getElementById("divMsg").innerHTML="View Layers/Legend"; break; //toolbar
		case 17: document.getElementById("divMsg").innerHTML="Print Map"; break; //toolbar
		case 18: document.getElementById("divMsg").innerHTML="View Query Results"; break; //toolbar
		case 19: document.getElementById("divMsg").innerHTML="Refresh Page"; break; //toolbar
		case 20: document.getElementById("divMsg").innerHTML="Toggle Layers"; break; //Expand/Collaps layers
		case 21: document.getElementById("divMsg").innerHTML="View Property Card"; break; //Attribute Results
		case 22: document.getElementById("divMsg").innerHTML="Search by Address"; break; //Attribute Results
		case 23: document.getElementById("divMsg").innerHTML="Search by Owner/Co-Owner name"; break; //Attribute Results
		case 24: document.getElementById("divMsg").innerHTML="Search by Map-Block-Lot-Unit"; break; //Attribute Results
		case 25: document.getElementById("divMsg").innerHTML="Search for abutting features"; break; //Attribute Results
		case 26: document.getElementById("divMsg").innerHTML="Toggle Display Coordinates"; break; //Attribute Results
		//case 37: document.getElementById("divMsg").innerHTML="Search by Sales History"; break; //Attribute Results
		
		//pan tools
		case 26: document.getElementById("divMsg").innerHTML="Pan Northwest"; break;
		case 27: document.getElementById("divMsg").innerHTML="Pan North"; break;
		case 28: document.getElementById("divMsg").innerHTML="Pan Northeast"; break;
		case 29: document.getElementById("divMsg").innerHTML="Pan East"; break;
		case 30: document.getElementById("divMsg").innerHTML="Pan Southeast"; break;
		case 31: document.getElementById("divMsg").innerHTML="Pan South"; break;
		case 32: document.getElementById("divMsg").innerHTML="Pan Southwest"; break;
		case 33: document.getElementById("divMsg").innerHTML="Pan West"; break;
		
		
		case 35:document.getElementById("divMsg").innerHTML="Zoom to Landmark"; break;
		case 36:document.getElementById("divMsg").innerHTML="Toggle Display Coordinates"; break;
		
		case 37:document.getElementById("divMsg").innerHTML="Display Map Coordinates"; break;
		case 38:document.getElementById("divMsg").innerHTML="Display Lat/Long Coordinates"; break;
		case 39:document.getElementById("divMsg").innerHTML="Measure Area"; break;
		case 40:document.getElementById("divMsg").innerHTML="Measure Distance"; break;
		
		case 60: document.getElementById("divMsg").innerHTML="Toggle Overview"; break;
		case 61: document.getElementById("divMsg").innerHTML="Toggle Compass"; break;
		case 62: document.getElementById("divMsg").innerHTML="Toggle Scale"; break;
		
	}
	return true;
}

function clearStatus(){
	 document.getElementById("divMsg").innerHTML="Active Tool: " + document.forms[0].txtToolState.value;
}
	
function showRetrieving(){
	setAdvSearchLayerToHiddenTag()
	//var loadMap = document.getElementById("loadMap")
	document.getElementById("loadMap").style.visibility="visible";
	document.getElementById("btnDownloadMap2").disabled = true;
	document.getElementById("btnGetAnno").disabled = true;
	document.getElementById("rubberBand").style.visibility="hidden";
	document.getElementById("selectBox").style.visibility="hidden";
	
	//if(isVML){
	//	document.getElementById("rubberBand").style.zIndex=160;
	//}else{
	//	document.getElementById("selectBox").style.zIndex=160;
	//}
    //setProgressBarTimer(1000);
}

function hideRetrieving(){
	//var loadMap = document.getElementById("loadMap")
	document.getElementById("loadMap").style.visibility="hidden";
	//loadMap.style.display="none"
	//loadMap.style.zIndex=0
	document.getElementById("rubberBand").style.visibility="hidden";
	document.getElementById("selectBox").style.visibility="hidden";
	document.getElementById("btnDownloadMap2").disabled = false;
}

function checkKeyDown(evt){
	if(window.event){
		if(window.event.keyCode==13){
			window.event.cancelBubble = true;
 			window.event.returnValue = false;
			return false;
		}
	}else if(evt){
		if(evt.keyCode==13){
			evt.preventDefault();
			//if(evt.stopPropogation){
			//	evt.stopPropogation();
			//}
			return false;
		}
	}
	return true;
}
function checkAddress(evt){
	var sKey;
	var txtAddNum = document.forms[0].txtStreetNum.value;
	if (window.event) {
		evt = window.event; 
		sKey = evt.keyCode;
 		evt.cancelBubble = true;
 		evt.returnValue = false; 		
 	} else {
 		sKey = evt.keyCode;      
    	document.getElementById('txtStreetNum').blur();        
		setTimeout("refocus('txtStreetNum')",0);
		if(evt.stopPropogation){
			evt.preventDefault();
			evt.stopPropogation();
		}
	}
	//evt = (evt) ? evt:((window.event) ? event : null);
	if(sKey==13){		
		if(txtAddNum==""){
			if(confirm("You have not entered an address number. Continue anyway?")){
				return true;
			}else{
				return false;
			}
		}
	}
}

var iProgressCounter =0

function showProgressBar(){
	//function requires a div tag on the page with an ID of divProgBar.
	var i = 0
	var dots = ""
	if (iProgressCounter >25){
		iProgressCounter = 0;
		dots="";
	}
	for(i=0;i<=iProgressCounter;i++){
		dots += "| "
	}
	document.getElementById("divProgBar").innerHTML = dots
	iProgressCounter +=1
}

function setProgressBarTimer(timerVal){
	//document.getElementById("divProgBar").style.display="block";
	//window.setInterval(showProgressBar,timerVal);
}

function getKeyCode(evt){
	evt = (evt) ? evt : event;
	var charCode =(evt.charCode) ? evt.charCode:((evt.which) ? evt.which : evt.keyCode);
	return charCode;
}

function readKey(evt){
	var charCode;
	evt = (evt)?evt:((window.event) ? event:null);
	if(evt){
		charCode = getKeyCode(evt);
	}
	if(charCode==27){  //trap Escape key
		//document.forms[0].onsubmit=loading();
		document.getElementById("rubberBand").style.visibility="hidden";
		document.getElementById("selectBox").style.visibility="hidden";
		hideRetrieving();
		return false;
	}
	return false;
}

function onlyNumbers(evt){
	var charCode;
	evt = (evt)?evt:((window.event) ? event:null);
	if(evt){
		charCode = getKeyCode(evt);
	}
	if(charCode>=48 && charCode<=57){
		return true
	}
	return false
}

function blockSubmit(){
	return false;
}

function saveResultsHTML(){
	var txt = document.forms[0].txtResultsHTML
	var theDiv = document.getElementById("resultsTable")
	txt.value = theDiv.innerHTML
}

function checkStreetNumDown(obj,evt){
	var streetNum = document.forms[0].txtStreetNum;
	var charCode="";
	var sErMsg=""
	try{
		hideAddressObjects();		
		evt = (evt)?evt:((window.event) ? event : null);
		if(evt){
			charCode = evt.keyCode;
		}
		if(charCode==13){
			if(obj.id.toUpperCase()=="TXTSTREETNUM" ||
				obj.id.toUpperCase()=="BTNADDRESS" ||
				obj.id.toUpperCase()=="TXTSTREETNAME" ||
				obj.id.toUpperCase()=="TXTSTATE" ||
				obj.id.toUpperCase()=="TXTCITY"){
				
				if(document.forms[0].txtState){
					if(document.forms[0].txtState.value==""){
						sErMsg+="-State\n";
					}
				}
				if(document.forms[0].txtCity){
					if(document.forms[0].txtCity.value==""){
						sErMsg+="-City\n";
					}
				}
				if(document.forms[0].txtStreetName){
					if(document.forms[0].txtStreetName.value==""){
						sErMsg+="-Street\n";
					}
				}
				if(sErMsg.length>0){
					alert("Required Fields:\n" + sErMsg);
					return false;
				}
				//if(streetNum.value==""){
				//	if(confirm("You have not entered a street address.\nThis could result in extended waits for results.\nContinue?")){
				//		showRetrieving();
				//		__doPostBack("btnAddress","");
				//		return false;
				//	}else{
				//		return false;
	     			//}
	     		//}else{
	     			showRetrieving();
					__doPostBack("btnAddress","");
					return false;
	     		//}
	     	}
	     }
	     
	     if(obj.id.toUpperCase()=="BTNADDRESS"){
			if(document.forms[0].txtStreetName){
				if(document.forms[0].txtStreetName.value==""){
					alert("Please enter a street name (e.g. Elm St)");
					document.forms[0].txtStreetName.focus();
					return false;
				}
			}
	     	if(streetNum.value==""){
			//	if(confirm("You have not entered a street address.\nThis could result in extended waits for results.\nContinue?")){
					showRetrieving();
					__doPostBack("btnAddress","");
					return false;
			//	}else{
			//		return false;
	     	//	}
	     	}
	     	showRetrieving();
			__doPostBack("btnAddress","");
			return false;
	    }     
	    
	     
	}catch (e){
		alert(e.message);
	}
}


function checkBuffer(){
	//check if Spatial Query has already been done
	var qry = document.forms[0].txtSpatialQuery.value
	var ddl = document.forms[0].ddlActiveLayer
	try{			
		if(qry==""){
			alert("You have not selected any features.");
			return false;
		}else{
			//find the stored activeLayer from the
			//stored spatial query
			pos = qry.indexOf("fromlayer=") + 11
			var layerid=qry.substring(pos,qry.indexOf("/>")-1);
			if(layerid==""){
				alert("You have not selected any features");
				return false
			}
			
			/* *****************
			// LEAVE OUT FOR NOW AS 'SELECTED LAYER' IS IN txtSelectedLayerID
			
			//get 'Layer Name from array
			var arLength=layerScales.length
			//compare selected layer vs active layer for buffering
			var layerName = "";
			for (i=0;i<arLength-2;i++){
				if(layerScales[i][0]==layerid){
					layerName = layerScales[i][1];
					break;
				}
			}
			for (i=0;i<arLength-2;i++){
				if(layerScales[i][1].toUpperCase()==ddl.options[ddl.selectedIndex].text.toUpperCase()){
					var theID = layerScales[i][0];
					if(layerid!=theID){
						var sMsg = "Buffer Error(s):\n- The active layer has no selected features.\n"
						sMsg+="OR\n- The selection set layer is not the active layer\n\n" 
						sMsg+="'" + escape(layerName) + "' is the selected layer" 
						alert(sMsg);
						return false;
					}
				}
			}
			
			//*************END OF REM'D OUT CODE  **********************
			*/
			
			//validate buffers for min/max scale. if good, send name of control
			//to .net server-side event handler as this can get called by keydown
			//event in distance box.
			var lyrs = document.forms[0].ddlBufferLayers
			if(validateBuffers(lyrs.options[lyrs.selectedIndex].text)){
				showRetrieving()
				__doPostBack("btnBuffer");
				return false;
			}else{
				return false;
			}
		}	
	}catch (ex){
		alert(ex.message);
		return false;
	}
}

function toggleLayerState( layerId ){
	//1. used to turn layers on/off at server
	//2. if layer is clicked, toggle Group Layer checkbox off.
	
	var list, layerInfo, checked, theLayerID, isChecked, groupLayerID, groupLayerID2, groupLayers, groupLayers2, j, groupLayer, groupList
	var blnGotIt = false;
	
	try{	
		list = document.forms[0].txtLayerList		
		var lyrs = list.value;
		
		//1. store toggle state of checkbox
		if(lyrs.indexOf(",")==-1){return}
		
		var arPlrs = list.value.split(",")
		for(i=0;i<arPlrs.length-1;i++){
			layerInfo = arPlrs[i];
			theLayerID = layerInfo.substring(0,layerInfo.indexOf(":"));
			isChecked = layerInfo.charAt(layerInfo.indexOf(":")+1);
			if(isChecked=="0"){
				isChecked="1";
			}else{
				isChecked="0"
			}
			//alert('theLayerID=' + theLayerID + ', isChecked=' + isChecked);
			if(parseInt(theLayerID) == parseInt(layerId)){
				arPlrs[i]=layerId + ":" + isChecked;
				//toggle group checkbox
				break;
			}
			
		}
		
		//repopulate the textbox
		list.value=""
		for(i=0;i<arPlrs.length-1;i++){
			list.value += arPlrs[i] + ",";
		}
		
		//2. remove group layer from list and toggle the group layer's checkbox
		groupList=document.forms[0].txtGroupLayersChecked.value
		//if (groupList.value.length==0){
		//	groupList.value=}
		groupLayers = groupList.split(",")
		var blnGotGroup = false;
		
		//get GroupID from array
		for(i=0;i<layerScales.length-1;i++){
			if(layerId==layerScales[i][0]){
				//get Group Layer ID for Group Layer checkbox
				groupLayerID = layerScales[i][4]
				break;
			}
		}	
		document.getElementById("chkGroup" + groupLayerID).checked=false;
		
		//remove the Group LayerID from the textbox
		//so the server dosen't process the group	
		if (groupLayers.length==0){
			//leave it out so not processed on server
			return;
		}else{	
			var newGroupLayers = ""		
			for (j=0;j<groupLayers.length-1;j++){
				groupLayer = groupLayers[j]
				groupLayerID2 = groupLayer.substring(0,groupLayer.indexOf(":"))
				isChecked = groupLayer.charAt(groupLayer.indexOf(":")+1)
				if(groupLayerID2!=groupLayerID){
					newGroupLayers += groupLayerID2 + ":" + isChecked + ","
				}
			}
			//repopulate group layers textbox
			document.forms[0].txtGroupLayersChecked.value = newGroupLayers
		}
		
	}catch(e){
		alert(e.message)
	}
}

function refocus(objName){
	document.getElementById(objName).focus();
}

function sendPan(objID){
	showRetrieving();
	__doPostBack(objID);
	return false;
}

function validateBuffers( LayerName ){

	//validate buffer distance
	var sBufferString ="BUFFER"
	var distance = new Number()
	distance = document.forms[0].txtBufferDistance.value
	distance = (distance/distance)
	
	if(isNaN(distance)){
		alert("Please enter a numeric distance");
		document.forms[0].txtBufferDistance.focus();
		document.forms[0].txtBufferDistance.select();
		return false;
	}
		
	var intScale = new Number()
	var intTestScale = new Number()
	intTestScale = document.forms[0].txtScale.value
	intTestScale = intTestScale/intTestScale
	
	if(isNaN(intTestScale)){
		alert("Scale requires a numeric value");
		document.forms[0].txtScale.focus();
		document.forms[0].txtScale.select();
		return false;
	}
	
	intScale = document.forms[0].txtScale.value

	var min
	var max
	var isBufferLayer
	var activeLayerId, bufferLayerid
	var ddlAL, ddlBL
	var sLayerName
	var calcScale
	
	try{
		//array is filled from server
		ddlAL = document.forms[0].ddlActiveLayer
		ddlBL = document.forms[0].ddlBufferLayers
		var qry = document.forms[0].txtSpatialQuery.value
		if(qry.length==0){
			alert("There are no selected features")
			return;
		}
		var pos = qry.indexOf("fromlayer=") + 11
		var layerid=qry.substring(pos,qry.indexOf("/>")-1);
		var layerName = "";
		var arLength=layerScales.length;
		for (i=0;i<arLength-2;i++){
			if(layerScales[i][0]==layerid){
				layerName = layerScales[i][1];
				break;
			}
		}
		activeLayerId = layerName //ddlAL.options[ddlAL.selectedIndex].value
		bufferLayerId = ddlBL.options[ddlBL.selectedIndex].value
		
		if(!layerScales){
			alert("Scale settings have not been configured.\nPlease contact the system administrator.");
			return false;
		}
		//loop through the array and compare the scales to the selected buffer layer
				
		var sLayer = LayerName.toUpperCase();
		var arLayerName
		
		if(activeLayerId == bufferLayerId){
			sLayerName =   sLayer +	"BUFFER"
			for(i=0;i<layerScales.length-1;i++){
				arLayerName = layerScales[i][1].toUpperCase()
				arLayerName = arLayerName.toUpperCase();
				isBufferLayer = layerScales[i][5]
				//if(arLayerName==sLayerName){
				if(arLayerName.indexOf(LayerName.toUpperCase())>-1 && arLayerName.indexOf("BUFFER") > -1){
					//compare min scale
					min = Math.round((layerScales[i][2] * 12 * 96),0)
					max = Math.round((layerScales[i][3] * 12 * 96),0)
					if(min>intScale){
						alert("The minimum scale(" + min + ") is greater than the current scale(" + intScale + ") and cannot be shown.\nEither change the scale or select another layer to buffer");
						return false;
					}
					//check max scale
					//0 can buffer at any scale
					if(max==0){return true};
					if(max<intScale){
						alert("The maximum scale (" + max + ") for " + LayerName + " is less than the current scale(" + intScale + ") and cannot be shown.\nEither change the scale or select another layer to buffer");
						return false;
					}else{
						return true;
					}
				}								
			}
			alert("This map is not configured to allow you to create a buffer of " + sLayer + " surrounding selected features in the same layer.\nPlease choose another layer to buffer on.")
			return false;	
		}		
		return true;
	}
	catch (ex){
		alert(ex.message)
	}
}	

function getOVMapMouseCoords(evt){
	var x,y
	evt = (evt)?evt:((window.event) ? event:null);
	x = evt.pageX ? (evt.pageX-minX): (evt.offsetX) ; // the page x when event happens
	y = evt.pageY ? (evt.pageY-minY) : (evt.offsetY);
	document.forms[0].txtOVMapImageMouseCoords.value = x + " " + y
	showRetrieving();
	__doPostBack('OVMapImage',"")
}

function toggleHelpPanel(tblName){
	var tbl = document.getElementById(tblName);
	var theId =tbl.id.toLowerCase()
	switch(theId){
		case "tblsearchhelp":
			if(document.getElementById("ddlStreets").style.visibility=="hidden"){
				document.getElementById("ddlStreets").style.visibility="visible";
			}else{
				document.getElementById("ddlStreets").style.visibility="hidden";
			}
			break;
		
	}
	if(tbl.style.visibility=="hidden"){
		tbl.style.visibility="visible";
	}else{
		tbl.style.visibility="hidden";
	}
}	

function getLandmark(){
	showRetrieving();
	var ddl = document.forms[0].ddlLandmarks
	var txt = document.forms[0].txtLandmarkName
	txt.value = ddl.options[ddl.selectedIndex].text
	showRetrieving()
	__doPostBack("btnLandmark","");	
}


//used to toggle the Search Panels
function toggleSearchPanel(idx){
	var i = 0
	var k = 0
	var pnls 
	var tbls = document.getElementsByTagName("table")
	for(i=0;i<tbls.length;i++){
		if(tbls[i].className){
			if(tbls[i].className.toLowerCase()=="tblsearch"){
				if(idx==k){	
					//store for when page reloads
					document.forms[0].txtSearchPanelIndex.value=k;												
					tbls[i].style.display="block"
					setHelpText(idx)
				}else{
					tbls[i].style.display="none"
				}
				k++
			}
		}
	}
	
	return false;
}

function setHelpText(idx){
	//sets the help text on the search panel
	//at the bottom
	var helpDiv = document.getElementById("divSearchHelp")
	var msg	= ""
	switch(idx){
		case 0:
			msg  ="<b>Address Search</b><br/>Enter a street name, a street number if desired, and click the magnifying glass to start the search.  "
			msg +="You can choose from lists of valid street names and/or street numbers by clicking on the drop-down button next to each entry field.  "
			msg +="The street list shows streets that begin with the letters you've typed.  To improve performance, we recommend that you type the first letter of your street name before clicking the drop-down button.  "
			msg +="The street number list shows all valid address numbers on streets that begin with the letters you've typed in the street name field."
			break;
		case 1:
			msg = "<b>Owner Search</b><br/> Enter any part of the owner's first or last name, and click on the magnifying glass to start the search."
			break;
		case 2:
			msg="<b>Parcel Search</b><br/>Enter any portion of the parcel identifier, then click on the magnifying glass to start the search.  "
			msg+="Different communities define their parcels in different ways.  Some communities break up their parcel identifiers into multiple parts, such as the Map (or Plat), Block, Lot and/or Unit.  "
			msg+="You do not have to fill in every part of the parcel identifier.  If you leave a field blank, the system will find parcels that have any value in that blank field.  "
		    msg+="You can get a list of valid values in any part of the parcel identifier by clicking the drop-down button.  This will list all valid values for that field that also meet the other filter options that you've specified."
			break;
		case 3:
			msg="<b>Advanced Search</b><br/>Enter one or more search conditions to describe properties. For example, one search condition might be: Acreage > 10.  To add an extra search condition, click on the 'Add Criteria' link.&nbsp;&nbsp;"
			msg+="To remove all search conditions, click on the 'Reset' link.&nbsp;&nbsp;After entering your search conditions, click the magnifying glass to start the search."
			break;
		case 4:
			msg="<b>Buffer Search</b><br/>Select one or more parcels (or other map features) using one of the Select tools.&nbsp;&nbsp;Then select the type of map feature (such as Parcels) "
		msg+="that you want to find, and the allowable distance away from the selected features. Then click the magnifying glass to start the search."
			break;
		case 5:
			msg="<b>Landmark Search</b><br/>Pick a named location, and then click on the magnifying glass to zoom the map to that location."
			break;
	}	
	helpDiv.innerHTML=msg  
}


///////////////////////  ADDRESS SEARCH ////////////////////////////////////////////
function toggleAddressObject(searchType,listObject,targetObject){

	var state = document.getElementById("txtState");	
	var city = document.getElementById("txtCity");	
	var street=document.getElementById("txtStreetName");
	var address=document.getElementById("txtStreetNum");

	var errmsg='';
	
	var hideList = false;
	var objList = null;
	
	try{
		//Validation	
		switch(searchType.toUpperCase()){
			case "STATE":
				//user dosen't have to enter a state. it will
				//default to all
				objList = document.getElementById('divStates');
				hideList = (objList.style.visibility=='visible');
				break;
				
			case "CITY":
				if(!state) errmsg+="-'txtState' does not exist\n";
				else if(state.value=='') errmsg+="-State required\n";
				
				objList = document.getElementById('divCities');
				hideList = (objList.style.visibility=='visible');
				break;
				
			case "STREET":
			{
				if(!state) errmsg+="-'txtState' does not exist\n";
				else if(state.value=='') errmsg+="-State required\n";
				
				if(!city) errmsg+="-'txtCity' does not exist\n";
				else if(city.value=='') errmsg+="-City required\n";

				objList = document.getElementById('divStreets');
				hideList = (objList.style.visibility=='visible');
			}
			break;
				
			case "ADDRESS":
			{
				if(!state) errmsg+="-'txtState' does not exist\n";
				else if(state.value=='') errmsg+="-State required\n";
				
				if(!city) errmsg+="-'txtCity' does not exist\n";
				else if(city.value=='') errmsg+="-City required\n";				
				
				if(!street) errmsg+="-'txtStreetName' does not exist\n";
				else if(street.value=='') errmsg+="-Street required\n";

				objList = document.getElementById('divStreetNums');
				hideList = (objList.style.visibility=='visible');
			}
			break;
				
			default:
			{
				objList = null;
			}				
		}
		
		if(objList != null && hideList == true){
			objList.style.visibility='hidden';
			objList.style.display='none';
		}
		else{
			if(errmsg=='') getAddresses(searchType,state.value,city.value,street.value,address.value,listObject,targetObject);
			else alert("Page Error:\n" + errmsg);
		}
		
	}catch(ex){
		alert("toggleAddressObject:(windowFunctions.js): " + ex.message);
	}
}

function hideAddressObjects(){

	hideAddressObject("divStreetNums");
	hideAddressObject("divStreets");
	hideAddressObject("divStates");
	hideAddressObject("divCities");
	hideAddressObject("divMaps");
	hideAddressObject("divBlock");
	hideAddressObject("divLot");
	hideAddressObject("divUnit");
	
	/*try{
		document.getElementById("divStreetNums").style.display="none";
		document.getElementById("divStreets").style.display="none";
		document.getElementById("divStates").style.display="none";
		document.getElementById("divCities").style.display="none";
		document.getElementById("divMaps").style.display="none";	
		document.getElementById("divBlock").style.display="none";
		document.getElementById("divLot").style.display="none";
		document.getElementById("divUnit").style.display="none";
		document.body.style.cursor="default";
	}
	catch(ex) {}*/
}

function showAddressObject(listObject){
	try{
		document.getElementById(listObject).style.display="block";
		document.getElementById(listObject).style.visibility="visible";
	} catch(ex) { }
}

function hideAddressObject(listObject){
	try{
		document.getElementById(listObject).style.display="none";
		document.getElementById(listObject).style.visibility="hidden";
	} catch(ex) { }
}

function unloadSearchLayerList(obj) { ddl.innerHTML=""; }
/*
function hideStreetAddresses(){
	document.getElementById("divStreetNums").style.display="none";
}

function showStreetNums(){
	document.getElementById("divStreetNums").style.display="block";
}

function setStreetNum(streetNum){
	//set the select
	document.forms[0].txtStreetNum.value = streetNum;
	hideStreetAddresses()
}
*/
function setListItem(item,targetObject,activeObject){
	var tgt=document.getElementById(targetObject);
	var lst=document.getElementById(activeObject);
	tgt.value=item;
	hideAddressObject(activeObject)
}

function hiLite(evt){
	//showStreetNums()
	evt = (evt) ? evt : window.event;
	var elem =(evt.srcElement) ? evt.srcElement : evt.target;
	elem.style.backgroundColor="#ffff00";
}

function loLite(evt){
	evt = (evt) ? evt : window.event;
	var elem =(evt.srcElement) ? evt.srcElement : evt.target;
	elem.style.backgroundColor="#ffffff";
}

function hideMe(obj){
	obj.style.display="none"
}
function setAdvSearchLayerToHiddenTag(){
	var txt = document.forms[0].txtAdvSearchLayer;
	var ddl = document.forms[0].ddlAdvSearchLayers;
	if(txt){
		if(ddl){
			if(ddl.selectedIndex >= 0){
				var ddlVal = ddl.options[ddl.selectedIndex].value;
				txt.value=ddlVal.substr(0,ddlVal.indexOf(":"));
			}else{
				//surpress.  It should never get here...
			}
		}else{
			alert("'ddlAdvSearchLayers' dropdown dosen't exist");
		}
	}else{
		alert("'txtAdvSearchLayer' hidden tag dosen't exist");
	}
}

function addressBoxKeyUp(evt){

	evt = (evt) ? evt : window.event;
	var elem =(evt.srcElement) ? evt.srcElement : evt.target;
	var id = elem.id.toUpperCase();
	var ddl;
	var arDdls = new Array();
	var i = 0;
	
	with(document){
		arDdls[0] = getElementById("divStates");
		arDdls[1] = getElementById("divCities");
		arDdls[2] = getElementById("divStreets");
		arDdls[3] = getElementById("divStreetNums");
	}
	
	switch(id){
		case "TXTSTATE":			
			ddl = arDdls[0];		
			if(id==activeAddressList){				
				if(ddl.childNodes){
					//showAddressObject(ddl.id);
					//doListSearch(ddl.id,"txtState");
				}else{
					hideAddressObject(ddl.id);
				}
			}else{
				activeAddressList = id;
				toggleAddressDivs(id,arDdls,"divStates")			
			}			
			clearList("divCities");
			clearList("divStreets");
			clearList("divStreetNums");
			break;
			
		case "TXTCITY":
			ddl = arDdls[1];
			if(id==activeAddressList){				
				if(ddl.childNodes){
					//showAddressObject(ddl.id);
					//doListSearch(ddl.id,"txtCity");
				}else{
					hideAddressObject(ddl.id);
				}
			}else{
				activeAddressList = id;
				activeAddressListIndex = -1
				hideAddressObject(ddl.id);
				doListSearch(ddl.id,"txtCity");				
			}
			clearList("divStreets");
			clearList("divStreetNums");
			break;
			
		case "TXTSTREETNAME":
			ddl = arDdls[2];
			if(id==activeAddressList){				
				if(ddl.childNodes.length>0){
					//showAddressObject(ddl.id);
					//doListSearch(ddl.id,"txtStreetName");
				}else{
					ddl.style.display=="none";
				}
			}else{
				activeAddressList = id;
				hideAddressObject(ddl.id);
				activeAddressListIndex = -1;
				doListSearch(ddl.id,"txtStreetName");				
			}
			clearList("divStreetNums");
			break;
			
		case "TXTSTREETNUM":
			ddl = arDdls[3];
			if(id==activeAddressList){				
				if(ddl.childNodes.length>0){
					//showAddressObject(ddl.id);
					//doListSearch(ddl.id,"txtStreetNum");
				}else{
					ddl.style.display=="none";
				}
			}else{
				hideAddressObject(ddl.id);
				activeAddressList = id;
				activeAddressListIndex = -1;
				doListSearch(ddl.id,"txtStreetNum");
			}
			break;
	}
}

function toggleAddressDivs(objId,divList,divId){
	
	var blnFound = 0;
	
	switch(objId.toUpperCase()){
		case "TXTSTATE":
			for(i=0;i<divList.length;i++){
				if(divList[i].id.toUpperCase()=="DIVSTATES"){
					blnFound = 1;
					showAddressObject(divList[i]);
				}else{
					hideAddressObject(divList[i]);
					if (blnFound == 1) {
						clearList(divList[i]);
					}
				}
			}
			break;
			
		case "TXTCITY":
			for(i=0;i<divList.length;i++){
				if(divList[i].id.toUpperCase()=="DIVCITIES"){
					showAddressObject(divList[i]);
					blnFound = 1;
				}else{
					hideAddressObject(divList[i]);
					if (blnFound == 1) {
						clearList(divList[i]);
					}
				}
			}
			break;
			
		case "TXTSTREETNAME" :
			for(i=0;i<divList.length;i++){
				if(divList[i].id.toUpperCase()=="DIVSTREETS"){
					showAddressObject(divList[i]);
					blnFound = 1;
				}else{
					hideAddressObject(divList[i]);
					if (blnFound == 1) {
						clearList(divList[i]);
					}
				}
			}
			break;
			
		case "TXTSTREETNUM" :
			for(i=0;i<divList.length;i++){
				if(divList[i].id.toUpperCase()=="DIVSTREETNUMS"){
					showAddressObject(divList[i]);
					blnFound = 1;
				}else{
					hideAddressObject(divList[i]);
					if (blnFound == 1) {
						clearList(divList[i]);
					}
				}
			}
			break;
	}
}

function clearList(objList) {
	var ddl = document.getElementById(objList)
	while (ddl.childNodes[0]) { ddl.removeChild(ddl.childNodes[0]); }
}

function doListSearch(objList,objTextBox){
	//debugger
	var itemData = "";
	var itemHeight=0;
	var qry = document.forms[0].elements[objTextBox].value.toUpperCase();
	var qryLength = qry.length;
	var ddl = document.getElementById(objList)
	if(ddl.childNodes.length==0){return}
	itemHeight=parseInt(ddl.childNodes[0].style.height);
	activeAddressListItemCount = ddl.childNodes.length;	
	for(i=0;i<activeAddressListItemCount;i++){
		ddl.childNodes[i].className="addressListItem";
	}
	if(qry==""){return;}
	for(i=0;i<activeAddressListItemCount;i++){
		itemData = ddl.childNodes[i].innerHTML;
		if(itemData.substring(0,qryLength).toUpperCase()==qry){
			var scrollPos = i * (itemHeight);
			// 06-25-07 boh - modified the following statement to get it to reliably work in IE
			setTimeout("document.getElementById('"+objList+"').scrollTop = " + scrollPos,0);
			ddl.childNodes[i].className="addressListItemHover";
			break;						
		}
	}
}
			

