﻿/// <reference name="AppGeo.Web.Extensions.js" assembly="AppGeo.Web" />

var main = null;

function pageLoad(sender, args) {
  main = new Main();
  main.pageLoad();
}

Main = function(sender, args) {
  this.dsCama = null;
  this.webRequests = null;
  this.sort = "s";
}

Main.prototype = {
  pageLoad: function(sender, args) {
    this.dsCama = new Sys.Data.DataService("Services/CamaData.svc");
    this.dsCama.set_defaultFailedCallback(createCallback(this, this.dsCama_failed));

    $("#cmdDisclaimerRead").click(createCallback(this, this.cmdDisclaimerRead_click));
    $("#ddlTown").change(createCallback(this, this.ddlTown_change));
    $("#cmdSearch").click(createCallback(this, this.cmdSearch_click));

    this.initializeComponents();
  },

  initializeComponents: function() {
    this.ddlStateClass = $create(Ag.UI.SelectList, { appendDataBoundItems: true }, null, null, $get("ddlStateClass"));
    this.ddlStreet = $create(Ag.UI.SelectList, { appendDataBoundItems: true }, null, null, $get("ddlStreet"));
    this.ddlZoning = $create(Ag.UI.SelectList, { appendDataBoundItems: true }, null, null, $get("ddlZoning"));
    this.tboPropertyID = $create(Ag.UI.TextBox, { watermarkText: "starts with", watermarkCssClass: "Watermark" }, null, null, $get("tboPropertyID"));
    this.tboLotSizeFrom = $create(Ag.UI.TextBox, { watermarkText: "0", watermarkCssClass: "Watermark" }, null, null, $get("tboLotSizeFrom"));
    this.tboLotSizeTo = $create(Ag.UI.TextBox, { watermarkText: "max", watermarkCssClass: "Watermark" }, null, null, $get("tboLotSizeTo"));
    this.webRequests = $create(Ag.Net.WebRequestQueue, { id: "webRequests" }, { requestsQueued: createCallback(this, this.webRequests_requestsQueued), requestsCompleted: createCallback(this, this.webRequests_requestsCompleted) });
  },

  cmdSearch_click: function(e) {
    this.search();
  },

  cmdDisclaimerRead_click: function(e) {
    $("#pnlDisclaimer").hide();
    $("#pnlInterface").show();
  },

  ddlTown_change: function(e) {
    if (e.target.selectedIndex == 0) {
      this.ddlStreet.set_dataSource(null);
      this.ddlStreet.dataBind();
      this.ddlStateClass.set_dataSource(null);
      this.ddlStateClass.dataBind();
      this.ddlZoning.set_dataSource(null);
      this.ddlZoning.dataBind();

      $("#cmdSearch").attr("disabled", true);
      $("#lnkTownMap").attr("href", "javascript:void(0)");
    }
    else {
      var value = $(e.target).val().split("|");
      
      this.ddlStreet.set_dataSource(["loading..."]);
      this.ddlStreet.dataBind();
      this.ddlStateClass.set_dataSource(["loading..."]);
      this.ddlStateClass.dataBind();
      this.ddlZoning.set_dataSource(["loading..."]);
      this.ddlZoning.dataBind();

      $("#cmdSearch").attr("disabled", false);
      $("#lnkTownMap").attr("href", townUrl + "&extent=" + value[1]);

      var m = parseInt(value[0]);
      this.queueDataRequest("GetStreets", { municipalID: m }, this, this.dsCama_GetStreets_succeeded);
      this.queueDataRequest("GetStateClasses", { municipalID: m }, this, this.dsCama_GetStateClasses_succeeded);
      this.queueDataRequest("GetZoningCodes", { municipalID: m }, this, this.dsCama_GetZoningCodes_succeeded);
    }
  },

  dsCama_GetStateClasses_succeeded: function(result) {
    if (!result || result.length == 0) {
      result = ["[none available]"];
    }
    else {
      result.splice(0, 0, "- select -");
    }

    this.ddlStateClass.set_dataSource(result);
    this.ddlStateClass.dataBind();
  },

  dsCama_GetStreets_succeeded: function(result) {
    if (!result || result.length == 0) {
      result = ["[none available]"];
    }
    else {
      result.splice(0, 0, "- select -");
    }

    this.ddlStreet.set_dataSource(result);
    this.ddlStreet.dataBind();
  },

  dsCama_GetZoningCodes_succeeded: function(result) {
    if (!result || result.length == 0) {
      result = ["[none available]"];
    }
    else {
      result.splice(0, 0, "- select -");
    }

    this.ddlZoning.set_dataSource(result);
    this.ddlZoning.dataBind();
  },

  dsCama_failed: function(error) {
    alert(error.get_message());
  },

  webRequests_requestsQueued: function(sender, args) {
  },

  webRequests_requestsCompleted: function(sender, args) {
  },

  queueDataRequest: function(methodName, args, context, successMethod, failMethod) {
    this.webRequests.queue(this.dsCama, methodName, args, createCallback(context, successMethod), createCallback(context, failMethod));
  },

  search: function() {
    var url = "SearchTable.aspx?m=" + $("#ddlTown").val().split("|")[0];

    if (this.ddlStreet.get_selectedIndex() > 0) {
      url += "&sn=" + this.ddlStreet.get_selectedValue();
    }

    var v = $("#tboHouseNo").val();

    if (!String.isNullOrEmpty(v)) {
      url += "&hn=" + escape(v);
    }

    v = this.tboPropertyID.get_text();

    if (!String.isNullOrEmpty(v)) {
      url += "&p=" + escape(v);
    }

    v = this.tboLotSizeFrom.get_text();

    if (!String.isNullOrEmpty(v)) {
      url += "&lsf=" + escape(v);
    }

    v = this.tboLotSizeTo.get_text();

    if (!String.isNullOrEmpty(v)) {
      url += "&lst=" + escape(v);
    }

    if (this.ddlStateClass.get_selectedIndex() > 0) {
      url += "&sc=" + this.ddlStateClass.get_selectedValue();
    }

    if (this.ddlZoning.get_selectedIndex() > 0) {
      url += "&z=" + this.ddlZoning.get_selectedValue();
    }

    url += "&by=" + this.sort;

    $("#fraResults").attr("src", url);
  },

  setCount: function(count) {
    var jLab = $("#labCount").text("");

    if (count != null) {
      switch (count) {
        case 0: jLab.text("No properties found"); break;
        case 1: jLab.text("1 property found"); break;
        default: jLab.text(count + " properties found"); break;
      }
    }

    $(".Results").toggle(count > 0);
  },

  sortBy: function(sort) {
    this.sort = sort;
    this.search();
  }
}

function createCallback(context, method) {
  return context && method ? function() { method.apply(context, arguments); } : null;
}

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();

