var CurLyr='';
var CurAct='zin';
var CurTab=1;
var TaxType='';
var ActiveLayerIndex=-1;
var sHighlight="";
var sGeoPt="";	// #,x,y...
var LyrIDVis='';
var isIE=false;
var isNav=(navigator.appName.indexOf("Netscape")>=0);
var isNav4=false;
var isIE4=false;
var is5up=false;
var toolMode='';
var okToSend =true;
var bDbg=0;

var ovBS=2;
var zF=2;
var eL=0,eR=0,eT=0,eB=0;
var fL=eL, fR=eR, fT=eT, fB=eB;
var lmL=0, lmR=0, lmT=0, lmB=0;
var oveL=0, oveR=0, oveT=0, oveB=0;

var mW=400,mH=300;
var bMap=0;
var mX=0,mY=0;
var mSizes=new Array();
var ovW=150,ovH=120;
var msW=400,msH=35;

var ScaleBarUnits="Feet";
var MapUnits="FEET";
var totalMeasure=0;
var currentMeasure=0;
var clickCount=0;
var	clickPointX= new Array();
var clickPointY= new Array();
var clickMeasure= new Array();

var bShowOV=1;
var bChg=0;
var bMsDwn=0;
var bPan=false;
var bZoom=false;
var bSelBox=false;
var numDecimals=2;
var pixelTolerance=2;
var xDis=Math.abs(eR-eL);
var yDis=Math.abs(eT-eB);
var pX=xDis/mW;
var pY=yDis/mH;
var mapX=eL,mapY=eT;
var mapScaleFactor=xDis/mW;
var fScale=0;
var zInd=0;

var msX=0,msY=0;
var x1=0,y1=0;
var x2=0,y2=0;
var zL=0,zR=0,zT=0,zB=0;

var LayerName = new Array();
var LayerID = new Array();
var LayerVisible = new Array();
var LayerMinScale = new Array();
var LayerMaxScale = new Array();
var LayerType= new Array();
var LayerSettings='';

var nTmrID=0;

// Process bar images index
var mapInd=0, dataInd=0;

//var IMap=new Image;
//var IOV=new Image;

function zomHis()
{
	this.node=new Array();
	this.node.length=0;
	this.getNode=function(){
		var v='',i=this.node.length;
		if(0==i)return v;
		--i;v=this.node[i];
		if(i>=0)this.node.length=i;
		return v;
	}
	
	this.saveNode=function(l,t,r,b,img)
	{	var c,s,es,i=this.node.length;
		c=l+','+t+','+r+','+b;
		if(i>0){
			s=this.node[i-1];
			if(""!=s){
				es=s.split(',');
				if(!isDif(es,l,t,r,b))return;
			}
		}
		this.node[i]=c+','+img;
	}
	
	this.clear=function(){this.node.length=0;}
	this.count=function(){return this.node.length;}
}
var zPre=new zomHis(), zNext=new zomHis();
zPre.clear(); zNext.clear();

function isDif(es,l,t,r,b)
{
	var s=Math.abs(Math.abs(parseFloat(es[0]))-Math.abs(l))>0.0000001;
	s|=Math.abs(Math.abs(parseFloat(es[1]))-Math.abs(t))>0.0000001;
	s|=Math.abs(Math.abs(parseFloat(es[2]))-Math.abs(r))>0.0000001;
	s|=Math.abs(Math.abs(parseFloat(es[3]))-Math.abs(b))>0.0000001;
	return s;
}
function getAbsPos(e,LT) {
	var s,v,nPos=0;
	while(e!=null){
		e=e.offsetParent;
		if(null==e)break;

		if(0==LT){
			v=parseInt(e.offsetLeft);if(!isNaN(v)) nPos+=v;
		}else{
			v=parseInt(e.offsetTop);if(!isNaN(v)) nPos+=v;
		}
	}
	return nPos;
}	

function mDown(e){
	if(bChg || !bMap) return true;
	var Btn;
	if(isNav)	Btn=e.which;
	else	Btn=window.event.button;

	if(Btn!=1) return false;
	getImgXY(e);
	
	var m=document.getElementById('imgMap');
	mX=getAbsPos(m,0); mY=getAbsPos(m,1);

	if(msX>=mX && msX<(mX+mW) && msY>=mY && msY<(mY+mH) && bMap){
		bMsDwn=1;
		switch(CurAct){
		case 'zin':startZoomBox(e);break;
		case 'zout':startZoomBox(e);break;
		case 'pan':startPan(e);break;
		case 'sel':
		case 'iden':startSelBox(e);break;
		}
	}
	return (bMsDwn!=1);
	//return false;
}

function mMove(e){
	if(bChg || !bMap) return true;
	var Btn;
	if(isNav)	Btn=e.which;
	else	Btn=window.event.button;

	getImgXY(e);
	if(bMsDwn && (msX>=(mX+mW) || msY>=(mY+mH) || msX<=mX || msY<=mY)){
		bMsDwn=0;
		takeAct(e);
		return false;
	}else{
		x2=msX;y2=msY;
		if(bZoom || bSelBox)	setClip();
		else if(bPan && Btn==1)	panMouse();

		xDis=Math.abs(eR-eL);	yDis=Math.abs(eT-eB);
		pX=xDis/mW;	pY=yDis/mH;
		mapX=pX*(msX-mX)+eL;
		mapY=pY*(mH-(msY-mY))+eB;

		var u=Math.pow(10,numDecimals);
		var uX=parseInt(mapX*u+0.5)/u;
		var uY= parseInt(mapY*u+0.5)/u;
		var mouseString="Map: "+uX+"/"+uY+"  "+"Image: "+msX+"/"+msY+"("+(msX-mX)+"/"+(msY-mY)+")";
		window.status=mouseString+"  "+"ScaleFactor: "+getScale(xDis);
		
		if (msX>=(mX+mW) || msY>=(mY+mH) || msX<=mX || msY<=mY){
		    return true;
		}else{
		    return false;
		}
	}
	//return false;
}

function getScale(w)
{return parseInt(w/(mW/(97.692 * 12))+0.4);}

function mUp(e){
	bMsDwn=0;
	if(msX>=mX && msX<=(mX+mW) && msY>=mY && msY<=(mY+mH) && bMap && !bChg)
		takeAct(e);
	return true;
}
function takeAct(e){
	if('zin'==CurAct && bZoom)	stopZoomBox(e);
	else if('zout'==CurAct && bZoom)	stopZoomOutBox(e);
	else if(bPan)	stopPan(e);
	else if(bSelBox || 'iden'==CurAct){
	 	stopSelBox(e);
	}
}
function startZoomBox(e){
	if(msX>=(mX+mW) || msY>=(mY+mH) || msX<mX || msY<mY) return false;
	if(bZoom)	stopZoomBox(e);
	else{
		x1=msX;y1=msY;
		x2=x1+1;y2=y1+1;
		zL=x1;zT=y1;zB=y1;zR=x1;
		boxIt(x1,y1,x2,y2);
		bZoom=true;
	}
}

function stopZoomBox(e){
	bZoom=false;
	hideLayer("zBxT");hideLayer("zBxL");
	hideLayer("zBxR");hideLayer("zBxB");
	if((zR<zL+2) && (zB<zT+2))	zoomin(e);
	else{
		saveLastExt(1);
		pX=xDis/mW;	pY=yDis/mH;
		var theY=mH-(zT-mY);
		eT=pY*theY+eB;
		eR=pX*(zR-mX)+eL;
		eL=pX*(zL-mX)+eL;
		theY=mH-(zB-mY);
		eB=pY*theY+eB;
//		window.scrollTo(0,0);
		checkExt();
		sendRequest('WF','src=Map<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);
	}
}

function zoomin(e){
	saveLastExt(1);
	getMapXY(msX,msY);
	eL=mapX-(xDis/2/zF);
	eR=mapX+(xDis/2/zF);
	eT=mapY+(yDis/2/zF);
	eB=mapY-(yDis/2/zF);
	checkExt();
	sendRequest('WF','src=Map<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);
}

function stopZoomOutBox(e){
	bZoom=false;
	hideLayer("zBxT");hideLayer("zBxL");
	hideLayer("zBxR");hideLayer("zBxB");
	if((zR <zL+2) && (zB<zT+2))	zoomout(e);
	else{
		saveLastExt(1);
		var xRatio=mW/Math.abs(zR-zL);
		var yRatio=mH/Math.abs(zT-zB);
		var xAdd=xRatio*xDis/2;
		var yAdd=yRatio*yDis/2;
		eL=eL-xAdd;
		eR=eR+xAdd;
		eT=eT+yAdd;
		eB=eB-yAdd;
//		window.scrollTo(0,0);
		checkExt();
		sendRequest('WF','src=Map<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);
	}
}

function zoomout(e){
	saveLastExt(1);
	getMapXY(msX,msY);
	eL=mapX-(xDis*zF/2);
	eR=mapX+(xDis*zF/2);
	eT=mapY+(yDis*zF/2);
	eB=mapY-(yDis*zF/2);	
	checkExt();
	sendRequest('WF','src=Map<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);
}	

function setClip(){
	if(x1>x2){zR=x1;zL=x2;}
	else{zL=x1;zR=x2;}
	if(y1>y2){zB=y1;zT=y2;}
	else{zT=y1;zB=y2;}
	if(x1!=x2 && y1!=y2)	boxIt(zL,zT,zR,zB);
}

function startPan(e){
	if(msX<(mX+mW) && msY<(mY+mH)){
		if(bPan)	stopPan(e);
		else{
			x1=msX;y1=msY;
			x2=x1+1;y2=y1+1;
			bPan=true;
		}
	}
}

function panMouse(){
	var xMove=x2-x1, yMove=y2-y1;
	var cL=-xMove, cT=-yMove, cR=mW,cB=mH;
	if(xMove>0){cL=0;cR=mW-xMove;}
	if(yMove>0){cT=0;cB=mH-yMove;}
	clipLayer2("theMap",cL,cT,cR,cB);
	moveLayer("theMap",mX+xMove,yMove+mY);
}

function stopPan(e){
//	window.scrollTo(0,0);
	bPan=false;
	saveLastExt(1);
	pX=xDis/mW;	pY=yDis/mH;
	var xOffset=pX*(x2-x1);
	var yOffset=pY*(y1-y2);
	eT=eT-yOffset;eR=eR-xOffset;
	eL=eL-xOffset;eB=eB-yOffset;
	
//	checkFullExtent();
	checkExt();
	sendRequest('WF','src=Map<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);
}
function checkFullExtent(){
	var fW=Math.abs(fR-fL);
	var fH=Math.abs(fT-fB);
	if(xDis>fW) xDis=fW;
	if(yDis>fH) yDis=fH;
}

function startSelBox(e){
	if(msX<(mX+mW) && msY<(mY+mH)){	
		if(bSelBox)	stopSelBox(e);
		else{
			x1=msX;y1=msY;
			x2=x1+1;y2=y1+1;
			zL=x1;zT=y1;zB=y1;zR=x1;
			boxIt(x1,y1,x2,y2);
			bSelBox=true;
			showLayer("zBxT");showLayer("zBxL");
			showLayer("zBxR");showLayer("zBxB");
		}
	}
}

function stopSelBox(e){
	var tmpL,tmpT,tmpR,tmpB;
	bSelBox=false;
	hideLayer("zBxT");hideLayer("zBxL");
	hideLayer("zBxR");hideLayer("zBxB");
	saveLastExt(1);

	pX=xDis/mW;
	if((zR<zL+2) && (zB<zT+2)){
		getMapXY(msX,msY);
		var sT=pX*pixelTolerance;
		tmpL=mapX-sT;
		tmpT=mapY-sT;
		tmpR=mapX+sT;
		tmpB=mapY+sT;
	}else{
		pY=yDis/mH;
		tmpT=pY*(mH-(zT-mY))+eB;
		tmpR=pX*(zR-mX)+eL;
		tmpL=pX*(zL-mX)+eL;
		tmpB=pY*(mH-(zB-mY))+eB;
	}

	if(CurAct=="iden" || CurAct=="sel"){
		if(CurAct=="iden"){
			tmpL=(tmpL+tmpR)/2;
			tmpT=(tmpT+tmpB)/2;

			var s='src=iden<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB;
			s+='<|>oeL='+eL+'<|>oeT='+eT+'<|>oeR='+eR+'<|>oeB='+eB;
			sGeoPt=' ,'+tmpL+','+tmpT;
			s+=getSInfo(document);
			sendRequest('WF',s);
		}
	}
}

function ovMapClick(x,y){
	saveLastExt(1);
	var ovXi=Math.abs(oveR-oveL)/ovW;
	var ovYi=Math.abs(oveT-oveB)/ovH;
	var ovX=x*ovXi+oveL;
	var ovY=(ovH-y)*ovYi+oveB;
	eL=ovX-xDis/2;
	eR=ovX+xDis/2;
	eT=ovY+yDis/2;
	eB=ovY-yDis/2;
	checkExt();
	sendRequest('WF','src=Map<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);
}

function saveLastExt(f){
	zPre.saveNode(eL,eT,eR,eB,document.getElementById('imgMap').src);
	if(f) zNext.clear();
}
function saveNextExt(){
	zNext.saveNode(eL,eT,eR,eB,document.getElementById('imgMap').src);
}

function zoomOld(f)
{
	var v1,v=(0==f)?zPre.getNode():zNext.getNode();
	if(""!=v){
		v1=v.split(',');
		if(isDif(v1,eL,eT,eR,eB)){
			if(0==f)saveNextExt();
			else if(1==f)	saveLastExt(0);

			eL=parseFloat(v1[0]); eT=parseFloat(v1[1]);
			eR=parseFloat(v1[2]);eB=parseFloat(v1[3]);
			document.getElementById('imgMap').src=v1[4];
			recalculateXY();
		}else zoomOld(f);
	}
}
function getMapXY(xIn,yIn){
	msX=xIn;
	pX=xDis/mW;
	mapX=pX*(msX-mX)+eL;
	msY=mH-(yIn-mY);
	pY=yDis/mH;
	mapY=pY*msY+eB;
}

function getImgXY(e){
	if(isNav){msX=e.pageX;	msY=e.pageY;}
	else{
		msX=event.clientX+document.body.scrollLeft;
		msY=event.clientY+document.body.scrollTop;
	}
}

function recalculateXY(){
	xDis=Math.abs(eR-eL);
	yDis=Math.abs(eT-eB);
	pX=xDis/mW;
	pY=yDis/mH;
	mapX=eL;
	mapY=eT;
	mapScaleFactor= xDis/mW;
	zoomToScale(-3);
}

function resizeMap(){
	document.frmMap.imgMap.width=mW;
	document.frmMap.imgMap.height=mH;
	var L=getLayer('theMap');
	L.width=mW; L.height=mH;

	document.frmMap.ovImage.width=ovW;
	document.frmMap.ovImage.height=ovH;
	L=getLayer('ovLayer');
	L.width=ovW+4; L.height=ovH+4;
	L.left=mW-ovW-ovBS*2;

	BannerL=parseInt((mW-417)/2);
	BannerT=parseInt((mH-50)/2);
	moveLayer('LoadM',BannerL,BannerT);
	moveLayer('LoadD',BannerL,BannerT);

	L=getLayer('MB');
	L.left=mW-msW;L.top=mH-msH;

	parent.ToolFrame.updateSize();
	checkExt();

	clearTimeout(nTmrID);
	nTmrID=setTimeout("sendRequest('WF','src=Map<|>Act=Resize<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB);", 160);
}

function isBusy(){
	if(isVisible('LoadM')){
	 alert("Please wait until the previous request is processed.");return 1;}
	return 0;
}

function getLayerSettings(sLyrName){
	var nPos,nPos2,sRet=null;

	nPos=LayerSettings.indexOf(sLyrName);
	if(nPos>-1){
		nPos2=LayerSettings.indexOf(']',nPos);
		nPos=LayerSettings.lastIndexOf('[',nPos)+1;
		sRet=(LayerSettings.substring(nPos, nPos2)).split('|');
	}
	return sRet;
}

function getLayerName(s){
	var sLyr=s,nPos=s.lastIndexOf(":");
	if(nPos>-1)	sLyr=s.substr(nPos+1);
	nPos=sLyr.indexOf("(A)");
	if(nPos>-1) sLyr=sLyr.substr(0,nPos);
	return sLyr;
}

function setActiveLayer(i) {
	ActiveLayerIndex=i;
	CurLyr=LayerID[i];
}

function checkHyperLinkLayer(layerIndex) {
	var canLink=0;
	return canLink;
}

function sendMapXML(){
	var s='src=Map<|>Act=Ref<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB;
	sendRequest('WF',s);
}

function sendMapXML_NoRef(){
	var s='src=Map<|>Act=<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB;
	sendRequest('WF',s);
}

function getLyrSts(){
	var s='';
	for(var i=0;i<LayerVisible.length;++i){
		if(s!='') s+=',';
		s+=LayerID[i]+','+((LayerVisible[i]==1)?"1":"0");
	}
	if(''!=s) s='<|>Vis='+s;
	return s;
}

function isOn(id){
	var r=0;
	for(var i=0;i<LayerVisible.length;i++){
		if(id==LayerID[i]){
			r=((LayerVisible[i]==1)?"1":"0");
			break;
		}
	}
	return r;
}

function sendRequest(f,c){
	var d,s=c+'<|>MapW='+mW+'<|>MapH='+mH+'<|>oH='+ovH+'<|>oW='+ovW+'<|>Tab='+CurTab+getLyrSts()+'<|>dbg='+bDbg+'<|>Highlight='+sHighlight+'<|>Lyr='+CurLyr;
	s+="<|>GeoPt="+sGeoPt+"<|>TT="+TaxType;
	if(0>c.indexOf('<|>Act=')) s+='<|>Act='+CurAct;
	if("P"==TaxType) s+='<|>Year='+document.getElementById('cboYears').value;
	s+=getTolerance();

	if(bMap) showProBar("M");

    parent.document.getElementById("WorkFrame").src= gappPath + "/MapRequest.aspx?" + s;
}

function getTolerance(){return "<|>SchTol="+(xDis/mW*pixelTolerance);}
function showProBar(I){
	var ly='Load'+I,m=document.getElementById('imgMap');
	var L=getAbsPos(m,0); T=getAbsPos(m,1);
	moveLayer(ly,parseInt((mW-200)/2)+L,parseInt((mH-50)/2)+T);
	showLayer(ly);
}

function checkExt(){
	if(eL<(lmL)) eL=lmL;
	if(eR>(lmR)) eR=lmR;
	if(eT>(lmT)) eT=lmT;
	if(eB<(lmB)) eB=lmB;
}

function zoomToIt(id,x,y)
{
	saveLastExt(1);
	sGeoPt=((null==id || "null"==id)?' ':id.replace(/,/g,"[-]"))+','+x+','+y;
	var s='src=ZmIt<|>eL='+eL+'<|>eT='+eT+'<|>eR='+eR+'<|>eB='+eB;
	s+='<|>oeL='+eL+'<|>oeT='+eT+'<|>oeR='+eR+'<|>oeB='+eB;
	s+=getSInfo(document); bMap=1;
	sendRequest('WF',s);

//	if(!bMap){
		if('F'==TaxType) chgTab(document,'F',1,2,0,document.getElementById('aMap'));
		else if('P'==TaxType) chgTab(document,'P',3,4,0,document.getElementById('aMap'));
		else if('S'==TaxType) chgTab(document,'S',1,3,0,document.getElementById('aMapSearch'));
//	}
}

function zoomToExtent(id,seL,seT,seR,seB)
{
	saveLastExt(1);
	//sGeoPt=((null==id || "null"==id)?' ':id.replace(/,/g,"[-]"))+','+x+','+y;
	var s='src=Map<|>eL='+seL+'<|>eT='+seT+'<|>eR='+seR+'<|>eB='+seB;
	s+='<|>oeL='+eL+'<|>oeT='+eT+'<|>oeR='+eR+'<|>oeB='+eB;
	s+=getSInfo(document); bMap=1;
	sendRequest('WF',s);

//	if(!bMap){
		if('F'==TaxType) chgTab(document,'F',1,2,0,document.getElementById('aMap'));
		else if('P'==TaxType) chgTab(document,'P',3,4,0,document.getElementById('aMap'));
		else if('S'==TaxType) chgTab(document,'S',1,3,0,document.getElementById('aMapSearch'));
//	}
}

function zoomToScale(z)
{
	var i,I,S,s=0;
	fScale=getScale(fR-fL);
	if(-1==z) ++zInd;
	else if(-2==z) --zInd;
	else if(-3==z){
		I=getScale(xDis);
		for(i=1;i<9;i++){
			S=parseInt(fScale/Math.pow(3,8-i));
			if(s<I && I<=S){zInd=i-1;break;}
		}
	}else{zInd=z;}
	
	if(0>zInd) zInd=0;
	else if(7<zInd) zInd=7;

	for(s='',i=0;i<8;i++){
		I=document.getElementById('z'+i);
		if(''==s){s=I.src.substring(0,I.src.lastIndexOf('/')+1);}
		I.src='/images/toolbar/z_'+((i==zInd)?'':'un')+'sel.gif';
	}
	if(-3!=z)	zoomToScale1(parseInt(fScale/Math.pow(3,7-zInd)));
}
function zoomToScale1(v)
{
	var w=v*(mW/(97.692*12)), w1=Math.abs(eR-eL), h1=Math.abs(eT-eB), h=w*h1/w1;
	var x=Math.abs(eR-eL)/2+eL, y=Math.abs(eT-eB)/2+eB;
	saveLastExt(1);
	eL=x-w/2; eR=x+w/2;
	eB=y-h/2; eT=y+h/2;
	checkExt();
	sendMapXML();
}
