var jseId = "";
var initFinished = false;
var selectedJurisdiction = null;
var lastJseSearch = null;

function getJseSearchText() {
    if ($("#jse_txt_search").is('.watermarkOn'))
    { return ''; }

    return $.trim($("#jse_txt_search").val());
}

function jsesearch() {
    var search = getJseSearchText();

    if (search == lastJseSearch) {
        return;
    }

    var tree = $("#jsetree").dynatree("getTree");
    var searchNode = tree.getNodeByKey("search");
    searchNode.removeChildren();

    if (search.length === 0) {
        $(searchNode.span).hide();
        lastJseSearch = null;
        return;
    }

    searchNode.data.title = "Search Results ('" + search + "')";
    searchNode.append({ title: "Loading..." });
    searchNode.expand(true);
    searchNode.render();

    if (search.length > 0)
    { $(searchNode.span).show(); }

    $.ajax({
        url: jseServiceUrl,
        actiondescription: "Your search request",
        allowRetry: true,
        dataType: "json",
        data: { m: "tree", s: search },
        cache: true,
        success: function(data) {
            lastJseSearch = search;
            searchNode.removeChildren();
            searchNode.append(data);            
        }
    });
}

function jurisdictionSelected(jurisdictionId, ajaxSuccess, ajaxError) {

    $.ajax({
        allowRetry: true,
        actiondescription: "Your jurisdiction selection request",
        type: "GET",
        url: jseServiceUrl,
        data: { m: "selected", jurisdictionId: jurisdictionId },
        dataType: "json",
        success: function(data) {

            selectedJurisdiction = data.Jurisdiction;
            if (!data.Success) {
                selectedJurisdiction = null;
                growlAjaxResult(data);
                return;
            }

            $("#jsetree").dynatree("enable");
            $(".jselink").removeClass("disabledlink");
            $("#jseselectedloading").hide();

            callFunction(ajaxSuccess, data);
        },
        complete: function(XMLHttpRequest, textStatus) {
            if (textStatus == "error" || textStatus == "timeout") {
                $("#jsetree").dynatree("enable");
                $(".jselink").removeClass("disabledlink");
                $("#jseselectedloading").hide();
                callFunction(ajaxError);
                return false;
            }
        }
    });
}

function loadJurisdictionTree(jseWatermarkText, beforeJurisdictionSelected, jurisdictionSelectedSuccess, jurisdictionSelectedError) {

    if ($("#jsetree").length === 0) {
        growlError("Page is missing an element, #jsetree", "Page Error");
        return false;
    }
    if (!initFinished) {
        growlError("Jurisdiction tree did not load completely.", "Page Error");
        return false;
    }

    var jseIdFromUrl = getUrlParameterValue("j");

    if (jseIdFromUrl !== null)
    { jseId = jseIdFromUrl; }

    if (jseWatermarkText !== undefined && jseWatermarkText !== "") {
        $("#jse_txt_search").typeWatch({
            callback: jsesearch,
            highlight: true,
            wait: 600,
            enterkey: true,
            captureLength: 1,
            ignoreText: jseWatermarkText
        });
    }

    $("#jsetree").dynatree({
        title: "Jurisdiction Selection",
        autoFocus: false,
        autoCollapse: true,
        rootVisible: true,
        persist: true,
        fx: { height: "toggle", duration: 200 },
        initAjax: { url: jseServiceUrl,
            data: { m: "tree", j: jseId },
            cache: true,
            success: function(dtnode) {
                    var tree = $("#jsetree").dynatree("getTree");
                    var searchNode = tree.getNodeByKey("search");
                    $(searchNode.span).hide();
                }
        },
        onActivate: function(dtnode) {
            if (dtnode.data.rulesets) {

                $("#jsetree").dynatree("disable");
                $(".jselink").addClass("disabledlink");

                callFunction(beforeJurisdictionSelected);

                jurisdictionSelected(dtnode.data.jurisdictionId, jurisdictionSelectedSuccess, jurisdictionSelectedError);
                dtnode.deactivate();
            }

            setTimeout(function() {
                $("#jsetree").parent().attr({ scrollLeft: 0 });
            }, 0);
        },
        onLazyRead: function(dtnode) {
            dtnode.appendAjax({ url: jseServiceUrl,
                data: { m: "tree", p: dtnode.data.key, s: getJseSearchText() },
                cache: true
            });
        }
    });



    if (jseId) {
        callFunction(beforeJurisdictionSelected);
        jurisdictionSelected(jseId, jurisdictionSelectedSuccess, jurisdictionSelectedError);
    }
}

function initializeJurisdictionTree(jseWatermarkText, beforeJurisdictionSelected, jurisdictionSelectedSuccess, jurisdictionSelectedError) {
    if (selectedJurisdiction !== null) {
        if ($("#jsetreecontainer").length === 0) {
            growlError("Page is missing an element, #jsetreecontainer", "Page Error");
            return false;
        }

        $("#jsetreecontainer").scrollTo($("#ui-dynatree-id-" + selectedJurisdiction.JurisdictionId), 0, { offset: -100 });
    }

    if ($.browser.mozilla)
    { $("#jse_txt_search").keypress(checkForEnter); }
    else
    { $("#jse_txt_search").keydown(checkForEnter); }

    setWatermark("#jse_txt_search", jseWatermarkText);

    initFinished = true;
    loadJurisdictionTree(jseWatermarkText, beforeJurisdictionSelected, jurisdictionSelectedSuccess, jurisdictionSelectedError);
}