// aimsPrintPatch.js
/*
* extends (patches) the default print and attribute parsing routines
* to allow attribute data to be included on printed output page
* based on the 3.1 HTML viewer code set
*
* usage:  put this file in your website's javascript folder
*         then include this js file in MapFrame.htm just like all the other js files
*         but *AFTER* having first included aimsPrint.js and aimsIdentify.js
*         so that the routines is this file will override routines in the other two
*         (in other words, just include it last)
*
*	   MUST CHANGE THE VALUE OF iWidth from 450 to 650 in aimsPrint.js 02/13/03
*
* method: displayAttributeData() now builds up a temporary string of its page
*         content before writing it.  this string is saved globally for later
*         use on the print page.  this method was chosen over something like
*         trying to read .innerHTML for portability reasons.
*
* notes:  other than the specified change, should otherwise work just as original code
*
* to do:  method of breaking links, changing <A> tags to <P> tags, is sorta slimey
*         (see last line of displayAttributeData())
*         done so that printed page doesn't contain any live links
*         might be better to build up separate strings, one with links, one without
*/

var aimsPrintPatchPresent=true;
var printPatchContent = "";


//-------------------------------------------------------------------
// writePrintPage()
// overrides same function in aimsPrint.js
// adds support for printing attribute data
//-------------------------------------------------------------------
function writePrintPage() {
	var Win1 = open("","PrintPage");
	//Win1.document.open();
	Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
	Win1.document.writeln('	<title>' + titleList[5] + '</title>');
	Win1.document.writeln('</head>');
	Win1.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
	Win1.document.writeln('<FONT FACE="Arial"><B>');
	Win1.document.writeln('<TABLE WIDTH="650" BORDER="1" BORDERCOLOR="BLACK" CELLSPACING="0" CELLPADDING="0" NOWRAP>');
	Win1.document.writeln('	<TR>');
	Win1.document.writeln('		<TH COLSPAN="2">' + printTitle + '</TH>');
	Win1.document.writeln('	</TR>');
	Win1.document.writeln('	<TR ALIGN="CENTER">');
	Win1.document.write('		<TD ALIGN="CENTER" WIDTH="450" HEIGHT="450"');
	if (hasOVMap) Win1.document.write(' ROWSPAN="2"');
	Win1.document.writeln('>');
	//Win1.document.writeln('			<IMG SRC="' + printMapURL + '" WIDTH=450 HEIGHT=450 HSPACE=0 VSPACE=0 BORDER=0 ALT="">');
	Win1.document.writeln('			<IMG SRC="' + printMapURL + '" ALIGN="CENTER" WIDTH=650 HEIGHT=450 HSPACE=0 VSPACE=0 BORDER=0 ALT="">');
	Win1.document.writeln('		</TD>');
	/*if (hasOVMap) {
		Win1.document.writeln('		<TD HEIGHT="150" ALIGN="CENTER">');
		Win1.document.writeln('			<IMG SRC="' + printOVURL + '" WIDTH=190 HEIGHT=150 HSPACE=0 VSPACE=0 BORDER=0 ALT="">');
		Win1.document.writeln('		</TD>');
	}*/
	Win1.document.writeln('	</TR>');
	Win1.document.writeln('	<TR>');
	Win1.document.writeln('		<TD ALIGN="CENTER" VALIGN="TOP">');
	//Win1.document.writeln('			<IMG SRC="' + printLegURL + '" HSPACE=0 VSPACE=0 BORDER=0 ALT="">');
	Win1.document.writeln('<font size="1">The Lexington-Fayette Urban County Government (LFUCG) is pleased to deliver Fayette County data via the Internet and makes every effort to provide the most current and accurate information available.  However, no warranties, expressed or implied are provided for the data herein or its interpretation.  For data descriptions, questions or additional information regarding <u>LFUCG DATA</u> please contact the GIS Section: 859.258.3386, © 2003, LFUCG&nbsp&nbsp<b></font><br>');
	Win1.document.writeln('		</TD>');
	Win1.document.writeln('	</TR>');
	
        if (printPatchContent != "") {
		Win1.document.writeln(' <TR><TD COLSPAN="2" ALIGN="CENTER">');
		Win1.document.writeln( printPatchContent );
		Win1.document.writeln(' </TD></TR>');
        }
	
	Win1.document.writeln('</TABLE>');
	Win1.document.writeln('</B></FONT>');
	//Win1.document.writeln('</body></html>');
	Win1.document.close();
	
	legendVisible=legVis2;
	Win1=null;
	hideRetrieveMap();
}


//-------------------------------------------------------------------
// displayAttributeData()
// overrides same function in aimsIdentify.js
// adds support for printing attribute data
//-------------------------------------------------------------------
function displayAttributeData(theReply) {
	var ppc = "";   // to build up printPatchContent, localize it for speed and ease of typing
    var gmd = "";   // to store 'get more data' section
    var efc
	//alert(theReply);
	setLayerFields(ActiveLayerIndex);
	var theError = getXMLErrorMessage(theReply);
	var fList="";
	var lpos1 = 1;
	var lpos2 = 1;
	var epos = 1;
	var spos = 1;
	var morePoints=true;
	var moreFeatures=true;
	var featureCount = justGetFeatureCount(theReply);
	//alert(featureCount);
	var pos = 0;
	var 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="";
	var inData="";
	var xStr="";
	var yStr="";
	var tempString = "";
	var fCount = featureCount;
	//alert("displayAttributeData()[featurecount=" + featureCount + "]");
	selectCount = 0;
	var tempString="";
	var Win1 = parent.TextFrame;
	var theFrame = "parent.MapFrame";
	if (featureCount > 0) {
		newSelectCount += 1;


		if (showSelectedData) {
			//alert("displayAttributeData()[opening html page]");
			if ((useExternalWindow) || (!useTextFrame)) {
				Win1 = window.open("","QueryWindow","width=575,height=120,scrollbars=yes,resizable=yes");
				theFrame = "opener";
				if (parent.MapFrame!=null) theFrame = "opener.parent.MapFrame";
			} else {
				Win1 = parent.TextFrame;
				Win1.document.open();
			}
			Win1.document.open();
			Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head><title>' + titleList[7] + '</title></head>');
			Win1.document.writeln('<body bgcolor="' + textFrameBackColor + '" text="Black" link="Blue" vlink="Gray" LEFTMARGIN=0 onload="window.focus()">');
			ppc += '<center>';
			ppc += '<FONT FACE="Arial" SIZE="-1"><b>' + LayerName[ActiveLayerIndex] + '</b></FONT>';
			ppc += '<table border="1" cellspacing="0" cellpadding="2" nowrap bgcolor="' + tableBackColor + '">';
		}
		endpos = 1;
		
		for (var i=0;i<fCount;i++) {
			//alert(endpos);
			if (toolMode!=4) {
				var theXYs = getEnvelopeXYs(theReply, endpos)
				selectLeft[selectCount] = theXYs[0];
				selectBottom[selectCount] = theXYs[1];
				selectRight[selectCount] = theXYs[2];
				selectTop[selectCount] = theXYs[3];
				endpos = xmlEndPos;
			}
			//alert(endpos);
			inData = parseRecordString(theReply, endpos);
			endpos = xmlEndPos;
			//selectedData = clearLeadingSpace(inData);
			selectedData = inData;
			
			epos = theReply.indexOf("</FEATURE",endpos);
			if (showSelectedData) {
				//alert("2\n" + selectedData);
				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);
				
				var idFieldNum = -1;
				var shapeFieldNum = -1;
				if (hideIDFieldData) {
					// hide ID column header
					for (var f=0;f<fName1.length;f++) {
						if (fName1[f]==LayerIDField[ActiveLayerIndex]) idFieldNum = f;
					}
				}
				if (hideShapeFieldData) {
					// hide Shape column header
					for (var f=0;f<fName1.length;f++) {
						if (fName1[f]==LayerShapeField[ActiveLayerIndex]) shapeFieldNum = f;
					}
				}
				
				if (selectCount==0) {
					ppc += '<tr><th><FONT FACE="Arial" SIZE="-2">' + msgList[86] + '</FONT></a></th>';
					for (var f=0;f<fName1.length;f++) {
						if ((f!=idFieldNum) && (f!=shapeFieldNum)) {
							var f2 = -1;
							if (useFieldAlias) {
								for (var f3=0;f3<AliasFieldName.length;f3++) {
									if (AliasFieldName[f3]==fName1[f]) f2 = f3;
								}
							}
							if (f2!=-1) {
								ppc += '<th><FONT FACE="Arial" SIZE="-2">' + AliasFieldAlias[f2] + '</FONT></a></th>';
							} else {
								ppc += '<th><FONT FACE="Arial" SIZE="-2">' + fName1[f] + '</FONT></a></th>';
							}
						}
					}
					ppc += '</tr>';
				}
				ppc += '<tr><td>';
				if (toolMode!=4) ppc += '<a href="javascript:' + theFrame + '.showHighlight(' + selectCount + ')">';
				ppc += '<FONT FACE="Arial" SIZE="-2">' + (selectCount+queryStartRecord) + '</FONT>';
				if (toolMode!=4) ppc += '</a>';
				ppc += '</td>';
				for (var f=0;f<fName1.length;f++) {	
					if ((f!=idFieldNum) && (f!=shapeFieldNum)) {
						ppc += '<TD>';
						var isHyper=false;
						if (showHyper) {
							for (var s1=0;s1<hyperLinkFields.length;s1++) {
								if (hyperLinkFields[s1]==fName1[f]) {
									var theLinkURL = currentHyperLinkPrefix + fValue1[f] + currentHyperLinkSuffix;
									ppc += '<a href="' + theLinkURL + '" 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") {
							//alert(fName1[f]);
							if (isNaN(fValue1[f])) {
								var theDate = fValue1[f];
							} else {
								//var theDate = new Date(parseInt(fValue1[f]));
								var theDateObj = new Date(parseFloat(fValue1[f]));
								var d = theDateObj.toUTCString();
								var theDate = d.replace(/GMT|UTC/,"");
							}
							ppc += '<FONT FACE="Arial" SIZE="-2">' + theDate + '</FONT>';
							theDate=null;
						} else {
							// put html entity for spaces so display is correct - browsers trim extra spaces
							tempString = fValue1[f].replace(/ /g, "&nbsp;");
							ppc += '<FONT FACE="Arial" SIZE="-2">' + tempString + '</FONT>';
							//Win1.document.write('<FONT FACE="Arial" SIZE="-2">' + fValue1[f] + '</FONT>');
						}
						if (isHyper) ppc += '</a>';
						ppc += '</td>';
					}
				}
				ppc += '</tr>';
				fName1 = null;
				fValue1 = null;
				
			}
			selectCount += 1;
					
		}
		if (showSelectedData) {
			
			ppc += '</table></center>';
			gmd += '<center><FONT FACE="Arial" SIZE="-2">';
			if (toolMode!=25) {
				if (queryStartRecord>1) {
					var prevRecord = queryStartRecord - maxFeaturesReturned;
					if (prevRecord<1) prevRecord=1;
					gmd += '<a href="javascript:' + theFrame + '.getMoreData(' + prevRecord + ')">' + msgList[61] + maxFeaturesReturned + msgList[62] + '</a>&nbsp;&nbsp;&nbsp;';
				}
				if (stillMore) {
					var nextRecord=featureCount + queryStartRecord;
					gmd += '<a href="javascript:' + theFrame + '.getMoreData(' + nextRecord + ')">' + msgList[63] + '</a>';
				}
			}
			if ((toolMode!=4) && (toolMode!=25) && (selectCount>1)) {
				gmd += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b><a href="javascript:' + theFrame + '.zoomToReturnedRecords()">Zoom to these records</A></b>';
			}

			gmd += '</font></center>';
			Win1.document.writeln(ppc);
			Win1.document.writeln(gmd);
			Win1.document.writeln('</body></html>');
			Win1.document.close();
		}
		//alert("toolMode:" + toolMode);
		
		if ((queryStartRecord==1) && (toolMode!=4) && (toolMode!=25)) {
			if ((selectCount==1) && (zoomToSingleSelect)) {
				var fWidth = selectRight[0] - selectLeft[0];
				var fHeight = selectTop[0] - selectBottom[0];
				var mWMargin = 0;
				var mHMargin = 0;
				if (selectType=="point") {			
					mWMargin = fullWidth * selectPointMargin;
					mHMargin = fullHeight * selectPointMargin;
					if (mWMargin > xDistance/2) {
						mWMargin = xDistance/2;
						mHMargin = yDistance/2;
					}
				} else {
					mWMargin = fWidth * selectMargin;
					mHMargin = fHeight * selectMargin; 
				}
				saveLastExtent();
				eLeft = selectLeft[0] - mWMargin;
				eRight = selectRight[0] + mWMargin;
				eTop = selectTop[0] + mHMargin;
				eBottom = selectBottom[0] - mHMargin;
			}
			sendMapXML();
		}
		
		
			
	} else {
		//alert(tempString);
		if ((useExternalWindow) || (!useTextFrame)) {
			Win1 = window.open("","QueryWindow","width=575,height=120,scrollbars=yes,resizable=yes");
		} else {
			Win1 = parent.TextFrame;
			Win1.document.open();
		}
		Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><head>');
		Win1.document.writeln('	<title>' + titleList[8] + '</title>');
		Win1.document.writeln('</head>');
		Win1.document.writeln('<body BGCOLOR="White" TEXT="Black" LEFTMARGIN=0 TOPMARGIN=0>');
		Win1.document.writeln('<FONT FACE="Arial"><B>' + LayerName[ActiveLayerIndex] +'</B></font><FONT FACE="Arial" size="-2">');
		Win1.document.writeln('<br>' + msgList[64]);
		if (debugOn>0) {
			Win1.document.writeln('<p>' + msgList[65] + '<br>');
			Win1.document.writeln(untag(theReply));
		} else {
			if (theError!="") {
				Win1.document.writeln('<p>' + msgList[66] + '<br>');
				Win1.document.writeln(theError);
			}
		}
		Win1.document.writeln('</FONT>');
		Win1.document.writeln('</body></html>');
		Win1.document.close();
	}
	if (toolMode==4) selectCount=0;
	Win1=null;
	hideRetrieveData();

	printPatchContent = ppc.replace(/<a/g, "<p");  // globalize it (also break links)
}
