﻿/// <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();

    if (AppContext.Role == "Viewer" || AppContext.Role == "Guest") {
        $("#lblOwner").show();
        $("#tboOwnerName").show();
    }

    appState.clear();

    mvResults.set_selectedId("viewWelcome");

    webRequests.queue(CamaData, "StreetNames");
}

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"));
    gvResults = $create(Ag.UI.GridView, { alternatingRowCssClass: "gvAltResultRow", allowSorting: true }, { sort: gvResults_sort }, null, $get("gvResults"));
    mvResults = $create(Ag.UI.MultiView, { id: "mvResults" });
    mvResults.addViews(["viewWelcome", "viewResults"]);
    searchTabs = $create(Ag.UI.ToolMenu, { id: "searchTabs", itemIds: ["optPropertySearch", "optLocationSearch"], selectedId: "optPropertySearch", hoverCssClass: "TabHover", selectedCssClass: "TabSelect", disabledCssClass: "TabDisabled" }, { selectedIndexChanged: searchTabs_selectedIndexChanged });
}

function cmdClear_click(e) {
    mvResults.set_selectedId("viewWelcome");
    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 cmdMapAllResults_click(e) {
    if (gvResults.get_dataSource().length < 75) {
        var resultPropertyIDs = [];
        var results = gvResults.get_dataSource();
        for (var i = 0; i < results.length; i++) {
            Array.add(resultPropertyIDs, results[i].PropertyID);
        }
        webRequests.queue(CamaData, "GetAllResults", { resultPropertyIDs: resultPropertyIDs.toString() });
    }
    else {
        alert("Your search yeilded over 75 results. Choose a smaller parameter to map all.");
    }
}

function cmdSearch_click(e) {
        webRequests.queue(CamaData, "Search", getSearchParameters());
}

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.OWNERS_NAME_1, 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.STREET_NAME, o2.STREET_NAME);
                if (c == 0) {
                    c = compare(o1.StreetNumberSort, o2.StreetNumberSort);
                }
                return c;
            };
            break;
    }

    results.sort(sortFunction);
    gvResults.set_dataSource(results);
    gvResults.dataBind();
    if (AppContext.Authenticated) {
        $(".ownerData").show();
    }
}

function searchTabs_selectedIndexChanged(sender, args) {
    mvSearch.set_selectedIndex(searchTabs.get_selectedIndex());
}

function webRequests_requestsQueued(sender, args) {
}

function webRequests_requestsCompleted(sender, args) {
}

function CamaData_GetAllResults_succeeded(result) {
    appState.setItem("allResultsParcelIDs", result);
    window.location.href = "Map.aspx";
}

function CamaData_Search_succeeded(result) {
    gvResults.set_dataSource(result);
    gvResults.dataBind();
    if (AppContext.Authenticated) {
        $(".ownerData").show();
    }
    mvResults.set_selectedId("viewResults");
    $("#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 CamaData_StreetNames_succeeded(result) {
    ddlAddress.set_dataSource(result);
    ddlAddress.dataBind();
}

function getSearchParameters() {
    return {
        propertyID: $get("tboPropertyID").value,
        owner: $get("tboOwnerName").value,
        houseNumber: parseFloat($get("tboHouseNumber").value),
        streetName: encodeURIComponent(ddlAddress.get_selectedValue()),
        minLandValue: parseFloat($get("tboMinLandValue").value),
        maxLandValue: parseFloat($get("tboMaxLandValue").value),
        minBldgValue: parseFloat($get("tboMinBldgValue").value),
        maxBldgValue: parseFloat($get("tboMaxBldgValue").value),
        minTotalValue: parseFloat($get("tboMinTotalValue").value),
        maxTotalValue: parseFloat($get("tboMaxTotalValue").value)
    };
}

function Svc_failed(error) {
    alert(error.get_message());
}

var appState = null;
var webRequests = null;
var ddlAddress = null;
var ddlLandmarkType = null;
var ddlLandmarkName = null;
var ddlPrimaryStreet = null;
var ddlIntersectStreet = null; var gvResults = null;
var MapService = null;
var CamaData = null;
var mvResults = null;
var searchTabs = null;

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();