function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function validRequired(formField,fieldLabel)
{
	var result = true;
	
	if (formField.value == "")
	{
		alert('Please enter your "' + fieldLabel +'".');
		formField.focus();
		result = false;
	}
	
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}
   
  return result;

}

function validNum(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}


function validInt(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		var num = parseInt(formField.value,10);
 		if (isNaN(num))
 		{
 			alert('Please enter your "' + fieldLabel +'".');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}


function validDate(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		var elems = formField.value.split("/");
 		
 		result = (elems.length == 3); // should be three components
 		
 		if (result)
 		{
 			var month = parseInt(elems[0],10);
  			var day = parseInt(elems[1],10);
 			var year = parseInt(elems[2],10);
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && (day > 0) && (day < 32) &&
					 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
 		}
 		
  		if (!result)
 		{
 			alert('Please enter a date in the format MM/DD/YYYY for the "' + fieldLabel +'" field.');
			formField.focus();		
		}
	} 
	
	return result;
}

function confirmPassword(formField1,formField2)
{
	var result = true;
	
	if (formField1.value != formField2.value)
	{
		alert('The passwords don\'t match. Please confirm your password');
		formField2.focus();
		result = false;
	}
	return result;
}

function selectRequired(formField,fieldLabel)
{
	var result = true;

	if (formField==0)
      {
         alert('You must select a "'+fieldLabel+'".');
		 result = false;
      }
	return result;
}

function validatesignupForm(theForm)
{
	// Customize these calls for your form
	// Start ------->
		if (!validRequired(theForm.firstName,"First Name",true))
			return false;
		if (!validRequired(theForm.lastName,"Last Name",true))
			return false;
		if (!validEmail(theForm.email,"Email",true))
			return false;
		if (!validRequired(theForm.city,"City",true))
			return false;
		if (!selectRequired(document.register.province.selectedIndex,"Province/State"))
			return false;
		if (!selectRequired(document.register.country.selectedIndex,"Country"))
			return false;				
		if (!validRequired(theForm.theusername,"Username",true))
			return false;				
		if (!validRequired(theForm.thepassword,"Password",true))
			return false;
		if (!confirmPassword(theForm.thepassword,theForm.confirmpassword))
			return false;
		if (!validRequired(theForm.contacthandle,"Message Board Name",true))
			return false;									
//	if (!validDate(theForm.available,"Date Available",true))
//		return false;

//	if (!validNum(theForm.yearsexperience,"Years Experience",true))
//		return false;
	// <--------- End
	
	return true;
}

function validateRiskCalcForm(theForm) {
	if (!validRequired(theForm.entryPrice,"Entry Price",true))
		return false;	
	if (!validRequired(theForm.supportPrice,"Support Price",true))
		return false;	
	if (!validRequired(theForm.lossLimit,"Loss Limit",true))
		return false;
	return true;
}


// Copyright 2002 Bontrager Connection, LLC
// Credit Card Format Validator
// Version 1.0 completed April 28, 2002
// Programmer:  William Bontrager
// Website: http://willmaster.com

// what the alert box message shall say when the credit card is unknown and the number did not pass
Step1Message = "Credit card number is invalid.\nPlease try again.";

//what the alert box message shall say when the credit card is known and the number did not pass
Step2Message = "Credit card number is invalid.\nPlease try again.";

// what the alert box message shall say when the credit card is unknown and the number passed
Step3Message = "Credit card is not known.";

// enter "y" if displaying popup that credit card passed
DisplayAllOkayMessage = "";

////////////////////////////////////////
//    N O T E S :
//
// Three global variables are set when function Validate() is called.
// If appropriate, your application can consult these variables:
//
// Variable Name     Value
// ^^^^^^^^^^^^^     ^^^^^
// ccType          - The name of the credit card, if determinable. 
//                   Otherwise null.
// ccNumberOkay    - Digit 1 if the credit card number is of a valid 
//                   format. Otherwise digit 0.
// ccNumberChecked - The credit card number that was checked (all spaces 
//                   and non-digit characters stripped out). Example:
//                   CC # 1234-5678-901-234 is checked as 12345678901234
////////////////////////////////////////

ccType = '';
ccNumberOkay = 0;
ccNumberChecked = '';

function StripNonDigits(number) {
var Re = /\d+/g;
if(Re.lastIndex > 1) { Re.lastIndex = 0; }
var Array = Re.exec(number);
if(Re.lastIndex < 1) { return 'X'; }
var ss = Array.join();
while(Re.lastIndex > 0 && Re.lastIndex < number.length) {
	Array = Re.exec(number);
	if(Array) { ss += Array.join(); }
	}
return ss;
} // StripNonDigits()


function GetType(number) {
var len = number.length;
var Re = /^5[1-5]/;
	if(Re.lastIndex > 1) { Re.lastIndex = 0; }
		var Array = Re.exec(number);
			if(Array && len == 16) { return 'MasterCard'; }
Re = /^4/;
	if(Re.lastIndex > 1) { Re.lastIndex = 0; }
		Array = Re.exec(number);
			if(Array && (len == 13 || len == 16)) { return 'Visa'; }
Re = /^3[47]/;
	if(Re.lastIndex > 1) { Re.lastIndex = 0; }
		Array = Re.exec(number);
			if(Array && len == 15) { return 'American Express'; }
Re = /^(30[0-5]|3[68])/;
	if(Re.lastIndex > 1) { Re.lastIndex = 0; }
		Array = Re.exec(number);
			if(Array && len == 14) { return 'Diners Club'; }
Re = /^6011/;
	if(Re.lastIndex > 1) { Re.lastIndex = 0; }
		Array = Re.exec(number);
			if(Array && len == 14) { return 'Discover'; }
Re = /^(3|1800|2131)/;
	if(Re.lastIndex > 1) { Re.lastIndex = 0; }
		Array = Re.exec(number);
			if(Array && (len == 15 || len == 16)) { return 'JCB'; }
return '';
} // GetType()


function Reverse(number) {
var n = '';
for(i = number.length; i >= 0; i--) { n += number.substr(i,1); }
return n;
} // Reverse()


function AddedTogether(number) {
var n = 0;
for(i = 0; i < number.length; i++) {
	var s = number.substr(i,1);
	var si = parseInt(s,10);
	if(i % 2 > 0) {
		var ii = si * 2;
		if(ii < 10) { n += ii; }
		else {
			var ss = ' ' + ii;
			for(xi = 1; xi < ss.length; xi++) {
				var xs = ss.substr(xi,1);
				var xsi = parseInt(xs,10);
				n += xsi;
				} // for
			} // else
		} // if
	else { n += si; }
	} // for
return n;
} // AddedTogether()


function Mod10(n) {
var reversed = Reverse(n);
var total = AddedTogether(reversed);
if(total % 10 > 0) { return 0; }
return 1;
} // Mod10()


function Validate(n) {
ccNumberChecked = StripNonDigits(n);
if(ccNumberChecked == 'X') {
	alert('Please supply a credit card number.');
	return false;
	}
ccType = GetType(ccNumberChecked);
ccNumberOkay = Mod10(ccNumberChecked);
var fourth = '-- Credit Card --\n' + ccType + '\n' + ccNumberChecked;
if(     Step1Message.length > 0 && ccType.length < 2 && ccNumberOkay == 0) { alert(Step1Message); return false; }
else if(Step2Message.length > 0 && ccNumberOkay == 0                     ) { alert(Step2Message); return false;}
else if(Step3Message.length > 0 && ccType.length < 2                     ) { alert(Step3Message); return false;}
else if(DisplayAllOkayMessage == "y" || DisplayAllOkayMessage == "Y"     ) { alert(fourth);       }
return true;
}
