﻿/// <reference name="AppGeo.Web.Extensions.js" assembly="AppGeo.Web" />

function pageLoad(sender, args) {
    CamaData = new Sys.Data.DataService("Services/CamaData.svc");
    CamaData.set_defaultFailedCallback(Svc_failed);
    MapService.set_defaultFailedCallback(Svc_failed);

    initializeComponents();

    appState.remove("selectedPropertyID");
    appState.remove("abuttersParcelIDs");
    appState.remove("primaryStreet");
    appState.remove("intersectStreet");
    appState.remove("streetAbuttersParcelIDs");
    
    mvResults.set_selectedId("vwWelcome");

    webRequests.queue(CamaData, "StreetNames");

    if (AppContext.Role == "Staff") {
        $("#tblStreetSearch").show();
        $("#cmdGotoIntersection").show();
        webRequests.queue(MapService, "GetPrimaryStreets");
    }
}

function initializeComponents() {
    appState = $create(Ag.AppState, { id: "appState" });
    webRequests = $create(Ag.Net.WebRequestQueue, { id: "webRequests" }, { requestsQueued: webRequests_requestsQueued, requestsCompleted: webRequests_requestsCompleted });
    ddlAddress = $create(Ag.UI.SelectList, { appendDataBoundItems: true, showLoading: true }, null, null, $get("ddlAddress"));
    ddlPrimaryStreet = $create(Ag.UI.SelectList, { appendDataBoundItems: true, showLoading: true }, { selectedIndexChanged: ddlPrimaryStreet_selectedIndexChanged }, null, $get("ddlPrimaryStreet"));
    ddlIntersectStreet = $create(Ag.UI.SelectList, { appendDataBoundItems: true, showLoading: false }, null, null, $get("ddlIntersectStreet"));
    gvResults = $create(Ag.UI.GridView, { alternatingRowCssClass: "gvAltResultRow", allowSorting: true }, { sort: gvResults_sort }, null, $get("gvResults"));
    mvResults = $create(Ag.UI.MultiView, { id: "mvResults" });
    mvResults.addViews(["vwWelcome", "vwResults"]);
}

function cmdClear_click(e) {
    mvResults.set_selectedId("vwWelcome");
    document.forms[0].reset();
}

function cmdGotoMap_click(e) {
    window.location.href = "Map.aspx";
}

function cmdGoToProperty_click(el) {
    appState.setItem("selectedPropertyID", el.tag);
    window.location.href = "Map.aspx";
}

function cmdGotoIntersection_click(e){
    if (ddlIntersectStreet.get_selectedIndex() > 0) {
            appState.setItem("primaryStreet", ddlPrimaryStreet.get_selectedValue());
            appState.setItem("intersectStreet", ddlIntersectStreet.get_selectedValue());
            window.location.href = "Map.aspx";
    }
    else {
        alert("Choose a search paramater.");
    }
}

function cmdSearch_click(e) {
    webRequests.queue(CamaData, "Search", {
        propertyID: $get("tboPropertyID").value,
        owner: $get("tboOwnerName").value,
        houseNumber: parseInt($get("tboHouseNumber").value),
        streetName: ddlAddress.get_selectedValue()
    });
}

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 "Owner":
            sortFunction = function(o1, o2) {
                return compare(o1.Owner, o2.Owner);
            };
            break;

        case "PropertyID":
            sortFunction = function(o1, o2) {
                return compare(o1.PropertyID, o2.PropertyID);
            };
            break;

        case "SiteAddress":
            sortFunction = function(o1, o2) {
                var c = compare(o1.Street, o2.Street);
                if (c == 0) {
                    c = compare(o1.SortStreetNumber, o2.SortStreetNumber);
                }
                return c;
            };
            break;
    }

    results.sort(sortFunction);
    gvResults.set_dataSource(results);
    gvResults.dataBind();
}

function ddlPrimaryStreet_selectedIndexChanged(sender, args) {
    webRequests.queue(MapService, "GetIntersectStreets", { primaryStreet: ddlPrimaryStreet.get_selectedValue() });
}

function webRequests_requestsQueued(sender, args) {
    $common.setVisible($get("pnlWaitSearch"), true);
}

function webRequests_requestsCompleted(sender, args) {
    $common.setVisible($get("pnlWaitSearch"), false);
}

function CamaData_StreetNames_succeeded(result) {
    ddlAddress.set_dataSource(result);
    ddlAddress.dataBind();
}

function CamaData_Search_succeeded(result) {
    gvResults.set_dataSource(result);
    gvResults.dataBind();
    mvResults.set_selectedId("vwResults");

    if (result.length == 0) {
        alert("Search criteria has returned no properties.")
    }
}

function MapService_GetPrimaryStreets_succeeded(result) {
    ddlPrimaryStreet.set_dataSource(result);
    ddlPrimaryStreet.dataBind();
}

function MapService_GetIntersectStreets_succeeded(result) {
    ddlIntersectStreet.set_dataSource(result);
    ddlIntersectStreet.dataBind();
}

function Svc_failed(error) {
    alert(error.get_message());
}

var appState = null;
var webRequests = null;
var ddlAddress = null;
var ddlPrimaryStreet = null;
var ddlIntersectStreet = null;
var gvResults = null;
var CamaData = null;
var MapService = null;
var mvResults = null;

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();