var __searchWhatNotifySectionID = null;
var __searchWhatNotifyTimerID = null;
var __searchWhatNotifySectionCounter = 0;
var __searchWhatNotifySectionPulseCounter = 0;

function __searchWhatNotifySectionDelay()
{
  __searchWhatNotifyTimerID = setTimeout('__searchWhatNotifySection()', 10);
}

function __searchWhatNotifySection()
{
  var searchWhatNotifySectionElement = document.getElementById(__searchWhatNotifySectionID);
  if (searchWhatNotifySectionElement)
  {
    if (__searchWhatNotifySectionCounter++ < 16)
    {
      var c = __searchWhatNotifySectionCounter;
      searchWhatNotifySectionElement.style.backgroundColor = Color.addToColor("E4EDF3", c, c, c);
      searchWhatNotifySectionElement.style.borderColor = Color.addToColor("B7D8ED", c, c, c);
      __searchWhatNotifyTimerID = setTimeout('__searchWhatNotifySection()', 10);
    }
    else
    {
      __searchWhatNotifySectionPulseCounter++;
      if (__searchWhatNotifySectionPulseCounter < 3)
      {
        __searchWhatNotifySectionCounter = 0;
        __searchWhatNotifyTimerID = setTimeout('__searchWhatNotifySection()', 10);
      }

      searchWhatNotifySectionElement.style.backgroundColor = "";
      searchWhatNotifySectionElement.style.borderColor = "";
    }
  }
}

var SearchWhat = {
  init : function(defaultSearchMode) {
    this.searchMode = defaultSearchMode;
    this.lastSearchDescription = '';
    this.onActivityIndexChanged(null);
    var btnSearch = document.getElementById('btnSearch');
    if (btnSearch) btnSearch.disabled = (defaultSearchMode == "-1");
    this.isFirstSearch = false;
  },
  dispose : function() {
    this.searchMode = null;
  },
  onActivityIndexChanged : function (item)
  {
    var i = 0;
    var selectedValue = "-1";
    if (item) selectedValue = item.get_value();
    
    var divSearchCriteria = document.getElementById('divSearchCriteria' + i);
    while (divSearchCriteria)
    {
      if (divSearchCriteria) divSearchCriteria.style.display = (selectedValue == String(i))?'block':'none';
      i++;
      divSearchCriteria = document.getElementById('divSearchCriteria' + i);
    }
    this.searchMode = selectedValue;    
    var btnSearch = document.getElementById('btnSearch');
    if (btnSearch) btnSearch.disabled = (selectedValue == "-1");
    Scroller.resize();
  },
  isValidSelection : function (obj)
  {
    if (obj.Value)
      return obj.Value != "-1";
    else
      return obj.get_value() != "-1";
  },
  checkforSubmit : function(e)
  {
    switch (e.keyCode)
    {
      case 13:
        return this.submit();
      default:
        return true;
    }
  },
  getSelectedRadioButton : function(rad)
  {
    var selOption = -1;
    if (rad)
    {
      for (var i=rad.length-1;i>-1;i--)
      {
        if (rad[i].checked)
        {
          selOption = i;
          break;
        }
      }
    }
    return selOption;
  },
  showAlert: function(sectionID, title, msg, width, msec)
  {
    var leftPane = document.getElementById('leftPane');
    var divSearchCriteriaPane = document.getElementById('divSearchCriteria' + this.searchMode);
    var section = document.getElementById(sectionID);
    Scroller.scrollIntoView(section);
    var divSearchCriteriaPanePos = UI.findPos(divSearchCriteriaPane);
    if (!width) width = 200;
    if (!msec) msec = 5000;
      
    UI.messageBox(divSearchCriteriaPanePos.left + section.offsetLeft + section.offsetWidth,
                  divSearchCriteriaPanePos.top + section.offsetTop - leftPane.scrollTop,
                  width, title, msg, "<img src='images/icn_warning.gif' width='16' height='16'>", msec);
  },
  getSearchDescription : function(searchCriteria)
  {
    var searchDescription = 'Results for ';
    if (searchCriteria)
    {
      switch (searchCriteria.searchMode)
      {
        case "0" : // Construction
          var category = '';
          category += searchCriteria.singleFamilyDuplex?(category.length>0?',Single Family':'Single Family'):'';
          category += searchCriteria.multiFamily?(category.length>0?',Multi Family':'Multi Family'):'';
          category += searchCriteria.commercialFixedOther?(category.length>0?',Commercial/Mixed/Other':'Commercial/Mixed/Other'):'';
          
          var activityType = '';
          switch (searchCriteria.activityType)
          {
            case 0 : // New Construction
              activityType = 'New Construction';
              break;
            case 1 : // Addition/Alteration
              activityType = 'Addition/Alteration';
              break;
            case 2 : // Temporary
              activityType = 'Temporary';
              break;
            case 3 : // No construction
              activityType = 'No Construction';
              break;
            default : // Unknown
              activityType = 'Undefined (code:' + searchCriteria.activityType + ')';
              break;
          }
          
          var permitStatus = '';
          switch (searchCriteria.permitStatus)
          {
            case 0 : // Application
              permitStatus = 'Application';
              break;
            case 1 : // Issued
              permitStatus = 'Issued';
              break;
            case 2 : // Finaled
              permitStatus = 'Finaled';
              break;
            default : // Unknown
              permitStatus = 'Undefined (code:' + searchCriteria.permitStatus + ')';
              break;
          }
          
          var dateStartRange = searchCriteria.startDate;
          var dateEndRange = searchCriteria.endDate;
          
          searchDescription = 'Category [' + category + '] for ' + activityType + ' of status ' + permitStatus + ' from ' + dateStartRange + ' to ' + dateEndRange;
          break;
        case "1" : // Land Use
          var permitTypes = '';
          permitTypes += searchCriteria.conditionalUse?(permitTypes.length>0?',Conditional Use':'Conditional Use'):'';
          permitTypes += searchCriteria.designReview?(permitTypes.length>0?',Design Review':'Design Review'):'';
          permitTypes += searchCriteria.councilAction?(permitTypes.length>0?',Council Action':'Council Action'):'';
          permitTypes += searchCriteria.plat?(permitTypes.length>0?',Plat':'Plat'):'';
          permitTypes += searchCriteria.sepa?(permitTypes.length>0?',SEPA':'SEPA'):'';
          permitTypes += searchCriteria.shoreline?(permitTypes.length>0?',Shoreline':'Shoreline'):'';
          permitTypes += searchCriteria.variance?(permitTypes.length>0?',Variance':'Variance'):'';
          permitTypes += searchCriteria.other?(permitTypes.length>0?',Other':'Other'):'';
          
          var permitStatus = '';
          switch (searchCriteria.permitStatus)
          {
            case 0 : // Application
              permitStatus = 'Application';
              break;
            case 1 : // Issued
              permitStatus = 'Issued';
              break;
            case 2 : // Finaled
              permitStatus = 'Finaled';
              break;
            default : // Unknown
              permitStatus = 'Undefined (code:' + searchCriteria.permitStatus + ')';
              break;
          }
          
          var dateStartRange = searchCriteria.startDate;
          var dateEndRange = searchCriteria.endDate;
          
          searchDescription = 'Permit Type [' + permitTypes + '] of status ' + permitStatus + ' from ' + dateStartRange + ' to ' + dateEndRange;
          break;
        case "2" : // Land Use Notices
          var noticeTypes = '';
          noticeTypes += searchCriteria.noticeOfApplication?(noticeTypes.length>0?',Notice of Application':'Notice of Application'):'';
          noticeTypes += searchCriteria.noticeOfDecisions?(noticeTypes.length>0?',Notice of Decisions':'Notice of Decisions'):'';
          noticeTypes += searchCriteria.appealHearingNotices?(noticeTypes.length>0?',Appeal Hearing Notices':'Appeal Hearing Notices'):'';
          noticeTypes += searchCriteria.otherLandUseNotices?(noticeTypes.length>0?',Other Land Use Notices':'Other Land Use Notices'):'';
          
          var dateStartRange = searchCriteria.startDate;
          var dateEndRange = searchCriteria.endDate;
          
          searchDescription = 'Notice Type [' + noticeTypes + '] from ' + dateStartRange + ' to ' + dateEndRange;
          
          break;
        case "3" : // Demolition
          var permitStatus = '';
          switch (searchCriteria.permitStatus)
          {
            case 0 : // Application
              permitStatus = 'Application';
              break;
            case 1 : // Issued
              permitStatus = 'Issued';
              break;
            case 2 : // Finaled
              permitStatus = 'Finaled';
              break;
            default : // Unknown
              permitStatus = 'Undefined (code:' + searchCriteria.permitStatus + ')';
              break;
          }
          
          var dateStartRange = searchCriteria.startDate;
          var dateEndRange = searchCriteria.endDate;
          
          searchDescription = 'Permits of status ' + permitStatus + ' from ' + dateStartRange + ' to ' + dateEndRange;
          break;
        case "4" : // Billboard
          var billboardTypes = '';
          billboardTypes += searchCriteria.singleFacePole?(billboardTypes.length>0?',Single Face Pole':'Single Face Pole'):'';
          billboardTypes += searchCriteria.doubleFacePole?(billboardTypes.length>0?',Double Face Pole':'Double Face Pole'):'';
          billboardTypes += searchCriteria.paintedWall?(billboardTypes.length>0?',Painted Wall':'Painted Wall'):'';
          billboardTypes += searchCriteria.vInstallation?(billboardTypes.length>0?',V Installation':'V Installation'):'';
          billboardTypes += searchCriteria.other?(billboardTypes.length>0?',Other':'Other'):'';
          
          searchDescription = 'Billboards of type [' + billboardTypes + ']';
          break;
        default : // Unknown
          searchDescription = 'No search criteria defined';
          break;
      }
    }
    else
      searchDescription = 'No search criteria defined';
    return searchDescription;
  },
  getSearchCriteria : function()
  {
    //For some reason it is not remembering the last value set in onActivityIndexChanged, so fetch again here
    var cmb = $find("cmbActivity");
    if (cmb)
        this.searchMode = cmb.get_value();
    if (this.searchMode)
    {
      var form1 = document.forms['Form1'];
      var searchCriteria = new Object();
      searchCriteria.searchMode = this.searchMode;
      searchCriteria.isValid = false;
      switch (this.searchMode)
      {
        case "0": // Ensure Construction Permit criteria is complete
          // Category of use
          var chkA0S0SingleFamilyDuplex = document.getElementById('chkA0S0SingleFamilyDuplex');
          var chkA0S0MultiFamily = document.getElementById('chkA0S0MultiFamily');
          var chkA0S0CommercialFixedOther = document.getElementById('chkA0S0CommercialFixedOther');
          if (!chkA0S0SingleFamilyDuplex.checked && !chkA0S0MultiFamily.checked && !chkA0S0CommercialFixedOther.checked)
          {
            UI.flashSectionToUser("divSearchCriteria00");
            this.showAlert("divSearchCriteria00", "Missing Data", "Please check at least one option in the Category of Use section.");
            break;
          } else {
            searchCriteria.singleFamilyDuplex = chkA0S0SingleFamilyDuplex.checked;
            searchCriteria.multiFamily = chkA0S0MultiFamily.checked;
            searchCriteria.commercialFixedOther = chkA0S0CommercialFixedOther.checked;
          }
          
          // Activity Type
          
          var radA0S1ActivityType = this.getSelectedRadioButton(form1.radA0S1ActivityType);
          if (radA0S1ActivityType < 0)
          {
            UI.flashSectionToUser("divSearchCriteria01");
            this.showAlert("divSearchCriteria01", "Missing Data", "Please select a Construction action type.");
            break;
          } else {
            searchCriteria.activityType = radA0S1ActivityType;
          }
          
          // Permit Status
          var radA0S2PermitStatus = this.getSelectedRadioButton(form1.radA0S2PermitStatus);
          if (radA0S2PermitStatus < 0)
          {
            UI.flashSectionToUser("divSearchCriteria02");
            this.showAlert("divSearchCriteria02", "Missing Data", "Please select a Construction permit status.");
            break;
          } else {
            searchCriteria.permitStatus = radA0S2PermitStatus;
          }
          
          // Date Range
          searchCriteria.startDate = SearchWhat._datePickerDateToDateTime($find('radA0S3StartDate'));
          searchCriteria.endDate = SearchWhat._datePickerDateToDateTime($find('radA0S3EndDate'));
          //  missing/invalid dates
          if (searchCriteria.startDate == '1/1/1980' || searchCriteria.endDate == '1/1/1980')
          {
            this.showAlert("divSearchCriteria03", "Invalid Date", "Please select valid dates.");
            break;
          }
          //  start not before end
          var startD = new Date(searchCriteria.startDate);
          var endD = new Date(searchCriteria.endDate);
          if (startD > endD)
          {
            this.showAlert("divSearchCriteria03", "Invalid Range", "Please select a valid date range.");
            break;
          }
          searchCriteria.isValid = true;
          break;
        case "1": // Ensure Land Use Permit criteria is complete
          // Permit Types
          var chkA1S0ConditionalUse = document.getElementById('chkA1S0ConditionalUse');
          var chkA1S0DesignReview = document.getElementById('chkA1S0DesignReview');
          var chkA1S0CouncilAction = document.getElementById('chkA1S0CouncilAction');
          var chkA1S0Plat = document.getElementById('chkA1S0Plat');
          var chkA1S0SEPA = document.getElementById('chkA1S0SEPA');
          var chkA1S0Shoreline = document.getElementById('chkA1S0Shoreline');
          var chkA1S0Variance = document.getElementById('chkA1S0Variance');
          var chkA1S0Other = document.getElementById('chkA1S0Other');
          if (!chkA1S0ConditionalUse.checked && !chkA1S0DesignReview.checked && !chkA1S0CouncilAction.checked &&
              !chkA1S0Plat.checked && !chkA1S0SEPA.checked && !chkA1S0Shoreline.checked && !chkA1S0Variance.checked &&
              !chkA1S0Other.checked)
          {
            UI.flashSectionToUser("divSearchCriteria10");
            this.showAlert("divSearchCriteria10", "Missing Data", "Please check at least one option in the Permit Type section.");
            break;
          } else {
            searchCriteria.conditionalUse = chkA1S0ConditionalUse.checked;
            searchCriteria.designReview = chkA1S0DesignReview.checked;
            searchCriteria.councilAction = chkA1S0CouncilAction.checked;
            searchCriteria.plat = chkA1S0Plat.checked;
            searchCriteria.sepa = chkA1S0SEPA.checked ;
            searchCriteria.shoreline = chkA1S0Shoreline.checked;
            searchCriteria.variance = chkA1S0Variance.checked;
            searchCriteria.other = chkA1S0Other.checked;
          }
          
          // Permit Status
          var radA1S1PermitStatus = this.getSelectedRadioButton(form1.radA1S1PermitStatus);
          if (radA1S1PermitStatus < 0)
          {
            UI.flashSectionToUser("divSearchCriteria11");
            this.showAlert("divSearchCriteria11", "Missing Data", "Please select a Land Use permit status.");
            break;
          } else {
            searchCriteria.permitStatus = radA1S1PermitStatus;
          }
          
          // Date Range
          searchCriteria.startDate = SearchWhat._datePickerDateToDateTime($find('radA1S3StartDate'));
          searchCriteria.endDate = SearchWhat._datePickerDateToDateTime($find('radA1S3EndDate'));
          //  missing/invalid dates
          if (searchCriteria.startDate == '1/1/1980' || searchCriteria.endDate == '1/1/1980')
          {
            this.showAlert("divSearchCriteria12", "Invalid Date", "Please select valid dates.");
            break;
          }
          //  start not before end
          var startD = new Date(searchCriteria.startDate);
          var endD = new Date(searchCriteria.endDate);
          if (startD > endD)
          {
            this.showAlert("divSearchCriteria12", "Invalid Range", "Please select a valid date range.");
            break;
          }
          searchCriteria.isValid = true;
          break;
        case "2" : // Ensure Land Use Notices criteria is complete
          // Land Use Notice Types
          var chkA2S0NoticeOfApplication = document.getElementById('chkA2S0NoticeOfApplication');
          var chkA2S0NoticesOfDecisions = document.getElementById('chkA2S0NoticesOfDecisions');
          var chkA2S0AppealHearingNotices = document.getElementById('chkA2S0AppealHearingNotices');
          var chkA2S0OtherLandUseNotices = document.getElementById('chkA2S0OtherLandUseNotices');
          if (!chkA2S0NoticeOfApplication.checked && !chkA2S0NoticesOfDecisions.checked && !chkA2S0AppealHearingNotices.checked && !chkA2S0OtherLandUseNotices.checked)
          {
            UI.flashSectionToUser("divSearchCriteria20");
            this.showAlert("divSearchCriteria20", "Missing Data", "Please check at least one option in the Land Use Notice Type section.");
            break;
          } else {
            searchCriteria.noticeOfApplication = chkA2S0NoticeOfApplication.checked;
            searchCriteria.noticeOfDecisions = chkA2S0NoticesOfDecisions.checked;
            searchCriteria.appealHearingNotices = chkA2S0AppealHearingNotices.checked;
            searchCriteria.otherLandUseNotices = chkA2S0OtherLandUseNotices.checked;
          }
          
          // Date Range
          searchCriteria.startDate = SearchWhat._datePickerDateToDateTime($find('radA2S1StartDate'));
          searchCriteria.endDate = SearchWhat._datePickerDateToDateTime($find('radA2S1EndDate'));
          //  missing/invalid dates
          if (searchCriteria.startDate == '1/1/1980' || searchCriteria.endDate == '1/1/1980')
          {
            this.showAlert("divSearchCriteria21", "Invalid Date", "Please select valid dates.");
            break;
          }
          //  start not before end
          var startD = new Date(searchCriteria.startDate);
          var endD = new Date(searchCriteria.endDate);
          if (startD > endD)
          {
            this.showAlert("divSearchCriteria21", "Invalid Range", "Please select a valid date range.");
            break;
          }
          searchCriteria.isValid = true;
          break;
        case "3" : // Ensure Demolition criteria is complete
          // Permit Status
          var radA3S0PermitStatus = this.getSelectedRadioButton(form1.radA3S0PermitStatus);
          if (radA3S0PermitStatus < 0)
          {
            UI.flashSectionToUser("divSearchCriteria30");
            this.showAlert("divSearchCriteria30", "Missing Data", "Please select a Demolition permit status.");
            break;
          } else {
            searchCriteria.permitStatus = radA3S0PermitStatus;
          }
          
          // Date Range
          searchCriteria.startDate = SearchWhat._datePickerDateToDateTime($find('radA3S1StartDate'));
          searchCriteria.endDate = SearchWhat._datePickerDateToDateTime($find('radA3S1EndDate'));
          //  missing/invalid dates
          if (searchCriteria.startDate == '1/1/1980' || searchCriteria.endDate == '1/1/1980')
          {
            this.showAlert("divSearchCriteria31", "Invalid Date", "Please select valid dates.");
            break;
          }
          //  start not before end
          var startD = new Date(searchCriteria.startDate);
          var endD = new Date(searchCriteria.endDate);
          if (startD > endD)
          {
            this.showAlert("divSearchCriteria31", "Invalid Range", "Please select a valid date range.");
            break;
          }
          searchCriteria.isValid = true;
          break;
        case "4" : // Ensure Billboard criteria is complete
          // Billboard Type  
          var chkA4S0SingleFacePole = document.getElementById('chkA4S0SingleFacePole');
          var chkA4S0DoubleFacePole = document.getElementById('chkA4S0DoubleFacePole');
          var chkA4S0PaintedWall = document.getElementById('chkA4S0PaintedWall');
          var chkA4S0VInstallation = document.getElementById('chkA4S0VInstallation');
          var chkA4S0Other = document.getElementById('chkA4S0Other');
          if (!chkA4S0SingleFacePole.checked && !chkA4S0DoubleFacePole.checked && !chkA4S0PaintedWall.checked &&
              !chkA4S0VInstallation.checked && !chkA4S0Other.checked)
          {
            UI.flashSectionToUser("divSearchCriteria40");
            this.showAlert("divSearchCriteria40", "Missing Data", "Please check at least one option in the Billboard Type section.");
            break;
          } else {
            searchCriteria.singleFacePole = chkA4S0SingleFacePole.checked;
            searchCriteria.doubleFacePole = chkA4S0DoubleFacePole.checked;
            searchCriteria.paintedWall = chkA4S0PaintedWall.checked;
            searchCriteria.vInstallation = chkA4S0VInstallation.checked;
            searchCriteria.other = chkA4S0Other.checked ;
          }
          searchCriteria.isValid = true;
          break;
        default: // Unknown
            alert('Unknown search type of ' + this.searchMode + ' requested.');
      }
      this.lastSearchDescription = this.getSearchDescription(searchCriteria);
      return searchCriteria;
    }
  },
  submit : function() {
    var searchCriteria = SearchWhat.getSearchCriteria();
    if (searchCriteria && searchCriteria.isValid)
    {
      Map.initializeForQuery(this.isFirstSearch); // force show the grid for the very first query
      if (this.isFirstSearch)
      {
        this.isFirstSearch = false;
        setTimeout('Map.query(SearchWhat.getSearchCriteria(), true);', 1000); // delayed to give map ve time resize
      } else {
        Map.query(searchCriteria, true);
      }
    }
  },
  _datePickerDateToDateTime : function(datePicker) {
    var dateTime = '1/1/1980';
    if (datePicker)
    {
	  try
	  {
		dateTime = datePicker.get_selectedDate().getMonth()+1 + '/' + datePicker.get_selectedDate().getDate() + '/' + datePicker.get_selectedDate().getFullYear();
	  }
      catch (e)
      {
		//alert('Please check that you have entered a valid date.');
      }
	  return dateTime;
    }
  },
  hideAllResultDataGrids : function() {
    var divConstructionActivity = document.getElementById('divConstructionActivity');
    if (divConstructionActivity) divConstructionActivity.style.display = 'none';
    
    var divLandUseActivity = document.getElementById('divLandUseActivity');
    if (divLandUseActivity) divLandUseActivity.style.display = 'none';
    
    var divLandUseNoticeActivity = document.getElementById('divLandUseNoticeActivity');
    if (divLandUseNoticeActivity) divLandUseNoticeActivity.style.display = 'none';
    
    var divDemolitionActivity = document.getElementById('divDemolitionActivity');
    if (divDemolitionActivity) divDemolitionActivity.style.display = 'none';
    
    var divBillboardActivity = document.getElementById('divBillboardActivity');
    if (divBillboardActivity) divBillboardActivity.style.display = 'none';
  },
  showConstructionActivityDataGrid : function() {
    var divConstructionActivity = document.getElementById('divConstructionActivity');
    if (divConstructionActivity) divConstructionActivity.style.display = 'block';
  },
  showLandUseActivityDataGrid : function() {
    var divLandUseActivity = document.getElementById('divLandUseActivity');
    if (divLandUseActivity) divLandUseActivity.style.display = 'block';
  },
  showLandUseNoticeDataGrid : function() {
    var divLandUseNoticeActivity = document.getElementById('divLandUseNoticeActivity');
    if (divLandUseNoticeActivity) divLandUseNoticeActivity.style.display = 'block';
  },
  showDemolitionDataGrid : function() {
    var divDemolitionActivity = document.getElementById('divDemolitionActivity');
    if (divDemolitionActivity) divDemolitionActivity.style.display = 'block';
  },
  showBillboardDataGrid : function() {
    var divBillboardActivity = document.getElementById('divBillboardActivity');
    if (divBillboardActivity) divBillboardActivity.style.display = 'block';
  }
};
