var Application = {
	timer: null,
	
	initialize: function() {
		// set mouse-over state for IE
		Application.setHover('menu');
		Application.setHover('footer');

		/* automatically shift focus to first text form element, if applicable */
		if ($('autofocus')) {
			$('autofocus').focus();
			
		} else if (document.forms[0] && document.forms[0].elements) {
			var el = document.forms[0].elements;
			for (var i=0; i<el.length; i++) {
				if ((el[i].type == 'text' || el[i].type == 'textarea')) {
					el[i].focus();
					break;
				}
			}
		}
	},
	
	setHover: function(idName) {
		if (document.all && document.getElementById && $(idName)) {
			var menu = document.getElementById(idName);
			var i;
			for (i=0; i<menu.childNodes.length; i++) {
				var node = menu.childNodes[i];
				if (node.nodeName == "LI") {
					node.onmouseover = function() {
						Element.addClassName(this, 'over');
					}
					node.onmouseout = function() {
						Element.removeClassName(this, 'over');
					}
				}
			}
		}
	},

	show: function(prefix, num, maximum) {
		// show the given element, and hide all others with the class name "toggle"
		for (var i=1; i<=maximum; i++) {
			if ($(prefix+i)) {
				var el = $(prefix+i);
				if (num == i) {
					if (Element.hasClassName(el, 'hidden')) {
						Element.removeClassName(el, 'hidden');
					} else {
						Element.addClassName(el, 'hidden');
					}
				} else {
					Element.addClassName(el, 'hidden');
				}
			}
		}
	},
	
	showHide: function(id, show) {
		var el;
		if ($(id)) {
			el = new Array($(id));
		} else {
			el = document.getElementsByClassName(id);
		}
		for (var i=0; i<el.length; i++) {
			if (show == null) {
				show = Element.hasClassName(el[i], 'hidden');
			}
			if (show) {
				Element.removeClassName(el[i], 'hidden');
			} else {
				Element.addClassName(el[i], 'hidden');
			}
		}
	},
	
	select: function(input) {
		// invoked when user selects a radio button or checkbox on events or people pages
		// do not update form immediately, in case user wants to select several consecutively
		var f = document.forms['formFilter'];
		//var autoMode = f.autoMode.value;
		
		if (Application.timer) {
			window.clearTimeout(Application.timer);
		}
		/*if (autoMode == 1) {
			Application.timer = window.setTimeout('Application.refresh()', 800);
		}*/
	},
	
	setCalendar: function(input) {
		Application.select(input);
		Application.refresh();
	},
	
	check: function(checkAll, className) {
		var f = document.forms['formFilter'];
		var matches = document.getElementsByClassName(className);
		for (var i=0; i<=matches.length; i++) {
			if (matches[i]) {
				matches[i].checked = checkAll;
			}
		}
		if (checkAll) {
			Application.select();
		}
	},
	
	/*setAutoMode: function(autoMode) {
		var f = document.forms['formFilter'];
		f.autoMode.value = autoMode;
		Application.refresh();
	},*/
	
	refresh: function() {
		// submit form
		var f = document.forms['formFilter'];
		if ($('q')) {
			$('q').value = '';
		}
		f.submit();
	},
	
	setCalendarOffset: function(offset) {
		document.forms['formFilter'].offset.value = offset;
		document.forms['formFilter'].submit();
		return false;
	},
	
	setCalendarDate: function(month, year) {
		document.forms['formFilter'].m.value = month;
		document.forms['formFilter'].yr.value = year;
		document.forms['formFilter'].submit();
		return false;
	},
	
	setCalendarPeriod: function(period) {
		document.forms['formFilter'].period.value = period;
		document.forms['formFilter'].submit();
		return false;
	},
	
	setResultsOffset: function(change) {
		var f = document.forms['formFilter'];
		f.offset.value = Number(f.offset.value) + Number(change);
		if (f.offset.value < 0) {
			f.offset.value = 0;
		}
		f.submit();
		return false;
	},
	
	searchByLetter: function(letter) {
		var f = document.forms['formFilter'];
		f.index.value = letter;
		f.offset.value = 0;
		f.submit();
		return false;
	},
	
	reset: function() {
		var f = document.forms['formFilter'];
		f.q.value = '';
		Application.setResultsPerPage();
	},
	
	setResultsPerPage: function(value) {
		var f = document.forms['formFilter'];
		if (!value) { 
			value = 300;
			f.offset.value = 0;
		}
		f.resultsPerPage.value = Number(value);
		f.submit();
		return false;
	},
	
	setDisplayMode: function(value) {
		var f = document.forms['formFilter'];
		if (!value) { 
			value = '';
		}
		f.displayMode.value = value;
		f.submit();
		return false;
	},
	
	orderBy: function(key) {
		document.forms['formFilter'].orderBy.value = key;
		document.forms['formFilter'].submit();
		return false;
	},
	
	addAttachment: function() {
		var parent = $('attachments');
		var element;
		try {
			element = document.createElement("<input name='attachment[]' type='file' class='attachment' size='80' />");
		} catch (e) {
			element = document.createElement("input");
			element.setAttribute("name", "attachment[]");
			element.setAttribute("type", "file");
			element.setAttribute("class", "attachment");
			element.setAttribute("size", "80");
		}
		parent.appendChild(element);
	},
	
	showLogin: function(url) {
		var container = $('login-form');
		new Ajax.Updater(container, url, { onComplete: Application.focusLogin });
	},
	
	focusLogin: function() {
		$('login-username').focus();
	},
	
	login: function(input, url) {
		var form = input.form;
		var username = form.username.value;
		var password = form.password.value;
		var container = $('login-error');
		
		var btnSubmit = $('login-submit');
		btnSubmit.value = 'Please wait..';
		btnSubmit.disabled = true;
		
		new Ajax.Updater(container, url, { method:'post', parameters:'username='+username+'&password='+password, onComplete: Application.onLogin });
	},
	
	onLogin: function() {
		if ($('login-error').innerHTML == ' ' || $('login-error').innerHTML == '') {
			if (window.location.reload) {
				window.location.reload(true);
			} else {
				// show message including button to refresh page
				var container = $('login-form');
				new Ajax.Updater(container, 'internal/refresh', { method:'post', parameters:'url='+window.location });
			}
		} else {
			var btnSubmit = $('login-submit');
			btnSubmit.value = 'Submit';
			btnSubmit.disabled = false;
			
			$('login-username').focus();
		}
	},
	
	hideLogin: function() {
		var container = $('login-form');
		container.innerHTML = '';
	},
	
	enlarge: function(id) {
		$(id).rows += 5;
	},
	
	getWindowSize: function() {
		var size = new Array();
		if (window.innerWidth) { // Firefox
			size[0] = window.innerWidth;
			size[1] = window.innerHeight;
			
		} else if (document.body.offsetWidth){ // all but Explorer Mac
			size[0] = document.body.offsetWidth;
			size[1] = document.body.offsetHeight;
		}
		return size;
	}
}

var oldonload = window.onload;
if (typeof window.onload != 'function') {
	window.onload = Application.initialize;
} else {
	window.onload = function() {
		oldonload();
		Application.initialize();
	}
}
