

function validate() {
	today = new Date();
	curMonth = today.getMonth()+1;
	curYear	 = today.getYear();

    var ccardNum = document.signupForm.CardNumber.value;
    var ccardName = document.signupForm.CardType.options[document.signupForm.CardType.selectedIndex].value;
    if (ccardNum.search(/\S/) < 0) {
	alert("Please enter your credit card number.");
	return false;
    }
    else if (ccardNum.search(/\D/) >= 0) {
	alert("Please enter a valid credit card number.");
	return false;
    }
    else if (!validateCCard(ccardName, ccardNum)) {
	alert("Please enter a valid credit card number.");
	return false;
    }
    
    if (document.signupForm.ExpireMonth.selectedIndex == 0 || document.signupForm.ExpireYear.selectedIndex == 0) {
	alert("Please enter you credit card expiration date.");
	return false;
    }
    else {
	var month = parseInt(document.signupForm.ExpireMonth.options[document.signupForm.ExpireMonth.selectedIndex].value, 10);
	var year = parseInt(document.signupForm.ExpireYear.options[document.signupForm.ExpireYear.selectedIndex].text, 10);
	if (year < curYear || (year == curYear && month < curMonth)) {
	    alert("This credit card has expired.");
	    return false;
	}
    }

    return true;
}

function validateCCard(card, ccnumber) {
    var type = card;
    var number = ccnumber;
    var valid = true;
    
    if (type == "American Express") {
	if (number.length != 15)
	    valid = false;
	else if (number.search(/^3[47]/) < 0)
	    valid = false;
    }
    else if (type == "Discover") {
	if (number.length != 16)
	    valid = false;
	else if (number.search(/^6011/) < 0)
	    valid = false;
    }
    else if (type == "Mastercard") {
	if (number.length != 16)
	    valid = false;
	else if (number.search(/^5[1-5]/) < 0)
	    valid = false;
    }
    else if (type == "Visa") {
        if (number.length != 13 && number.length != 16)
	    valid = false;
	else if (number.search(/^4/) < 0)
	    valid = false;
    }
    else {
        valid = false;
    }

    if (valid)
        valid = mod10check(number);

    return valid;
}

function mod10check(number) {
    var evenSum=0;
    var oddSum=0;
    for (i = (number.length-1); i >= 0; i--) {
	oddSum += parseInt(number.substr(i,1));
	i--;
	if (i>=0) {
	    var even=parseInt(number.substr(i,1));
	    even = even * 2;
	    if (even >= 10) {
		even = "" + even;
		even = parseInt(even.substr(0,1)) + parseInt(even.substr(1,1));
	    }
	    evenSum += even;
	}
    }
    var sum = oddSum + evenSum;
    
    if (sum % 10 == 0)
        return true;
    else
        return false;
}


////
function checkFile() {
    if (!validate()) {
	return false;
    }

   var pattern = /\s*\w+@[^\.]+\.[^\.]+(\.[^\.])*\s*/;
   var letters = /[a-zA-Z]/;
   var numbers = /[0-9]/;
   legalChars = "~0123456789.-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_@+";
   alphaNums = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
   errorMsg = "";

	if (document.signupForm.FirstName.value.length < 2)
		errorMsg += "\nFirst Name must be at least 2 characters";
	if (document.signupForm.LastName.value.length < 2)
		errorMsg += "\nLast Name must be at least 2 characters";
	if (document.signupForm.Address.value.length < 3)
		errorMsg += "\nAddress must be at least 3 characters";
	if (document.signupForm.PhoneHome.value.length < 10)
		errorMsg += "\nPhone number must be at least 10 numbers";
	if (document.signupForm.EMail.value.length < 7)
		errorMsg += "\nEmail address must be at least 7 characters";

	//Validate Email against pattern match
	if (document.signupForm.EMail.value != "") {
	    if(!pattern.test(document.signupForm.EMail.value)) {
			errorMsg += "\nInvalid E-Mail Address."
	    }
	}
	//This enhances the previous EMail check. This checks for legal values and returns illegal values
	if (document.signupForm.EMail.value != "" && document.signupForm.EMail.value.length > 1) {
	    for(x=0; x < document.signupForm.EMail.value.length; x++) {
		if (legalChars.indexOf(document.signupForm.EMail.value.substring(x,x+1)) < 0)
		    errorMsg += "\n" + "Illegal character '"+document.signupForm.EMail.value.substring(x,x+1)+"' at position " +(x+1)+ " in E-Mail Address.";
	    }
	}

	//Validate Donation
	checkTotal();

//	if (!document.signupForm.Release.checked)
//	    errorMsg += "\nPlease select the checkbox indicating you have read the Release & Waiver statement";


	//FINAL CHECK FOR ERROR MESSAGES
	if (errorMsg.length > 0) {
		alert (errorMsg);
		return false;
	}
////document.signupForm.CardNumber.value = "9999888844441111"
//return false;
return true;
//	return (returnVal);

    }


//CHECK TOTALS
function callCheckTotal() {
	errorMsg = "";
	checkTotal();
	if (errorMsg.length > 0) alert (errorMsg);
}

function checkTotal() {
			radioChecked=false;
	for(i=0; i<	document.signupForm.Donation.length; i++) {
		if (document.signupForm.Donation[i].checked) {
			radioChecked=true;
			break;
		}
	}
	if (!radioChecked) {
		if (document.signupForm.Donation[document.signupForm.Donation.length-1].value.length <= 0) {
			errorMsg += "\nPlease select a Donation value"
		}
	}

//	if (document.signupForm.Donation.value.length > 0) {	//If Donation entered
//	    if (!isNaN(vDonation))
//	    	errorMsg += "\nDonation is: " + vDonation;	//Else not a number
//	    else	errorMsg += "\nDonation must be a number";	//Else not a number
//	}
}

