$(document).ready(function() { // Attach event handlers for input
	$.ajaxSetup({
		cache: false,
		type: "GET",
		dataType: "xml",
		error: function(jqXHR, textStatus, errorThrown) {
			if (textStatus != null)
				alert(errorThrown);
		},
	});
	$('form#dataentry').find('td').find('input').change(storeData);
	$('input#dateload').change(valDate);
	$('select#monkeysel').change(function() {
		$('form#inputselect').submit();								
	});
	$('select#type').change(function() {
		$('form#inputselect').submit();								
	});
	$('select#prev').change(function() {
		$('form#inputselect').submit();								
	});
	$('form#inputselect').submit(function() {
		if (!valDate())
			return false;
	});
	$('td.graphim').click(loadTotals);
	$('td.bname').click(function() {
		if ($('input#screen').attr('value') == 2) {
			$('span#chartref').empty().append($(this).html().substring(19));
			$('input#chartsrc').attr('value', $(this).parents('tr').attr('id').substring(6));
			loadChart();
		}
	});
	if ($('form#charting').length > 0) { // We have to be logged in
		$('select#charttask').change(loadChart);
		loadChart();
	}
	$('a#closePopup').click(closePopup);
	$('div#overlay').click(closePopup);
	$('div#loading').css('display', 'none');
	//$('div#loading').append('<img src="/images/design/loading2.gif" alt="Loading..." />');
});

function pad(number, length) {
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }
    return str;
}

function taskCookie() {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + 10);
	var c_value = escape($('#charttask').attr('value')) +"; expires="+exdate.toUTCString();
	document.cookie = "ltask"+"="+c_value;
	if ($('#chartsrc').attr('name') == 'client') {
		var c_value = escape($('#chartsrc').attr('value')) +"; expires="+exdate.toUTCString();
		document.cookie = "lastc"+"="+c_value;
	}
}

function loadChart() {
	var chsrc = $('input#chartsrc');
	$.ajax({
		url: "ajax/chart.php",
		data: "todate="+$('#todate').attr('value')+"&"+(chsrc.attr('name') == 'client' ? "client=" : "monkey=")+chsrc.attr('value')+"&task="+$('#charttask').attr('value'),
		success: function(data, textStatus, jqXHR) {
			var xmlerr = data.getElementsByTagName('error'); // Check to see if errors came back
			if (xmlerr.length) { // Errors came back
				if (xmlerr[0].firstChild.nodeValue == 'No data exists for the specified task and date range.' || xmlerr[0].firstChild.nodeValue == 'No data exists for the specified client and date range.' || xmlerr[0].firstChild.nodeValue == 'No data exists for the specified monkey and date range.') {
					$('#chart').empty().append('<p>'+xmlerr[0].firstChild.nodeValue+'</p>');
				} else {
					$('div#popup').empty().append('<div><h3>Error loading data chart...</h3><p>'+xmlerr[0].firstChild.nodeValue+'</p><p class="close">[ <a id="closePopup" href="javascript:void(0);" title="Close Window">Close Window</a> ]</p></div>');
					$('a#closePopup').click(closePopup);
					openPopup(chsrc);
				}
			} else {
				$('div#chart').empty().append('<img id="chartim" src="'+$(data).find('chart:first').text()+'" alt="Chart" />');	
			}
		}
	});
	taskCookie();
}

function valDate() {
	var error = null;
	if ($('input#dateload').attr('value').length == 0) {
		error = 'Please enter a date.';
	} else {
		var matches = $('input#dateload').attr('value').match(/^[\d]{4}-[\d]{2}-[\d]{2}$/);
		if (matches == null || matches.length == 0)
			error = 'Please enter a valid date in the format yyyy-mm-dd.';
	}
	if (error == null) { // There are no syntax errors, lets test logic
		var today = new Date();
		var dstr = today.getFullYear()+'-'+pad(today.getMonth()+1, 2)+'-'+pad(today.getDate(), 2);
		if ($('input#dateload').attr('value') > dstr) {
			error = 'Dates in the future cannot be edited.';
		}
	}
	if (error != null) {
		$('div#popup').empty().append('<div><h3>Errors were found...</h3><p>'+error+'</p><p class="close">[ <a id="closePopup" href="javascript:void(0);" title="Close Window">Close Window</a> ]</p></div>');
		$('a#closePopup').click(closePopup);
		openPopup($('input#dateload'));
		return false;
	}
	return true;
}

var lastel = null;
function openPopup(el) {
	lastel = el;
	$(document).keydown(function() {
		return false;
	});
	$('div#overlay').fadeIn(25);
	$('div#popup').fadeIn(25);
}

function closePopup() {
	$(document).unbind('keydown');
	$('div#popup').fadeOut(150);
	$('div#overlay').fadeOut(150);
	setTimeout("$('div#popup').attr('class', '')", 151);
	if (lastel)
		$(lastel).focus(); // Go back to the bad field
}

function storeData() {
	var task = $(this).attr('name');
	var quant = $(this).attr('value');
	var error = null;
	if (task == 'avgdays' && quant != "" && !quant.match(/^([\d]{1,4}(\.[\d]{1,3})?)|(\.[\d]{1,3})$/))
		error = 'Average Days must be a positive number that is less than or equal to 9999.99.';
	else if (task == 'quality' && quant.length > 0 && (!quant.match(/^([\d]{1,3}(\.[\d]{1,2})?)|(\.[\d]{1,2})$/) || quant > 100))
		error = 'Quality must be a positive number that is less than or equal to 100.';
	else if (task == 'hours' && quant.length > 0 && (!quant.match(/^([\d]{1,2}(\.[\d]{1,2})?)|(\.[\d]{1,2})$/, quant) || quant > 24))
		error = 'Hours must be a positive number that is less than or equal to 24.';
	else if (task != 'avgdays' && task != 'quality' && task != 'hours' && quant.length > 0 && !quant.match(/^[\d]{1,5}$/))
		error = 'This field must be a positive whole number (no decimal point) that is less than or equal to 99999.';
	if (error) {
		$('div#popup').empty().append('<div><h3>Errors were found...</h3><p>'+error+'</p><p class="close">[ <a id="closePopup" href="javascript:void(0);" title="Close Window">Close Window</a> ]</p></div>');
		$('a#closePopup').click(closePopup);
		openPopup(this);
		$(this).attr('value', ""); // Clear the entered input
	} else {
		update(this, $('input#screen').attr('value'), $(this).parents('tr').attr('id').substring(6), task, $('input#date').attr('value'), quant, $('input#monkey').attr('value'));
	}
}

var connections = 0;
function update(el, wscreen, client, task, wdate, quant, monkey) {
	$.ajax({
		async: (connections > 2 ? false : true),
		url: "ajax/data.php",
		data: "screen="+wscreen+"&client="+client+"&task="+task+"&date="+wdate+"&quant="+quant+"&monkey="+monkey,
		beforeSend: function() {
			connections++;
			$('div#loading').stop(true, true).removeClass('loaded').text('Saving...').css('display', 'block');
		},
		success: function(data, textStatus, jqXHR) {
			var xmlerr = data.getElementsByTagName('error'); // Check to see if errors came back
			if (xmlerr.length) { // Errors came back
				$('div#popup').empty().append('<div><h3>Errors were found...</h3><p>'+xmlerr[0].firstChild.nodeValue+'</p><p class="close">[ <a id="closePopup" href="javascript:void(0);" title="Close Window">Close Window</a> ]</p></div>');
				$('a#closePopup').click(closePopup);
				openPopup(el);
				$(el).attr('value', ""); // Clear the entered input
			} else {
				var total = data.getElementsByTagName('total');
				if (task == 'quality' || task == 'avgdays')
					$('td#'+task+'tot').empty().append(total[0].firstChild == null ? '' : parseInt(total[0].firstChild.nodeValue).toFixed(2));
				else
					$('td#'+task+'tot').empty().append(total[0].firstChild == null ? '' : total[0].firstChild.nodeValue);
			}
		},
		complete: function(jqXHR, textStatus) {
			connections--;
			if (connections == 0)
				$('div#loading').addClass('loaded').text('Saved!').delay(900).fadeOut(600);
		}
	});
}

function loadTotals() {
	var client = $(this).parents('tr').attr('id').substring(6);
	var wdate = $('input#date').attr('value');
	$.ajax({
		url: "ajax/total.php",
		data: "client="+client+"&todate="+wdate,
		success: function(data, textStatus, jqXHR) {
			var xmlerr = data.getElementsByTagName('error'); // Check to see if errors came back
			if (xmlerr.length) { // Errors came back
				$('div#popup').empty().append('<div><h3>Errors were found...</h3><p>'+xmlerr[0].firstChild.nodeValue+'</p><p class="close">[ <a id="closePopup" href="javascript:void(0);" title="Close Window">Close Window</a> ]</p></div>');
				$('a#closePopup').click(closePopup);
				openPopup(this);
			} else {
				var html = '<div class="buffer"><h3>'+$(data).find('name').text()+'</h3><table><tr><th></th><th colspan="2" class="single">Medical</th><th colspan="2" class="single">Invoices</th><th colspan="2" class="single">Checks</th><th colspan="2" class="single">Cancelled</th><th colspan="2" class="single">F/U</th><th colspan="2" class="single">Prints</th><th colspan="2" class="single">Problems</th><th colspan="2" class="single">Follow-Ups</th><th rowspan="2" class="double">Average Days</th><th rowspan="2" class="double">% Quality</th><th rowspan="2" class="double">45 Day</th><th rowspan="2" class="double">45 Day Master</th><th rowspan="2" class="double">70 Day</th></tr><tr><th></th><th>Done</th><th>Left</th><th>Done</th><th>Left</th><th>Done</th><th>Left</th><th>Done</th><th>Left</th><th>Done</th><th>Left</th><th>Done</th><th>Left</th><th>Done</th><th>Left</th><th>All</th><th>Today</th></tr><tr><td class="head">30 Day Total</td><td>'+$(data).find('meddonetot').text()+'</td><td>'+$(data).find('medlefttot').text()+'</td><td>'+$(data).find('indonetot').text()+'</td><td>'+$(data).find('inlefttot').text()+'</td><td>'+$(data).find('checkdonetot').text()+'</td><td>'+$(data).find('checklefttot').text()+'</td><td>'+$(data).find('candonetot').text()+'</td><td>'+$(data).find('canlefttot').text()+'</td><td>'+$(data).find('fudonetot').text()+'</td><td>'+$(data).find('fulefttot').text()+'</td><td>'+$(data).find('prindonetot').text()+'</td><td>'+$(data).find('prinlefttot').text()+'</td><td>'+$(data).find('probdonetot').text()+'</td><td>'+$(data).find('problefttot').text()+'</td><td>'+$(data).find('specdonetot').text()+'</td><td>'+$(data).find('speclefttot').text()+'</td><td>---</td><td>---</td><td>'+$(data).find('day45tot').text()+'</td><td>'+$(data).find('master45tot').text()+'</td><td>'+$(data).find('day70tot').text()+'</td></tr><td class="head">30 Day Average</td><td>'+$(data).find('meddoneavg').text()+'</td><td>'+$(data).find('medleftavg').text()+'</td><td>'+$(data).find('indoneavg').text()+'</td><td>'+$(data).find('inleftavg').text()+'</td><td>'+$(data).find('checkdoneavg').text()+'</td><td>'+$(data).find('checkleftavg').text()+'</td><td>'+$(data).find('candoneavg').text()+'</td><td>'+$(data).find('canleftavg').text()+'</td><td>'+$(data).find('fudoneavg').text()+'</td><td>'+$(data).find('fuleftavg').text()+'</td><td>'+$(data).find('prindoneavg').text()+'</td><td>'+$(data).find('prinleftavg').text()+'</td><td>'+$(data).find('probdoneavg').text()+'</td><td>'+$(data).find('probleftavg').text()+'</td><td>'+$(data).find('specdoneavg').text()+'</td><td>'+$(data).find('specleftavg').text()+'</td><td>'+$(data).find('avgdaysavg').text()+'</td><td>'+$(data).find('qualityavg').text()+'</td><td>'+$(data).find('day45avg').text()+'</td><td>'+$(data).find('master45avg').text()+'</td><td>'+$(data).find('day70avg').text()+'</td></tr></table></div>'
				$('div#popup').empty().append('<div>'+html+'<p class="close">[ <a id="closePopup" href="javascript:void(0);" title="Close Window">Close Window</a> ]</p></div>');
				$('a#closePopup').click(closePopup);
				$('div#popup').attr('class', 'bigpop'); // Make sure we are using the big popup
				openPopup(this);
			}
		}
	});
}
