// JavaScript Document
//Global variables
	var sMode="PAY";
	
//functions

//returns the mask
function getMask(maskType)
{
	switch(maskType)
	{
		case 'S': return "^\\D+$"; break; //String //any character + not empty 
		case 'C': return "^\\d+$|^\\d+[.]\\d{1,2}$"; break; //money, currency //digits (ddd.dd) (ddd) (d.dd) (ddd.d) + not empty
		case 'P': return "^\\d{3}-\\d{3}-\\d{4}$|^\\(?\\d{3}[) ]\\s?\\d{3}[- ]\\d{4}$"; break; //phone number 301-444-5555 or (301) 444-5555
		case 'E': return "^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$"; break;//email
		case 'D': return "^\\d{2}/\\d{2}/\\d{4}$"; break; //date MM/DD/YYYY +not empty
		case 'N': return "^[0-9]+$"; break; //number //any digit + not empty
		case 'Y': return "^\\d{2}$"; break; //year //2 digits of year (YY)
		case 'Z': return "^\\d{5}$|^\\d{5}-\\d{4}$"; break; //zip //99999 or 99999-9999 and not empty
	}
}

//checks the form element
function ElementValidated(FormElement, MaskType)
{
	if (typeof FormElement.type == 'undefined') {var elType = FormElement[0].type;} 
	else {var elType = FormElement.type;}	
	
	switch (elType) 
	{
		case "text":
		case "textarea":
		case "password":	
			var ElementValue=FormElement.value;
			if (MaskType=="")
			{
				if (ElementValue=="") return false;
			}
			else
			{
				var Mask = new RegExp(getMask(MaskType));
				if (!Mask.test(ElementValue)) return false;
			}
			break;
		case "radio":
		case "checkbox":
			for (var i = 0; i < FormElement.length; i++)
			{
				if (FormElement[i].checked==true) return true; 
			}
			return false;
			break;
		case "select-one":
			if (FormElement.selectedIndex==0) return false;			
			break;
	}
	return true;
}

//checks the list of form elements
function isFormValidated(form, oRequired, isResultList)
{
	var ListRes="";
	for (element_name in oRequired) 
	{
		if ( ((oRequired[element_name][1])=="") || ((oRequired[element_name][1])==sMode) )
		{
			var el = form[element_name];
			
			if (typeof el =='undefined') 
			{
				noFieldError = new Error ("The field "+element_name+" does not exist");	
				throw noFieldError;
				return false;
			}
			
			var DoCheck = true;
			if ((oRequired[element_name][2]) != "")
			{				
				if (form[oRequired[element_name][2]].value==oRequired[element_name][3])
					{DoCheck = true}
				else
					{DoCheck = false}
			}	
			
			if (DoCheck)
			{				
				if (!ElementValidated(el, oRequired[element_name][0]))
				{
					if (isResultList)
					{
						if (ListRes==""){ListRes=oRequired[element_name][4];}
						else {ListRes=ListRes+","+oRequired[element_name][4];}
					}
					else
					{
						alert(oRequired[element_name][4]);
						if (typeof el.type != 'undefined') el.focus();
						return false;		
					}
				}	
			}				
		}
	}	
	if (isResultList) {return ListRes;}
	else {return true;}	
}

//checks the credit card number
function CCNumValidate(form, mode, isResultList, Msg)
{
	
	if ( (mode=="") || (mode==sMode) )
	{
		for (var i = 0; i < form.PAYMENTTYPECD.length; i++)
		{
			if (form.PAYMENTTYPECD[i].checked==true) 
				var cardtype = form.PAYMENTTYPECD[i].value;
		}
        if (verify_ccard(form.PAYMENTREFNUM.value, cardtype) != 0)
  		{	
			if (isResultList) return Msg;
			else
			{
				alert(Msg)
		  		form.PAYMENTREFNUM.focus();
  				return false;
		   	}
		}
	}
	
	if (isResultList) {return "";}
	else {return true;}	
}

function verify_ccard(inNumber, type)
{// returns 0 if valid, positive number if invalid.
        var total = 1*0;
        var tmp = 1*0;

        var number = "";

        // make sure there are only numbers in the string...
        for(i = 0; i < inNumber.length; i++)
        {
		if(inNumber.charAt(i) >= "0" && inNumber.charAt(i) <= "9")
                {
                        number = number + inNumber.charAt(i);
                }
				else //commeted out if dashes and spaces are allowed
				{
					return 200; //character symbol 
				}						
        }

        if(number.length < 13) return 10; // too short for anything

        first = "" + number.charAt(0);
        second = "" + number.charAt(1);
        third = "" + number.charAt(2);
        firstTwo = first + second;
        firstFour = firstTwo + third + number.charAt(3);

        if(type == "MC")
        {
                if(first != "5" || second < "1" || second > "5")
                        return 11;// invalid Mastercard prefix
                if(number.length != 16)
                        return 21;
        }
        else if(type == "VISA")
        {
                if(first != "4")
                        return 12;// invalid Visa prefix
                if(number.length != 13 && number.length != 16)
                        return 22;
        }
        else if(type == "AMEX")
        {
                if(first != "3" || (second != "4" && second != "7"))
                        return 13;// invalid American Express Prefix
                if(number.length != 15) 
                        return 23;
        }
        else if(type == "DISC")
        {
                        if(firstFour != "6011")
                                return 14;// invalid prefix.
                        if(number.length != 16)
                                return 24;
        }
        // now check the credit card suffix and length vs. the type

    
         // do the check sum
        for(loc = number.length - 2; loc >= 0; loc -= 2)
        {
                total += 1 * number.charAt(loc +1);
                tmp = number.charAt(loc) * 2;
		if(tmp > 9) total += 1;
		total += tmp%10;
        }
	if(number.length % 2 > 0)
	total += 1 * number.charAt(0);


        return (total % 10);
}

//checks the password confirmation
function isPSWConfirm(form, mode, isResultList, Msg)
{
	var confirmpsd1 = form.WEBUSERPASSWORD.value;
	var confirmpsd2 = form.WEBUSERPASSWORD2.value;
	if (mode==sMode)
	{
		if (confirmpsd2 != confirmpsd1)
  		{
  			if (isResultList) return Msg;
			else
			{
				alert(Msg)
		  		form.WEBUSERPASSWORD2.focus();
  				return false;
		   	}
		}
	}
	
	if (isResultList) {return "";}
	else {return true;}	
}
