
$('#ddlState').change(function(){
  var optionSelectedValue = $('#ddlState option:selected').val();
  if(optionSelectValue == "MA") {
      throwError(myField, "Massachusetts residents are not eligible for reimbursement, but may still revieve information regarding SPRYCEL.");
  }
  else 
     clearError(myField);
});


// ========================================
//            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.validateRegistration = validateRegistration;
	this.checkSalutation = checkSalutation;
	this.validateFirstName = validateFirstName;
	this.validateLastName = validateLastName;
	this.validateAddress = validateAddress;
	this.validateCity = validateCity;
	this.validateState = validateState;
	this.validateZipCode = validateZipCode;
	
	this.validatePhone = validatePhone;
	this.validateEmailAddress = validateEmailAddress;
	this.validateConfirmEmailAddress = validateConfirmEmailAddress;

	this.dobError = dobError;
	this.diagError = diagError;
	
	this.checkGender = checkGender;
	this.checkMAResident = checkMAResident;
	this.checkPrescriptions = checkPrescriptions;
	

// ========================================
//        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 validateRegistration()
    {

        var totalErrors = 0;
        totalErrors += addError(myValidator.checkSalutation(document.getElementById("Prefix{Required/AutoInject}")));
        totalErrors += addError(myValidator.validateFirstName(document.getElementById("FirstName{FirstName/AutoInject}")));
        totalErrors += addError(myValidator.validateLastName(document.getElementById("LastName{LastName/AutoInject}")));
        totalErrors += addError(myValidator.validateAddress(document.getElementById("Address1{Address1/AutoInject}")));
        totalErrors += addError(myValidator.validateCity(document.getElementById("City{City/AutoInject}")));
        totalErrors += addError(myValidator.validateState(document.getElementById("State{State/AutoInject}")));
        totalErrors += addError(myValidator.validateZipCode(document.getElementById("Zip{Zip/AutoInject}")));

        //        if (document.getElementById(Phone<10030029,OPEN>{Phone}).value.trim()!="") 
//        {
        totalErrors += addError(myValidator.validatePhone(document.getElementById("Phone<10030029,OPEN>{Phone/AutoInject}")));
//        }
//        else 
//        {
        //            clearError(document.getElementById(Phone<10030029,OPEN>{Phone}));
//        }

        if (document.getElementById("Email<10028024,OPEN>{Email_NotRequired/AutoInject}").value.trim() != "") 
        {
            totalErrors += addError(myValidator.validateEmailAddress(document.getElementById("Email<10028024,OPEN>{Email_NotRequired/AutoInject}")));
        }
        else 
        {
            clearError(document.getElementById("Email<10028024,OPEN>{Email_NotRequired/AutoInject}"));
        }

        if (document.getElementById("Email<10028024,OPEN>{Email_NotRequired/AutoInject}").value.trim() != "") 
        {
            totalErrors += addError(myValidator.validateConfirmEmailAddress(document.getElementById("ConfirmEmail{ConfirmEmail/AutoInject}")));
        }
        else 
        {
            clearError(document.getElementById("ConfirmEmail{ConfirmEmail/AutoInject}"));
        }

        totalErrors += addError(myValidator.dobError(document.getElementById("Birthdate<10028037,OPEN>")));

        totalErrors += addError(myValidator.checkGender(document.getElementById("Gender<10021003,ID>{Required/AutoInject}")));
        totalErrors += addError(myValidator.diagError(document.getElementById("Diagnoseddate<14000399,OPEN>")));

        //        if (document.getElementById("PracticeZipCode<30000594,OPEN>").value.trim()!="") 
//        {
        //            totalErrors += addError(myValidator.validateZipCode(document.getElementById("PracticeZipCode<30000594,OPEN>")));
//        }
//        else 
//        {
        //            clearError(document.getElementById("PracticeZipCode<30000594,OPEN>"));
//        }
//        
        
        totalErrors += addError(myValidator.checkMAResident(document.getElementById("rdoMAResident")));
        
        totalErrors += addError(myValidator.checkPrescriptions(document.getElementById("rdoPrescriptions")));
        
        if (totalErrors == 0)
            return true;        // Everything validated
        else
            return false;       // One or more didn't validate
    }
    
    function checkSalutation(myField)
    {
        if (document.getElementById("Prefix{Required/AutoInject}").selectedIndex > 0)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"* Required");
            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,"* Value for first name is required.");
			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,"* Value for last name is required.");
			return false;
		}
	}

	
	function validateAddress(myField)
	{
		var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (hasNoCrLf(myValue)) &&  
			 (hasNoFicoDelimeter(myValue)) &&
			 (maxLength(myValue,50))   )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"* Value for address is required.");
			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,"* Value for city is required.");
			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,"* Value for state abbreviation is invalid.");
			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,"* Value for zip code is invalid.");
			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,"* Value for email is invalid.");
			return false;
		}
	}
	
	function validateConfirmEmailAddress(myField)
	{
		var myValue = getValue(myField);
		if (myValue == document.getElementById("Email<10028024,OPEN>{Email_NotRequired/AutoInject}").value)
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"* Emails do not match.");
			return false;
		}
	}
	
    function validatePhone(myField)
	{
		var myValue = getValue(myField);
		if ( (isValidPhoneNumber(myValue)) )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"* Value for phone number is invalid");
			return false;
		}
	}
    
    
    function dobError(myField)
    {
        if (document.getElementById("month").selectedIndex > 0 && document.getElementById("day").selectedIndex > 0 && document.getElementById("year").selectedIndex > 0)
       {
            
             clearError(myField);
            return true;
       }
       else
       {
            throwError(myField,"* Select an option from the dropdown.");
            return false;  
       }
    }

    function diagError(myField) {
        if ((document.getElementById("dmonth").selectedIndex > 0 && document.getElementById("dyear").selectedIndex > 0)
        || (document.getElementById("dmonth").selectedIndex <= 0 && document.getElementById("dyear").selectedIndex <= 0)
        ) {

            clearError(myField);
            return true;
        }
        else {
            throwError(myField, "* Invalid Date.");
            return false;
        }
    }
    function checkGender(myField)
    {
     
        if (document.getElementById("Gender<10021003,ID>{Required/AutoInject}").selectedIndex > 0)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"* Required");
            return false;
        }
    }
    
    function checkMAResident(myField)
    {
        if (document.getElementById("MAResident<15000823,10001001>{RequiredList/Autoinject}").checked || document.getElementById("MAResident<15000823,10001002>").checked)
        {
            if (document.getElementById("MAResident<15000823,10001002>").checked)
            {
                clearError(myField);
            }
            return true;
        }
        else
        {
            throwError(myField,"* Please select an option.");
            return false;
        }
    }
    
    function checkPrescriptions(myField)
    {
        if (document.getElementById("Prescriptions<15007951,10001001>{RequiredList/Autoinject}").checked || document.getElementById("Prescriptions<15007951,10001002>").checked)
        {
            if (document.getElementById("Prescriptions<15007951,10001002>").checked)
            {
                clearError(myField);
            }
            return true;
        }
        else
        {
            throwError(myField,"* Please select an option.");
            return false;
        }
    }
    
// ========================================
//        ERROR HANDLING/CLEARING
// ========================================

	function throwError(myField, myMessage)
	{
	    // Clear out previous error
	    if (document.getElementById(myField.id + "Error"))
	    {
	        var el = document.getElementById(myField.id + "Error");
	        el.innerHTML = "";
	    }
	    
	    // Display myMessage
	    if ((myMessage) && (myMessage.length > 0) && (document.getElementById(myField.id + "Error")))
	    {
	        var el = document.getElementById(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)
		{
			// alert("More than " + myMaxLength + "!");
			return false;
		} else {
			return true;
		}
	}

	function minLength(myText,myMinLength)
	{
		if (myText.length < myMinLength)
		{
			// alert("Less than " + 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 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;
	}

}




