// aimsIdentify.js
aimsIdentifyPresent=true;

// hyperlink variables
var currentHyperLinkLayer="";
var currentHyperLinkField="";
var hyperlinkWindowWidth=500;
var hyperlinkWindowHeight=400;

// variable for search tolerance... dynamically set in app
var searchTolerance=0.01;
// starting record position for returned records
var queryStartRecord=0;

if (imsQueryURL=="") {
	imsQueryURL= imsURL + "&CustomService=Query";
}
var canQuery=true;
var newSelectCount=0;
var selectPoints = new Array();

// can features be selected if invisible or not within layer scale threshholds?
var canSelectInvisible=false;

// identify feature
function identify(e) {
	ActiveLayerIndex=0;
	highlightedOne="";
	var theX = mouseX;
	var theY = mouseY;
	getMapXY(theX,theY);
	searchTolerance = (xDistance/iWidth) * pixelTolerance;
	var tempWest = mapX - searchTolerance;
	var tempNorth = mapY + searchTolerance;
	var tempEast = mapX + searchTolerance;
	var tempSouth = mapY - searchTolerance;
	var theString = writeGetFeatures(tempWest,tempSouth,tempEast,tempNorth);
	showRetrieveData();
	sendToServer(imsQueryURL,theString,identifyXMLMode);
}

// hyperlink from feature
function hyperLink(e) {
	if (currentHyperLinkLayer!="") {
		highlightedOne="";
		var theX = mouseX;
		var theY = mouseY;
		getMapXY(theX,theY);
		searchTolerance = (xDistance/iWidth) * pixelTolerance;
		var tempWest = mapX - searchTolerance;
		var tempNorth = mapY + searchTolerance;
		var tempEast = mapX + searchTolerance;
		var tempSouth = mapY - searchTolerance;
		var tempSwap = swapSelectFields;
		swapSelectFields=false;
		var tempSelect = selectFields;
		selectFields = LayerIDField[ActiveLayerIndex] + " " + LayerShapeField[ActiveLayerIndex] + " " + currentHyperLinkField;
		var theString = writeGetFeatures(tempWest,tempSouth,tempEast,tempNorth);
		selectFields = tempSelect;
		swapSelectFields=tempSwap;
		showRetrieveData();
		sendToServer(imsQueryURL,theString,15);
	} else {
		alert("This layer does not have any HyperLinks.");
	}
}

// write out XML request to identify features
function writeGetFeatures(west1,south1,east1,north1) {
	//Asetetaan aktiivinen karttataso
	ActiveLayer = ViimeinenLayer - ActiveLayerIndex; 
	if (swapSelectFields) {
		selectFields=selFieldList[ActiveLayerIndex];
	}
	var useString = writeIdentifyXML(ActiveLayer,ActiveLayerType,selectFields,west1,south1,east1,north1,useLimitExtent);
	hightlightedOne="";
	return useString;
}

function writeIdentifyXML(theLayer,theLayerType,theFields,leftX,bottomY,rightX,topY,hasLimit) {
	var theString = '<?xml version="1.0" encoding="UTF-8"?>\n<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" envelope="false" geometry="false">\n';
	theString += '<LAYER id="' + theLayer + '" />';
	theString += '<SPATIALQUERY subfields="' + theFields + '">';
	theString += '<SPATIALFILTER relation="area_intersection" >';
	theString += '<ENVELOPE maxy="' + forceComma(topY) + '" maxx="' + forceComma(rightX) + '" miny="' + forceComma(bottomY) + '" minx="' + forceComma(leftX) + '" />';
	theString += '</SPATIALFILTER>';
	theString += '</SPATIALQUERY>';
	if (hasLimit) {
		// keep this within the limitExtent
		theString += '<SPATIALFILTER relation="area_intersection">\n';
		theString += '<ENVELOPE maxx="' + forceComma(limitRight) + '" maxy="' + forceComma(limitTop) + '" minx="' + forceComma(limitLeft) + '" miny="' + forceComma(limitBottom) + '" />\n';
		theString += '</SPATIALFILTER>\n';
	}
	theString += '</GET_FEATURES>';
	theString += '</REQUEST>';
	theString += '</ARCXML>';
	return theString;
}



// parse XML response for selected features
function displayAttributeData(theReply) {
	setLayerFields(ActiveLayerIndex);
	var theError = getXMLErrorMessage(theReply);
	var fList="";
	var lpos1 = 1, lpos2 = 1, epos = 1, spos = 1;
	var morePoints=true, moreFeatures=true;
	var featureCount = justGetFeatureCount(theReply);
	var pos = 0, startpos = 0;
	var endpos = xmlEndPos;
	var stillMore = false
	pos = theReply.indexOf('hasmore="true"',endpos);
	if(pos!=-1) stillMore = true;
	pos=0;
	var tempCount = 0;
	var selectedData="", inData="";
	var xStr="", yStr="", eNorth="", eSouth="", eWest="", eEast="";

	var fCount = featureCount;
	selectCount = 0;
	var tempString="";
	var t = parent.MapFrame;
	var testidata = theReply;

	if(featureCount > 0) {
		newSelectCount += 1;
		if(OsoiteHaku) {
            	  selectCount = 1;
			endpos = 1;
                  if(toolMode!=4) {
		      	forceCommaInRequest[activeMapServiceIndex] = false;
				var theXYs = getEnvelopeXYs(theReply, endpos);
                        forceCommaInRequest[activeMapServiceIndex] = true;
                        selectLeft[0] = theXYs[0];
				selectBottom[0] = theXYs[1];
				selectRight[0] = theXYs[2];
				selectTop[0] = theXYs[3];
				endpos = xmlEndPos;
			}
          	}
		else {
                  endpos = 1;

			// Jos "alueellinen väestö" -välilehdestä on valittu enemmän kuin yksi alue niin siitä määritelty kentät
			// lasketaan yhteen tai erotellaan pilkulla.
			var cellContent = new Array();
			for(var i=0;i<fCount;i++) {
				if(toolMode!=4 || (zoomToSingleSelect && identifyXMLMode == 112)) {
					var theXYs = getEnvelopeXYs(theReply, endpos);
					selectLeft[selectCount] = theXYs[0];
					selectBottom[selectCount] = theXYs[1];
					selectRight[selectCount] = theXYs[2];
					selectTop[selectCount] = theXYs[3];
					endpos = xmlEndPos;
				}
				inData = parseRecordString(theReply, endpos);
				endpos = xmlEndPos;
				selectedData = clearLeadingSpace(inData);

				epos = theReply.indexOf("</FEATURE",endpos);
				if(showSelectedData) {
					var showHyper = false;
					if (hyperLinkLayers!=null) {
						for (var s1=0;s1<hyperLinkLayers.length;s1++) {
							if (hyperLinkLayers[s1] == LayerName[ActiveLayerIndex]) showHyper=true;
						}
					}
					var fName1 = getFieldNames(selectedData);
					var fValue1 = getFieldValues(selectedData);
					selectPoints[selectCount] = getIdValue(fName1, fValue1);

					cellContent[i] = new Array();
					var i1 = 1;
					if(whatPopup == 0) {
						var splitFieldSumList = new Array();
						splitFieldSumList = t.fieldSumList.split("|");
						var splitFieldDotList = new Array();
						splitFieldDotList = t.fieldDotList.split("|");

						var boolFieldSumList = false;
						var boolFieldDotList = false;

						for(var j=0;j<fName1.length;j++) {
							for(var k=0;k<splitFieldSumList.length;k++) {
								if(fName1[j] == splitFieldSumList[k])
									boolFieldSumList = true;
							}
							for(var k2=0;k2<splitFieldDotList.length;k2++) {
								if(fName1[j] == splitFieldDotList[k2])
									boolFieldDotList = true;
							}
							// Näiden kenttien arvot lasketaan yhteen.
							if(boolFieldSumList) {
								if(cellContent[0][j] == null) cellContent[0][j] = 0;

								cellContent[0][j] = parseInt(cellContent[0][j]) + parseInt(fValue1[j]);
							}
							// Näiden kenttien arvot erotetaan pilkulla.
							else if(boolFieldDotList) {
								if(cellContent[0][j] == null) {
									cellContent[0][j] = fValue1[j];
								}
								else {
									cellContent[0][j] += ", " + fValue1[j];
								}
							}
							// Näiden kenttien arvoille ei tehdä mitään.
							else {
								cellContent[0][j] = fValue1[j];
							}
							boolFieldSumList = false;
							boolFieldDotList = false;
						}
					}
					else {
						i1 = fCount;

						for(var j=0;j<fName1.length;j++) {
							if(fName1[j] == "WWW") {
								var re1 = /(http:)/gi
								var re2 = /(https:)/gi
								if(re1.test(fValue1[j]) || re2.test(fValue1[j])) {
									window.open(fValue1[j], "_blank");
									hideRetrieveData();
									return false;
								}
							}
							cellContent[i][j] = fValue1[j];
						}
					}

					fValue1 = null;
				}
				selectCount += 1;
			} // for(var i=0;i<fCount;i++)... Päättyy.

			if(showSelectedData) {
			 	popupwindow = "";
				var kohderyhma="", haltija_tu, erkaytto_t, c_kyla="";

				// Koulutoimi aluehaku
				if(identifyXMLMode == 112) {
					var theFieldsSum = sumfields.split(":");
					var theFieldsName = sumfieldsname.split(";");
					var sum_i = 0, sum_ii = 0;
				}

				for(var i2=0; i2<i1; i2++) {
					sum_i = 0;

					if(fName1[0].substring(0,1) != "#") popupwindow += '<BR><TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0" WIDTH="200">\n';
					if(identifyXMLMode == 51) popupwindow += '<FORM NAME="apertmentapplication_' + i2 + '" METHOD="get" ACTION="http://elomake.novogroup.com/modules/form3/show_form.asp" TARGET="_blank">\n';

					for(var f=0;f<fName1.length;f++) {
                       			  var f2 = -1;
						if(useFieldAlias) {
							for(var f3=0;f3<AliasFieldName.length;f3++) {
								if(AliasFieldName[f3].substring(AliasFieldName[f3].length-1,AliasFieldName[f3].length) == "*") {
									var AliasName = AliasFieldName[f3].substring(0,AliasFieldName[f3].length-1) + fName1[f].substring(AliasFieldName[f3].length-1,fName1[f].length);
									if(AliasName==fName1[f]) {
										AliasFieldAlias[f3] = AliasFieldAlias[f3].substring(0,AliasFieldName[f3].length-1) + AliasName.substring(AliasFieldName[f3].length-1,fName1[f].length);
										f2 = f3;
									}
								}
								else {
									if(AliasFieldName[f3]==fName1[f])
										f2 = f3;
								}
							}
						}
						var isHyper=false;
						var solun_sisalto;

						if(showHyper) {
							for(var s1=0;s1<hyperLinkFields.length;s1++) {
								if (hyperLinkFields[s1]==fName1[f]) {
									solun_sisalto = '<a href="' + cellContent[i2][f] + '" target="_blank">';
									isHyper=true;
								}
							}
						}
						var s2 = -1;
						for(var s1=0;s1<LayerFields.length;s1++) {
							if (fName1[f]==LayerFields[s1]) s2=s1;
						}
						if(LayerFieldType[s2]=="91") {
							if (isNaN(cellContent[i2][f])) {
								var theDate = cellContent[i2][f];
							} else {
								var theDateObj = new Date(parseFloat(cellContent[i2][f]));
								var theDate = theDateObj.toGMTString();
							}
							solun_sisalto = theDate;
							theDate=null;
						} else {
							solun_sisalto = cellContent[i2][f];
						}
						if(isHyper) solun_sisalto += '</a>';

						if(f2!=-1) {
							var ekamerkki = "";
							var kentannimi = "";
							kentannimi = AliasFieldAlias[f2];
							ekamerkki = kentannimi.substring(0,1);
							if(ekamerkki != "#") {
								if(AliasFieldAlias[f2] == "Www-linkki") {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + AliasFieldAlias[f2] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-3"><a href="' + solun_sisalto + '" target="_blank">' + solun_sisalto + '</a></font></td>\n';
									popupwindow += '</tr>\n';
								}
								else if(AliasFieldAlias[f2] == "Sähköposti") {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + AliasFieldAlias[f2] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-3"><a href="mailto:' + solun_sisalto + '">' + solun_sisalto + '</a></font></td>\n';
									popupwindow += '</tr>\n';
								}
								else if(AliasFieldAlias[f2].substring(0,10) == "Kuvalinkki") {
									var kuvalinkkinimi = solun_sisalto.split("/"); 
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + AliasFieldAlias[f2] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-3"><a href="' + solun_sisalto + '" class="clsmenu" target="_blank">' + kuvalinkkinimi[kuvalinkkinimi.length-1] + '</a></font></td>\n';
									popupwindow += '</tr>\n';
								}
								else {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + AliasFieldAlias[f2] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-2">\n';
									popupwindow += solun_sisalto;
									popupwindow += '</font></td>\n';
									popupwindow += '</tr>\n';

									// Koulutoimeen yhteenlaskettavat kentät
									if(identifyXMLMode == 112) {
										for(var ii=0; ii<theFieldsSum.length; ii++) {
											if(fName1[f] == theFieldsSum[ii]) {
												sum_i = sum_i+parseInt(solun_sisalto);
												sum_ii = sum_ii+parseInt(solun_sisalto);
											}
										}
									}
								}
							}
							if(identifyXMLMode == 51) {
								if(AliasFieldAlias[f2] == "#KIINT_NIMI") popupwindow += '<INPUT TYPE="hidden" NAME="KIINT_NIMI" VALUE="' + solun_sisalto + '">\n';
								if(AliasFieldAlias[f2] == "#RAK_OSOITE") popupwindow += '<INPUT TYPE="hidden" NAME="RAK_OSOITE" VALUE="' + solun_sisalto + '">\n';
								if(AliasFieldAlias[f2] == "#KIINTUNNUS") popupwindow += '<INPUT TYPE="hidden" NAME="KIINTUNNUS" VALUE="' + solun_sisalto + '">\n';
								if(AliasFieldAlias[f2] == "#KOHDERYHMA") kohderyhma = parseInt(solun_sisalto);
								if(AliasFieldAlias[f2] == "#HALTIJA_TU") haltija_tu = parseInt(solun_sisalto);
								if(AliasFieldAlias[f2] == "#ERKAYTTO_T") erkaytto_t = parseInt(solun_sisalto);
								
								if(fName1[f] == "C_KYLA") c_kyla = solun_sisalto;
								if(fName1[f] == "C_KYLA") popupwindow += '<INPUT TYPE="hidden" NAME="c_kyla" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "C_KORT") popupwindow += '<INPUT TYPE="hidden" NAME="c_kort" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "C_TONT") popupwindow += '<INPUT TYPE="hidden" NAME="c_tont" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "C_OSOITE") popupwindow += '<INPUT TYPE="hidden" NAME="c_osoite" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "D_PALA") popupwindow += '<INPUT TYPE="hidden" NAME="d_pala" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "D_MYYHIN") popupwindow += '<INPUT TYPE="hidden" NAME="d_myyhin" VALUE="' + solun_sisalto + '">\n';
							}
						}
						else {
                        	      	var ekamerkki = "";
							var kentannimi = "";
							kentannimi = fName1[f];
							ekamerkki = kentannimi.substring(0,1);
							if(ekamerkki != "#") {
								if(fName1[f] == "Www-linkki") {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + fName1[f] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-3"><a href="' + solun_sisalto + '" TARGET = "infotiedot">' + solun_sisalto + '</a></font></td>\n';
									popupwindow += '</tr>\n';
								}
                                   		 	else if(fName1[f] == "E_mail") {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + fName1[f] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-3"><a href="mailto:' + solun_sisalto + '">' + solun_sisalto + '</a></font></td>\n';
									popupwindow += '</tr>\n';
								}
                                    		        else if(fName1[f] == "Kuvalinkki") {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + fName1[f] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-3"><a href="http://' + solun_sisalto + '" target="_blank">' + solun_sisalto + '</a></font></td>\n';
									popupwindow += '</tr>\n';
								}
                                                else {
									popupwindow += '<tr align="LEFT">\n';
									popupwindow += '<td><font size="-2"><STRONG>' + fName1[f] + ": " +'</STRONG></font>\n';
									popupwindow += '<font size="-2">\n';
            	                       			                popupwindow += solun_sisalto;
                  	                		  	popupwindow += '</font></td>\n';
									popupwindow += '</tr>\n';

									// Koulutoimeen yhteenlaskettavat kentät
									if(identifyXMLMode == 112) {
										for(var ii=0; ii<theFieldsSum.length; ii++) {
											if(fName1[f] == theFieldsSum[ii]) {
												sum_i = sum_i+parseInt(solun_sisalto);
												sum_ii = sum_ii+parseInt(solun_sisalto);
											}
										}
									}
								}

							}
							if(identifyXMLMode == 51) {
								if(fName1[f] == "KIINT_NIMI") popupwindow += '<INPUT TYPE="hidden" NAME="' + fName1[f] + '" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "RAK_OSOITE") popupwindow += '<INPUT TYPE="hidden" NAME="' + fName1[f] + '" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "KIINTUNNUS") popupwindow += '<INPUT TYPE="hidden" NAME="' + fName1[f] + '" VALUE="' + solun_sisalto + '">\n';
								if(fName1[f] == "KOHDERYHMA") kohderyhma = parseInt(solun_sisalto);
								if(fName1[f] == "HALTIJA_TU") haltija_tu = parseInt(solun_sisalto);
								if(fName1[f] == "ERKAYTTO_T") erkaytto_t = parseInt(solun_sisalto);
							}
						}
					}
					if(identifyXMLMode == 51) {
						popupwindow += '<tr align="LEFT">\n';
						popupwindow += '<td><BR><font size="-3"><a href="javascript:document.apertmentapplication_' + i2 + '.submit();" class="clsmenu">\n';

						if(kohderyhma == 46 && haltija_tu != 19 && haltija_tu != 21 && erkaytto_t != 7) popupwindow += 'Täytä asuntolomake kohteesta';
						else if(erkaytto_t == 7) popupwindow += 'Täytä opiskelija-asuntolomake kohteesta';
						else if(c_kyla != "") popupwindow += 'Täytä tonttihakemus kohteesta';

						popupwindow += '</a></font></td>\n';
						popupwindow += '</tr>\n';

						if(kohderyhma == 46 && haltija_tu != 19 && haltija_tu != 21 && erkaytto_t != 7) popupwindow += '<INPUT TYPE="hidden" NAME="id" VALUE="25FF5C4FF3954F3EAA33FF829D875903">\n';
						else if(erkaytto_t == 7) popupwindow += '<INPUT TYPE="hidden" NAME="id" VALUE="09FE739D5F1C457DB5ABD187377B571E">\n';
						else if(c_kyla != "") popupwindow += '<INPUT TYPE="hidden" NAME="id" VALUE="D1FAB8B6A1BC412AAAF76A37428068CA">\n';

						popupwindow += '</FORM>\n';
					}
					// Koulutoimi
					else if(identifyXMLMode == 112) {
						popupwindow += '<tr align="LEFT">\n';
						popupwindow += '<td><font size="-2"><STRONG>' + theFieldsName[0] + '</STRONG></font>\n';
						popupwindow += '<font size="-2">\n';
            	            	                popupwindow += sum_i;
                                                popupwindow += '</font></td>\n';
						popupwindow += '</tr>\n';
					}
					if(fName1[0].substring(0,1) != "#") popupwindow += '</TABLE>\n';
				} // for(var i2=0; i2<i1; i2++)... Päättyy.

				// Koulutoimi
				if(identifyXMLMode == 112) {
					popupwindow += '<BR><TABLE CELLSPACING="0" CELLPADDING="0" BORDER="0" WIDTH="200">\n';
					popupwindow += '<tr align="LEFT">\n';
					popupwindow += '<td><font size="-1"><STRONG>' + theFieldsName[1] + '</STRONG></font>\n';
					popupwindow += '<font size="-1">\n';
                                        popupwindow += sum_ii;
                  	     	        popupwindow += '</font></td>\n';
					popupwindow += '</tr>\n';
					popupwindow += '</TABLE>';
				}
                                window.open(appDir + "newWindow.jsp?actionpage=0", "popupWindow", "width=" + popupIdentifyWidth + ",height=" + popupIdentifyHeight + ",scrollbars=auto,toolbar=no,directories=no,status=no,menubar=no,resizable=yes");
			}
			fName1 = null;
		}
		if(((queryStartRecord==0) && (toolMode!=4) && (toolMode!=9) && (toolMode!=25)) || (zoomToSingleSelect && identifyXMLMode == 112)) {
			zoomToReturnedRecords();
			sendMapXML();
		}
	}
	else {
		if(OsoiteHaku) {
			alert("Osoitetta ei voida paikantaa!");
		}
		else {
			if(!isNav5up)
				hideLayer("LoadingData");
			window.open(appDir + "newWindow.jsp?actionpage=1", "popupWindow", "width=" + popupIdentifyWidth + ",height=" + popupIdentifyHeight + ",scrollbars=auto,toolbar=no,directories=no,status=no,menubar=no,resizable=yes");
			selectCount = 1;
		}
	}

	if(queryjsp == true)  selectCount=0;
	hideRetrieveData();
	// Laitetaan lopuksi OsoiteHaku-merkki falseksi
	OsoiteHaku=false;

	if((showSelectedData == false || aimsSelectPresent) && useIdentify) {
		clickFunction("identify");
		parent.ToolFrame.setToolPic("Identify");
	}
        if(identifyXMLMode == 112) {
                t.toolMode=1;
		t.whatPopup=1;
		t.showSelectedData=true;
		t.visibleMediGIS=true;
		t.useTextFrame=false;
		t.aimsSelectPresent=true;
		t.aimsBufferPresent=false;
		t.zoomToSingleSelect=true;
		t.selectType="polygon";
          //clickFunction("zoomin");
          parent.ToolFrame.setToolPic("SelectPopulation");
          //parent.ToolFrame.setToolPic("education");

        }


}
// are there any selected features?
function checkSelected() {
	var isOk = false;
	if (selectCount>0) isOk = true;
	return isOk;
}

function checkHyperLinkLayer(layerIndex) {
	var canLink = false;
	for(var i=0; i<hyperLinkLayers.length; i++) {
		if(LayerName[layerIndex]==hyperLinkLayers[i]) {
			canLink=true;
			currentHyperLinkLayer=LayerName[layerIndex];
			currentHyperLinkField=hyperLinkFields[i];
		}
	}
	return canLink;

}

