var timer;
var starttime;
var etas = new Array(3);

function loadErrorDialogs() {
	$("#main").append(
		'<div id="errordialog" title="Error" style="display: none">' +
		'<p>' +
		'	I am sorry, an error has occured and prevented your request from being completed.' +
		'	It was logged and will likely be fixed soon.' +
		'</p>' +
		'<p>' +
		'	Feel free to try again.' +
		'</p>' +
		'</div>' +
		'' +
		'<div id="usererrordialog" title="Error" style="display: none">' +
		'<p>' +
		'	I am sorry, the user you have requested was not found. If you haven\'t misspelled the' +
		'	name and think this is an error please leave me a message.' +
		'</p>' +
		'</div>' +
		'' + 
		'<div id="toolserrordialog" title="Error" style="display:none">' +
		'<p>' +
		'	I am sorry, an error has occured with the following synopsis:' +
		'</p>' +
		'<p class="message">' +
		'</p>' +
		'<p>' +
		'	Feel free to try again.' +
		'</p>' +
		'</div>'
	);
	
	$("#usererrordialog").dialog({
		modal: true,
		autoOpen: false,
		dialogClass: 'error',
		buttons: {
			Ok: function() {
				$(this).dialog('close');
			}
		}
	});
	
	$("#errordialog").dialog({
		modal: true,
		autoOpen: false,
		dialogClass: 'error',
		buttons: {
			Ok: function() {
				$(this).dialog('close');
			}
		}
	});
	
	$("#toolserrordialog").dialog({
		modal: true,
		autoOpen: false,
		dialogClass: 'error',
		buttons: {
			Ok: function() {
				$(this).dialog('close');
			}
		}
	});
	
}

function loadProgressBar() {
	$("#content > .middle").append(
		'<div id="loader" style="display: none">' +
		'	<h2>Loading, please wait...</h2>' +
		'	<div class="bar"></div>' +
		'	<p class="message" style="float: left; margin-bottom: 0px;">&nbsp;</p>' +
		'	<p style="float:right; margin-bottom: 0px;">ETA: <span id="eta">n/a</span></p>' +
		'	<div style="clear: both; height: 0px; visibility:hidden; display: block; margin-bottom: 10px">.</div>' + 
		'</div>'
	);
	
	$("#loader .bar").progressbar({
		value: 0
	});
}

$(function() {
	loadErrorDialogs();
	loadProgressBar();
});

function showPercentBar() {
	$("#result").hide();
}

function loadMethod(packg, method) {
	loadMethod(packg, method, undefined, undefined, undefined);
}

function loadMethod(packg, method, param1) {
	loadMethod(packg, method, param1, undefined, undefined);
}

function loadMethod(packg, method, param1, param2) {
	loadMethod(packg, method, param1, param2, undefined);
}

function loadMethod(packg, method, param1, param2, param3) {
	
	$("#main").ajaxError(function(e) {
		window.clearInterval(timer);
		$("#errordialog").dialog('open');
		$("#loader").hide();
		$("#result").show();
	});
	
	var url = "/tools/" + packg + "/" + method + "/" + param1;
	if (param2 != undefined) {
		url += "/" + param2;
	}
	if (param3 != undefined) {
		url += "/" + param3;
	}
	$("#result").hide();
	$("#loader .bar").progressbar('option', 'value', 0);
	$("#loader .message").html("Initializing...");
	$("#loader").show();
	timer = window.setInterval("updateProgress('" + packg + "','" + method + "')", 2000);
	starttime = new Date().getTime();
	
	$.getJSON(url + ".ajax", function(json) {
		window.clearInterval(timer);
		if (json.status == "success") {
			window.location.href = url;
		} else {
			$("#toolserrordialog .message").html(json.message);
			$("#loader").hide();
			$("#result").show();
			$("#toolserrordialog").dialog('open');
		}
	});
}

function validateUser() {
	var user = $("#userdashboardform input[name=username]").val();
	
	$("#main").ajaxError(function(e) {
		$("#usererrordialog").dialog('open');
	});
	
	$.get("/dashboard/user/" + user + ".ajax", function(data) {
		window.location.href = "/dashboard/user/" + data;
	});
}

function backLink(link) {
	$.get(link + ".ajax", function(data) {
		$("#result").fadeOut(function() {
			$("#result").html(data).fadeIn();
		});
	});
}

function updateProgress(packg, method) {
	$.getJSON(cPath + '/progress.jsp', {"packg" : packg, "method" : method}, function(data) {
		if (packg == data.packg && method == data.method) {
			$("#loader .bar").progressbar('option', 'value', data.progress);
			if (data.message != "") {
				$("#loader .message").html(data.message);
			}
			var now = new Date().getTime();
			var elapsed = now - starttime;
			if (data.progress > 0) {
				var seconds = ((elapsed * 100 / data.progress) - elapsed) / 1000;
				etas[0] = etas[1];
				etas[1] = etas[2];
				etas[2] = seconds;
				if (elapsed > 10000) {
					$("#eta").html(((etas[0] + etas[1] + etas[2])/3).toFixed(0) + "s");
				} else {
					$("#eta").html("n/a");
				}
			}
		}
	});
}