// aimsQuery.js
/*
*  JavaScript template file for ArcIMS HTML Viewer
*               dependent on aimsXML.js, ArcIMSparam.js, aimsCommon.js, aimsMap.js, aimsIdentify.js, aimsSelect.js, and aimsLayers.js
*               To be interactive, dependent also on aimsDHTML.js, aimsClick.js, and aimsNavigation.js
*/

aimsQueryPresent=true;

var showSampleValues=false;

var storedQueryCount = 0;

var storedQueryName = new Array();
var storedQueryString = new Array();
var storedQueryVariable = new Array();
var storedQueryVarCount = new Array();
var storedQueryFieldList = new Array();
var storedQueryIndex = 0;


/*
***************************************************************************************

Querying functions

***************************************************************************************
*/


// query form
function queryForm() {
        if (checkIfActiveLayerAvailable()) {
                fieldIndex=0;
                showSampleValues=false;

                setLayerFields(ActiveLayerIndex);
                if (showSampleValues) {
                        var theText = writeFieldSample(LayerFields[fieldIndex]);
                        sendToServer(imsQueryURL,theText,40);
                } else {
                        writeQueryForm();
                }
        }

}

// find Form
function findForm() {
        if (checkIfActiveLayerAvailable()) {
                setLayerFields(ActiveLayerIndex);
                if (useTextFrame) {
                        parent.TextFrame.document.location= appDir + "findForm.htm";
                } else {
                        Win1 = open(appDir + "findForm.htm","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
                }
        }
}



// process query
function sendQueryString(newString) {
        //if (LayerIDField[ActiveLayerIndex]!="#ID#") {
                newString = fixSingleQuotes(newString);
                newString = swapQuotes(newString);
        //}
        //alert(newString);
        newString = makeXMLsafe(newString);
        setQueryString=newString;
        selectionMode=1;
        selectData.length=0;
        LayerFields.length=0;
        LayerFieldType.length=0;
        LayerFieldCount=0;
        highlightedOne="";
        showBuffer=false;
        showRetrieveData();
        var theString = writeQueryXML(newString);
        sendToServer(imsQueryURL,theString,queryXMLMode);
}

// write out XML request to query attributes
function writeQueryXML(queryString) {
        if (swapSelectFields) {
                selectFields=selFieldList[ActiveLayerIndex];
        }
        var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true"';
        theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">\n';
        theString += '<LAYER id="' + ActiveLayer + '" />';
        if (useLimitExtent) {
                // keep this within the limitExtent
                theString += '<SPATIALQUERY subfields="' + selectFields + '" where="' + queryString + '">';
                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 += '</SPATIALQUERY>\n';
        } else {
        //theString += '<QUERY subfields="' + selectFields + '" where="' + queryString + '" />';
        theString += '<SPATIALQUERY subfields="' + selectFields + '" where="' + queryString + '" />';
        }
        theString += '</GET_FEATURES>';
        theString += '</REQUEST>';
        theString += '</ARCXML>';
        //alert("writeQueryXML()\nQuery XML Request:\n" + theString);
        selectLayer=ActiveLayer;
        selectType=ActiveLayerType;
        selectCount=0;
        hightlightedOne="";
        selectPoints.length=1;
        selectLeft.length=1;
        selectRight.length=1;
        selectTop.length=1;
        selectBottom.length=1;
        return theString;

}

// write out XML request to get field value samples
function writeFieldSample(theField) {
        var theFields = theField;
        var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="false"';
        theString += ' featurelimit="' + numberDataSamples + '">\n';
        theString += '<LAYER id="' + ActiveLayer + '" />';
        //theString += '<QUERY subfields="' + theFields + '" where="' + LayerIDField[ActiveLayerIndex] + ' GT 0" />';
        theString += '<QUERY subfields="' + theFields + '" />';
        theString += '</GET_FEATURES>';
        theString += '</REQUEST>';
        theString += '</ARCXML>';
        //alert(theString);
        selectLayer=ActiveLayer;
        selectType=ActiveLayerType;
        selectCount=0;
        hightlightedOne="";
        selectPoints.length=1;
        selectLeft.length=1;
        selectRight.length=1;
        selectTop.length=1;
        selectBottom.length=1;
        //alert(theString);
        return theString;
}
// send find request
function getFind(theValue) {
        //alert(theValue);
        selectCount=0;
        showBuffer=false;
        highlightedOne="";
        selectPoints.length=0;
        selectLeft.length=0;
        selectRight.length=0;
        selectTop.length=0;
        selectBottom.length=0;
        drawSelectBoundary=false;
        showGeocode=false;
        clickCount=0;
        totalMeasure=0;
        currentMeasure=0;
        selectionMode=1;
        var theNewQueryString = "";
        var theTempString = "";
        var fieldListString = LayerIDField[ActiveLayerIndex] + " " + LayerShapeField[ActiveLayerIndex];
        var elemCount = 0;
        for (var i=0;i<LayerFields.length;i++) {
                if (LayerFieldType[i].indexOf("12",0)!=-1) {
                        theTempString = "(" + LayerFields[i] + " LIKE '%" + theValue + "%')";
                        if (elemCount>0) theTempString = " OR " + theTempString;
                        if (theNewQueryString.length + theTempString.length < 1024) {
                                theNewQueryString = theNewQueryString + theTempString;
                                fieldListString = fieldListString + " " + LayerFields[i];
                                elemCount += 1;
                        }

                }
        }
        if (theNewQueryString!="") {
                showRetrieveData();
                showBuffer=false;
                theNewQueryString=makeXMLsafe(theNewQueryString);
                setQueryString = theNewQueryString;
                var theString = writeFindRequest(theNewQueryString,fieldListString);
                //alert(theString);
                sendToServer(imsQueryURL,theString,findXMLMode);
        } else {
                alert(msgList[80]);
        }
}

// write out find form
function writeFindRequest(findQuery,fieldList) {
        var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true"';
        theString += ' featurelimit="' + maxFeaturesReturned + '" beginrecord="' + queryStartRecord + '">\n';
        theString += '<LAYER id="' + ActiveLayer + '" />\n';
        if (useLimitExtent) {
                // keep this within the limitExtent
                theString += '<SPATIALQUERY subfields="' + fieldList + '" where="' + findQuery + '" />';
                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 += '</SPATIALQUERY>\n';
        } else {
        theString += '<QUERY subfields="' + fieldList + '" where="' + findQuery + '" />';
        }
        theString += '</GET_FEATURES>\n';
        theString += '</REQUEST>\n';
        theString += '</ARCXML>';
        //alert(theString);
        selectLayer=ActiveLayer;
        selectType=ActiveLayerType;
        selectCount=0;
        hightlightedOne="";
        selectPoints.length=1;
        selectLeft.length=1;
        selectRight.length=1;
        selectTop.length=1;
        selectBottom.length=1;
        return theString;

}


// parse layer field value samples
function parseFieldSamples(theReply) {
        //alert("Reply Length: " + theReply.length);
        //alert(theReply);
        var fList="";
        var lpos1 = 1;
        var lpos2 = 1;
        var epos = 1;
        var spos = 1;
        var morePoints=true;
        var moreFeatures=true;
        var pos = 0;
        var startpos = 0;
        var endpos = 0;
        var featureCount = justGetFeatureCount(theReply);
        var tempString="";
        if (featureCount > 0) {
                selectData.length=featureCount;
                for (var i=0;i<featureCount;i++) {
                        pos = theReply.indexOf("<FIELDS ",endpos);
                        startpos = pos + 8;
                        endpos =theReply.indexOf(' />',startpos);
                        inData = theReply.substring(startpos,endpos);
                        //inData = fixSingleQuotes(inData);
                        //selectData[i] = clearLeadingSpace(inData);
                        //selectData[i] = escape(inData);
                        selectData[i] = inData;

                }
        } else {
                selectData.length=0;
        }

}

// write out a query form
function writeQueryForm() {
        var startpos = 0;
        var endpos = 0;
        var SampleCount = selectData.length;
        var theIndex = fieldIndex;
        var sampleList = new Array();
        var qField = LayerFields[fieldIndex] + '="';
        var valueTitle = buttonList[2];
        var tempString = "";
        if (showSampleValues) {
                for (var i=0;i<SampleCount;i++) {
                        startpos = selectData[i].indexOf(qField,0);
                        startpos = startpos + qField.length;
                        endpos = selectData[i].indexOf('"',startpos);
                        if (LayerFieldType[theIndex].indexOf("12",0)!=-1) {
                                // a Character field
                                //var vData = escape(selectData[i].substring(startpos,endpos));
                                var vData = makeXMLsafe(selectData[i].substring(startpos,endpos));
                                //vData = fixSingleQuotes(vData);
                                sampleList[i] = dQuote + vData + dQuote;

                        } else if (LayerFieldType[theIndex]=="91") {
                                // a Date field
                                var theDateObj = new Date(parseFloat(selectData[i].substring(startpos,endpos)));

                                var d = theDateObj.toUTCString();
                                sampleList[i] = d.replace(/GMT|UTC/,"");
                                theDateObj = null;

                        } else {
                                sampleList[i] = selectData[i].substring(startpos,endpos);
                        }
                }
                valueTitle = buttonList[3];
        }
        if (useTextFrame) {
                var Win1 = parent.TextFrame;
                Win1.document.open();
                var t = "parent.MapFrame";

        } else {
                var Win1 = open("","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
                var t = "opener";
                if (parent.MapFrame!=null) t = "opener.parent.MapFrame";
        }

        Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><HEAD>');
        Win1.document.writeln('                 <script language="javascript">');
                Win1.document.writeln('                 var t = ' + t);
                Win1.document.writeln('                 var dQuote = \'"\';');
                Win1.document.writeln('                 var lastExpr = "";');
                Win1.document.writeln('                 var currExpr = "";');
                Win1.document.writeln('                 var sampleList = new Array();');
                Win1.document.writeln('                 var qField = "";');
                Win1.document.writeln('                 function addString() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         qField = document.QueryStuff.QueryField.options[document.QueryStuff.QueryField.selectedIndex].value;');
                Win1.document.writeln('                         var qOperator = document.QueryStuff.QueryOperator.options[document.QueryStuff.QueryOperator.selectedIndex].value;');
                Win1.document.writeln('                                 var fNum = document.QueryStuff.QueryField.selectedIndex;');
                if (showSampleValues) {
                        Win1.document.writeln('                         qString = t.parseEntity(document.QueryStuff.QueryValue.options[document.QueryStuff.QueryValue.selectedIndex].value);');
                } else{
                        Win1.document.writeln('                                 var qString = document.QueryStuff.QueryValue.value;');
                        Win1.document.writeln('                                 if (t.LayerFieldType[fNum].indexOf("12",0)!=-1) {');
                        Win1.document.writeln('                                         if (qString.indexOf(dQuote)==-1) {');
                        Win1.document.writeln('                                                 qString = dQuote + qString + dQuote;');
                        Win1.document.writeln('                                         }');
                        Win1.document.writeln('                                 }');
                }
                Win1.document.writeln('                                 if (t.LayerFieldType[fNum].indexOf("91",0)!=-1) {');
                Win1.document.writeln('                                         qString = t.formatDate(qString);');
                Win1.document.writeln('                                 }');
                Win1.document.write('                                   if ((t.LayerFieldType[fNum].indexOf("4",0)!=-1) || ');
                Win1.document.write('                                   (t.LayerFieldType[fNum].indexOf("8",0)!=-1) || ');
                Win1.document.write('                                   (t.LayerFieldType[fNum].indexOf("6",0)!=-1) || ');
                Win1.document.write('                                   (t.LayerFieldType[fNum].indexOf("5",0)!=-1)) {');
                Win1.document.writeln('                                         qString = t.convertDecimal(qString);');
                Win1.document.writeln('                                 }');
                Win1.document.writeln('                         var qString2 = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         var theString =  qField + " " + qOperator + " " + qString;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = qString2 + theString;');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function sendQuery() {');
                Win1.document.writeln('                         var theString = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         if (theString!="") {');
                Win1.document.writeln('                                 var ary = new Array("<",">","="," LIKE "," like "," IS "," is ");');
                Win1.document.writeln('                                 var va = 0;');
                Win1.document.writeln('                                 var arylen = ary.length;');
                Win1.document.writeln('                                 for (i=0;i<arylen;i++){');
                Win1.document.writeln('                                         a = ary[i]');
                Win1.document.writeln('                                         s = theString.search(a)');
                Win1.document.writeln('                                         va = va + s ');
                Win1.document.writeln('                                 }');
                Win1.document.writeln('                                 if (va == -7){');
                Win1.document.writeln('                                         alert("' + msgList[109] + '");');
                Win1.document.writeln('                                 } else {');
                Win1.document.writeln('                                         sampleList=null;');
                Win1.document.writeln('                                         t.sendQueryString(theString);');
                Win1.document.writeln('                                         t=null;');
                Win1.document.writeln('                                 }');
                Win1.document.writeln('                         } else {');
                Win1.document.writeln('                                 alert("' + msgList[110] + '");');
                Win1.document.writeln('                         }');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function addAnd() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         var qString2 = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = qString2 + " AND ";');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function addOr() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         var qString2 = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = qString2 + " OR ";');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function addNot() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         var qString2 = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = qString2 + "NOT ";');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function addLeftPara() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         var qString2 = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = qString2 + "(";');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function addRightPara() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         var qString2 = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = qString2 + ")";');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function undoString() {');
                Win1.document.writeln('                         currExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = lastExpr;');
                Win1.document.writeln('                         t.setQueryString = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         lastExpr = currExpr;');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function clearString() {');
                Win1.document.writeln('                         lastExpr = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         document.QueryStuff.QueryString.value = "";     ');
                Win1.document.writeln('                         t.setQueryString = "";');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function setUp() {');
                Win1.document.writeln('                         if (t.showSampleValues) {');
                Win1.document.writeln('                                 t.fieldIndex = document.QueryStuff.QueryField.selectedIndex;');
                Win1.document.writeln('                                 t.setQueryString = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                                 var theField = t.LayerFields[t.fieldIndex];');
                Win1.document.writeln('                                 //alert(theField);');
                Win1.document.writeln('                                 t.tempGetSamples(theField);');
                Win1.document.writeln('                                 t.writeQueryForm();');
                Win1.document.writeln('                         }');
                Win1.document.writeln('                 }');

                Win1.document.writeln('                 function changeToSamples() {');
                Win1.document.writeln('                         t.fieldIndex = document.QueryStuff.QueryField.selectedIndex;');
                Win1.document.writeln('                         t.setQueryString = document.QueryStuff.QueryString.value;');
                Win1.document.writeln('                         t.tempGetSamples(t.LayerFields[t.fieldIndex]);');
                Win1.document.writeln('                 }');

                Win1.document.writeln('         </script>');
                Win1.document.writeln('         </head>');

                Win1.document.writeln('         <body link="Blue" vlink="Blue" alink="Blue" leftmargin=0 topmargin=0 bgcolor="' + textFrameBackColor + '" onload="window.focus(); ' + t + '.queryOpen=true;" onunload="' + t + '.queryOpen=false;">');
                Win1.document.writeln('                 <center>');
                Win1.document.writeln('                 <form name="QueryStuff" onsubmit="sendQuery();return false;">');
                Win1.document.writeln('                 <font face="Arial" size="-3">');
                Win1.document.writeln('                 <table border="0" cellspacing="0" cellpadding="2" width=100%>');
                Win1.document.writeln('                 <tr><td align="CENTER" bgcolor="' + textFrameBackColor + '"><font face="Arial" size="-2">' + msgList[72] + '</font></td>');
                Win1.document.writeln('                 <td align="CENTER" bgcolor="' + textFrameBackColor + '"><font face="Arial" size="-2">' + msgList[73] + '</font></td>');
                Win1.document.writeln('                 <td align="CENTER" bgcolor="' + textFrameBackColor + '"><font face="Arial" size="-2">' + valueTitle + '</font></td>');
                Win1.document.writeln('                 <td rowspan="2" align="CENTER" bgcolor="Silver">');
                Win1.document.writeln('                 <input type="button" name="theAnd" value=" And " onclick="addAnd()">');
                Win1.document.writeln('                 <input type="button" name="theOr" value=" Or " onclick="addOr()"><br>');
                Win1.document.writeln('                 <input type="button" name="theNot" value=" Not " onclick="addNot()">');
                Win1.document.writeln('                 <input type="button" name="theLeft" value="  (  " onclick="addLeftPara()">');
                Win1.document.writeln('                 <input type="button" name="theRight" value="  )  " onclick="addRightPara()">');
                Win1.document.writeln('                 </td>');

                Win1.document.writeln('                 </tr>');
                Win1.document.writeln('                 <tr><td align="CENTER" bgcolor="' + textFrameBackColor + '">');
                        Win1.document.writeln('                 <select name="QueryField" onchange="setUp();">');
                        for (var i=0;i<LayerFieldCount;i++) {
                                Win1.document.write('<option value="' + LayerFields[i] + '"');
                                if (i==fieldIndex) Win1.document.write(' selected');

                                //Win1.document.writeln('>' + LayerFields[i]);

                                // Put Field Alias in form if present
                if (useFieldAlias) {
                                        if (fieldAliasList[ActiveLayerIndex].length>0) {
                             var start=fieldAliasList[ActiveLayerIndex].indexOf(LayerFields[i]+':');
                             if (start == -1) {
                                                        alias=LayerFields[i];
                             } else {
                                  start=start+LayerFields[i].length+1;
                                  var end=fieldAliasList[ActiveLayerIndex].indexOf("|",start);
                                  if (end == -1) end = fieldAliasList[ActiveLayerIndex].length;
                                  else end=end-start;
                                  alias=fieldAliasList[ActiveLayerIndex].substr(start,end);
                             }
                             Win1.document.writeln('>'+alias);
                                        }
                } else {
                                        Win1.document.writeln('>' + LayerFields[i]);
                                }
                                // end of Field Alias stuff

                        }
                        Win1.document.writeln('                 </select>');
                Win1.document.writeln('                 </td><td align="CENTER" bgcolor="' + textFrameBackColor + '">');
                Win1.document.writeln('                 <select name="QueryOperator">');
                Win1.document.writeln('                 <OPTION selected value=" = ">=');
                Win1.document.writeln('                 <option value=" < ">&lt;');
                Win1.document.writeln('                 <option value=" > ">&gt;');
                Win1.document.writeln('                 <option value=" <= ">&lt;=');
                Win1.document.writeln('                 <option value=" >= ">&gt;=');
                Win1.document.writeln('                 <option value=" LIKE ">LIKE');
                //Win1.document.writeln('                       <option value=" CN ">CN ');
                Win1.document.writeln('                 </select>');

                Win1.document.writeln('                 </td><td align="CENTER" bgcolor="' + textFrameBackColor + '">');

                if (showSampleValues) {
                        Win1.document.writeln('                 <select name="QueryValue">');
                                for (var i=0;i<SampleCount;i++) {
                                        //Win1.document.writeln('<option value=\'' + sampleList[i] + '\'>' + unescape(sampleList[i]));
                                        tempString = parseEntity(sampleList[i]);
                                        tempString = tempString.replace(/ /g, "&nbsp;");
                                        Win1.document.writeln('<option value=\'' + sampleList[i] + '\'>' + tempString);
                                }
                        Win1.document.writeln('                 </select>');
            } else {
                        Win1.document.writeln('<input name="QueryValue" size="25" maxlength="1000" >');
                        Win1.document.writeln('                 &nbsp;&nbsp;<input type="button" name="makeList" value="' + buttonList[4] + '" onclick="changeToSamples()">');
                        Win1.document.writeln('                 </td>');
                }
                Win1.document.writeln('                 </td>');
                Win1.document.writeln('                 </tr>');
                Win1.document.writeln('                 <tr><td colspan="4" align="center" bgcolor="Black">');
                Win1.document.writeln('                 <input type="button" name="addIt" value="' + buttonList[5] + '" onclick="addString()">');
                Win1.document.writeln('                 <input type="Text" name="QueryString" size="50" maxlength="1024" value=\'' + setQueryString + '\'><br>');
                Win1.document.writeln('                 <input type="submit" value="' + buttonList[6] + '" name="submit">');
                Win1.document.writeln('                 <input type="button" name="UnDo" value="' + buttonList[7] + '" onclick="undoString()">');
                Win1.document.writeln('                 <input type="button" name="Clear" value="' + buttonList[8] + '" onclick="clearString()">');
                Win1.document.writeln('                 </td></tr>');
                Win1.document.writeln('                 </table>');
                Win1.document.writeln('                 </font></center></FORM></body></html>');

                Win1.document.close();
                Win1=null;
                sampleList=null;
}


// temporarily change getSampleValues to true and load queryform
function tempGetSamples(theField) {
        showSampleValues=true;
        if (useTextFrame) {
                var Win1 = parent.TextFrame;

        } else {
                var Win1 = open("","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
        }
        Win1.document.open();
        Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><HEAD>');
        Win1.document.writeln('<body BGCOLOR="' + textFrameBackColor + '" TEXT="Black" size="-1">');
        Win1.document.writeln('<div align="center"><font face="Arial"><b>');
        Win1.document.writeln(msgList[74] + LayerName[ActiveLayerIndex] + '. . .</b></font><br>');
        Win1.document.writeln('<font face="Arial" size="-1">' + msgList[75] + numberDataSamples + msgList[76] + '</font></div></body></html>');
        Win1.document.close();
        Win1=null;

        var theText = writeFieldSample(theField);
        //alert(theText);
        sendToServer(imsQueryURL,theText,40);

}

// get the StoredQueries in the MapService
function getStoredQueries() {
        if (checkIfActiveLayerAvailable()) {
                var theString = '<ARCXML version="1.1">\n<REQUEST>\n<GET_SERVICE_INFO renderer="false" extensions="true" fields="false" />\n';
                theString += '</REQUEST>\n</ARCXML>';
                sendToServer(imsQueryURL,theString,55);
        }
}

// get the StoredQueries in the MapService
function parseStoredQueries(theReply) {
        //alert(theReply);
        storedQueryCount=0;
        storedQueryName.length=1;
        storedQueryString.length=1;
        storedQueryVariable.length=1;
        storedQueryVarCount.length=1;
        storedQueryFieldList.length=1;
        storedQueryIndex=0;
        var endpos = 1;
        var pos = -1;
        var blurb = 'id="' + ActiveLayer;
        var startpos = theReply.indexOf("<LAYERINFO",1);
        var thePos = 1;
        while (thePos!=-1) {
                startpos = theReply.indexOf("<LAYERINFO",1);
                endpos = theReply.indexOf(">",startpos);
                thePos = theReply.indexOf(blurb,1);
                if (thePos!=-1) {
                        pos = thePos;
                        thePos=-1;
                }
        }
        var sqpos = 0;
        var sqvpos = 0;
        var sqpos2 = 0;
        var vCount=0;
        if (pos!=-1) {
                var fieldCount = 0;
                epos = theReply.indexOf("</LAYERINFO>",pos);
                startpos=0;
                endpos=pos;
                sqpos = theReply.indexOf("<STOREDQUERY name=",endpos);
                sqpos2 = theReply.indexOf("</STOREDQUERY>",endpos);
                while ((epos>sqpos) && (sqpos!=-1)) {

                        if (sqpos!=-1) {
                                startpos = sqpos + 19;
                                endpos = theReply.indexOf(dQuote, startpos);
                                blurb = theReply.substring(startpos,endpos);
                                //alert(blurb);
                                storedQueryName[storedQueryCount] = blurb;

                                //startpos = theReply.indexOf("<QUERY where=",endpos);
                                var sp2 = theReply.indexOf("<QUERY ",endpos);
                                sp2 += 7;
                                startpos = theReply.indexOf("where=",sp2);
                                startpos += 7;
                                endpos = theReply.indexOf(dQuote, startpos);
                                blurb = theReply.substring(startpos,endpos);
                                storedQueryString[storedQueryCount] = blurb;
                                startpos = theReply.indexOf("subfields=",sp2);
                                startpos += 11;
                                endpos = theReply.indexOf(dQuote, startpos);
                                storedQueryFieldList[storedQueryCount] = theReply.substring(startpos,endpos);
                                storedQueryVariable[storedQueryCount]="";
                                sqvpos = theReply.indexOf("<SQVAR",startpos);
                                vCount = 0;
                                while ((sqvpos!=-1) && (sqvpos<sqpos2)) {
                                        endpos = sqvpos;
                                        startpos = theReply.indexOf("name=",endpos);
                                        startpos += 6;
                                        endpos = theReply.indexOf(dQuote, startpos);
                                        blurb = theReply.substring(startpos,endpos);
                                        if (vCount > 0) blurb = "|" + blurb;
                                        storedQueryVariable[storedQueryCount] = storedQueryVariable[storedQueryCount] + blurb;
                                        vCount += 1;
                                        sqvpos = theReply.indexOf("<SQVAR",startpos);
                                }
                                storedQueryVarCount[storedQueryCount] = vCount;

                                storedQueryCount += 1;
                        }


                        sqpos = theReply.indexOf("<STOREDQUERY name=",endpos);
                        sqpos2 = theReply.indexOf("</STOREDQUERY>",sqpos);
                }
        }
        blurb=null;
        if (storedQueryCount==0) {
                alert(LayerName[ActiveLayerIndex] + msgList[77]);
        } else {
                storedQueryForm();
        }
}

// storedQuery Form
function storedQueryForm() {
        if (checkIfActiveLayerAvailable()) {
                writeStoredQueryForm(storedQueryIndex);
        }
}

function writeStoredQueryForm(theIndex) {
        storedQueryIndex=theIndex;
        if (storedQueryVarCount==0) {
                sendStoredQuery(theIndex,"");
        } else {

                if (useTextFrame) {
                        var Win1 = parent.TextFrame;
                        Win1.document.open();
                        var t = "parent.MapFrame";

                } else {
                        var Win1 = open("","QueryWindow","width=575,height=150,scrollbars=yes,resizable=yes");
                        var t = "opener";
                        if (parent.MapFrame!=null) t = "opener.parent.MapFrame";
                }

                Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><HEAD>');
                Win1.document.writeln('                 <script language="javascript">');
                Win1.document.writeln('var t = ' + t);

                Win1.document.writeln('function setStyle() {');
                Win1.document.writeln(' var f = document.forms[0];');
                Win1.document.writeln(' var theCount = t.storedQueryIndex;');
                Win1.document.writeln(' var okValue = 0;');
                Win1.document.writeln(' if (t.storedQueryVarCount[theCount]==1) {');
                Win1.document.writeln('         var theValue = f.theStyle.value;');
                Win1.document.writeln('         if (theValue!="") okValue = 1;');
                Win1.document.writeln(' } else {');
                Win1.document.writeln('         var theValue = f.theStyle[0].value;');
                Win1.document.writeln('         if (f.theStyle[0].value!="") okValue = 1;');
                Win1.document.writeln('         for (var i=1;i<t.storedQueryVarCount[theCount];i++) {');
                Win1.document.writeln('                 theValue = theValue + "|" + f.theStyle[i].value;');
                Win1.document.writeln('                 if (f.theStyle[i].value!="") okValue += 1;');
                Win1.document.writeln('         }');
                Win1.document.writeln(' }');
                Win1.document.writeln(' if (okValue==t.storedQueryVarCount[theCount]) {');
                Win1.document.writeln('         t.sendStoredQuery(theCount,theValue);');
                Win1.document.writeln(' } else {');
                Win1.document.writeln('         alert("Please enter appropriate value");');
                Win1.document.writeln(' }');
                Win1.document.writeln('}');
                Win1.document.writeln('function selectQuery() {');
                Win1.document.writeln(' var f = document.forms[0];');
                Win1.document.writeln(' var theIndex = f.theQuery.selectedIndex;');
                Win1.document.writeln(' t.writeStoredQueryForm(theIndex);');
                Win1.document.writeln('}');
                Win1.document.writeln('</script>');
                Win1.document.writeln('</head>');

                Win1.document.writeln('<body bgcolor="Black" text="White" topmargin=0 leftmargin=0 rightmargin=0 onload="window.focus()">');
                Win1.document.writeln('<div align="center">');
                Win1.document.writeln('<font face="Arial" size="-2"><b>');
                Win1.document.writeln('<form action="" name="theStoreQueryForm" onsubmit="setStyle(); return false;">');
                Win1.document.writeln('<table cellspacing="2" nowrap bgcolor="' + textFrameFormColor + '" width=100%>');
                Win1.document.writeln('<tr><th colspan="3" align="CENTER">');
                Win1.document.writeln('<font face="Arial" size="-1"><b>' + msgList[78] + '</b><br></font>');
                Win1.document.writeln('<font face="Arial" size="-2"><b>' + msgList[79] + '</b></font>');
                Win1.document.writeln('</th></tr>');
                Win1.document.writeln('<tr>');
                Win1.document.writeln('<td align="Left">');
                Win1.document.writeln('<font face="Arial" size="-1">' + LayerName[ActiveLayerIndex]);
                Win1.document.writeln('<select name="theQuery" onchange="selectQuery()">')
                for (var i=0;i<storedQueryCount;i++) {
                        Win1.document.write('   <option value=' + i);
                        if (i==storedQueryIndex) Win1.document.write(' selected');
                        Win1.document.writeln('>' + storedQueryName[i]);

                }
                Win1.document.writeln('</select>');
                Win1.document.writeln('</font></td>');
                Win1.document.writeln('<td align="RIGHT"><font face="Arial" size="-1">');
                for (var i=0;i<storedQueryVarCount[storedQueryIndex];i++) {
                        Win1.document.write(buttonList[2]);
                        if (storedQueryVarCount[storedQueryIndex]>1) Win1.document.write(' ' + (i+1));
                        Win1.document.writeln(':');
                        Win1.document.writeln('<input type=text name="theStyle" value=""><br>');
                }
                Win1.document.writeln('</font>');
                Win1.document.writeln('</td>');
                Win1.document.writeln('<td align="CENTER">');
                Win1.document.writeln('<input type="Button" name="setDU" value="' + buttonList[6] + '" onclick="setStyle()">  <br>');

                Win1.document.writeln('</td></tr></table></form>');
                Win1.document.writeln('</b></font></div>');
                Win1.document.writeln('</body></html>');
                Win1.document.close();
                Win1=null;

        }

}

// create the querystring for storedQuery and send it
function sendStoredQuery(theIndex,theValue) {
        showRetrieveData();
        var oldString = storedQueryString[theIndex];
        if (storedQueryVarCount[theIndex]>0) {
                var var1 = storedQueryVariable[theIndex].split("|");
                var var2 = theValue.split("|");
                for (var i=0;i<var1.length;i++) {
                        oldString = swapStuff(oldString,var1[i],var2[i]);
                }

        } else {
                oldString = swapStuff(oldString,storedQueryVariable[theIndex],theValue);
        }
        //var newString = parseEntity(oldString);
        var newString = makeXMLsafe(oldString);
        //alert(newString);
        setQueryString = newString;
        selectionMode=1;
        var theString = writeQueryXML(newString);
        //alert("StoredQuery Request:\n" + theString);
        sendToServer(imsQueryURL,theString,queryXMLMode);
}

// see if there are storedQueries (Search)
function checkStoredQueries(theReply) {
        var startpos = theReply.indexOf("<STOREDQUERY",1);
        if (startpos==-1) {
                //no storedqueries. . . do not display button
                useStoredQuery=false;
        }

}

function writeStartQueryXML(queryString, idAndShapeOnly) {
        if (swapSelectFields) {
                selectFields=selFieldList[ActiveLayerIndex];
        }
        var theString = '<ARCXML VERSION="1.1">\n<REQUEST>\n<GET_FEATURES outputmode="xml" geometry="false" envelope="true"';
        theString += ' compact="true" featurelimit="' + maxFeaturesReturned + '" beginrecord="0">\n';
        theString += '<LAYER id="' + LayerID[ActiveLayerIndex] + '" />';
        if (idAndShapeOnly) {
                theString += '<QUERY subfields="#ID# #SHAPE#" where="' + queryString + '" />';
        } else {
                theString += '<QUERY subfields="' + selectFields + '" where="' + queryString + '" />';
        }
        theString += '</GET_FEATURES>';
        theString += '</REQUEST>';
        theString += '</ARCXML>';
        //alert(theString);
        return theString;

}

function setStartQuery() {
        var theString = writeStartQueryXML(highlightedOne,true);
        sendToServer(imsQueryURL, theString, 20);
}

function parseStartQuery(theReply) {
        //alert(theReply);
        var theError = getXMLErrorMessage(theReply);
        if (theError=="") {
                if (queryZoom) {
                        getXYs(theReply);
                        startLeft = eLeft;
                        startTop = eTop;
                        startRight = eRight;
                        startBottom = eBottom;
                        var fWidth = eRight - eLeft;
                        var fHeight = eTop - eBottom;
                        var mWMargin = 0;
                        var mHMargin = 0;
                        //alert(LayerType[ActiveLayerIndex]);
                        if (LayerType[ActiveLayerIndex]=="point") {
                                selectType="point";
                                //alert("fullWidth=" + fullWidth + "\nfullHeight=" + fullHeight);
                                mWMargin = fullWidth * selectPointMargin;
                                mHMargin = fullHeight * selectPointMargin;
                        } else {
                                mWMargin = fWidth * selectMargin;
                                mHMargin = fHeight * selectMargin;
                        }
                        //alert("mWMargin=" + mWMargin + "\nmHMargin=" + mHMargin);
                        eLeft = eLeft - mWMargin;
                        eRight = eRight + mWMargin;
                        eTop = eTop + mHMargin;
                        eBottom = eBottom - mHMargin;
                        startLeft = eLeft;
                        startTop = eTop;
                        startRight = eRight;
                        startBottom = eBottom;


                }
                sendMapXML();
        } else {
                alert(theError);
        }
}



