﻿var SBQctrl = "AdvancedSearch1_";

//Global variables.
var FieldDropdown;
var OperatorDropdown;
var BegValueTextBox;
var QueryTextarea;

var FieldNames;
var DataTypes;

var FieldName;
var FieldDataType;
var AliasName;

var Operator;
var BegValue;
var CurrentQuery;
var PrevQuery;

//Init form.
function initSelectByAtr() {

   FieldDropdown = $get(SBQctrl + "Field_Dropdownlist");
   OperatorDropdown = $get(SBQctrl + "Operator_Dropdownlist");
   BegValueTextBox = $get("BegValue_textBox");
   QueryTextarea = $get("Query_textarea");

   FieldNames = $get(SBQctrl + "fieldNames_hid").value.split(",");
   DataTypes = $get(SBQctrl + "dataTypes_hid").value.split(",");

   FieldName = FieldNames[0];
   FieldDataType = DataTypes[0];
   AliasName = FieldDropdown.value;

   Operator = "=";
   OperatorDropdown.selectedIndex = 0;
   BegValue = "";
   CurrentQuery = "";
   PrevQuery = "";

   updateQuery(this);
   focusValue();
}
//Field name changed.
function fieldChanged(element) {
   FieldName = FieldNames[element.selectedIndex];
   FieldDataType = DataTypes[element.selectedIndex];
   AliasName = element.value;

   //Clear the values if data type changed.
   BegValueTextBox.value = "";

   // Dont allow the Like operator for non-string fields.
   if (FieldDataType != "S") {
      if (Operator == "Like" || Operator == "Not Like") {
         OperatorDropdown.selectedIndex = 0;
         Operator = OperatorDropdown.value;
      }
   }
   setValueLabels();
   focusValue();
}

//Operator changed.
function operatorChanged(element) {
   Operator = element.value;

   if (Operator == "Like" || Operator == "Not Like") {
      if (FieldDataType != "S") {
         alert('The "Like" operator can only be used on character data types');
         OperatorDropdown.selectedIndex = 0;
         Operator = OperatorDropdown.value;
      }
   }
   setValueLabels();
   focusValue();
}
//Set the value labels.
function setValueLabels() {
   var bl = $get("BegValue_label");
   bl.innerHTML = "Value:";

   if (FieldDataType == "N") {
      bl.innerHTML = "Value (Numeric):";

   } else if (FieldDataType == "D") {
      bl.innerHTML = "Value (Date as mm/dd/yyyy):";
   }
}
// Update the value.
function updateValue(value) {
   var i;
   var fieldValues;

   // Convert acre to sqft.
   if (FieldName.toUpperCase() == "AREA") {
      if (AliasName.toUpperCase().indexOf("ACRE") != -1) {
         value = value * 43560;
         value = Math.round(value);
      }
   }

   // Process In.
   if (Operator == "In" || Operator == "Not In") {

      fieldValues = value.split(",");
      value = "";

      for (i = 1; i <= fieldValues.length; i++) {
         if (i > 1) {
            value += ",";
         }
         value += formatDataType(fieldValues[i - 1]);
      }
      value = "(" + value + ")";

      // Process all other operator types.
   } else {

      // Process Like.
      if (Operator == "Like" || Operator == "Not Like") {
         if (value.indexOf("*") == -1 && value.indexOf("%") == -1 &&
             value.indexOf("_") == -1 && value.indexOf("?") == -1) {
            value = "*" + value + "*";
         }
      }

      // Format the data type.
      value = formatDataType(value);

      // Process Is Null.
      if (Operator == "Is Null" || Operator == "Is Not Null") {
         value = "";
      }
   }
   // Remove internet hostile characters.
   value = value.replace(/\%/g, "*");
   value = value.replace(/\?/g, "_");
   return value;
}
//Format for data type.
function formatDataType(value) {
   var i;
   var wStr;

   // Format the data type.
   if (FieldDataType == "S") {
      value = "'" + value + "'";

   } else if (FieldDataType == "D") {
      var millisec = Date.parse(value);

      if (isNaN(millisec)) {
         value = "^1800/1/1^";

      } else {
         var wDate = new Date(millisec);
         var month = wDate.getMonth() + 1;
         var day = wDate.getDate();
         var year = wDate.getFullYear();
         value = "^" + year + "/" + month + "/" + day + "^";
      }

   } else {
      value = parseFloat(value) + "";
      if (isNaN(value)) {
         value = "0";
      }
   }
   return value;
}
//Validate number user input.
function isBadNumber(inText) {
   var isBad = false;
   var wStr;
   wStr = parseFloat(inText) + "";
   if (isNaN(wStr)) {
      if (inText != "" && inText != ".") {
         isBad = true;
      }
   }
   return isBad;
}
//Update query texbox.
function updateQuery(element) {

   //Process query field changed.
   if (element.id == SBQctrl + "Field_Dropdownlist") {
      fieldChanged(element);
   }

   //Process operator changed.
   if (element.id == SBQctrl + "Operator_Dropdownlist") {
      operatorChanged(element);
   }

   //Process begin value.
   BegValue = updateValue(BegValueTextBox.value);

   if (FieldDataType == "N") {
      if (isBadNumber(BegValueTextBox.value)) {
         BegValueTextBox.value = "";
      }
   }
   //Update the query text area.
   CurrentQuery = FieldName + " " + Operator + " " + BegValue;

   if (PrevQuery == "") {
      QueryTextarea.value = CurrentQuery;
   } else {
      QueryTextarea.value = PrevQuery + " " + CurrentQuery;
   }
}

//Add more criteria.
function addCriteria(element) {
   var addOperator = element.value.toUpperCase();

   if (PrevQuery != "") {
      PrevQuery += " ";
   }
   addOperator = addOperator.replace(/\ /g, "");

   PrevQuery += CurrentQuery + " " + addOperator;
   updateQuery(element);

   focusValue();
}
//Clear query.
function clearQuery() {
   CurrentQuery = "";
   PrevQuery = "";
   updateQuery(this);
}
//Focus textbox.
function focusValue() {
   if (WebsiteLoaded) {
      var obj = $get("Advanced_Search_Task");
      if (obj.style.display == "block") {
         if (Operator != "Is Null" && Operator != "Is Not Null") {
            BegValueTextBox.focus();
         }
      }
   }
}
//Load field names dropdown on server.
function ActiveLayerChanged(obj) {
   var hid = $get(SBQctrl + "Layer_hid");
   hid.value = obj.value;
   __doPostBack('AdvancedSearch1$LinkButton1', '');
}
//Send to server.
function SubmitAdvancedSearch() {
   var srCtrl = "SelectResults1_";
   showBusy("AdvancedSearch");
   var obj;

   $get(srCtrl + "TaskName_hid").value = "AdvancedSearch";
   $get(srCtrl + "Command_hid").value = "-";
   $get(srCtrl + "GeomStr_hid").value = "-";
   $get(srCtrl + "SearchValues_hid").value = QueryTextarea.value.toUpperCase();

   obj = $get(srCtrl + "SelectMode_DropDownList");
   hid = $get(srCtrl + "SelectMode_hid");
   hid.value = obj.value;

   //Submit.
   obj = $get(srCtrl + "CallbackButton1");
   obj.click();
   focusValue();
}

//Process enter key.
function EnterKey_sbq(e, evt) {
   if (evt.keyCode == 13) {
      SubmitAdvancedSearch();
      evt.returnValue = false;
   }
}

