validation = Class.create();

validation.prototype = {
	
	initialize: function(){
	
		this.reponse = true;
		this.message = new Array();
	
		// This object pointer
		var thisPointer = this;
		
		// Clear field styles
		var objFields = document.getElementsByClassName('FieldFailed');
		for(var i=0; i<objFields.length; i=i+1)
			objFields[i].removeClassName("FieldFailed");
		
	},
	
	setField: function(fieldNames, type, required, message){
		
		testList = fieldNames.indexOf(",");
		
		if(testList != -1){
			fieldName = fieldNames.split(",");
			var objField = $(fieldName[0]);
		}
		else {
			var objField = $(fieldNames);	
		}
		
		if(objField){
		
			switch(type){
				case "phone":
					if(required || (!required && objField.value.length != 0)){
						if(objField.value.replace(/[0-9]+/,"").length != 0 || objField.value.length != 10)
							this.setError(objField,message + " - Phone number needs to be correctly formatted. eg 0212345678");
					}
					break;
				case "mobile":
					if(required || (!required && objField.value.length != 0)){
						if(objField.value.replace(/[0-9]+/,"").length != 0 || objField.value.length != 10)
							this.setError(objField,message + " - Phone number needs to be correctly formatted. eg 0212345678");
					}
					break;
				case "email":
					if((required && !objField.value.length) || objField.value.replace(/[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/,"").length)
						this.setError(objField,message + " - E-mail address needs to be correctly formatted.");
					break;
					
				case "money":
					if((required && !objField.value.length) || objField.value.replace(/[0-9]*[.]?[0-9]?[0-9]?/,"").length)
						this.setError(objField,message + " - Value must be a valid currency entry (no $ sign, max 2 decimal places).");
					break;
					
				case "int" :
					if((required && !objField.value.length) || objField.value.replace(/[0-9]+/,"").length)
						this.setError(objField,message + " - Value must be a valid integer (non-decimal number).");
					break;
					
				case "decimal" :
					if((required && !objField.value.length) || !objField.value.replace(/[0-9]*[.]?[0-9]*/,"").length)
						this.setError(objField,message + " - Value must be a valid decimal number.");
					break;
					
				case "select":
					if(required && (!objField.options.length || (!objField.options[objField.selectedIndex].value.length || objField.options[objField.selectedIndex].value == 0)))
						this.setError(objField,message);
					break;
		
				case "multiselect":
					if(required && objField.selectedIndex == -1)
						this.setError(objField,message);
					break;
					
				case "datetime":
					if(required && !objField.value.replace(/\s*/,"").length)
						this.setError(objField,message);
				break;
				
				case "password":
					if(required && objField.value.replace(/\s*/,"").length < 6)
						this.setError(objField,"Your password must be at least 6 characters.");
				break;
				
				case "passwordConfirm":
					if(required && objField.value != $(fieldName[1]).value)
						this.setError($(fieldName[1]),"Your confirm password does not match");
				break;
				
				case "creditCard":
					if(required && objField.value.replace(/[^0-9]+/g,'').length < 15)
						this.setError(objField,message);
				break;
				
				default:
					if(required && !objField.value.replace(/\s*/,"").length)
						this.setError(objField,message);
				break;
			}
			
		}
		else {
			
			alert('Cannot find '+ fieldNames + ' field');
			
		}
	},
	
	setError: function(objField,message){
		this.reponse = false;
		this.message.push(message);
		objField.addClassName("FieldFailed");
	},
	
	validate: function(){
		
		var strMessage = '';
		
		for(var i=0; i<this.message.length; i=i+1)
			strMessage = strMessage + this.message[i] + '\n'
		
		if(strMessage.length)
			alert(strMessage);
		
		return this.reponse;
	}
	
}
