var validColor = "#FFFFFF";
var errorColor = "#FF0000";

function validateFieldIsNull(errorMsg) {
    alert('The validate field is null.\r\nThe error message is: ' + errorMsg);
}

function doValidColor() {
    this.style.background = validColor;
}

// TEXT: CANNOT BE EMPTY
function isValidText(field,errorMsg) {
    if(field == null)  {
        validateFieldIsNull(errorMsg);
        return false;
    } 
    if(field.value != "") { 
        return true;
    }
    field.style.background = errorColor;
    field.onkeyup = doValidColor;
    alert(errorMsg);
    field.focus();
    return false;
}

// EMAIL: CAN BE EMPTY OR MUST CONTAIN SYMBOLS '@' AND '.'
function isValidEmail(field,errorMsg) {
    if(field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    if(field.value == "") {
        return true;
    }
    return isValidEmailRequired(field,errorMsg);
}


// EMAIL: MUST CONTAIN SYMBOLS '@' AND '.'
function isValidEmailRequired(field,errorMsg) {
    if(field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    field.value = field.value.trim();
    var invalid = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)");
    var valid = new RegExp("^[\\w\\-\.]+\\@[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,5}|[0-9]{1,3})$");
    if (!invalid.test(field.value) && valid.test(field.value)) {
        return true;
    }
    field.style.background = errorColor;
    field.onkeyup = doValidColor;
    alert(errorMsg);
    field.focus();
    return false;
}

// DATE: CAN BE EMPTY OR MUST MATCH (M)M/(D)D/(YY)YY WHERE () ARE OPTIONAL
function isValidDate(field,errorMsg) {
    if(field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    if(field.value == "" || field.value == 'mm/dd/yyyy') {
        return true;
    }
    return isValidDateRequired(field,errorMsg);
}

// DATE: MUST MATCH (M)M/(D)D/(YY)YY WHERE () ARE OPTIONAL
function isValidDateRequired(field,errorMsg) {
    if(field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }    
    if (field.value == "" || field.value == 'mm/dd/yyyy') {
        alert(errorMsg);
        field.style.background = errorColor;
        field.onkeyup = doValidColor;
        field.focus();
        return false;
    }
    return true;
}

// TIME: CAN BE EMPTY OR MUST MATCH (M)M/(D)D/(YY)YY (H)H:MM(:SS) WHERE () ARE OPTIONAL
function isValidTime(field,errorMsg) {
    if(field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    if(field.value == "" || field.value == 'mm/dd/yyyy') {
        return true;
    }
    return isValidDateRequired(field,errorMsg);
}

// TIME: MUST MATCH (M)M/(D)D/(YY)YY (H)H:MM(:SS) WHERE () ARE OPTIONAL
function isValidTimeRequired(field,errorMsg) {
    if(field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    if(field.value == "" ||
       field.value == 'mm/dd/yyyy' ||
       field.value.indexOf(":") == -1 ||
       isNaN(Date.parse(field.value)))
    {
        alert(errorMsg);
        field.style.background = errorColor;
        field.onkeyup = doValidColor;
        field.focus();
        return false;
    }
    return true;
}

// SSN: CAN BE EMPTY OR MUST MATCH (###-##-####)
function isValidSSN(field,errorMsg) {
    if(field == null) {
     validateFieldIsNull(errorMsg);
     return false;
    }
    if(field.value == "") {
        return true;
    }
    return isValidSSNRequired(field,errorMsg);
}

// SSN: MUST MATCH (###-##-####)
function isValidSSNRequired(field,errorMsg) {
    if (field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    field.value = field.value.trim();
    var valid  = /^[0-9]{3}[. -][0-9]{2}[. -][0-9]{4}/;
    var valid2 = /^[0-9]{9}/;
    if (valid.test(field.value) || valid2.test(field.value)) {
        return true;
    }
    field.style.background = errorColor;
    field.onkeyup = doValidColor;
    alert(errorMsg);
    field.focus();
    return false;
}

// POSTITIVE
function isValidPositive(field,errorMsg) {
    if (field == null) {
        validateFieldIsNull(errorMsg);
        return false;
    }
    var v = parseFloat(field.value);
    if(isNaN(v) || v <= 0) {
        field.style.background = errorColor;
        field.onkeyup = doValidColor;
        alert(errorMsg);
        field.focus();
        return false;
    }
    return true;
}

function ValidateDate(field){
	var dateVal = field.value;
	var mmddyyyyRegExp = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
	var mmyyyyRegExp = /^(0?[1-9]|1[0-2])(\/|\.|-)([0-9]){4}$/;
	var yyyyRegExp = /^([0-9]){4}$/;
	var unknownRegExp = /UNKNOWN/i;
	var ongoingRegExp = /ONGOING/i;
	var myBoolean = false;
	
	if((mmddyyyyRegExp.test(dateVal) == true) || (mmyyyyRegExp.test(dateVal) == true) || (yyyyRegExp.test(dateVal) == true) || (unknownRegExp.test(dateVal) == true) || (ongoingRegExp.test(dateVal) == true))
		myBoolean = true;
		
	if(myBoolean != true)
		alert("Incorrect date format, it must be mm-dd-yyyy OR mm-yyyy OR yyyy OR Ongoing OR Unknown");

}

// Function to automatically fill the value of ongoing if condition is currently treated.
function setDateofRecovery(current, recovery){
	if(current.checked){
		recovery.value = "ongoing";
	} else {
		recovery.value = "";
	}
}

