//------------------------------------------------------------------------------------------------
//	Contribution/Manage Account Forms Validation
//------------------------------------------------------------------------------------------------

function validateField(field)
 {
    if ((field.name == "fields[Dollar Amt]") && (field.value.length == 0 || field.value < 5 ))
    {
		alert("Please enter a dollar amount GT 4.");
        field.focus();
    }
	if ((field.name == "fields[Amount 1]") && (field.value == "0" || field.value == "1" || field.value == "2" || field.value == "3" || field.value == "4"))
    {
		alert("Please enter a dollar amount GT 4.");
        field.focus();
    }
    if ((field.name == "fields[Sponsor Number]" || field.name == "fields[Member Number]") && (field.value == "0" || field.value == "999999"))
    {
		alert("Please enter a valid sponsor/member number.");
        field.focus();
    }
	if (field.name == "fields[Routing Number]" && (field.value == 0 ||  field.value.length != 9))
    {
		alert("Please enter a 9-digit routing number.");
        field.focus();
    }
}
  

// onKeyUp - allow entry of numeric number only in the field
function validateNumericOnly(field)
{
    var valid		= "0123456789";
    var errors		= false;
    var temp		= "";
	var newString	= "";

    for (var i=0; i<field.value.length; i++)
    {
		temp = "" + field.value.substring(i, i+1);
		
		if (valid.indexOf(temp) == "-1")
		{
			errors = true;
		}

		else
		{
			newString += temp;
		}
	}

	if (errors == true)
	{
		field.value = newString;
		return;
	}
}

// onKeyUp - allow entry of numeric number and dashes only in a field
//         - used for sponsored child number fields and phone number fields
function validateNumericDash(field)
{
    var valid		= "0123456789-";
    var errors		= false;
    var temp		= "";
	var newString	= "";

    for (var i=0; i<field.value.length; i++)
    {
		temp = "" + field.value.substring(i, i+1);
		
		if (valid.indexOf(temp) == "-1")
		{
			errors = true;
		}

		else
		{
			newString += temp;
		}
	}

	if (errors == true)
	{
		field.value = newString;
		return;
	}
}

// onKeyUp - allow entry of numeric number and slashes / only in a field - used for date fields
function validateNumericSlash(field)
{
    var valid		= "0123456789/";
    var errors		= false;
    var temp		= "";
	var newString	= "";

    for (var i=0; i<field.value.length; i++)
    {
		temp = "" + field.value.substring(i, i+1);
		
		if (valid.indexOf(temp) == "-1")
		{
			errors = true;
		}

		else
		{
			newString += temp;
		}
	}

	if (errors == true)
	{
		field.value = newString;
		return;
	}
}

//------------------------------------------------------------------------------------------------
// verify the credit card number/type and check digit is valid
//------------------------------------------------------------------------------------------------
function validateCCnum(ccnbr,ccname)
{
	var result = true;
	var firstdig = ccnbr.value.substring(0,1);
	var seconddig = ccnbr.value.substring(1,2);
	var first4digs = ccnbr.value.substring(0,4);
	var cardName = "";
	var cardSize = "";
	var cardBegin = "";	
	var cardLen = ccnbr.value.length;

	switch (ccname.value)
	{
		case "V":
			result = (cardLen == 16) && (firstdig == "4");
			cardName = "Visa";
			cardSize = "16";
			cardBegin = "4";
			break;
		case "D":
			result = (cardLen == 16  && first4digs == "6011");
			cardName = "Discover";
			cardSize = "16";
			cardBegin = "6011";	
			break;
		case "AE":
			var validNums = "47";
			result = (cardLen == 15  && firstdig == "3") && (validNums.indexOf(seconddig) >= 0);
			cardName = "American Express";
			cardSize = "15";
			cardBegin = "34 or 37";
			break;
		case "MC":
			var validNums = "12345";
			result = (cardLen == 16  && firstdig == "5") && (validNums.indexOf(seconddig) >= 0);
			cardName = "MasterCard";
			cardSize = "16";
			cardBegin = "51, 52, 53, 54, or 55";
			break;
		case "DC":
			var validNums = "068";
			result = (cardLen == 14  && firstdig == "3") && (validNums.indexOf(seconddig) >= 0)
			cardName = "Diners Club";
			cardSize = "14";
			cardBegin = "30, 36, or 38";
			break;
	}
	if (!result)
	{
		alert("Please correct your credit card number.\nCard number or length is incorrect for type selected.\n" + cardName + " must be " + cardSize + " digits and begin with " + cardBegin + ".");
		ccname.focus();
	}
	else
	{
		var ckDigit = ccnbr.value.substr(cardLen - 1);
		var sum = parseInt(ckDigit);
		var x = 2;

		for (i = 1; i < cardLen; i++ )
		{
			var digit = ccnbr.value.substr(cardLen - i - 1, 1);
			if ((x % 2) != 0)
				var tproduct = parseInt(digit);
				else 
					tproduct = parseInt(digit) * 2;
					if (tproduct >= 10)
						sum += (tproduct % 10) + 1;
		  			else
						sum += tproduct;
				x++;
		}
		if ((sum % 10) != 0)
		{
			alert("Please enter a valid credit card number.");
			ccnbr.focus();
			ccnbr.select();
		}
	}
	
}

//------------------------------------------------------------------------------------------------
// is the cc expiration month/year valid 
//------------------------------------------------------------------------------------------------
function validateCCdate(ccmo,ccyr)
{	  
	var month = parseInt(ccmo.value);
	var year = parseInt(ccyr.value) + 2000;

	var now = new Date();
	var nowMonth = now.getMonth();
	var nowYear = now.getFullYear();

	var expired = (nowYear > year || ((nowYear == year) && (nowMonth >= month)));
	if (expired)
	{
		alert ("The date for the credit card has expired.");
		ccmo.focus();
	}
}

function validateCCexpdate(ccmo,ccyr)
{	  
	var month = parseInt(ccmo.value);
	var year = parseInt(ccyr.value);

	var now = new Date();
	var nowMonth = now.getMonth();
	var nowYear = now.getFullYear();

	var expired = (nowYear > year || ((nowYear == year) && (nowMonth >= month)));
	if (expired)
	{
		alert ("The date for the credit card has expired.");
		ccmo.focus();
	}
}

//------------------------------------------------------------------------------------------------
//	Test for valid email format
//------------------------------------------------------------------------------------------------
function validateEmail(field)
{
	if ( field.value.length != 0 )
	{
		if ( !IsEmail( field.value ) )
		{
		alert("Email format is invalid.");
		field.focus();
		}
	}
}
function IsEmail( fieldvalue )
{
// Note: The next expression must be all on one line...
//       allow no spaces, linefeeds, or carriage returns!
	return fieldvalue.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\.int)|(\.name)|(\.info)|(\..{2,2}))$)\b/gi);
}

//------------------------------------------------------------------------------------------------
//	Test for valid postal/zip code if USA
//------------------------------------------------------------------------------------------------
function validatePostal(postal,ctry)
{
	if (( postal.value.length == 0 || postal.value.length != 5 || postal.value == 0 ) && ( ctry.value == "USA" || ctry.value == "US" || ctry.value == "United States" || ctry.value == "U.S.A." || ctry.value == "" ))
	{
		validateZip(postal)
	}  
}  

function validateZip(field)
{
    var valid = "0123456789"
    var ok = "yes";
    var temp;
    for (var i=0; i<field.value.length; i++)
    {
      temp = "" + field.value.substring(i, i+1);
      if (valid.indexOf(temp) == "-1") ok = "no";
    }
    if (ok == "no")
    {
      alert("Please enter numbers only.");
      field.focus();
      field.select();
    }
    else
	{	
		if ((field.name == "fields[Zip]" || field.name == "fields[Postal Code]" ) && (field.value == 0 || field.value.length != 5))
		{
			alert("Please enter a 5 digit zip code.");
			field.focus();
			field.select();
		}
	}
}

function validateStPCCtry(st,postal,ctry)
{
	if ( ctry.value == "" )	
	{
      alert("Please select a country");
      ctry.focus();
	}  

	if (( ctry.value == "USA" ) && ( postal.value.length == 0 || postal.value.length != 5 || postal.value == 0 || st.value == "" ))
	{
	  alert("Please enter a valid USA state and 5-digit postal code.");
      st.focus();
	} 
	
	if (( ctry.value == "CANADA" ) && ( postal.value.length == 0 ))
	{
	  alert("Please enter a postal code.");
      postal.focus();
      postal.select();
	} 
}

//------------------------------------------------------------------------------------------------
//	Test for amt per month > $1 for projects
//------------------------------------------------------------------------------------------------
function validateFreq(amt,freq)
{
	if (freq.value == 4 && amt.value < 12)
	{
		alert("Please enter an amount of 12 or greater for annual payments.");
		amt.focus();
		amt.select();
	}
	if (freq.value == 3 && amt.value < 6)
	{
		alert("Please enter an amount of 6 or greater for semi-annual payments.");
		amt.focus();
		amt.select();
	}
	if (freq.value == 2 && amt.value < 3)
	{
		alert("Please enter an amount of 3 or greater for quarterly payments.");
		amt.focus();
		amt.select();
	}
	if (freq.value == 1 && amt.value < 5)
	{
		alert("Please enter a dollar amount of 5 or more for monthly payments.");
		amt.focus();
		amt.select();
	}
}


//------------------------------------------------------------------------------------------------
//	If source is current sponsor then a member number must be entered on form
//------------------------------------------------------------------------------------------------
function validateSrc(src,member)
{
	if (src.value == "cs" && member.value.length == 0)
	{
		alert("You seleted current donor/sponsor but did not enter your member number.");
		member.focus();
		member.select();
	}  
}
