$(document).ready(function(){
    //Close button:
	$(".close").click(
		function () {
			$(this).parent().fadeTo(400, 0, function () { // Links with the class "close" will close parent
				$(this).slideUp(400);
			});
			return false;
		}
	);

    // Alternating table rows:
	$('table:not(.inside)').children('tbody').children('tr:even').each(function() {
		$(this).addClass("alt-row");// Add class "alt-row" to even table rows
	});
	$('table > tbody > tr:has(table):even table tr').each(function() {
		$(this).addClass("alt-row");// Add class "alt-row" to even table rows
	});

    // Check all checkboxes when the one in a table head is checked:
	$('.check-all').click(
		function(){
			$(this).parent().parent().parent().parent().find("input[type='checkbox']").attr('checked', $(this).is(':checked'));   
		}
	)
	
// Pagination functionality
$(".pagination a.number").live("click", function (e) {
	$(e.target).parent().children("a.number").removeClass("current");
	$(e.target).toggleClass("current");
	getData(e);
});

$(".pagination a.text").live("click", function (e) {
	var target = 0;
	var selectedFunction = $(e.target).attr("id");
	var parent = $(e.target).parent();
	switch (selectedFunction) {
		case 'first':
			parent.children("a.number").removeClass("current");
			parent.children("a#1").addClass("current");
			target = 1;
			break;
		case 'last':
			parent.children("a.number").removeClass("current");
			target = parent.children("a.number:last");
			target.addClass("current");
			target = target.attr("id");
			break;
		case 'next':
			target = parent.children("a.current").attr("id");
			target = parseInt(target) + 1;
			if (target <= parseInt(parent.children("a.number:last").attr("id"))) {
				parent.children("a.number").removeClass("current");
				parent.children("a.#" + target).addClass("current");
			}
			break;
		case 'previous':
			target = parent.children("a.current").attr("id");
			target = parseInt(target) - 1;
			if (target > 0) {
				parent.children("a.number").removeClass("current");
				parent.children("a.#" + target).addClass("current");
			}
			break;
	}
	if (target > 0) {
		getData(e);
	}
});

	function getData(e) {
		datatype = $(e.target).closest('.data-content').attr("id");
		dataprovider = datatype.split("-");
		url = "/clients/dataproviders/" + dataprovider[0] + "/" + dataprovider[1] + "/";
		if (dataprovider[2] != undefined) url += '-' + dataprovider[2];
		$.getJSON(url, buildQueryString(datatype), processData);
	}
	
	function getDataDirect(element) {
		if (!$($(element).attr("href")).hasClass("no-auto-update")) {
			datatype = $(element).attr("href").substr(1);
			dataprovider = datatype.split("-");
			url = "/clients/dataproviders/" + dataprovider[0] + "/" + dataprovider[1] + "/";
			if (dataprovider[2] != undefined) url += '-' + dataprovider[2];
			$.getJSON(url, buildQueryString(datatype), processData);
		}
	}
	
	function buildQueryString(datatype) {
		var dataTable = "#" + datatype;
		dataprovider = datatype.split("-");
		var page = $(dataTable + ' .pagination a.current').attr("id");
		queryString = "page=";
		queryString += (page == undefined) ? "1" : page;
		$(dataTable + " th").each(function(i, obj) {
			if ($(obj).hasClass("ascending"))
				queryString += "&sort[" + $(obj).attr("id") + "]=asc";
			if ($(obj).hasClass("descending"))
				queryString += "&sort[" + $(obj).attr("id") + "]=desc";
		});
		if ($(dataTable + ' .search-input').val() != undefined) queryString += "&search=" + $(dataTable + ' .search-input').val();
		queryString += "&datatype=" + datatype;
		if ($('#query-string').text() != '') queryString += "&" + $('#query-string').text();
		$('div.loadingIndicator').show();
		return queryString;
	}
	
	function processData(data) {
		var dataTable = "#" + data.datatype + " tbody";
		var dataNoResults = "#" + data.datatype + " #noResults";
		$(dataTable).children().remove();
		if (data.error == true) {
			alert('Error retrieving data: ' + data.message);
		} else {
			if (data.results != undefined) {
				for (i = 0; i < data.results.length; i++) {
					row = "";
					for (j = 0; j < data.results[i].length; j++) {
						if (data.results[i][j]['url'] == undefined) {
							row += "<td>" + data.results[i][j]['data'] + "</td>";
						} else {
							row += "<td><a href=\"" + data.results[i][j]['url'] + "\">" + data.results[i][j]['data'] + "</a></td>";
						}
					}
					$(dataTable).append("<tr>" + row + "</tr>");
				}
				$(dataTable).parent().show();
				$(dataTable + ' tr:even').addClass("alt-row");
				$(dataNoResults).hide();
			} else {
				$(dataTable).parent().hide();
				$(dataNoResults).show();
			}
		}
		if ($('#' + data.datatype + ' div#result-information')) $('#' + data.datatype + ' div#result-information').html(data.description);
		if (data.pagination != undefined) $('#' + data.datatype + ' div.pagination').html(data.pagination);
		$('div.loadingIndicator').hide();
	}
	
	/* Login Functions */
	$("#open").click(function(){
		$("div#panel").slideDown("slow");
	});	
	$("#close").click(function(){
		$("div#panel").slideUp("slow");
	});		
	$("#toggle a").click(function () {
		$("#toggle a").toggle();
	});		

	$('#loginform').submit(processLogin);
	$('#logout').click(logout);
});

function processLogin(){
	$.getJSON("https://" + window.location.hostname + "/clients/auth/login.php", $('#loginform').serialize() + "&callback=?", function(data) {
		if (data.success) {
			$('form#loginform').hide();
			$('#authenticationFirstname').text(data.firstname);
			$('#client-areas').show();
			$('#open').html('Account Management');
		} else {
			alert("Invalid username/password");
			$('#login_password').val("").focus();
		}
	});
	return false;
}

function logout() {
	$.getJSON("https://" + window.location.hostname + "/clients/auth/logout.php?callback=?", function (data) {
		if (data.success) {
			$('#client-areas').hide();
			$('form#loginform').show();
			$('#open').html('<img src="/images/customer_login.gif">');
			alert("You have been logged out of the E-Moxie web services.")
		}
	});
}