	CreditCardNumber = function(value) {
		this.init(value);
	};
	CreditCardNumber.prototype = new Object();
	CreditCardNumber.prototype.MAX_CARD_NUM_LENGTH = 19;
	CreditCardNumber.prototype.value = 0;
	CreditCardNumber.prototype.setValue = function(value) {
		this.value = this.filter(value);
	};
	CreditCardNumber.prototype.init = function(value) {
		this.value = this.filter(value);
	};
	CreditCardNumber.prototype.filter = function(val) {
		if(val != undefined) {
			return val.replace(/\D/g,'');
		}
	};
	CreditCardNumber.prototype.isValid = function() {
		return this.luhnCheck();
	};
	CreditCardNumber.prototype.luhnCheck = function() {
		this.value = this.filter(this.value);
		if(this.value != undefined && this.value.length <= this.MAX_CARD_NUM_LENGTH) {
			var sum = 0;
			var doubl = false;
			for(var i = this.value.length - 1; i >= 0; i--) {
				var currentNum = parseInt(this.value.substr(i,1));
				if (doubl) {
                    currentNum *= 2;
                    if (currentNum > 9) {
                        currentNum -= 9;
                    }
                }
				sum += currentNum;
				doubl = !doubl;
			}
			if ((sum % 10) == 0) {
				return true;
			}
			
		}
		return false;
	};
	
