﻿
//store consumer value
	var consumer_value;

// ========================================
//            TRIM FUNCTIONS
// ========================================
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

var myValidator = new Validator();

// ========================================
//         VALIDATOR CONSTRUCTOR
// ========================================
function Validator()
{
	this.validateShare = validateShare;
	this.validateName = validateName;
	this.validateFirstName = validateFirstName;
	this.validateLastName = validateLastName;
	this.validateAddress1 = validateAddress1;
	this.validateAddress2 = validateAddress2;
	this.validateEmailAddress = validateEmailAddress;
	this.validateCity = validateCity;
	this.validateState = validateState;
	this.validatePhone = validatePhone;
	this.validateNoContact = validateNoContact;
	//this.validateConsumer = validateConsumer;
	this.validateZipCode = validateZipCode;
	this.validateEighteen = validateEighteen;
    //this.validateUserType = validateUserType;
    //this.checkGender = checkGender;
    //this.validateTaking = validateTaking;
    //this.validateDelivery = validateDelivery;


// ========================================
//        FIELD VALIDATION FUNCTIONS
// ========================================

    // If test evaluates to true, return 0, else return 1
    // Used to facilitate counting boolean input validation functions
    function addError(test)
    {
        if (test) 
            return 0;
        else
            return 1;
    }

    
   
    function validateShare()
    {
        var totalErrors = 0;
       
        totalErrors += addError(myValidator.validateName(d("txtYourName")));
        totalErrors += addError(myValidator.validateEmailAddress(d("txtYourAddy")));
        totalErrors += addError(myValidator.validateName(d("txtRecName")));
        totalErrors += addError(myValidator.validateEmailAddress(d("txtRecAddy")));
        totalErrors += addError(myValidator.validateEighteen(d("is_eighteen")));

        if (totalErrors == 0)
            return true;        // Everything validated
        else
            return false;       // One or more didn't validate
    }
    
    
   
	function validateName(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) && 
			 (hasNoDigits(myValue)) && 
			 (hasNoCrLf(myValue)) &&  
			 (hasNoSpecialChars(myValue)) && 
			 (hasNoFicoDelimeter(myValue)) &&
			 (notATestWord(myValue)) &&
			 (notTitleWord(myValue)) &&
			 (notTripleRepeat(myValue)) &&
			 (minLength(myValue,2)) && 
			 (maxLength(myValue,50))   )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid Name");
			return false;
		}
	}
	
	
	function validateFirstName(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) && 
			 (hasNoDigits(myValue)) && 
			 (hasNoCrLf(myValue)) &&  
			 (hasNoSpecialChars(myValue)) && 
			 (hasNoFicoDelimeter(myValue)) &&
			 (notATestWord(myValue)) &&
			 (notTitleWord(myValue)) &&
			 (notTripleRepeat(myValue)) &&
			 (minLength(myValue,2)) && 
			 (maxLength(myValue,15))   )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid First Name");
			return false;
		}
	}

	function validateLastName(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) && 
			 (hasNoCrLf(myValue)) &&  
			 (hasNoDigits(myValue)) && 
			 (hasNoSpecialCharsST(myValue)) &&
			 (hasNoFicoDelimeter(myValue)) &&
			 (notTripleRepeat(myValue)) &&
			 (maxLength(myValue,20)) && 
			 (minLength(myValue,2))  )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid Last Name");
			return false;
		}
	}

	function validateEmailAddress(myField)
	{
		var myValue = getValue(myField);
		if ( (isValidEmailAddress(myValue)) && 
			 (hasNoSpaces(myValue)) && 
			 (hasNoCrLf(myValue)) &&
			 (maxLength(myValue,50)) )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid E-mail");
			return false;
		}
	}
	
	function validateAddress1(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (hasNoCrLf(myValue)) &&  
			 (hasNoFicoDelimeter(myValue)) &&
			 (maxLength(myValue,50))   )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid Street Address");
			return false;
		}
	}
	
	function validateAddress2(myField)
	{

		var myValue = getValue(myField);
		if ( (hasNoCrLf(myValue)) &&  
			 (hasNoFicoDelimeter(myValue)) &&
			 (maxLength(myValue,50))   )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid Street Address");
			return false;
		}
	}

	function validateCity(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (hasNoCrLf(myValue)) && 
			 (hasNoDigits(myValue)) && 
			 (hasNoFicoDelimeter(myValue)) &&
			 (minLength(myValue,1)) && 
			 (maxLength(myValue,20)) )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid City");
			return false;
		}
	}

	function validateState(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (minLength(myValue,2)) && 
			 (maxLength(myValue,2)) )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid State");
			return false;
		}
	}
	
	function validatePhone(myField)
	{

		var myValue = getValue(myField);
		if ( (isValidPhoneNumberNotRequired(myValue)) &&
		     (hasNoCrLf(myValue)) &&  
			 (hasNoFicoDelimeter(myValue)) &&
			 (maxLength(myValue,50))   )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid Phone Number (###-###-####)");
			return false;
		}
	}
	

	
	function validateZipCode(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) && 
			 (hasNoSpaces(myValue)) && 
			 (hasNoCrLf(myValue)) && 
			 (hasNoFicoDelimeter(myValue)) &&
			 (minLength(myValue,5)) && 
			 (maxLength(myValue,10)) && 
			 (isValidZipCode(myValue)) )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid ZIP");
			return false;
		}
	}



    function validateEighteen(myField)
    {
		var myValue = getValue(myField);
        if ( (isNotNull(myValue)) )
        {
            clearError(myField);
            return true;
        } else {
			throwError(myField,"You must be at least 18 years of age");
			return false;
        }
    }
    
    
     function validateNoContact(myField)
    {
		var myValue = getValue(myField);
        if ( (isNotNull(myValue)) )
        {
            clearError(myField);
            return true;
        } else {
			throwError(myField,"Please check the box to unsubscribe");
			return false;
        }
    }
    

    
    
   

// ========================================
//        ERROR HANDLING/CLEARING
// ========================================

	function throwError(myField, myMessage)
	{
	    // Clear out previous error
	    if (d(myField.id + "Error"))
	    {
	        var el = d(myField.id + "Error");
	        el.innerHTML = "";
	    }
	    
	    // Display myMessage
	    if ((myMessage) && (myMessage.length > 0) && (d(myField.id + "Error")))
	    {
	        var el = d(myField.id + "Error");
            el.innerHTML = "<br />" + myMessage;
        }
	}
	
	function clearError(myField)
	{
	    // Sending null message to throwError() will just clear error
		throwError(myField, null);
	}

// ========================================
//        BASE  VALIDATOR FUNCTIONS
// ========================================

	function getValue(myField)
	{
		var myValue = '';
		switch(myField.type)
		{
			case "checkbox" :
				if (myField.checked) 
					myValue = myField.value;
				break;
			case "radio" :
				if (myField.checked) 
					myValue = myField.value;
                break;
			case "select-one" :
				var si = myField.selectedIndex;
				if (si >= 0)
					myValue = myField.options[si].value;
				break;
			case "button" :
			case "file" :
			case "hidden" :
			case "password" :
            case "reset" :
			case "select-multiple" :
			case "text" :
			case "textarea" :
			default : 
				myValue = myField.value;
				break;
		}
		return myValue;
	}
	
	function isNotNull(myText)
	{
		if ( (myText.length > 0) && (trim(myText).length > 0) ) {
			return true;
		} else {
			// alert("Not Null!");
			return false;
		}
	}

	function isNumeric(myText)
	{
		var charpos = myText.search("[^0-9]"); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Non-Numeric character at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}

	function isAlpha(myText)
	{
		var charpos = myText.search("[^A-Za-z]"); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Non-Alpha character at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}

	function isAlphaNumeric(myText)
	{
		var charpos = myText.search("[^A-Za-z0-9]"); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Non-AlphaNumeric character at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}

	function hasNoDigits(myText)
	{
		var charpos = myText.search("[0-9]"); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Numeric character at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}

	function hasNoSpaces(myText)
	{
		var charpos = myText.search(/\s/); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Space at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}

	function hasNoCrLf(myText)
	{
		var charpos = myText.search(/\r\n/); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Carriage Return or Line Feed at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}

	function notATestWord(myText)
	{
		var regTest = /^(TEST|TESTING|FIRST)$/i ;
		if (regTest.test(myText))
		{
			// alert("Name is a Test Word. Please correct and submit again.");
			return false;
		}
		return true;
	}
	
	function notTitleWord(myText)
	{
		var regTest = /^(CAPT|COL|DR|FR|LT|MISS|MS|MRS|MR|MJR|REV|SIST|AGENCY)$/i ;
		if (regTest.test(myText))
		{
			// alert("Name inclues a title Word. Please correct and submit again.");
			return false;
		}
		return true;
	}
	
	function notTripleRepeat(myText)
	{
		var charpos = myText.search(/^([0-9a-zA-Z])\1\1/i); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Triple Alpha Character " + myText.charAt(charpos) + " at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}
	
	function hasNoFicoDelimeter(myText)
	{
		var charpos = myText.search(/{/); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("FICO Delimeter Character " + myText.charAt(charpos) + " at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}
	
	function hasNoFicoChars(myText)
	{
		var charpos = myText.search(/@|#|\$|%|\*|\^|!|{|}|\[|\]|\?|\+|-|=|\\|\/|,|\.|\"/); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Invalid Character " + myText.charAt(charpos) + " at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}
	
	function hasNoSpecialChars(myText)
	{
		var charpos = myText.search(/@|#|\$|%|\*|\^|!|{|}|\[|\]|\?|\+|=|\\|\/|,|\.|\"/); 
		if(myText.length > 0 && charpos >= 0) 
		{		  
			// alert("Invalid Character " + myText.charAt(charpos) + " at position " + eval(charpos + 1)); 
			return false; 
		}
		return true;
	}
	
	function hasNoSpecialCharsST(myText)
	{
	    var charpos
	
	    var regTest = /^(ST.)$/i ;
		if (regTest.test(myText.substring(0,3)))
		{
			charpos = myText.search(/@|#|\$|%|\*|\^|!|{|}|\[|\]|\?|\+|=|\\|\/|,|\"/); 
		    if(myText.length > 0 && charpos >= 0) 
		    {		  
			    // alert("Invalid Character " + myText.charAt(charpos) + " at position " + eval(charpos + 1)); 
			    return false; 
		    }
		}
		else
		{
		    charpos = myText.search(/@|#|\$|%|\*|\^|!|{|}|\[|\]|\?|\+|=|\\|\/|,|\.|\"/); 
		    if(myText.length > 0 && charpos >= 0) 
		    {		  
			    // alert("Invalid Character " + myText.charAt(charpos) + " at position " + eval(charpos + 1)); 
			    return false; 
		    }
		}
		return true;
	}
	
	function maxLength(myText,myMaxLength)
	{
		if (myText.length > myMaxLength)
		{
			return false;
		} else {
			return true;
		}
	}

	function minLength(myText,myMinLength)
	{
		if (myText.length < myMinLength)
		{
			return false;
		} else {
			return true;
		}
	}

	function isValidZipCode(myText)
	{
		var regZip = new RegExp(/(^\d{5}$)|(^\d{5}-\d{4}$)/);
		if (!regZip.test(myText))
		{
			// alert("Zip Code Is Not Valid");
			return false;
		}
		return true;
	}

	function isValidEmailAddress(myText)
	{
		var regEmail = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
		var regex = new RegExp(regEmail);
		if (!regex.test(myText))
		{
			// alert("E-mail Address Is Not Valid");
			return false;
		}
		return true;
	}

	function isValidDate(myText)
	{
		var regDate=/^\d{2}\/\d{2}\/\d{4}$/ ;
		if (!regDate.test(myText))
		{
			// alert("Invalid Date Format (MM/DD/YYYY). Please correct and submit again.");
			return false;
		}
		return true ;
	}

	function isValidPhoneNumber(myText)
	{
		var regPhone = /^\(?\d{3}\)?\s|-\d{3}-\d{4}$/ ;
		if (!regPhone.test(myText))
		{
			// alert("Invalid Phone Format (###-###-####). Please correct and submit again.");
			return false;
		}
		return true;
	}
	
	function isValidPhoneNumberNotRequired(myText)
	{
	    if(myText != '')
	    {
		    var regPhone = /^\(?\d{3}\)?\s|-\d{3}-\d{4}$/ ;
		    if (!regPhone.test(myText))
		    {
			    // alert("Invalid Phone Format (###-###-####). Please correct and submit again.");
			    return false;
		    }
		}
		return true;
	}
	
	function isValidSSN(myText)
	{
		var regSSN = /^\d{3}\-?\d{2}\-?\d{4}$/ ;
		if (!regSSN.test(myText))
		{
			// alert("Invalid SSN (###-##-####). Please correct and submit again.");
			return false;
		}
		return true;
	}

}




