﻿


// ========================================
//            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.validateRegistration2 = validateRegistration2;
	this.validateRegistration3 = validateRegistration3;
	this.validateFirstName = validateFirstName;
	this.validateLastName = validateLastName;
	this.validateEmailAddress = validateEmailAddress;
	this.validateAddress = validateAddress;
	this.validateCity = validateCity;
	this.validateState = validateState;
	/*this.validateDOB = validateDOB;*/
	this.validateZipCode = validateZipCode;
	this.validateDOB = validateDOB;
	this.validateDOB2 = validateDOB2;
	this.dobError = dobError;
	this.validateEighteen = validateEighteen;
    //this.validateUserType = validateUserType;
    //this.validateDiagnosed = validateDiagnosed;
    //this.validateWhenDiagnosed = validateWhenDiagnosed;
    //this.validateDeliveryMethod = validateDeliveryMethod;
    this.checkGender = checkGender;
    //this.validatePhysicianType = validatePhysicianType;
    /*this.checkHearMeds = checkHearMeds;*/
    this.validateAreYou = validateAreYou;
    this.validateCondition = validateCondition;
    this.validateHowLong = validateHowLong;
    this.check6months = check6months;
    this.validateMeds = validateMeds;
    this.validatePhysician = validatePhysician;

// ========================================
//        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 validateDemographics()
    {
    return;
    }
    
    function validateRegistration()
    {
        var totalErrors = 0;
        totalErrors += addError(myValidator.validateFirstName(d("txtFirstName")));
        totalErrors += addError(myValidator.validateLastName(d("txtLastName")));
        totalErrors += addError(myValidator.validateEmailAddress(d("txtEmail")));
        totalErrors += addError(myValidator.validateAddress(d("txtStreet")));
        totalErrors += addError(myValidator.validateCity(d("txtCity")));
        totalErrors += addError(myValidator.validateState(d("ddlState")));
        
        totalErrors += addError(dobError(d("ddlDOB")));
        
        totalErrors += addError(myValidator.validateZipCode(d("txtZip")));
        totalErrors += addError(myValidator.validateEighteen(d("chkEighteen")));
        
        totalErrors += addError(myValidator.checkGender(d("gender")));
        
        totalErrors += addError(myValidator.validateAreYou(d("ddlAreYou")));
        
        totalErrors += addError(myValidator.validateCondition("conditionReceived"));
        
        

        if (totalErrors == 0)
            return true;        // Everything validated
        else
            return false;       // One or more didn't validate
    }
    
    function validateRegistration2()
    {
        var totalErrors = 0;
        
        totalErrors += addError(myValidator.validateHowLong(d("ddlHowLong")));
        
        totalErrors += addError(myValidator.check6months(d("TakingAbilify")));
        
 

        if (totalErrors == 0)
            return true;        // Everything validated
        else
            return false;       // One or more didn't validate
    }
    
    function validateRegistration3()
    {
        var totalErrors = 0;
        totalErrors += addError(myValidator.validateMeds(d("TakingMeds")));
        totalErrors += addError(myValidator.validatePhysician(d("ddlPractitioner")));


        if (totalErrors == 0)
            return true;        // Everything validated
        else
            return false;       // One or more didn't validate
    }
    
    
	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 validateAddress(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 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 validateDiagnosed(myField)
    {
        var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (minLength(myValue,2)) && 
			 (maxLength(myValue,20)) )
		{
            clearError(myField);
			return true;
		} else {
			throwError(myField,"Please enter a valid Answer");
			return false;
		}
    }

    
    function validatePhysicianType(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 Answer");
			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 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 confirm that you are at least 18 years of age and a U.S. resident to continue");
			return false;
        }
    }
    
	
	function checkGender(myField)
    {
        if(d("male").checked || d("female").checked)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"Please select a gender");
            return false;
        }
    }
    
    function validateDOB(myField)
    {
        var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (minLength(myValue,2)) && 
			 (maxLength(myValue,2)) )
		{
			return true;
		} else {
			return false;
		}
    }
    function validateDOB2(myField)
    {
        var myValue = getValue(myField);
		if ( (isNotNull(myValue)) &&  
			 (minLength(myValue,4)) && 
			 (maxLength(myValue,4)) )
		{
			return true;
		} else {
			return false;
		}
    }
    
    function dobError(myField)
    {
       var noError = 0;
       if (myValidator.validateDOB(d("ddlMonth")))
       {
          noError += 1;
       }
       if (myValidator.validateDOB(d("ddlDay")))
       {
          noError += 1;
       }
       if (myValidator.validateDOB2(d("ddlYear")))
       {
         noError += 1;
       }
       
       if (noError < 3)
       {
            throwError(myField,"Please enter a valid birth date");
            return false;
       }
       else
       {
            clearError(myField);
            return true;
       }
    }
    
    function validateAreYou(myField)
    {
        if(myField.selectedIndex > 0)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"Please make a selection");
            return false;
        }
    }
    
    function validateCondition(myFieldName)
    {
        if(d(myFieldName+"1").checked || d(myFieldName+"2").checked || d(myFieldName+"3").checked || d(myFieldName+"4").checked)
        {
            clearError(d(myFieldName));
            return true;
        }
        else
        {
            throwError(d(myFieldName),"Please make a selection");
            return false;
        }
    }
    
    
    function validateHowLong(myField)
    {
        if(myField.selectedIndex > 0)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"Please make a selection");
            return false;
        }
    }
    
    
    function check6months(myField)
    {
        if(d("rbTakingAbilifyYes").checked || d("rbTakingAbilifyNo").checked)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"Please make a selection");
            return false;
        }
    }
 
    function validateMeds(myField)
    {   
        if(d("conditionReceived1").checked)
        {
            if(d("chkMed1").checked || d("chkMed2").checked || d("chkMed3").checked || d("chkMed4").checked || d("chkMed5").checked || d("chkMed6").checked)
            {
                clearError(myField);
                return true;
            }
            else
            {
                throwError(myField,"Please make a selection");
                return false;
            }
        }
        if(d("conditionReceived2").checked)
        {
            if(d("chkMed11").checked || d("chkMed12").checked || d("chkMed13").checked || d("chkMed14").checked || d("chkMed15").checked || d("chkMed16").checked || d("chkMed17").checked)
            {
                clearError(myField);
                return true;
            }
            else
            {
                throwError(myField,"Please make a selection");
                return false;
            }
        }
        if(d("conditionReceived3").checked)
        {
            if(d("chkMed21").checked || d("chkMed22").checked || d("chkMed23").checked || d("chkMed24").checked || d("chkMed25").checked || d("chkMed26").checked || d("chkMed27").checked || d("chkMed28").checked || d("chkMed29").checked || d("chkMed30").checked || d("chkMed31").checked)
            {
                clearError(myField);
                return true;
            }
            else
            {
                throwError(myField,"Please make a selection");
                return false;
            }
        }
    }
    
    function validatePhysician(myField)
    {
        if(myField.selectedIndex > 0)
        {
            clearError(myField);
            return true;
        }
        else
        {
            throwError(myField,"Please make a selection");
            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)
		{
			// 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;
	}

}



