function makeLocalDate(time) {
	var year = time.substr(0, 4);
	var month = time.substr(5, 2);
	var day = time.substr(8, 2);
	var hours = time.substr(11, 2);
	var mins = time.substr(14, 2);
	var date = new Date();
	date.setUTCFullYear(year, month-1, day);
	date.setUTCHours(hours);
	date.setUTCMinutes(mins);
	return date;
}

function strDatePad(num) {
	if (num < 10)
		return '0' + num;
	else
		return num;
}

function timeToStr(hour, min) {
	if (hour == 12)
		return '12:' + strDatePad(min) + 'pm';
	else if (hour == 0)
		return '12:' + strDatePad(min) + 'am';
	else if (hour > 12)
		return (hour - 12) + ':' + strDatePad(min) + 'pm';
	else
		return hour + ':' + strDatePad(min) + 'am';
}

function updateOptions(name) {
	var options = document.getElementById(name);
	if (options.value == '-') {
		var other = document.getElementById(name + '_other');
		other.value = '';
		options.style.display = 'none';
		other.style.display = '';
		other.focus();
	} else if (options.value != '') {
		options.options[0].disabled = true;
		options.lastValid = options.selectedIndex;
	}
}

function updateOptionsOther(name) {
	var options = document.getElementById(name);
	var other = document.getElementById(name + '_other');
	other.style.display = 'none';
	options.style.display = '';
	options.focus();
	if (other.value) {
		for (var i = 0; i < options.options.length; i++) {
			if (other.value == options.options[i].value) {
				options.selectedIndex = i;
				return;
			}
		}
		options.options[options.options.length - 1] = new Option(other.value, other.value);
		options.options[options.options.length] = new Option('Other', '-');
		options.selectedIndex = options.options.length - 2;
	} else {
		options.selectedIndex = 0;
	}
}

function cancelOptionsOther(name) {
	var options = document.getElementById(name);
	var other = document.getElementById(name + '_other');
	other.style.display = 'none';
	options.style.display = '';
	options.selectedIndex = options.lastValid;
}

var currentTab = null;
var currentTabMenu = null;

function activateTab(name) {
	var tab = document.getElementById('tab_' + name);
	var tabMenu = document.getElementById('tabmenu_' + name);

	if (tab && tabMenu) {
		if (currentTab)
			currentTab.style.display = 'none';
		currentTab = tab;
		tab.style.display = 'block';

		if (currentTabMenu)
			currentTabMenu.className = 'tabmenu_off';
		currentTabMenu = tabMenu;
		tabMenu.className = 'tabmenu_on';


		return true;
	} else {
		return false;
	}
}
function clickTab(tabMenu) {
	var id = tabMenu.id;
	activateTab(id.substr(8));
}
function defaultTab() {
	var tabs = document.getElementById('tabmenu');
	if (tabs) {
		var options = tabs.getElementsByTagName('span');
		if (options && options.length > 0) {
			var id = options[0].id.substr(8);
			activateTab(id);
		}
	}
	if (document.location.hash) {
		activateTab(document.location.hash.substr(1));
	}
}

function makeTableAltRows() {
	var tables = document.getElementsByTagName('table');
	for (var i = 0; i < tables.length; ++i) {
		if (tables[i].className == 'list') {
			var rows = tables[i].getElementsByTagName('tr');
			for (var ii = 1; ii < rows.length && !rows[ii].className; ++ii) {
				if (ii % 2 == 0)
					rows[ii].className = 'alt';
			}
		}
	}
}

function adjustDateTime() {
	var spans = document.getElementsByTagName('span');
	for (var i = 0; i < spans.length; ++i) {
		var span = spans[i];
		if (span.className == 'magic_date' || span.className == 'magic_datetime') {
			var date = makeLocalDate(span.innerHTML);
			var str = strDatePad(date.getMonth()+1) + '/' + strDatePad(date.getDate()) + '/' + date.getFullYear();
			if (span.className == 'magic_datetime')
				str += ' ' + timeToStr(date.getHours(), date.getMinutes());
			span.removeChild(span.firstChild);
			span.appendChild(document.createTextNode(str));
		}
	}

	var inputs = document.getElementsByTagName('input');
	for (var i = 0; i < inputs.length; ++i) {
		var input = inputs[i];
		if (input.className == 'datetime_widget_value') {
			var name = input.id.substr(0, input.id.length - 9);
			var date = makeLocalDate(input.value);

			var time_display = document.getElementById(name + '_time');
			var timep_display = document.getElementById(name + '_time_precise');
			var date_value = document.getElementById(name + '_date');
			var date_display = document.getElementById(name + '_date_display');
			var adjust = document.getElementById(name + '_time_adjust');

			if (time_display)
				time_display.selectedIndex = date.getHours();
			else if (timep_display)
				timep_display.value = date.getHours() + ':' + strDatePad(date.getMinutes());
			adjust.value = date.getTimezoneOffset();

			var str = strDatePad(date.getMonth()+1) + '/' + strDatePad(date.getDate()) + '/' + date.getFullYear();
			date_display.removeChild(date_display.firstChild);
			date_display.appendChild(document.createTextNode(str));

			str = date.getFullYear() + '-' + strDatePad(date.getMonth()+1) + '-' + strDatePad(date.getDate());
			date_value.value = str;
		}
	}
}

function printAndClose() {
	window.print();
	window.close();
}

function infoBoxClick(clicked) {
	setTimeout(function(){
		jQuery('.infofull', jQuery(clicked).parent()).fadeIn().each(function(){
			// reset to default css positioning
			jQuery(this).css('top', '-3px');
			jQuery(this).css('left', '-3px');

			// get the bottom right corner of the window dimensions
			var bottom = parseInt(jQuery(document).scrollTop(), 10);
			bottom += parseInt(jQuery(window).height(), 10);

			var right = parseInt(jQuery(document).scrollLeft(), 10);
			right += parseInt(jQuery(window).width(), 10);

			// determine current position and sizing
			var off = jQuery(this).offset();
			var paroff = jQuery(this).offsetParent().offset();
			var pos = jQuery(this).position();
			var height = parseInt(jQuery(this).height(), 10);
			var width = parseInt(jQuery(this).width(), 10);

			// shift up if we are hitting the bottom of the window
			if (off.top + height > bottom)
				jQuery(this).css('top', (bottom - height - paroff.top - 6) + 'px');

			// shift left if we are hitting the top of the window
			if (off.left + width > right)
				jQuery(this).css('left', (right - width - paroff.left - 6) + 'px');
		});
	}, 100);
}
jQuery(document).click(function(){jQuery('.infofull').fadeOut();});

var msgTimeout = null;
function showMsg(msg) {
	if (msgTimeout)
		clearTimeout(msgTimeout);
	var msgDisplay = document.getElementById('msg');
	msgDisplay.innerHTML = msg;
	jQuery(msgDisplay).show();
	msgTimeout = setTimeout(function(){jQuery(msgDisplay).fadeOut();}, 5000);
}

var selectOptionIndex = 0;
function selectListAdd(sid, value, name, selected) {
	var select = document.getElementById(sid);
	var line = document.createElement('div');
	line.className = 'option';
	var input = document.createElement('input');
	input.addEventListener('change', function(){line.className=input.checked?'option selected':'option';}, false);
	input.type = 'checkbox';
	input.id = select.id + (++selectOptionIndex);
	input.name = select.getAttribute('name') + '[]';
	input.value = value;
	if (selected) {
		input.checked = 'checked';
		line.className = 'option selected';
	}
	var label = document.createElement('label');
	label.setAttribute('for', input.id);
	label.appendChild(document.createTextNode(name));
	line.appendChild(input);
	line.appendChild(label);
	select.appendChild(line);
}

function getSelectList(sid) {
	var array = new Array();
	var select = document.getElementById(sid);
	var options = select.getElementsByTagName('input');
	for (var i = 0; i < options.length; ++i) {
		if (options[i].checked)
			array[array.length] = options[i].value;
	}
	return array;
}

function cancelEvent(e) {
	if (!e)	e = window.event;
	if (e.stopPropagation)
		e.stopPropagation();
}

function selectRequire() {
	var selects = document.getElementsByTagName('select');
	for (var i = 0; i < selects.length; ++i) {
		if (selects[i].getAttribute('ptracRequire') == 'yes') {
			if (selects[i].attachEvent) {
				selects[i].attachEvent('onchange', function(){this.options[0].disabled=true;});
			} else if (selects[i].addEventListener) {
				selects[i].addEventListener('change', function(){this.options[0].disabled=true;}, false);
			}
			if (selects[i].selectedIndex > 0)
				selects[i].options[0].disabled = true;
		}
	}
}

function formRequire() {
	var check = function(ev) {
		var selects = this.elements;
		for (var i = 0; i < selects.length; ++i) {
			if (selects[i].getAttribute('ptracRequire') == 'yes' && selects[i].selectedIndex == 0 && selects[i].options.length > 1) {
				alert('Please complete all required fields.');
				ev.preventDefault();
				return false;
			}
		}
		return true;
	}

	var forms = document.getElementsByTagName('form');
	for (var i = 0; i < forms.length; ++i) {
		var form = forms[i];
		if (form.addEventListener) {
			form.addEventListener('submit', check, true);
		}
	}
}

// all our special startup actions
jQuery(defaultTab);
jQuery(makeTableAltRows);
jQuery(adjustDateTime);
jQuery(selectRequire);
jQuery(formRequire);
