var Util = {
	getElementsByClassName: function(className, parent, tag) {
		if (parent == null) parent = document;
		if (tag == null) tag = '*';
		var all = parent.getElementsByTagName(tag);

		var elements = [];
		var length = all.length
		for (var i = 0; i < length; i++) {
			if (this.hasClass(all[i], className))
				elements.push(all[i]);
		}
	
		return elements;
	},

	hasClass: function(element, className) {
		return new RegExp('(^|\\s)' + className + '($|\\s)').test(element.className);
	},

	addClass: function(element, className) {
		if (!this.hasClass(element, className))
			element.className += ' ' + className;
	
		return element;
	},

	removeClass: function(element, className) {
		element.className = element.className.replace(new RegExp('((^|\\s)' + className + ')+($|\\s)', 'g'), ' ');
		return element;
	},
	
	onload: function(func) {
		var oldOnload = window.onload;
		window.onload = function() {
			if (typeof oldOnload == 'function') oldOnload();
			func();
		}
	},
	
	implode: function(glue, arr) {
		var str = '';
		var length = arr.length;
		for (var i = 0; i < length; i++) {
			if (i != 0) str += glue;
			str += arr[i];
		}
		return str;
	},
	
	addHovers: function(elements) {
		var length = elements.length;
		for (var i = 0; i < length; i++) {
			elements[i].onmouseover = function() { Util.addClass(this, 'hover'); }
			elements[i].onmouseout = function() { Util.removeClass(this, 'hover'); }
		}
	}
}

// Produce the nice initial states on input boxes
var inputs = Util.getElementsByClassName('hasDirections');
var length = inputs.length;
for (var i = 0; i < length; i++) {
	Util.addClass(inputs[i], 'untouched');
	inputs[i].onfocus = function() {
		if (Util.hasClass(this, 'untouched')) {
			Util.removeClass(this, 'untouched');
			this.value = '';
		}
	}
}

function toggleLogin() {
	if (document.getElementById('clientLoginForm').style.display == 'block') {
		document.getElementById('clientLoginForm').style.display = 'none';
		document.getElementById('loginErrors').innerHTML = '';
	} else {
		document.getElementById('clientLoginForm').style.display = 'block';
		document.clientLoginForm.user.focus();
	}
}

if (loginError) toggleLogin();

function validateLogin(form) {
	var emptyFields = new Array();

	if (form.user.value == '') emptyFields.push('username');
	if (form.password.value == '') emptyFields.push('password');

	if (emptyFields.length) {
		document.getElementById('loginErrors').innerHTML = 'Please supply a ' + Util.implode(' and ', emptyFields);
		return false;
	}

	return true;
}
