	var fmValuesString = new String("");
	var fmValuesAlertString = new String("");
	var fmEmailString = new String("");
	var fmPhoneString = new String("");
	var fmLengthString = new String("");
	var fmLengthCheck = new String("");
	var fmLengthAlertString = new String("");
	var fmCCItems = new String("");
	
	function moveOnMax(field,nextFieldID){
		if(field.value.length >= field.maxLength)
			document.getElementById(nextFieldID).focus();
	}
	
	function isObject(v){
		return (typeof v) == "object";
	}
	function ValidatePhone(){
	
		var bError = false;
		var LenCounter;
		var ReplaceCounter;
		var LenToCheck = fmPhoneString.split("~");
		var ReplaceArray = new Array("/-/g","(",")","."," ");
		var PhoneString = new String("");
		var TempString = new String("");
		
		for(LenCounter = 0; LenCounter < LenToCheck.length; LenCounter ++){
			if(isObject(document.forms[0][LenToCheck[LenCounter]])){
				PhoneString = document.forms[0][LenToCheck[LenCounter]].value;
				
				TempString = PhoneString.replace(/-/g,"");
				PhoneString = TempString
	
				TempString = PhoneString.replace(/\./g,"");
				PhoneString = TempString
	
				TempString = PhoneString.replace(/\(/g,"");
				PhoneString = TempString
	
				TempString = PhoneString.replace(/\x29/g,"");
				PhoneString = TempString
	
				TempString = PhoneString.replace(/\s+/g,"");
				PhoneString = TempString
	
				//alert(PhoneString.replace(ReplaceArray[ReplaceCounter],""));
				

				if((PhoneString.length < 10) || (PhoneString.slice(0,1) == "1") || (PhoneString.slice(0,1) == "0") || (PhoneString.slice(0,3) == "555") || (PhoneString.slice(0,3) == "456") || (PhoneString.slice(0,3) == "789")){
					bError = true;
					alert("Please make sure Phone number is valid");
					LenCounter = LenToCheck.length + 10;
				}
			}
		}
		
		return(bError);
		
	}
	function ValidateFieldLengths(){
		var bError = false;
		var CheckCounter;
		
		// Field lengths array
		var ValuesToCheck = fmLengthString.split("~");
		var ValueLengths = fmLengthCheck.split("~");
		var NamesToShow = fmLengthAlertString.split("~");
		
		for(CheckCounter = 0; CheckCounter < ValuesToCheck.length; CheckCounter ++){
			if(isObject(document.forms[0][ValuesToCheck[CheckCounter]])){
				if(document.forms[0][ValuesToCheck[CheckCounter]].value.length < ValueLengths[CheckCounter]){
					bError = true;
					alert("Please make sure the field: " + NamesToShow[CheckCounter] + " is correctly entered.");
					CheckCounter = ValuesToCheck.length + 10;
				}
			}
		}
		
		return(bError);
	}
	function CCMod10(ccNumb) {
        var valid 	= "0123456789"
        var len 	= ccNumb.length;
        var bNum 	= true;
        var iCCN 	= ccNumb;
        var sCCN 	= ccNumb.toString();
        var iCCN;
        var iTotal 	= 0;
        var bResult = false;
        var digit;
        var temp;
	        iCCN = sCCN.replace (/^\s+|\s+$/g,'');	// strip spaces
            //alert(iCCN);
        for (var j=0; j<len; j++) {
        temp = "" + iCCN.substring(j, j+1);
        if (valid.indexOf(temp) == "-1") bNum = false;
        }
        if(!bNum){alert("Not a Number");}
            iCCN = parseInt(iCCN);
        	
        if(len == 0){ /* nothing, field is blank */ 
	        bResult = true;
        }else{
	        if(len >= 15){		//15 or 16 for Amex or V/MC
		        for(var i=len;i>0;i--){
		        digit = "digit" + i;
		        //alert(digit);
        		
			        calc = parseInt(iCCN) % 10;	//right most digit
			        calc = parseInt(calc);
			        //alert(calc);
			        iTotal += calc;		//parseInt(cardnum.charAt(count))i:\t" + calc.toString() + " x 2 = " + (calc *2) +" : " + calc2 + "\n";
			        // commented out below which wrote NONALTERED digit to page for demo only.
			        //document.form1.textfield.value += "" + i + ":\t" + calc.toString() + " x 1 = " + calc + "\n";
        			
			        i--;
		        digit = "digit" + i;
		        //alert(digit);
        		
			        iCCN = iCCN / 10; 	// subtracts right most digit from ccNum
			        calc = parseInt(iCCN) % 10 ;	// step 1 double every other digit
			         //alert( iCCN + " " + calc);
			         calc2 = calc *2;
        			
			        switch(calc2){
				        case 10: calc2 = 1; break;	//5*2=10 & 1+0 = 1
				        case 12: calc2 = 3; break;	//6*2=12 & 1+2 = 3
				        case 14: calc2 = 5; break;	//7*2=14 & 1+4 = 5
				        case 16: calc2 = 7; break;	//8*2=16 & 1+6 = 7
				        case 18: calc2 = 9; break;	//9*2=18 & 1+8 = 9
				        default: calc2 = calc2; 		//4*2= 8 &   8 = 8  -same for all lower numbers
			        }
			        iCCN = iCCN / 10; 	// subtracts right most digit from ccNum
			        iTotal += calc2;
			        // commented out below which wrote MULTIPLIED digit to page for demo only
			        //document.form1.textfield.value += "" + i +":\t" + calc.toString() + " x 2 = " + (calc *2) +" : " + calc2 + "\n";
		        }
			        // commeneted out SUM below for demo only
			        //document.form1.textfield.value += "\t\tSum: " + iTotal + "\n";
		        if ((iTotal%10)==0){
			        //document.calculator.results.value = "Yes"; 
			        bResult = true;
 		        }else{
			        //document.calculator.results.value = "No"; 
			        bResult = false;
		        }
	        }
        }
  
        return(bResult);
    }
	function ValidateCCInfo(){
	    //NOTE - it will return "true" when it fails and "false" when it's ok.
	    //This is because I want to know if there's an error so false means no error
	    //Setup the variables to check on

	
	    if(fmCCItems == "")
	        return false;
	    else{
            var cctype = new String("");
            var ccnum = new String("");
            var ccName = new String("");
            
            var arCCString = fmCCItems.split("~");

            var bCardRet
            
            
            bCardRet = CCMod10(document.forms[0][arCCString[1]].value);

            if(bCardRet)
                if(isObject(document.forms[0][arCCString[2]])){

                    ccName = document.forms[0][arCCString[2]].value;
                    if(ccName.indexOf(" ") == -1){
                        alert("Please enter the name as it appears on the card.");
                        return(true);
                    }
                }
                else
                    return(false);
            else{
                alert("Please enter a valid credit card number.")
                return(true);
            }
           
        }
	}
	
	function ValidateAllFields(){
		var CheckCounter;
		var bError = false;
	
		//Validate Fields have info
		var ValuesToCheck = fmValuesString.split("~");
		var NamesToShow = fmValuesAlertString.split("~");

		//Validate Emails
		var EmailToCheck = fmEmailString.split("~");

		//Validate Fields section
		for(CheckCounter = 0; CheckCounter < ValuesToCheck.length; CheckCounter ++){
			if(isObject(document.forms[0][ValuesToCheck[CheckCounter]])){
				if(document.forms[0][ValuesToCheck[CheckCounter]].value == ""){
					bError = true;
					alert("Please make sure the field: " + NamesToShow[CheckCounter] + " is filled in.");
					CheckCounter = ValuesToCheck.length + 10;
					
				}
			}
		}

		//Validate Email section
		if(!bError){
			var apos, dotpos;
			for(CheckCounter = 0; CheckCounter < EmailToCheck.length; CheckCounter ++){
				if(isObject(document.forms[0][EmailToCheck[CheckCounter]])){
					apos = document.forms[0][EmailToCheck[CheckCounter]].value.indexOf("@");
					dotpos = document.forms[0][EmailToCheck[CheckCounter]].value.lastIndexOf(".");
					if(apos < 1 || dotpos-apos < 2){
						bError = true;
						alert("Please make sure the Email is valid");
						CheckCounter = EmailToCheck.length + 10;
					}
				}
			}
		}
		
		if(!bError)
			bError = ValidatePhone();
			
		if(!bError)
			bError = ValidateFieldLengths();
			
	    if(!bError)
	        bError = ValidateCCInfo();
		
		if(!bError)
			document.forms[0].submit();
			
		
	
	}
	