/// <reference path="jquery-1.3.2.min-vsdoc.js"/>  
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);
	if (typeof (pageAfterFullLoad) == "function") { pageAfterFullLoad(); }
}

function afterPartialLoad() {
	$("#indexForm").bindonce("submit", function() { ajaxSubmitIndexForm(); return false; });
	$("#indexPartial form.delete").bindonce("submit", function() { $(this).ajaxSubmit({ success: function(response) { if (response=="ok") ajaxSubmitIndexForm(); else $.dialog("An error occurred", response); } }); return false; });
	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();
}

// small autocomplete plugin wrapping the full autocomplete plugin for a standard look and feel
(function($) {
	$.fn.standardAutocomplete = function(type) {
		return this.autocomplete(ToAbsoluteUrl("~/System/Autocomplete/" + type), {
			formatItem: formatItem,
			formatResult: formatResult,
			selectFirst: false
		}).result(function(event, item) {
			location.href = ToAbsoluteUrl("~/" + type + "/Details/" + item[0]);
			return false;
		});
		function formatItem(row) { return row[1] + "<span class=\"sub\">" + row[2] + "</span>"; }
		function formatResult(row) { return row[1].replace(/(<.+?>)/gi, ""); }
	}
})(jQuery);

// 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);

(function($) {
	$.fn.bindonce = function(type, fn) {
		return this.unbind(type).bind(type, fn);
	}
})(jQuery);

(function($) {
	$.dialog = function(title, body) {
		var $dialog = $('<div title="' + title + '">' + body + '</div>').appendTo('body');
		$dialog.dialog();
	};
})(jQuery);