function AppRoot() {
    var appRoot = $("meta[name=appRoot]").attr("content");
    return appRoot.length == 1 ? "" : appRoot;
}

function ToAbsoluteUrl(url) {
    if (!url.toString().substr(0, 2) == "~/") return url;
    return AppRoot() + url.substr(1, url.length);
}

function ajaxSubmitIndexForm() {
    $("#indexForm").ajaxSubmit({ target: "#indexPartial", success: afterPartialLoad });
}

$(document).ready(function() {
    afterFullLoad();
    afterPartialLoad();
});

function afterFullLoad() {
//	$(".ajax-sortable").live("click", ajaxSort);
    $(".index-paging a").live("click", ajaxPaging);
    $("#indexForm").live("submit", function() {
        ajaxSubmitIndexForm();
        return false;
    });
    $("#indexPartial form.delete").live("submit", function() {
        $(this).ajaxSubmit({
                success: function(response) {
                    if (response == "ok") ajaxSubmitIndexForm();
                    else $.dialog("An error occurred", response);
                }
            });
        return false;
    });
    if (typeof(pageAfterFullLoad) == "function") {
        pageAfterFullLoad();
    }
}

function afterPartialLoad() {
    if (typeof(pageAfterPartialLoad) == "function") {
        pageAfterPartialLoad();
    }
    //applyStyles();
}

function applyStyles() {
    $("table tbody tr:not([th]):odd").addClass("alternatingRow");
    $(".sortAscending").html("<img src=\"" + ToAbsoluteUrl("~/Content/css/images/SortAsc.gif") + "\" alt=\"Sort ascending\" title=\"Sort ascending\" />");
    $(".sortDescending").html("<img src=\"" + ToAbsoluteUrl("~/Content/css/images/SortDesc.gif") + "\" alt=\"Sort descending\"  title=\"Sort descending\" />");
    $("input[type=submit]").addClass("button");
    $("input[type=text]").addClass("text-input");
}

function ajaxPaging() {

    var el = $(this);

    var pageElement = $("#indexForm [name='page']");

    if (pageElement.length == 0) {
        pageElement = $("<input type=\"hidden\" name=\"page\" />");
        $("#indexForm").append(pageElement);
    }

    pageElement.val(el.text());
    ajaxSubmitIndexForm();

    return false;
}

function ajaxSort() {

    var el = $(this);
    var metadata = $(this).metadata();

    var sortExpressionElement = $("#indexForm [name='sortingParameters.SortExpression']");
    if (sortExpressionElement.length == 0) {
        sortExpressionElement = $("<input type=\"hidden\" name=\"sortingParameters.SortExpression\" />");
        $("#indexForm").append(sortExpressionElement);
    }

    sortDescending = ($("body").data("lastSortAscending") && ($("body").data("lastSortExpression") == metadata.SortExpression));
    $("body").data("lastSortExpression", metadata.SortExpression);
    $("body").data("lastSortAscending", !sortDescending);

    var sortDescendingElement = $("#indexForm [name='sortingParameters.SortDescending']");
    if (sortDescendingElement.length == 0) {
        sortDescendingElement = $("<input type=\"hidden\" name=\"sortingParameters.SortDescending\" />");
        $("#indexForm").append(sortDescendingElement);
    }

    sortExpressionElement.val(metadata.SortExpression);
    sortDescendingElement.val(sortDescending);

    ajaxSubmitIndexForm();
}

// minimal metadata plugin
(function($) {
    $.fn.metadata = function() {
        var data = this.find("div.data").text();
        if (data.indexOf('{') < 0) data = "{" + data + "}";
        data = eval("(" + data + ")");
        return data;
    };
})(jQuery);

// small autocomplete plugin wrapping the full autocomplete plugin for a standard look and feel
(function($) {
    $.fn.standardAutocomplete = function(controllerName) {

        console.log("lkjsdlfkjsdfsdf");
        
        return this.autocomplete({
                source: ToAbsoluteUrl("~/" + controllerName + "/Autocomplete"),
                minLength: 2,
                select: function(event, ui) {
                    window.location.href = ToAbsoluteUrl("~/" + controllerName + "/Details/" + ui.item.value);
                    event.cancel();
                },
                focus: function(event, ui) {
                    event.cancel();
                }
            });
    };
})(jQuery);
