var setDebug = true;
var getLimitExtent=true;
var left = -180.0;
var right = 180.0;
var top = 90.0;
var bottom = -90.0;
var fullLeft = left;
var fullRight = right;
var fullTop = top;
var fullBottom = bottom;
var iWidth = 630;
var iHeight = 512;
var imageLimitLeft = limitLeft;
var imageLimitTop = limitTop;
var imageLimitRight = limitRight;
var imageLimitBottom = limitBottom;
var appDir = "";
var xDistance = Math.abs(right-left);
var yDistance = Math.abs(top-bottom);
var panX = xDistance * panFactor;
var panY = yDistance * panFactor;
var pixelX = xDistance/iWidth;
var pixelY = yDistance/iHeight;
var mapX = left;
var mapY = top;
var lastLeft = left;
var lastRight = right;
var lastTop = top;
var lastBottom = bottom;
var theCursor = "crosshair";
var canLoad=true;
if (imsURL!="") canLoad=false;
var fullWidth = Math.abs(fullRight - fullLeft);
var fullHeight = Math.abs(fullTop - fullBottom);
var mapScaleFactor = xDistance / iWidth;
var sQuote = "'";
var dQuote = '"';
var toolMode = 1;
var legendVisible=false;
MapUnits = MapUnits.toUpperCase();
ScaleBarUnits = ScaleBarUnits.toUpperCase();

function addLegendToMap(){
	lastLeft = left;
	lastRight = right;
	lastTop = top;
	lastBottom = bottom;
}

function f52(){ //fullExtent
	f35("theMap",hspc,vspc);
	window.scrollTo(0,0);
	addLegendToMap();
	left = fullLeft;
	right = fullRight;
	top = fullTop;
	bottom = fullBottom;
	sendMapXML();
}

function zoomBack(){ //zoomBack
	f35("theMap",hspc,vspc);
	var left1 = left;
	var right1 = right;
	var top1 = top;
	var bottom1 = bottom;
	left = lastLeft;
	right = lastRight;
	top = lastTop;
	bottom = lastBottom;
	lastLeft = left1;
	lastRight = right1;
	lastTop = top1;
	lastBottom = bottom1;
	sendMapXML();	
}

function f54(minXin,minYin,maxXin,maxYin) { //zoomToEnvelope
	addLegendToMap();
	left=minXin;
	bottom=minYin;
	right=maxXin;
	top=maxYin;
	f69();
	sendMapXML();
}

function f55(inScale){ //zoomScale
	var halfWidth = fullWidth / 2;
	var halfHeight = fullHeight / 2
	var midX = right - (xDistance / 2);
	var midY = top - (yDistance / 2);
	var newWidth = halfWidth * inScale;
	var newHeight = halfHeight * inScale;
	addLegendToMap();
	left = midX - newWidth;
	right = midX + newWidth;
	top = midY + newHeight;
	bottom = midY - newHeight;
	sendMapXML();
}
var initialQuery="";
function getCommandLineParamsPre(){
    var cmdString=webParams;
	var cmdString2 = cmdString.toUpperCase();
    var key="MAPSERVICE=";
	var pos = cmdString2.indexOf(key);
	var startpos = 0;
	var endpos = 0;
	if (pos!=-1) {
		startpos = pos + key.length;
		endpos = cmdString.indexOf("&",startpos);
		if (endpos==-1) endpos = cmdString.length;
		mapSv=cmdString.substring(startpos,endpos);
		if (mapSv=="land_property")
			currentExtName = "Land & Property";
		else if (mapSv=="plan_landuse")
			currentExtName = "Planning & Landuse";
		else if (mapSv=="servs_infrastructure")
			currentExtName = "Services & Infrastructure";
		else if (mapSv=="comm_facilities")
			currentExtName = "Community Facilities";

		imsURL = svURL + mapSv;
		// Change the visibility of the IPA identify tool based on the map service. IPAservice variable defined in ArcIMSParam.js
		var elem = parent.ToolFrame.document.getElementById("IPA Identify");
		if (mapSv == IPAservice){
			elem.style.display = 'block';
		}else{
			elem.style.display = 'none';
		}
		parent.ScaleFrame.document.getElementById("ActiveSvc").innerHTML = currentExtName;
	}
		
    //Zoom To Address also Used by Lot on Plan Search
    var cmdString2 = cmdString.toUpperCase();
    var key="PLANVAL=";
	var pos = cmdString2.indexOf(key);
	var startpos = 0;
	var endpos = 0;
	if (pos!=-1) {
		startpos = pos + key.length;
		endpos = cmdString.indexOf("&",startpos);
		if (endpos==-1) endpos = cmdString.length;
		var planval=cmdString.substring(startpos,endpos);
		SearchQueryString ="MRCSDE.PROPERTY.MKYCADAREA.TAG='"+planval+"'";
        selectionMode=1;
		inActiveQueryLyr="Cad_Areas";
		hasInActiveQueryLyr=true
		selectType="";
		searchlayertype="polygon";
		is_roads=false;
		thelayervariable="Cad_Areas";
        //IMPORTANT VARIABLE - to launch initial query to land number
		initialQuery="PLANVAL";	 
	}

    //Zoom To Road Name
    var cmdString2 = cmdString.toUpperCase();
    var key="ROADQUERY=";
	var pos = cmdString2.indexOf(key);
	var startpos = 0;
	var endpos = 0;
	if (pos!=-1) {
		startpos = pos + key.length;
		endpos = cmdString.indexOf("&",startpos);
		if (endpos==-1) endpos = cmdString.length;
		var rdQuery=cmdString.substring(startpos,endpos);
		rdQuery = unescape(rdQuery);
		rdQuery = replace(rdQuery, "\'", "\'\'");
		var key="ROADTYPE=";
		var pos = cmdString2.indexOf(key);
		var startpos = 0;
		var endpos = 0;
		if (pos!=-1) {
			startpos = pos + key.length;
			endpos = cmdString.indexOf("&",startpos);
			if (endpos==-1) endpos = cmdString.length;
			var rdType=cmdString.substring(startpos,endpos);	
			rdType = unescape(rdType);
		}
		var key="SUBURB=";
		var pos = cmdString2.indexOf(key);
		var startpos = 0;
		var endpos = 0;
		if (pos!=-1) {
			startpos = pos + key.length;
			endpos = cmdString.indexOf("&",startpos);
			if (endpos==-1) endpos = cmdString.length;
			var suburb=cmdString.substring(startpos,endpos);
			suburb = unescape(suburb);
		}
		SearchQueryString ="MRCSDE.PROPERTY.FINALRDCLUPD.RD_NAME='"+rdQuery+"' AND MRCSDE.PROPERTY.FINALRDCLUPD.RD_TYPE='"+rdType+"' AND MRCSDE.PROPERTY.FINALRDCLUPD.SUBURB='"+suburb+"'";
  	    SearchQueryString=f20(SearchQueryString,"%20"," ");
		searchlayertype="line"; 
		is_roads=true;
        selectionMode=1;
        inActiveQueryLyr="Roads";
		thelayervariable="Roads";
		hasInActiveQueryLyr=true
		selectType="line";
        //IMPORTANT VARIABLE - to launch initial query to land number
		initialQuery="ROADQUERY";
	}
    //Zoom To Lot on Plan
    var cmdString2 = cmdString.toUpperCase();
    var key="PLANQUERY=";
	var pos = cmdString2.indexOf(key);
	var startpos = 0;
	var endpos = 0;
	if (pos!=-1) {
		startpos = pos + key.length;
		endpos = cmdString.indexOf("&",startpos);
		if (endpos==-1) endpos = cmdString.length;
		var pplanval=cmdString.substring(startpos,endpos);
		var key="LOTQUERY=";
		var pos = cmdString2.indexOf(key);
		var startpos = 0;
		var endpos = 0;
		if (pos!=-1) {
			startpos = pos + key.length;
			endpos = cmdString.indexOf("&",startpos);
			if (endpos==-1) endpos = cmdString.length;
			var lplanval=cmdString.substring(startpos,endpos);
		}
		if (lplanval!=""){
			SearchQueryString ="MRCSDE.PROPERTY.MKYCADAREA.PLAN_TYPE='"+lplanval+"' AND MRCSDE.PROPERTY.MKYCADAREA.LOT = '"+lplanval;
		}else{
			SearchQueryString ="MRCSDE.PROPERTY.MKYCADAREA.PLAN_TYPE='"+lplanval;
		}
        selectionMode=1;
        inActiveQueryLyr="Cad_Areas";
		hasInActiveQueryLyr=true
		selectType="";
        searchlayertype="polygon";
		is_roads=false;
		thelayervariable="Cad_Areas";
        //IMPORTANT VARIABLE - to launch initial query to land number
		initialQuery="PLANQUERY";	
	}
    //Zoom To Locality
    var cmdString2 = cmdString.toUpperCase();
    var key="LOCALQUERY=";
	var pos = cmdString2.indexOf(key);
	var startpos = 0;
	var endpos = 0;
	if (pos!=-1) {
		startpos = pos + key.length;
		endpos = cmdString.indexOf("&",startpos);
		if (endpos==-1) endpos = cmdString.length;
		var localval=cmdString.substring(startpos,endpos);
		localval=f20(localval,"%20"," ");
		SearchQueryString ="MRCSDE.PROPERTY.SUBBDYSNEW.TAG='"+localval+"'";
        selectionMode=1;
        ActLyr="Localities";
		searchlayertype="polygon";
		is_roads=false;
        thelayervariable="Localities";
		inActiveQueryLyr = thelayervariable;
		hasInActiveQueryLyr=true;
        //IMPORTANT VARIABLE - to launch initial query to land number
		initialQuery="LOCALQUERY"; 	 
	}
	if (imsURL!="") {
		imsQueryURL= imsURL + "&CustomService=Query";
		canLoad=false;
	} 
}

function getCommandLineParamsPost(){ 
    return true;
}

function f57(theFullPath){ //getPath
	var theSlash = theFullPath.lastIndexOf("/");
	var theDir = theFullPath.substring(0,theSlash);
	if (theDir==null) theDir="";
	theDir = theDir + "/";
	return theDir;
}

// check for existance of layer
function hasLayer(name){
	var result = false;
	if (isNav4) {
		if (document.layers[name]!=null) result=true;
	}  else if (isIE) {
		if (eval('document.all.' + name)!=null) result=true;
	} else if (isNav) {
		var theElements = document.getElementsByTagName("DIV");
		var theObj;
		var j = -1;
		for (i=0;i<theElements.length;i++) {
			if (theElements[i].id==name) result=true;
		}
    }
	return result;
}

function shwRetrData(){
	if (hasLayer("LoadData")) {
		showLayer("LoadData");
	}
}

function hdRetrData(){
    if (hasLayer("LoadData")) {
		hideLayer("LoadData");
	}
}

function shwRetrMap(){
	if (hasLayer("LoadData")) {
		showLayer("LoadData");
	}
}

function hdRetrMap(){
	if (hasLayer("LoadData")) {
		hideLayer("LoadData");
	}
}

// calculate distance to current scalebarunits
function f63(mX,mY) { //calcDistance
	if (clickCount>0) {
		var mUnits = MapUnits;
		var mDistance = 0;
		var p = clickCount-1;
		var Lon1 = clickPointX[p] * Math.PI / 180;
		var Lon2 = mX * Math.PI / 180;
		var Lat1 = clickPointY[p] * Math.PI / 180;
		var Lat2 = mY * Math.PI / 180;
		var LonDist = Math.abs(Lon1-Lon2);
		var LatDist = Math.abs(Lat1-Lat2);
		if (MapUnits=="DEGREES") {
			var Lon1 = clickPointX[p] * Math.PI / 180;
			var Lon2 = mX * Math.PI / 180;
			var Lat1 = clickPointY[p] * Math.PI / 180;
			var Lat2 = mY * Math.PI / 180;
			var LonDist = Math.abs(Lon1-Lon2);
			var LatDist = Math.abs(Lat1-Lat2);
			var A = Math.pow(Math.sin(LatDist / 2),2) + Math.cos(Lat1) * Math.cos(Lat2) * Math.pow(Math.sin(LonDist /2),2);
			var C = 2 * Math.asin(Math.min(1, Math.sqrt(A)));
			var D = (3963 - 13 * Math.sin((Lat1 + Lat2) / 2)) * C
			mDistance = D * 5280;
			mUnits = "FEET";
		} else {
			var xD = Math.abs(mX - clickPointX[p]);
			var yD = Math.abs(mY - clickPointY[p]);
			mDistance = Math.sqrt(Math.pow(xD,2) + Math.pow(yD,2));
		}
		var theDist = f64(mDistance,mUnits,ScaleBarUnits);
		var u = Math.pow(10,numDecimals);
		currentMeasure = parseInt(theDist*u+0.5)/u;
		f13();
	}
}

// convert the amounts to new units
function f64(theDist1,mUnits,sUnits) {	//convertUnits
	var theDist = parseFloat(theDist1);
	var mDistance = theDist;
	if (mUnits == "FEET") {
		if (sUnits=="MILES") {
			mDistance = theDist / 5280;
		} else if (sUnits == "METRES") {
			mDistance = theDist * 0.304800609601;
		} else if (sUnits == "KILOMETRES") {
			mDistance = theDist * 0.000304800609601;
		}
	} else {
		if (sUnits=="MILES") {
			mDistance = theDist * 0.0006213699;
		} else if (sUnits == "FEET") {
			mDistance = theDist * 3.280833;
		} else if (sUnits == "KILOMETRES") {
			mDistance = theDist / 1000;
		}
	}
	var u = Math.pow(10,numDecimals);
	if (!isNav) mDistance = parseInt(mDistance * u + 0.5) / u
	return mDistance;
}


function afterMapRefresh(){
 f67();
 parent.finishedLoading=true;
}	

function f66(xleft,xright){ //getNewScale
	var grdWidthCen = (xright - xleft)*100.0;
	var ppi = 96.0;
	var pixelWidthCen = 2.54/ppi;
	var mapWidthCen = iWidth*pixelWidthCen;
	var newScale = Math.round(grdWidthCen/mapWidthCen);
	return newScale;
}

function f67(){ //setMapExtent

	var newScale = f66(left,right);
	parent.calcScale = newScale;
	parent.ScaleFrame.document.forms[0].Scale.value = newScale;
//Mackay for markup
if(drawing){
}else{
	parent.TOCFrame.updateItalicNames();      
}
}

function f68() { //checkPanExtent
	if (xDistance>fullWidth) xDistance = fullWidth;
	if (yDistance>fullHeight) yDistance = fullHeight;
}

function f69() { //checkEnvelopeExtent
	if (xDistance>fullWidth) xDistance = fullWidth;
	if (yDistance>fullHeight) yDistance = fullHeight;
}

function print() {
	var Win1 = window.open("asp/mapexport.asp?URL="+ document.theImage.src,"ExportPage","menubar=yes, scrollbars=yes");
	addWin(Win1);
	
}

function replace(s, t, u) {
//Replace a token in a string, s  string to be processed, t  token to be found and removed
//u  token to be inserted  returns new String
	i = s.indexOf(t);
	r = "";
	if (i == -1) return s;
	r += s.substring(0,i) + u;
	if ( i + t.length < s.length)
	r += replace(s.substring(i + t.length, s.length), t, u);
	return r;
}