var validationErrorMessage = new Object();
validationErrorMessage['required'] = 'Palun täida antud väli';
validationErrorMessage['required_form'] = 'Palun täida kõik kohustuslikud väljad';
validationErrorMessage['maxlength'] = 'Tekst on liiga pikk';
validationErrorMessage['confirmpassword'] = 'Paroolid on erinevad';

var validationFunctions = new Object();
validationFunctions["required"] = isRequired;
validationFunctions["maxlength"] = isMaxLength;
validationFunctions["confirmpassword"] = isConfirmPassword;

function isRequired(formField) {
	switch (formField.type) {
		case 'text':
		case 'password':
		case 'textarea':
		case 'select-multiple':
			if (formField.value)
				return true;
			return false;
		case 'radio':
			var radios = formField.form[formField.name];
			for (var i=0;i<radios.length;i++) {
				if (radios[i].checked) return true;
			}
			return false;
		case 'checkbox':
			return formField.checked;
	}	
}

function isMaxLength(formField) {
	var maxLength = formField.getAttribute('maxlength');
	var lenght = formField.value.length;
	if (lenght <= maxLength)
		return true;
	return false;
}

function isConfirmPassword(formField) {
	if (document.newuser.password.value == formField.value)
		return true;
	return false;
}

function emptyFunction() {
	return true;
}

/*********************************/

var W3CDOM = document.createElement && document.getElementsByTagName;

function validateForm(formName) {
	if (!W3CDOM) return true; //kui browser ei toeta javascripti, siis serveri pĆµhine kontroll
	var els = formName.elements;
	var validForm = true;
	var firstError = null;
	for (var i=0;i<els.length;i++) {
		if (els[i].removeError)
			els[i].removeError();
		var req = els[i].getAttribute('validation');
		if (!req) continue;
		var reqs = req.split(' ');
		for (var j=0;j<reqs.length;j++) {
			if (!validationFunctions[reqs[j]])
				validationFunctions[reqs[j]] = emptyFunction;
			var OK = validationFunctions[reqs[j]](els[i]);
			if (OK != true) {
				var errorMessage = OK || validationErrorMessage[reqs[j]];
				writeError(els[i],errorMessage)
				validForm = false;
				if (!firstError)
					firstError = els[i];
				break;
			}
		}
	}
	// kui form pole valiidne, siis nĆ¤idatakse teadet
	if (!validForm) {
		var divError = document.getElementById('formError');
		if (!divError) {
			// kui lehel endal pole vastavat div elementi, nĆ¤itame teadet (esimese) submit nupu juures
			for (var i=0;i<els.length;i++) {
				if (els[i].type.toLowerCase() == 'submit') {
					divError = document.createElement('div');
					els[i].parentNode.insertBefore(divError, els[i]);
					//span = 2?
					if (els[i].parentNode.tagName.toLowerCase() == 'td' &&
							els[i].parentNode.colSpan < 2) {
						els[i].parentNode.colSpan = 2;
					}
				}
			}
			
		}
		if (divError) {
			var errorMessage = document.createElement('span');
			errorMessage.className = 'errorMessage';
			errorMessage.appendChild(document.createTextNode(validationErrorMessage['required_form']));
			divError.appendChild(errorMessage);
		}
	}

	return validForm;
}

function writeError(obj,message) {
	obj.onchange = removeError;
	if (obj.errorMessage || obj.parentNode.errorMessage) return;
	var errorMessage = document.createElement('span');
	errorMessage.className = 'errorMessage';
	errorMessage.appendChild(document.createTextNode(message));
	obj.parentNode.appendChild(errorMessage);
	obj.errorMessage = errorMessage;
	obj.parentNode.errorMessage = errorMessage;
}

function removeError() {
	this.className.substring(0,this.className.lastIndexOf(' '));
	if (this.errorMessage) {
		this.parentNode.removeChild(this.errorMessage);
		this.errorMessage = null;
		this.parentNode.errorMessage = null;
	}
	this.onchange = null;
}