var validations = [];

function form_validator() {
	var i;
	var errors = [];
	for (i=0; i<validations.length; i++) {
		var validation = validations[i];
		var field = document.getElementById(validation.fieldId);
		
		var valid = false;
		switch(field.tagName.toUpperCase()) {
			case 'INPUT':
				switch(field.type.toUpperCase()) {
					case 'TEXT':
					case 'PASSWORD':
						valid = ValidateValue(field.value, validation.required, validation.regex);
						break;
				}
				break;
			case 'TEXTAREA':
				valid = ValidateValue(field.value, validation.required, validation.regex);
				break;
			case 'SELECT':
				valid = ValidateValue(field.value, validation.required, validation.regex);
				break;
		}
		if(valid == false) {
			errors.push(validation.message);
//			document.getElementById(validation.fieldId+'_req').innerHTML = validation.message;
		} else {
//			document.getElementById(validation.fieldId+'_req').innerHTML = '<img src="/files/System/images/validate_true.gif" alt="" />'; //prod
//			document.getElementById(validation.fieldId+'_req').innerHTML = '<img src="images/validate_true.gif" alt="" />'; // dev
		}
	}
	if(errors.length>0) {
		if(document.getElementById('submit_btn')) {
			//document.getElementById('submit_btn').type='image';
			changeInputType(document.getElementById('submit_btn'), 'image');
//			document.getElementById('submit_btn').src='images/btn-send-inactive.gif'; // Dev
			document.getElementById('submit_btn').src='/files/System/images/btn-send-inactive.gif';
		}
		return false;
	} else {
		if(document.getElementById('submit_btn')) {
			//document.getElementById('submit_btn').type='image';
			changeInputType(document.getElementById('submit_btn'), 'image');
//			document.getElementById('submit_btn').src='images/btn-send.gif'; // Dev
			document.getElementById('submit_btn').src='/files/System/images/btn-send.gif';
		}
		return true;
	}
}

function form_validator_start() {
	
	var i;
	var errors = [];
	for (i=0; i<validations.length; i++) {
		var validation = validations[i];
		var field = document.getElementById(validation.fieldId);
		
		var valid = false;
		switch(field.tagName.toUpperCase()) {
			case 'INPUT':
				switch(field.type.toUpperCase()) {
					case 'TEXT':
					case 'PASSWORD':
						valid = ValidateValue(field.value, validation.required, validation.regex);
						break;
				}
				break;
			case 'TEXTAREA':
				valid = ValidateValue(field.value, validation.required, validation.regex);
				break;
			case 'SELECT':
				valid = ValidateValue(field.value, validation.required, validation.regex);
				break;
		}
		if(valid == false) {
			errors.push(validation.message);
			document.getElementById(validation.fieldId+'_req').innerHTML = '*';
		} else {
			document.getElementById(validation.fieldId+'_req').innerHTML = '<img src="/files/System/images/validate_true.gif" alt="" />'; //prod
//			document.getElementById(validation.fieldId+'_req').innerHTML = '<img src="images/validate_true.gif" alt="" />'; // dev
		}
	}
	if(errors.length>0) {
		if(document.getElementById('submit_btn')) {
			changeInputType(document.getElementById('submit_btn'), 'image');
//			document.getElementById('submit_btn').type='image';
//			document.getElementById('submit_btn').src='images/btn-send-inactive.gif'; // Dev
			document.getElementById('submit_btn').src='/files/System/images/btn-send-inactive.gif';
		}
		return false;
	} else {
		if(document.getElementById('submit_btn')) {
			changeInputType(document.getElementById('submit_btn'), 'image');
			//document.getElementById('submit_btn').type='image';
//			document.getElementById('submit_btn').src='images/btn-send.gif'; // Dev
			document.getElementById('submit_btn').src='/files/System/images/btn-send.gif';
		}
		return true;
	}
}

function changeInputType(oldObject, oType) {
	var newObject = document.createElement('input');
	newObject.type = oType;
	if(oldObject.size) newObject.size = oldObject.size;
	if(oldObject.value) newObject.value = oldObject.value;
	if(oldObject.name) newObject.name = oldObject.name;
	if(oldObject.id) newObject.id = oldObject.id;
	if(oldObject.className) newObject.className = oldObject.className;
	oldObject.parentNode.replaceChild(newObject,oldObject);
	return newObject;
}

function live_validation(fieldId) {
	for (var i=0; i<validations.length; i++) {
		if(validations[i].fieldId==fieldId) {
			var validation = validations[i];
			var field = document.getElementById(validation.fieldId);
			var valid = false;
			switch(field.tagName.toUpperCase()) {
				case 'INPUT':
					switch(field.type.toUpperCase()) {
					    case 'TEXT':					
						case 'PASSWORD':
							valid = ValidateValue(field.value, validation.required, validation.regex);
							break;
					}
					break;
				case 'TEXTAREA':
					valid = ValidateValue(field.value, validation.required, validation.regex);
					break;
				case 'SELECT':
					valid = ValidateValue(field.value, validation.required, validation.regex);
					break;
			}
			if(valid == false) {
				document.getElementById(validation.fieldId+'_req').innerHTML = validation.message;
			} else {
				document.getElementById(validation.fieldId+'_req').innerHTML = '<img src="/files/System/images/validate_true.gif" alt="" />'; //prod
//				document.getElementById(validation.fieldId+'_req').innerHTML = '<img src="images/validate_true.gif" alt="" />'; // dev
			}
		}
	}
	form_validator();
}

function AddRequiredValidation(fieldId, message) {
	var val = GetValidation(fieldId)
	val.required = true;
	val.message = message;
}

function AddRegexValidation(fieldId, regex, message) {
	var val = GetValidation(fieldId);
	val.regex = regex;
	val.message = message;
}

function GetValidation(fieldId) {
	// Allready exists
	var i;
	for(i=0; i<validations.length; i++) {
		if(validations[i].fieldId == fieldId) {
			return validations[i];
		}
	}
	
	// Add new
	var newValidation = {
		fieldId: fieldId,
		required: false,
		regex: "",
		message: ""
	};
	validations.push(newValidation);
	return newValidation;
}

function ValidateValue(value, required, regex) {
	if (required && trim(value) == "") {
		return false;
	}
	if (regex != "") {
		var regExValidation = new RegExp(regex);
		var error = regExValidation.test(value);
		return error;
	}
	return true;
}

function FocusFormField(field) {
	var element = document.getElementById(field);
	if (element) {
		element.focus();
		element.select();
	}
}

function trim(str) {
	return str.replace(/^\s+|\s+$/g, '');
}

if (window.addEventListener)
	window.addEventListener("load", form_validator_start, false);
else if (window.attachEvent)
	window.attachEvent("onload", form_validator_start);