// JavaScript Document
var Validator = Class.create({
	errors : [],
	initialize : function(){
		
	},
	checkEmail : function(value, key, message, required){
		var regex = new RegExp('^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$');
		return this.checkBoolean(!regex.text(value) || (value == '' && required),key,message);
	},
	checkRequired : function(value, key, message){
		return this.checkBoolean(value == '',key,message);
	},
	checkCreditCardNumber : function(value, key, message, required, required){
		var digits = '';
		var sum = 0;
		var digit = 0;
		var valid = false;
		var card_number = this.reverseString(this.cleanCreditCardNumber(value));
		
		for(var i=0;i<card_number.length;i++){
			digit = new Number(card_number.charAt(i));
			if(digit % 2 == 0){
				digit *= 2;
				if(digit > 9){
					digit -= 9;	
				}
			}
			digits.concat(digit.toString());
		}
		for(var i=0;i<digits.length;i++){
			sum += new Number(digits.charAt(i));
		}
		valid = (card_number.length > 14) && (sum % 10 == 0);
		return valid;
	},
	checkBoolean : function(value, key, message){
		if(value){
			this.addError(key, message);
		}
		return !value;
	},
	addError : function(key,message){
		errors[key] = message;
	},
	cleanCreditCardNumber : function(value){
		return value.replace(/[^0-9]+/gi,'');
	},
	reverseString : function(value){
    	var reversed = '';
		var i = 0;
 		for (i = value.length-1; i >= 0; i--){
       		reversed += value.charAt(i);
    	}
    	return reversed;
	}	
});
