// JavaScript Document

//*******************************************************************
//Function to get all comparison id's and place into usable array.
//*******************************************************************

//####################################################################
// 			GCRP Config
//####################################################################

var markerUrl	=imagePath+'/pushPin.gif'; 
var markerPath  ="C:\\ArcIMS\\Website\\Boston\\images\\pushPin.gif"

var swisCodeField = parcelSwissField;

//*******************************************************************
//	Create a new ICompare to hold our info in.
//*******************************************************************
var myCompare = new ICompare();
	myCompare.layerId = parcelAXLId;
	myCompare.fieldName = parcelPrintKeyField;
	myCompare.resultFirstFieldTitle = "ADDNUM";
	myCompare.resultSecondFieldTitle = "ADDNAME";


var myNewPrintKey = new Object();
	myNewPrintKey.layerId = parcelAXLId;
	myNewPrintKey.printKeyField = parcelPrintKeyField;
	myNewPrintKey.forwardURL = "../ParcelView.aspx?TabIndex=2&";



//####################################################################
// 			END OnCor Config
//####################################################################



function getPrintKey() {

	var myPKPoint = new IPoint()
		myPKPoint.x = IMouse.coordX;
		myPKPoint.y = IMouse.coordY;
		
	var myPKPointQuery = new IPointQuery()
		myPKPointQuery.map = myMap;
		myPKPointQuery.subFields = myNewPrintKey.printKeyField;
		myPKPointQuery.layerId = myNewPrintKey.layerId;				
		myPKPointQuery.point = myPKPoint;	
		myPKPointQuery.useResults2 = true;
		myPKPointQuery.percision = 1;
		myPKPointQuery.getQuery(myMap);
		

		if (RESPONSE.RESULTS2.length > 1)
		{ 
			alert("Too Many Results Found") 
			return;
		}
		else if (RESPONSE.RESULTS2.length ==0)
		{ 
			alert("No Property Found") 
			return;
		}
		
		else {
			var newPKey = RESPONSE.RESULTS2[0].FIELDS[myNewPrintKey.printKeyField]
			setPrintKeySessionVar(newPKey);
		}
}



function loadOARS(oid,lid)
{
	
	for (i in RESPONSE.RESULTS) {
		
		
		//get the layer index in RESPONSE.LAYER to find the obectID
		layerIndex  = findLayerIndex(lid)
		//getObjectId field name -99 TYPE
		objectIDFieldName =findObjectIdFieldName(layerIndex)
		
		//get the object id (SDE or Shp files)
		objectId = RESPONSE.RESULTS[i].FIELDS[objectIDFieldName];
		
		if (objectId == oid)
		{
			var sbl = RESPONSE.RESULTS[i].FIELDS[parcelSBLField];
			var swiss = RESPONSE.RESULTS[i].FIELDS[parcelSwissField];
			
			if (swiss == undefined)
			{
				swiss = "";
			}
			
			if (useHardCodeSwisCode)
			{
				swiss = hardCodeSwisCode;
			}
			
			
			
			var sbl = sbl.substr(6,sbl.length);
			
			var qs = '&swis='+swiss+'&sbl='+sbl;
			window.open(proServerUrl+qs);
		}
	}
	
	
}





function setPrintKeySessionVar(queryParams)
{
	window.location.href = myNewPrintKey.forwardURL +'imsPrintKey='+ queryParams;
}



//Public vars needed in the URL
var doComparison; // set in URL QueryString
var propertyId;
var compId;
var compArray = new Array();
var markerCoordsArray = new Array();
var markerObjectIdArray = new Array();


//*******************************************************************
//	Define the compare object
//*******************************************************************
function ICompare() {
	this.layerId;
	this.fildName;
	this.where;
	
	this.resultFirstFieldTitle; 	// what the user will see when results are in the table // what fild name should we show.
	this.resultSecondFieldTitle; 	// an optional second field to show in the title of the resilt table(s)
}



//*******************************************************************
//	Function that will parse through the querystring and get whats needed.
//*******************************************************************
function buildCompArray() 
{
	var compString = compId;
	compArray = compString.split(/\~/);
	return compArray;
}

//*******************************************************************
// Function to build a where clause
//*******************************************************************
function buildCompWhereClause() {


	var compareArray = buildCompArray()
	var andOp = " , ";
	var where = '';
	
	if (propertyId !=null) {
	where += '\''+propertyId+'\' , ';
	}
	
	for (i in compareArray) {
		if (i >=compareArray.length-1) { andOp = ''; }
		where += '\'' + compareArray[i] + '\''+andOp;
	}
	
	
	var swisWhere = "";

	if (swisCode != "")
	{
		swisWhere = "AND "+swisCodeField+" LIKE \'"+swisCode+"%\'";
	}
	if (useHardCodeSwisCode==true)
	{
		
		if (swisCode == hardCodeSwisCode)
		{
			swisWhere = "";
		}
	}
	
	//plus ther where clause into the ICompare Object.
	myCompare.where = myCompare.fieldName + ' IN ('+where+')' + swisWhere;
	
}






//*************************************************************
//	Query the attribute Table for property compables.
//	gets values, no map
// 	Performs a attribute Query agains the defined map
//*************************************************************
function doCompareSearch() {
	buildCompWhereClause()
	var firstField = myCompare.resultFirstFieldTitle;
	var secondField = myCompare.resultSecondFieldTitle
	
	var OIDS = '';
	
	var resultsHTML = '';
	var whereClause = myCompare.where;
	
	//Send the Query to the server
	var myCompareQuery = new IAttributeQuery();
		myCompareQuery.featureLimit = compArray.length +1;
		myCompareQuery.subFields = "#ALL#"; //subFields;						
		myCompareQuery.layerId = myCompare.layerId;	
		myCompareQuery.where = myCompare.where;	
		myCompareQuery.getQuery(myMap);

	//start acetate layer
	myMap.appendXML = '<LAYER type="acetate" name="POINT MARKER" visible="true">\n';
	

	//display all the results.
	var firstResult, secondResult;
	var envelope, objectId, results, pk;
	
	var esitmatedEnvelopeArray = new Array();
	
	for (i in RESPONSE.RESULTS) {
		firstResult = RESPONSE.RESULTS[i].FIELDS[firstField];
		if (!firstResult) { firstResult = '[?]'; }
		if(secondField) {
		secondResult = RESPONSE.RESULTS[i].FIELDS[secondField];
		if (!secondResult) { secondResult = ''; }
		}
		
		compareId = RESPONSE.RESULTS[i].FIELDS[myCompare.fieldName];
		
		//get the layer index in RESPONSE.LAYER to find the obectID
		layerIndex  = findLayerIndex(myCompare.layerId)
		//getObjectId field name -99 TYPE
		objectIDFieldName =findObjectIdFieldName(layerIndex)
		
		//get the object id (SDE or Shp files)
		objectId = RESPONSE.RESULTS[i].FIELDS[objectIDFieldName];
		pk = RESPONSE.RESULTS[i].FIELDS[myCompare.fieldName];
		
		if (pk != propertyId)
		{
			OIDS += objectId+","
		}
		
		
		envelope = RESPONSE.RESULTS[i].ENVELOPE;

		results = firstResult + " " + secondResult;
		resultsHTML += designResultsTable(results,envelope,objectId,myCompare.layerId);
		
		//MARKER FUNCTIONS REQUIRED
		//calulate the enter of this env.
		centroid = getMapCentroid(envelope);
		markerCoordsArray[i] = centroid;
		markerObjectIdArray[i] = objectId;
		
		
		//add the acetate layer XML to the IMap.appendXML property of IMap.
		addCompareXMLToMap(centroid,compareId);
		
		//build the arry for later sending to the estimateEnvelope() function
		esitmatedEnvelopeArray[i] = envelope;
		
		}
	
	
	//end acetate layer.
	myMap.appendXML += '</LAYER>\n';
	
	OIDS = OIDS.substr(0,OIDS.length-1);
genCoPlygonRender = new IPolygonRenderer() 
	genCoPlygonRender.usefill = true;
	genCoPlygonRender.fillcolor = "223, 2, 5";
	genCoPlygonRender.filltype = "solid";
	genCoPlygonRender.filltransparency = "0.5";
	genCoPlygonRender.boundarycolor ="0,0,0"
	genCoPlygonRender.boundarywidth = 1;
	genCoPlygonRender.boundarytype = "solid"; //"solid | dash | dot | dash_dot | dash_dot_dot"  [solid]




genCoPolygonQuerySelection = new IQuerySelection() 
	genCoPolygonQuerySelection.layerId = myCompare.layerId;
	genCoPolygonQuerySelection.where = "#ID#" +' IN ('+OIDS+') AND '+swisCodeField+' LIKE \''+swisCode+'%\'';
	genCoPolygonQuerySelection.selectionProperties = genCoPlygonRender
	
	
var propertyRend = new IPolygonRenderer() 
	propertyRend.usefill = true;
	propertyRend.fillcolor = "12,222,1";
	propertyRend.filltype = "solid";
	propertyRend.filltransparency = "0.5";
	propertyRend.boundarycolor ="0,0,0"
	propertyRend.boundarywidth = 2;
	propertyRend.boundarytype = "solid"; 
	
	
	
var genCoPropertySelection = new IQuerySelection() 
	genCoPropertySelection.layerId = myCompare.layerId;
	genCoPropertySelection.where = myCompare.fieldName +' = &apos;'+propertyId+'&apos;';
	genCoPropertySelection.selectionProperties = propertyRend	
	
	//myMap.querySelection2 = genCoPropertySelection;	
	//myMap.querySelection = genCoPolygonQuerySelection;

	
	
	
	//prepare for a new map.
	var estimatedE = estimateEnvelope(esitmatedEnvelopeArray)
	estimatedE = zoomOutEnvelopeOneStep(estimatedE,1.3);
	myMap.envelope = estimatedE;
	myMap.fullextent = false;
	
	//add results to the HTML page.
	resultsLayer.innerHTML = resultsHTML;
	
	//Grow and get Attributes if results is = 1
	if (RESPONSE.RESULTS.length == 1) {
		showAttributes(objectId,myCompare.layerId)
	}
	
	//Alert if not results found when not suggesting.
	if (RESPONSE.RESULTS.length==0) { alert("No Results Found!"); }

}


//*******************************************************************
//	Custom axl to be on an accetate layer.
//*******************************************************************
function addCompareXMLToMap(coords,compareToId) {
	
	var color = "228, 82, 93";
	var width = 15;
	
	if (propertyId != null)
	{
		if (compareToId == propertyId) 
		{ 
			color ="142, 255, 255" ;
			width = 20;
		}
	}
	
	myMap.appendXML +='<OBJECT units="database">\n';
	myMap.appendXML +='<POINT coords="'+coords+'">\n';
	//myMap.appendXML +='<SIMPLEMARKERSYMBOL transparency="1.0" color="'+color+'" type="triangle" width="'+width+'" overlap="false" outline="0,0,0" antialiasing="true" />\n';
	
	myMap.appendXML +='<RASTERMARKERSYMBOL overlap="false" usecentroid="true" url="'+markerUrl+'" image="'+markerPath+'" />';
	myMap.appendXML +='</POINT>\n';
	myMap.appendXML +='</OBJECT>\n';
	
	
	
	 

	
}

//****************************************
// Zoom to the intitial Parcel.
//****************************************

function zoom2Parcel() {
	//Send the Query to the server
var myLoadQuery = new IAttributeQuery();
	myLoadQuery.featureLimit = 1;
	myLoadQuery.subFields = "#ALL#"; //subFields;						
	myLoadQuery.layerId = myCompare.layerId;	
	myLoadQuery.where = myCompare.fieldName = '\''+propertyId+'\''
	myLoadQuery.useResults2 = true;
	myLoadQuery.getQuery(myMap);
	
	
	var envelope = RESPONSE.RESULTS2[0].ENVELOPE;
	zoom2Envelope(envelope)
	
	
}




//*********************************************************************
// Function to get the QueryString and return the values are variables
//*********************************************************************
function doOnCorPicto(centroid)
{

	if (centroid > 1) {
		var pictoXYArray = centroid.split(' ');
		pictoX = pictoXYArray[0];
		pictoY = pictoXYArray[1];
	}
	else {
		pictoX = parseFloat(IMouse.coordX);
		pictoY = parseFloat(IMouse.coordY)		
	}
	
	
	if (pictoX && pictoY) {
	var xx = pictoX;
	var yy = pictoY;

	//Pictometry REQUIRES THESE 2 variables so it knows the X and Y
	//NIW does the coordinate conversion. if not using NIW, Code will bee to convert (not yet implemented)
	PicmapX = parseFloat(xx)
	PicmapY = parseFloat(yy);


	//winImageList = open(pictometryURL,"PictImageListWindow");
	//winImageList.focus();
	var pictoQueryString = 'PicmapX='+PicmapX+'&PicmapY='+PicmapY;
	window.location.href=pictometryURL + pictoQueryString;
	
	}
	else { alert("Missing query string params, pictoX or pictoY") }

	// Test Coordinates for Ontario County
	// X: 633179.1715389386
	// Y: 1053088.2569454442
}


















//*******************************************************************
//	Add a marker to the map at screenX and screenY
// 	coords is like 233.3434,34322.4543 (a pair)
// ******************************************************************
//	CURRENTLY NOT IN USE.. STILL UNDER DEV.
//	Enable THE FUNCTION CALL IN additionalFunctions.js
//*******************************************************************
var pointz
function addMarker() {
	//alert(markerObjectIdArray[0])
	for (var x=0; x <= markerCoordsArray.length -1; x++) {
		
		var pointz = new Array();
		pointz = markerCoordsArray[x].split(' ')
		xCoord = pointz[0];
		yCoord = pointz[1];
		var divX = getScreenX(xCoord,myMap)
		var divY = getScreenY(yCoord,myMap)
		objectId = markerObjectIdArray[x]
		divId = "marker_"+objectId;

		createMarkerDiv(divId,divY-10,divX,20,20)


		
		//apply the proper class to the marker.
		var theMarker = document.getElementById(divId);
		theMarker.className = "marker";
		theMarker.onmousedown  = displayMarkerPopUp
	}

}


var lastTool ='';

function displayMarkerPopUp() 
{
	document.getElementById("scale").innerHTML = this.id;
	if (lastTool == '') { 	lastTool= previousTool; }
	setTool("markerClick");
	this.onmouseup = function() { setTool(lastTool);  }

}


function moveDiv()
{
	for (var x=0; x <= markerCoordsArray.length -1; x++) {
		
		var pointz = new Array();
		pointz = markerCoordsArray[x].split(' ')
		xCoord = pointz[0];
		yCoord = pointz[1];
		var divX = getScreenX(xCoord,myMap)
		var divY = getScreenY(yCoord,myMap)
		objectId = markerObjectIdArray[x]
		divId = "marker_"+objectId;
		
		var div = document.getElementById(divId);
		//div.style.top = divY +"px"//parseInt(div.style.top) + parseInt(IMouse.y) +"px";
		//div.style.left = divX  +"px"//parseInt(div.style.left) + parseInt(IMouse.x)+"px";
	}
}


function createMarkerDiv(name,top,left,width,height) {

if (!document.getElementById(divId))
{
	var newDiv = document.createElement(name);
	newDiv.id = name;
	newDiv.style.position = "absolute";
	newDiv.style.visibility = "visible";
	newDiv.style.width =  width +"px";
	newDiv.style.height =  height +"px";
	newDiv.style.zIndex = 100;
	myMap.layer.appendChild(newDiv);
	newDiv.style.top = top +"px";
	newDiv.style.left = left + "px";
}
else 
{
	var newDiv = document.getElementById(name);
	newDiv.style.top = top +"px";
	newDiv.style.left = left + "px";

}
	
	
}

// *_*_*_*_*_*_*_*_*_*_
//END ADD MARKER CODE
// *_*_*_*_*_*_*_*_*_*_

