﻿// Where tab functions

function WHERE() { }

WHERE.Init = function() {
    WHERE.IsLoaded = false;
    WHERE.IsValid = false;
};

WHERE.DefineLiterals = function(data, status) {
    //alert("WHERE.DefineLiterals = " + status);

    WHERE.EuropeanNumbers = (data.EuropeanNumbers == "true");
    WHERE.JurisdictionName = data.JurisdictionName;
    WHERE.GeographyName = data.GeographyName;
    WHERE.LocationName = data.LocationName;
    WHERE.BufferName = data.BufferName;
    WHERE.MaxExceededMessage = data.MaxExceededMessage;

    WHERE.AddrVerified = "";
    WHERE.AddrType = 0;
    WHERE.AddrX = 0;
    WHERE.AddrY = 0;
    WHERE.Item;
    WHERE.UseBuffer = false;
    WHERE.BufferDistance = 0;
    WHERE.BufferDisplay = "";
    WHERE.JurDisplay = "";
    WHERE.GeoDisplay = "";
    WHERE.LocDisplay = "";
    WHERE.SelectionType = "";
    WHERE.SelectionItems = "";
    // defaults for no regions
    WHERE.JurCode = "ALL";
    WHERE.JurDesc = WHERE.JurisdictionName;
    WHERE.NodeType = 0; // Child node

    // ****Instantiate the Where control***
    var url = "Data.aspx?page=where";
    var target = document.getElementById("where-content");

    _dynoLoader._loadXmlDocument(url, target, WHERE.Load, null, false);
};

WHERE.Load = function() {
    //alert("WHERE.Load list1 = " + $("#wherelist1").attr("length"));

    if ($("#wherelist1").attr("length") > 0) {
        WHERE.LoadNoRegion();
    } else {
        WHERE.LoadRegions();
    }

    UIHelper.HideStatusMessage(true);

    CVS.BuildSummaryDisplay();

    WHERE.IsLoaded = true;

    WHERE.ShowContent();
};

WHERE.LoadRegions = function() {
    //alert("WHERE.LoadRegions");

    WHERE.TreeSelectObj = new Tree(document.getElementById("wheretreeroot"), { onclick: WHERE.LoadWhere1 });

    // This container was hidden while the browser was validated and a possible message displayed.
    // If there was a browser issue, it looked better to hide this tree. May not be necessary...
    $("#wheretreecontainer").show();
};

WHERE.LoadNoRegion = function() {
    //alert("WHERE.LoadNoRegion");

    $(".where-col-1").hide();
    $(".where-col-2").show();
    $(".where-col-2").css("margin", "0");

    $("#wherelist1title").html(WHERE.JurDesc);
    $("#wherelist2title").html(WHERE.LocationName);
    $("#wherelist2container").html("&nbsp;");
};

WHERE.ShowContent = function() {
    //$("#where-content").css({ marginBottom: "20px" });
    //alert("WHERE.ShowContent");
    $("#where-content").slideDown();
    //$("#where-content").show();
};

WHERE.LoadWhere1 = function(node) {
    //alert("node._inputElem.value=" + node._inputElem.value);
    WHERE.AddrX = 0;
    WHERE.IsValid = false;
    WHERE.SelectionType = "";
    WHERE.JurCode = node._inputElem.value;
    WHERE.JurDesc = node._spanElem.firstChild.nodeValue;
    WHERE.JurDisplay = "<tr><td class=\"field\">" + WHERE.JurisdictionName + ":</td><td>" + WHERE.JurDesc + "</td></tr>";
    if (node._isParent)
        WHERE.NodeType = 1; // Parent node
    else
        WHERE.NodeType = 0; // Child node

    CVS.BuildSummaryDisplay();

    var target = document.getElementById("wherelist1container");
    var url = "WhereData.aspx?target=1&jurcode=" + WHERE.JurCode + "&nodetype=" + WHERE.NodeType;

    $(".where-col-2").show();
    $("#wherelist1title").html(WHERE.JurDesc);
    $("#wherelist2title").html(WHERE.LocationName);
    $("#wherelist2container").html("&nbsp;");

    //alert("WHERE.LoadWhere1 url = " + url);
    _dynoLoader._loadXmlDocument(url, target, null, null, false);
};

WHERE.LoadWhere2 = function() {
    WHERE.AddrX = 0;
    WHERE.IsValid = false;
    WHERE.SelectionType = "";
    WHERE.UseBuffer = false;
    WHERE.BufferDisplay = "";

    var obj = document.getElementById("wherelist1");
    var val = obj.options[obj.selectedIndex].value;
    WHERE.Item = obj.options[obj.selectedIndex].text;
    WHERE.GeoDisplay = "<tr><td class=\"field\">" + WHERE.GeographyName + ":</td><td>" + WHERE.Item + "</td></tr>";

    CVS.BuildSummaryDisplay();

    var callback = null;
    switch (val) {
        case "address":
            callback = WHERE.BindAddressKeys;
            break;

        case "intersection":
            callback = WHERE.BindIntersectionKeys;
            break;
    }
    //if (val == "address" || val == "intersection") callback = WHERE.BindPaste;
    var target = document.getElementById("wherelist2container");
    var url = "WhereData.aspx?target=2&lyrid=" + val + "&jurcode=" + WHERE.JurCode + "&nodetype=" + WHERE.NodeType + "&dist=" + WHERE.BufferDistance;

    $(".where-col-3").show();
    $("#wherelist2title").html(WHERE.Item);

    //alert("WHERE.LoadWhere2 url = " + url);
    _dynoLoader._loadXmlDocument(url, target, callback, null);
};

WHERE.BindAddressKeys = function() {
    //alert("WHERE.BindAddressKeys");
    $("#addrtxtaddress").bind("paste", function(e) { WHERE.ShowVerifyButton(); });
    $("#addrtxtaddress").bind("keyup", function(e) { WHERE.AddressChanged(e); });
};

WHERE.BindIntersectionKeys = function() {
    //alert("WHERE.BindIntersectionKeys");
    $("#intrtxtstreet").bind("paste", function(e) { WHERE.ShowVerifyButton(); });
    $("#intrtxtstreet").bind("keyup", function(e) { WHERE.IntersectionChanged(e); });
    $("#intrtxtcross").bind("paste", function(e) { WHERE.ShowVerifyButton(); });
    $("#intrtxtcross").bind("keyup", function(e) { WHERE.IntersectionChanged(e); });
};

WHERE.AddressChanged = function(e) {
    //alert("WHERE.AddressChanged e = " + e.keyCode + ", length = " + $("#addrtxtaddress").val().length);

    if ($("#addrtxtaddress").val().length > 0) {
        if (e.keyCode == 13) {
            WHERE.FindAddress(1);
        } else {
            WHERE.ShowVerifyButton();
        }
    } else {
        $("#addrverify").hide();
    }
};

WHERE.IntersectionChanged = function(e) {
    //alert("WHERE.IntersectionChanged e = " + e.keyCode);

    if ($("#intrtxtstreet").val().length > 0 && $("#intrtxtcross").val().length > 0) {
        if (e.keyCode == 13) {
            WHERE.FindAddress(2);
        } else {
            WHERE.ShowVerifyButton();
        }
    } else {
        $("#addrverify").hide();
    }
};

WHERE.ShowVerifyButton = function() {
    //alert("WHERE.ShowVerifyButton");

    if ($("#addrverify").css("display") == "none") {
        $("#addrverify").show();
        $("#addrmessage").hide();
        $("#addrpanel").hide();
    }
};

WHERE.FindAddress = function(type) {
    $("#addrmessage").hide();
    $("#addrsplash").show();
    $("#addrsplash").animate({ color: "#ff0000" }, 1500);

    WHERE.AddrX = 0;
    WHERE.IsValid = false;
    WHERE.SelectionType = "";
    WHERE.AddrType = type;

    if (type == 1) { WHERE.VerifyAddress() } else { WHERE.VerifyIntersection() };
};

WHERE.VerifyAddress = function() {
    var obj = document.getElementById("addrtxtaddress");
    var addr = encodeURIComponent(obj.value + "");  // 100 ΑΣΚΛΗΠΕΙΟΥ
    var target = document.getElementById("wherelist2container");
    var url = "WhereData.aspx?target=3&address=" + addr + "&jurcode=" + WHERE.JurCode + "&dist=" + WHERE.BufferDistance;

    $("#mWhereAddress").val(addr);

    //alert("WHERE.VerifyAddress url = " + url);
    _dynoLoader._loadXmlDocument(url, target, WHERE.SaveAddressXY, null);
};

WHERE.VerifyIntersection = function() {
    var obj = document.getElementById("intrtxtstreet");
    var street = encodeURIComponent(obj.value + "");
    obj = document.getElementById("intrtxtcross");
    var cross = encodeURIComponent(obj.value + "");
    var target = document.getElementById("wherelist2container");
    var url = "WhereData.aspx?target=4&street=" + street + "&cross=" + cross + "&jurcode=" + WHERE.JurCode + "&dist=" + WHERE.BufferDistance;

    //alert("WHERE.VerifyIntersection url = " + url);
    _dynoLoader._loadXmlDocument(url, target, WHERE.SaveAddressXY, null);
};

WHERE.AddressSelected = function(type) {
    var obj = document.getElementById("addrList");
    var idx = obj.selectedIndex;
    var a = obj.options[idx].value.split("|");
    var target = document.getElementById("wherelist2container");
    var url = "WhereData.aspx?target=5";
    if (type == 1) {
        url += "&address=" + encodeURIComponent(a[0]) + "&x=" + a[1] + "&y=" + a[2];
    } else {
        url += "&street=" + encodeURIComponent(a[0]) + "&cross=" + encodeURIComponent(a[1]) + "&x=" + a[2] + "&y=" + a[3];
    }
    url += "&zone=" + WHERE.JurCode + "&dist=" + WHERE.BufferDistance + "&type=" + type;

    //alert("WHERE.AddressSelected url = " + url);
    _dynoLoader._loadXmlDocument(url, target, WHERE.SaveAddressXY, null);
};

WHERE.SaveAddressXY = function() {
    WHERE.AddrX = WHERE.GetNumberField("addrX");

    //alert("WHERE.SaveAddressXY - WHERE.AddrX = " + WHERE.AddrX + ", type = " + WHERE.AddrType);
    if (WHERE.AddrType == 1) {
        WHERE.BindAddressKeys();
    } else {
        WHERE.BindIntersectionKeys();
    }

    if (WHERE.AddrX != 0) {
        WHERE.IsValid = true;
        WHERE.AddrY = WHERE.GetNumberField("addrY");
        WHERE.AddrVerified = $("#addrText").val();

        WHERE.SaveBufferDistance(false);
        WHERE.SelectionType = "coord";
        WHERE.SelectionItems = WHERE.AddrX + "|" + WHERE.AddrY;

        WHERE.LocDisplay = "<tr><td class=\"field\">" + WHERE.LocationName + ":</td><td>" + WHERE.AddrVerified + "</td></tr>";

        UIHelper.IndicatePendingChanges(true);
    }

    CVS.BuildSummaryDisplay();
};
WHERE.GetNumberField = function(field) {
    // When a european culture is active, floating point numbers have a comma instead of a decimal point
    // This does not go over well with Omega Server
    var val = $("#" + field).val();
    if (WHERE.EuropeanNumbers) {
        return val.replace(",", ".");
    } else {
        return val;
    }
};

WHERE.SaveFeatureID = function(lyrID, canBuffer, max) {
    var idx = 0, knt = 0, whr = "";
    var obj = document.getElementById("wherelist2");

    //alert("WHERE.SaveFeatureID lyrID, canBuffer, max = " + lyrID + "," + canBuffer + ", " + max);
    WHERE.LocDisplay = "";

    if (obj.multiple) {
        for (idx = 0; idx < obj.options.length; idx++) {
            if (obj.options[idx].selected) {
                knt++;
                if (knt > max) {
                    obj.options[idx].selected = false;
                }
                else {
                    //s = obj.options[idx].value.replace(/&/,"%26");
                    //s = s.replace(/'/,"%27%27");  //If an apostrophe is in the value it needs to be there twice (kind of escaped) for SQL to query correctly

                    whr += "|" + obj.options[idx].value;
                    if (knt > 1) {
                        WHERE.LocDisplay += "<tr><td class=\"field\">&nbsp;</td><td>" + obj.options[idx].text + "</td></tr>";
                    } else {
                        WHERE.LocDisplay += "<tr><td class=\"field\">" + WHERE.LocationName + ":</td><td>" + obj.options[idx].text + "</td></tr>";
                    }
                }
            }
        }
    }
    else {
        knt = 1;
        whr += "|" + obj.options[obj.selectedIndex].value;

        WHERE.LocDisplay += "<tr><td class=\"field\">" + WHERE.LocationName + ":</td><td>" + obj.options[obj.selectedIndex].text + "</td></tr>";
    }
    if (knt > max) {
        knt = max;
        //alert(WHERE.MaxExceededMessage + " " + max + " " + WHERE.Item + ".");
        alert(WHERE.Item + ": " + max + " " + WHERE.MaxExceededMessage);
    }

    if (knt > 0) {
        WHERE.IsValid = true;

        if (canBuffer) {
            // Near a feature, but also a bufferable boundary?
            if ($("#where-use-buffer").length) {
                if (!$("#where-use-buffer").attr("checked")) {
                    canBuffer = false;
                    WHERE.BufferDistance = 0;
                    WHERE.BufferDisplay = "";
                }
            }
        }

        if (canBuffer) {
            WHERE.SelectionType = "feat";
            WHERE.SaveBufferDistance(false);
        } else {
            WHERE.UseBuffer = false;
            WHERE.SelectionType = "bnd";
        }
        WHERE.SelectionItems = lyrID + "|" + knt + whr;
        //alert("WHERE.SaveFeatureID selection = " + WHERE.SelectionType + "|" + WHERE.SelectionItems);
    }
    CVS.BuildSummaryDisplay();
    UIHelper.IndicatePendingChanges(true);
};

WHERE.SaveBufferDistance = function(show) {
    WHERE.UseBuffer = true;
    WHERE.BufferDistance = $("#lstWhereBufferDistance").val();
    WHERE.BufferDisplay = "<tr><td class=\"field\">" + WHERE.BufferName + ":</td><td>" + $("#lstWhereBufferDistance :selected").text() + "</td></tr>";

    if (show) {
        CVS.BuildSummaryDisplay();
    }
    UIHelper.IndicatePendingChanges(true);
};

WHERE.UseBufferChanged = function() {
    if ($("#where-use-buffer").attr("checked")) {
        // Geography selection is now near a feature
        $("#where-buffer-container").show();
        WHERE.SelectionType = "feat";
        WHERE.SaveBufferDistance(true);
    } else {
        // Geography selection is now within a boundary
        $("#where-buffer-container").hide();
        WHERE.SelectionType = "bnd";
        WHERE.UseBuffer = false;
        WHERE.BufferDistance = 0;
        WHERE.BufferDisplay = "";
        CVS.BuildSummaryDisplay();
        UIHelper.IndicatePendingChanges(true);
    }
};

WHERE.GetSummary = function() {
    return WHERE.JurDisplay + WHERE.GeoDisplay + WHERE.LocDisplay + WHERE.BufferDisplay;
};

WHERE.GetQuery = function() {
    if (WHERE.UseBuffer) {
        return WHERE.SelectionType + "|" + WHERE.SelectionItems + "|" + WHERE.BufferDistance;
    } else {
        return WHERE.SelectionType + "|" + WHERE.SelectionItems;
    }
};
