//this script will use the Luhn algorithm to determine whether or not
//a credit card number is valid

function validateCreditCard(type, ccnumber) {

	
	//strip non numeric characters
	var number = ccnumber.replace(/[^0-9]/g, ''); 	
	
	//card specific
	switch (type) {
		case 'visa':
			if (number[0] != 4) {
				return false;
			}
			if (number.length != 16 && number.length != 13) {
				return false;
			}
			break;
		case 'amex':
			var prefix = Number(number.substr(0,2));
			if (prefix != 37 && prefix != 34) {
				return false;
			}
			if (number.length != 15) {
				return false;
			}
			break;
		case 'mastercard':
			var prefix =  Number(number.substr(0,2));
			if (prefix >51 || prefix < 55) {
				return false;
			}
			if (number.length != 16) {
				return false;
			}
			break;
	}
	
	
	//split into an array
	var array = number.split('');
	
	//reverse it
	array.reverse();
	
	//add up all the digits with the even positioned digits doubled
	var sum = 0;
	for (var i=0; i<array.length; i++) {
		if (i%2 != 0) {
			var tmp = Number(array[i] *2);
			tmpStr = String(tmp);
			for (var j=0; j< tmpStr.length; j++) {
				sum += Number(tmpStr.charAt(j));
			}
		} else {
			sum += Number(array[i]);
		}
	}
	return sum !=0 && sum %10 ==0;
}

function validateCSC(type, value){
	switch(type) {
		case 'amex':
			return /^\d{4}$/.test(value);
		//Mastercard, Visa
		default:
            return /^\d{3}$/.test(value);

    }

}

