Event.observe(window,'load',function() {
	/* Set number only fields */
	$$('input.numonly').each(function(obj) {
		Event.observe(obj,'keyup',enforceNumsOnly.bindAsEventListener(obj));
	});
});

function enforceNumsOnly(obj) {
	this.setValue( ob.getValue().replace(/[^0-9]/g, ''));
}

function validateForm(form,cctypeobj) {
	return true;
	form = Element.extend(form);
	
	if( cctypeobj )
		var cctype = $F(cctypeobj);
	
	/* Remove formattention class from all elements we are going to check */
	form.select(".req, input.email, input.phone, input.cc, input.cvv").each(function(obj) {
		obj.removeClassName('formattention');
	});
	
	var reasons = "";
	/* Check required */
	form.select(".req").each(function(obj) {
		if( obj.disabled == false && obj.value == "" ) {
			reasons += obj.title + " is Required\n";
			obj.addClassName('formattention');
		}
	});
	
	/* Check format zip */
	var reZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
	form.select("input.zip").each(function(obj) {
		if( obj.disabled == false && !reZip.test(obj.getValue()) ) {
			reasons += obj.title + " is not a valid zip code\n";
			obj.addClassName('formattention');
		}
	});
	
	/* check format email */
	var emailRegEx = new RegExp(/^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/);
	form.select("input.email").each(function(obj) {
		if( obj.disabled == false && !emailRegEx.test(obj.getValue()) ) {
			reasons += obj.title + " is not a valid email address\n";
			obj.addClassName('formattention');
		}
	});
	
	/* check format phone */
	var phoneRegEx = new RegExp(/\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/);
	form.select("input.phone").each(function(obj) {
		if( obj.disabled == false && !phoneRegEx.test(obj.getValue()) ) {
			reasons += obj.title + " is not a valid phone number\n";
			obj.addClassName('formattention');
		}
	});
	
	/* check format credit card */
	form.select("input.cc").each(function(obj) {
		if( obj.disabled == false && !isValidCreditCardNumber(obj.getValue(),cctype) ) {
			reasons += obj.title + " is not a valid credit card number\n";
			obj.addClassName('formattention');
		}
	});
	
	/* check format credit card */
	var cvvRegEx = new RegExp(/^[0-9]{3,4}$/);
	form.select("input.cvv").each(function(obj) {
		if( obj.disabled == false && !cvvRegEx.test(obj.getValue()) ) {
			reasons += obj.title + " is not a valid CVV number\n";
			obj.addClassName('formattention');
		}
	});
	
	/* Return result */
	if( reasons.length > 0 ) {
		alert("The form was not submitted for the following reasons:\n"+reasons);
		return false;
	}
	else return true;
}

function isValidCreditCardNumber(cardNumber, cardType) {
	var isValid = false;
	var ccCheckRegExp = /[^\d ]/;
	isValid = !ccCheckRegExp.test(cardNumber);

	if (isValid) {
		var cardNumbersOnly = cardNumber.replace(/ /g,"");
		var cardNumberLength = cardNumbersOnly.length;
		var lengthIsValid = false;
		var prefixIsValid = false;
		var prefixRegExp;

		switch(cardType) {
			case "mastercard":
			lengthIsValid = (cardNumberLength == 16);
			prefixRegExp = /^5[1-5]/;
			break;
		case "visa":
			lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
			prefixRegExp = /^4/;
			break;
		case "amex":
			lengthIsValid = (cardNumberLength == 15);
			prefixRegExp = /^3(4|7)/;
			break;
		case "discover":
			lengthIsValid = (cardNumberLength == 16);
			prefixRegExp = /^6011/;
			break;
		default:
			prefixRegExp = /^$/;
		}

		prefixIsValid = prefixRegExp.test(cardNumbersOnly);
		isValid = prefixIsValid && lengthIsValid;
	}

	if (isValid) {
		var numberProduct;
		var numberProductDigitIndex;
		var checkSumTotal = 0;

		for (digitCounter = cardNumberLength - 1; 
			digitCounter >= 0; 
			digitCounter--)
		{
			checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
			digitCounter--;
			numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
			for (var productDigitCounter = 0;
				productDigitCounter < numberProduct.length; 
				productDigitCounter++)
			{
				checkSumTotal += 
				parseInt(numberProduct.charAt(productDigitCounter));
			}
		}

		isValid = (checkSumTotal % 10 == 0);
	}

	return isValid;
}