﻿/// <reference name="AppGeo.Web.Extensions.js" assembly="AppGeo.Web" />

$(function() {
  var CamaData = new Sys.Data.DataService("Services/CamaData.svc");
  CamaData.set_defaultFailedCallback(Svc_failed);

  //  var MapService = new Sys.Net.WebServiceProxy();
  //  MapService.set_path("Services/MapService.svc");
  //  MapService.set_defaultFailedCallback(Svc_failed);

  var appState = $create(Ag.AppState, { id: "appState" });
  var webRequests = $create(Ag.Net.WebRequestQueue, { id: "webRequests" }, { requestsQueued: webRequests_requestsQueued, requestsCompleted: webRequests_requestsCompleted });
  var ddlAddress = $create(Ag.UI.SelectList, { appendDataBoundItems: true, showLoading: true }, null, null, $get("ddlAddress"));
  var ddlLandUseCode = $create(Ag.UI.SelectList, { appendDataBoundItems: true, showLoading: true }, null, null, $get("ddlLandUseCode"));
  var ddlZoning = $create(Ag.UI.SelectList, { appendDataBoundItems: true, showLoading: true }, null, null, $get("ddlZoning"));
  var gvResults = $create(Ag.UI.GridView, { alternatingRowCssClass: "gvAltResultRow", allowSorting: true }, { sort: gvResults_sort }, null, $get("gvResults"));
  $(".resultData").live("click", function(e) {
    appState.setItem("selectedPropertyID", this.tag);
    window.location.href = "Map.aspx";
  });
  var mvResults = $create(Ag.UI.MultiView, { id: "mvResults", viewIds: ["vwWelcome", "vwResults"] });



  //  if (AppContext.Authenticated) {
  //    $("#lblOwner").show();
  //    $("#tboOwner").show();
  //    $("#lblOwnerNameResults").show();
  //  }

  $("#cmdSearch").click(cmdSearch_click);
  $("#cmdClear").click(cmdClear_click);
  $("#cmdAdvancedSearch").click(cmdAdvancedSearch_click);
  $("#cmdExportAllResults").click(cmdExportAllResults_click);
  $("#cmdGotoMap").click(cmdGotoMap_click);

  $("form").submit(function() { search(); return false; });

  appState.remove("selectedPropertyID");
  appState.remove("abuttersParcelIDs");
  appState.remove("allResultsPropertyIDs");

  mvResults.set_selectedId("vwWelcome");

  webRequests.queue(CamaData, "StreetNames", null, function(result) {
    ddlAddress.set_dataSource(result);
    ddlAddress.dataBind();
  });

  webRequests.queue(CamaData, "LandUseCodes", null, function(result) {
    ddlLandUseCode.set_dataSource(result);
    ddlLandUseCode.dataBind();
  });

  webRequests.queue(CamaData, "ZoningCodes", null, function(result) {
    ddlZoning.set_dataSource(result);
    ddlZoning.dataBind();
  });

  function cmdAdvancedSearch_click(e) {
    if ($("#cmdAdvancedSearch").val() == "Advanced Search") {
      $("#tblAdvancedSearch").show();
      $("#cmdAdvancedSearch").val("Basic Search");
    }
    else {
      $("#tblAdvancedSearch").hide();
      $("#cmdAdvancedSearch").val("Advanced Search");
    }
  }

  function cmdClear_click(e) {
    mvResults.set_selectedId("vwWelcome");
    document.forms[0].reset();
  }


  function cmdExportAllResults_click(e) {
    var resultPropertyIDs = [];
    var results = gvResults.get_dataSource();
    for (var i = 0; i < results.length; i++) {
      Array.add(resultPropertyIDs, results[i].PropertyID);
    }
    if (resultPropertyIDs.length > 1) {
      appState.setItem("allResultsPropertyIDs", resultPropertyIDs);
      webRequests.newContent("ExportAllResults.ashx", { appState: appState }, "_blank");
    }
    else {
      alert("No search results to export.");
    }
  }

  function cmdGotoMap_click(e) {
    window.location.href = "Map.aspx";
  }

  function cmdSearch_click(e) {
    search();
  }

  function getSearchParameters() {
    return {
      propertyID: $("#tboPropertyID").val(),
      owner: $("#tboOwnerName").val(),
      houseNumber: parseInt($("#tboHouseNumber").val()),
      streetName: ddlAddress.get_selectedValue(),
      parcelMin: parseFloat($("#tboParcelMin").val()),
      parcelMax: parseFloat($("#tboPacelMax").val()),
      totalValueMin: parseFloat($("#tboAssessedValueMin").val()),
      totalValueMax: parseFloat($("#tboAssessedValueMax").val()),
      landUseCode: ddlLandUseCode.get_selectedValue(),
      zoningCode: ddlZoning.get_selectedValue(),
      salePriceMin: parseFloat($("#tboLSPriceMin").val()),
      salePriceMax: parseFloat($("#tboLSPriceMax").val())
    };
  }

  function compare(s1, s2) {
    if (!s1 || !s2) {
      return !s1 && s2 ? -1 : s1 && !s2 ? 1 : 0;
    }
    return s1 < s2 ? -1 : s1 > s2 ? 1 : 0;
  }

  function gvResults_sort(sender, args) {
    var results = gvResults.get_dataSource();

    if (!results) {
      return;
    }

    var sortFunction

    switch (gvResults.get_sortExpression()) {
      case "OwnerName":
        sortFunction = function(o1, o2) {
          return compare(o1.OwnerName, o2.OwnerName);
        };
        break;

      case "PropertyID":
        sortFunction = function(o1, o2) {
          return compare(o1.PropertyID, o2.PropertyID);
        };
        break;

      case "SiteAddress":
        sortFunction = function(o1, o2) {
          var c = compare(o1.SiteStreetName, o2.SiteStreetName);
          if (c == 0) {
            c = compare(o1.SiteStreetNumberSort, o2.SiteStreetNumberSort);
          }
          return c;
        };
        break;
    }

    results.sort(sortFunction);
    gvResults.set_dataSource(results);
    gvResults.dataBind();
  }

  function webRequests_requestsQueued(sender, args) {
  }

  function webRequests_requestsCompleted(sender, args) {
  }

  function CamaData_ExportAllResults_succeeded(result) {
    webRequests.newContent("ExportAllResults.ashx", { appState: appState }, "_blank");
  }

  function CamaData_Search_succeeded(result) {
    gvResults.set_dataSource(result);
    gvResults.dataBind();
    mvResults.set_selectedId("vwResults");

    $("#lblResultCount").text(result.length);
    if (result.length == 0) {
      alert("Search criteria has returned no properties.");
    }

    if (result.length == 1) {
      appState.setItem("selectedPropertyID", result[0].PropertyID);
      window.location.href = "Map.aspx";
    }
  }

  function Svc_failed(error) {
    alert(error.get_message());
  }

  function search() {
    webRequests.queue(CamaData, "Search", getSearchParameters(), CamaData_Search_succeeded);
  }

});


if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
