// JavaScript Document
// Email Validation Javascript
// copyright 23rd March 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function validateEmail(addr,man,db) {
	if (addr == '' && man) {
	   if (db) alert('email address is mandatory');
	   return false;
	}
	if (addr == '') return true;
	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	for (i=0; i<invalidChars.length; i++) {
	   if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
		  if (db) alert('email address contains invalid characters');
		  return false;
	   }
	}
	for (i=0; i<addr.length; i++) {
	   if (addr.charCodeAt(i)>127) {
		  if (db) alert("email address contains non ascii characters.");
		  return false;
	   }
	}

	var atPos = addr.indexOf('@',0);
	if (atPos == -1) {
	   if (db) alert('email address must contain an @');
	   return false;
	}
	if (atPos == 0) {
	   if (db) alert('email address must not start with @');
	   return false;
	}
	if (addr.indexOf('@', atPos + 1) > - 1) {
	   if (db) alert('email address must contain only one @');
	   return false;
	}
	if (addr.indexOf('.', atPos) == -1) {
	   if (db) alert('email address must contain a period in the domain name');
	   return false;
	}
	if (addr.indexOf('@.',0) != -1) {
	   if (db) alert('period must not immediately follow @ in email address');
	   return false;
	}
	if (addr.indexOf('.@',0) != -1){
	   if (db) alert('period must not immediately precede @ in email address');
	   return false;
	}
	if (addr.indexOf('..',0) != -1) {
	   if (db) alert('two periods must not be adjacent in email address');
	   return false;
	}
	var suffix = addr.substring(addr.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
	   if (db) alert('invalid primary domain in email address');
	   return false;
	}
	return true;
}

function isZip(s) {
	// Check for correct zip code
	reZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
	
	if (!reZip.test(s)) {
		return false;
	}
	return true;
}

function isPhoneNumber(str){
  var re = /^\(?[2-9]\d{2}[\)\.-]?\s?\d{3}[\s\.-]?\d{4}$/
  return re.test(str);
}

function anyRadioChecked(radioBtn) {
	for(i = radioBtn.length - 1; i > -1; i--) {
		if(radioBtn[i].checked) {
			return true;
		}
	}
	return false;
}

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;
		
		switch(cardType) {
			case "MasterCard":
			isValid = (cardNumberLength == 16);
			break;
			
			case "Visa":
			isValid = (cardNumberLength == 16 || cardNumberLength == 13);
			break;
			
			case "American Express":
			isValid = (cardNumberLength == 15);
			break;
			
			case "Discover":
			isValid = (cardNumberLength == 16);
			break;
			
			default:
			prefixRegExp = /^$/;
			alert("Card type not found");
		}
		
	}
	
	return isValid;
}

function isValidCVN(CVNNum) {
	var cvnEx = /^\d{3}\d?$/;
	return cvnEx.test(CVNNum);
}

// Email Validation Javascript
// copyright 23rd March 2003, by Stephen Chapman, Felgall Pty Ltd

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function isValidEmail(addr,man,db) {
	if (addr == '' && man) {
	   if (db) alert('email address is mandatory');
	   return false;
	}
	if (addr == '') return true;
	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	for (i=0; i<invalidChars.length; i++) {
	   if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
		  if (db) alert('email address contains invalid characters');
		  return false;
	   }
	}
	for (i=0; i<addr.length; i++) {
	   if (addr.charCodeAt(i)>127) {
		  if (db) alert("email address contains non ascii characters.");
		  return false;
	   }
	}

	var atPos = addr.indexOf('@',0);
	if (atPos == -1) {
	   if (db) alert('email address must contain an @');
	   return false;
	}
	if (atPos == 0) {
	   if (db) alert('email address must not start with @');
	   return false;
	}
	if (addr.indexOf('@', atPos + 1) > - 1) {
	   if (db) alert('email address must contain only one @');
	   return false;
	}
	if (addr.indexOf('.', atPos) == -1) {
	   if (db) alert('email address must contain a period in the domain name');
	   return false;
	}
	if (addr.indexOf('@.',0) != -1) {
	   if (db) alert('period must not immediately follow @ in email address');
	   return false;
	}
	if (addr.indexOf('.@',0) != -1){
	   if (db) alert('period must not immediately precede @ in email address');
	   return false;
	}
	if (addr.indexOf('..',0) != -1) {
	   if (db) alert('two periods must not be adjacent in email address');
	   return false;
	}
	var suffix = addr.substring(addr.lastIndexOf('.')+1).toLowerCase();
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
	   if (db) alert('invalid primary domain in email address');
	   return false;
	}
	return true;
}
                 
function valFriendForm(form) {
	var canSubmit = true;
	var errorMsg = "Please enter valid information for:\n";

	if (form.yourname.value == "") {
		errorMsg += 'Your Full Name\n';
		canSubmit = false;
	}
	if (!isValidEmail(form.youremail.value,1,0)) {
		errorMsg += 'Your E-mail Address\n';
		canSubmit = false;
	}
	if (form.name.value == "") {
		errorMsg += "Your Friend's Full Name\n";
		canSubmit = false;
	}
	if (!isValidEmail(form.emailaddress.value,1,0)) {
		errorMsg += "Your Friend's E-mail Address\n";
		canSubmit = false;
	}
	
	if (!canSubmit)
		alert(errorMsg);
	
	return canSubmit;
}

function valCancelForm(form) {
	var canSubmit = true;
	var errorMsg = "Please enter valid information for:\n";

	if(form.subscriber_name.value == "") {
		errorMsg += "Subscriber (User) Name\n";
		canSubmit = false;
	}
	if(form.subscriber_address.value == "") {
		errorMsg += "Physical Address\n";
		canSubmit = false;
	}
	if(form.subscriber_city.value == "") {
		errorMsg += "City\n";
		canSubmit = false;
	}
	if(form.subscriber_state.value == "") {
		errorMsg += "State\n";
		canSubmit = false;
	}
	if(!isZip(form.subscriber_zipcode.value)) {
		errorMsg += "Zip Code\n";
		canSubmit = false;
	}		
	if(!isPhoneNumber(form.subscriber_phone.value)) {
		errorMsg += "Telephone Number\n";
		canSubmit = false;
	}
	if(!form.accept_agreement.checked) {
		errorMsg += "Agreement Acceptance\n";
		canSubmit = false;
	}
	if(form.accepted_name.value == "") {
		errorMsg += "Agreement Acceptance Name\n";
		canSubmit = false;
	}
	if(form.accepted_date.value = "") {
		errorMsg += "Agreement Acceptance Date\n";
		canSubmit = false;
	}
	if(!isPhoneNumber(form.accepted_phone.value)) {
		errorMsg += "Agreement Acceptance Phone Number\n";
		canSubmit = false;
	}
	if(!isValidEmail(form.accepted_email.value)) {
		errorMsg += "Agreement Acceptance Email Address\n";
		canSubmit = false;
	}
	

	if(!canSubmit)
		alert(errorMsg);
	
	return canSubmit;
}

function valForm(form) {
	var canSubmit = true;
	var errorMsg = "Please enter valid information for:\n";

	if(form.subscriber_name.value == "") {
		errorMsg += "Subscriber (User) Name\n";
		canSubmit = false;
	}
	if(form.subscriber_address.value == "") {
		errorMsg += "Physical Address\n";
		canSubmit = false;
	}
	if(form.subscriber_city.value == "") {
		errorMsg += "City\n";
		canSubmit = false;
	}
	if(form.subscriber_state.value == "") {
		errorMsg += "State\n";
		canSubmit = false;
	}
	if(!isZip(form.subscriber_zipcode.value)) {
		errorMsg += "Zip Code\n";
		canSubmit = false;
	}		
	if(!isPhoneNumber(form.subscriber_phone.value)) {
		errorMsg += "Telephone Number\n";
		canSubmit = false;
	}
	if(!anyRadioChecked(form.program_selected)) {
		errorMsg += "Select a Program\n";
		canSubmit = false;
	}
	if(form.activation_card_tpe.value == "Not Selected") {
		errorMsg += "Credit Card\n";
		canSubmit = false;
	}
	if(form.activation_card_name.value == "") {
		errorMsg += "Name On Card\n";
		canSubmit = false;
	}
	if(form.activation_card_tpe.value != "Not Selected") {
		if(!isValidCreditCardNumber(form.activation_card_number.value, form.activation_card_tpe.value)) {
			errorMsg += "Credit Card Number\n";
			canSubmit = false;
		}
	}
	if(form.Activation_card_expiration.value == "Not Selected") {
		errorMsg += "Credit Card Expiration Date\n";
		canSubmit = false;
	}
	if(!isValidCVN(form.activation_card_CVN.value)) {
		errorMsg += "CVN Number\n";
		canSubmit = false;
	}
	if(!anyRadioChecked(form.bill_to_)) {
		errorMsg += "Bill to\n";
		canSubmit = false;
	}
	if(!anyRadioChecked(form.delivery_instructions)) {
		errorMsg += "Deliver To\n";
		canSubmit = false;
	}
	if(!form.accept_agreement.checked) {
		errorMsg += "Agreement Acceptance\n";
		canSubmit = false;
	}
	if(form.accepted_name.value == "") {
		errorMsg += "Agreement Acceptance Name\n";
		canSubmit = false;
	}
	if(form.accepted_date.value == "") {
		errorMsg += "Agreement Acceptance Date\n";
		canSubmit = false;
	}
	if(!isPhoneNumber(form.accepted_phone.value)) {
		errorMsg += "Agreement Acceptance Phone Number\n";
		canSubmit = false;
	}
	if(!isValidEmail(form.accepted_email.value,1,0)) {
		errorMsg += "Agreement Acceptance Email Address\n";
		canSubmit = false;
	}
	

	if(!canSubmit)
		alert(errorMsg);
	
	return canSubmit;
}
