/**
 * @author alord
 * System used to visually show input errors
 */

//These 4 variables MUST be defined for this script to work
//Change the values to fit in with you portal style.
//Alternativelly comment them out here and put them anywhere else
//in the javascript context.
var errorBorderColor = "red";
var errorBackgroundColor = "red";
var errorTextColor = "yellow";
var forbidenCharacters="%\"\\'$<>";

//checkSetError
//Used to change the visual aspects of a field to reflect the fact that
//the content is not valid
function checkSetError(field){
	 if(field.error == null){
        field.error = true;
        field.orgClassName = field.className;
    }
    field.className = 'portalCheckFormError';
}

//checkSetNoError
//Used to return a field to it original state when the error is corrected
function checkSetNoError(field){
	 if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    field.className = field.orgClassName;
}

//checkInteger(field, boolean)
//checkInteger(field, boolean, int, int)
//Is used to test is the content of a field is an integer
//if the field is required and of length 0 it is in error
//if max is defined and the field is bigger than max it is in error
//if min is defined and the field is smaller than max it is in error
function checkInteger(field, required, min, max){
    if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    
    var error = false;

    if(isNaN(field.value)){
        error = true;
    }
    
    if(required && field.value.length < 1){
        error = true;
    }
    
    if(!error && max != null && parseInt(field.value) > max){
        error = true;
    }
    
    if(!error && min != null && parseInt(field.value) < min){
        error = true;
    }
    
    if(error){
        if(!field.error){
            field.error = true;
            checkSetError(field);
        }
    } else {
        if(field.error){
            field.error = false;
            checkSetNoError(field);
        }
    }
}

//checkInteger(field, boolean)
//checkInteger(field, boolean, int)
//Is used to test is the content of a field is a valid string (no illegar chars)
//if the field is required and of length 0 it is in error
//if length is defined and field is longer than length it is in error
function checkOneLineText(field, required, length){
    if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    
    var error = false;

    for(i = 0; i < forbidenCharacters.length; i ++){
        if(field.value.indexOf(forbidenCharacters.charAt(i)) != -1){
            error = true;
        }
    }
    
    if(required && field.value.length < 1) {
        error = true;
    }
    
    if(length != null && field.value.length > length){
        error = true;
    }
    
    if(error){
        if(!field.error){
            field.error = true;
            checkSetError(field);
        }
    } else {
        if(field.error){
            field.error = false;
            checkSetNoError(field);
        }
    }
}

//checkMultipleLineText(field, boolean)
//checkMultipleLineText(field, boolean, int)
//Is used to test is the content of a field is a valid string (no illegar chars)
//if the field is required and of length 0 it is in error
//if length is defined and field is longer than length it is in error
function checkMultipleLineText(field, required, length){
    if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    
    var error = false;

    for(i = 0; i < forbidenCharacters.length; i ++){
        if(field.value.indexOf(forbidenCharacters.charAt(i)) != -1){
            error = true;
        }
    }
    
    if(required && field.value.length < 1) {
        error = true;
    }
    
    if(length != null && field.value.length > length){
        error = true;
    }
    
    if(error){
        if(!field.error){
            field.error = true;
            checkSetError(field);
        }
    } else {
        if(field.error){
            field.error = false;
            checkSetNoError(field);
        }
    }
}

//checkDate(field, boolean)
//Used to check if a field is a valid date, empty or dd/mm/yyyy
function checkDate(field, required){
    if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    
    var error = false;
    var re_date = /^(\d{1,2})(\-|\/|\.)(\d{1,2})(\-|\/|\.)(\d{4})$/;
    if(field.value != "dd/mm/yyyy" && !re_date.exec(field.value)){
        error = true;
    }

    if(required && (field.value.length < 1 || field.value == "dd/mm/yyyy")) {
        error = true;
    }
    
    if(error){
        if(!field.error){
            field.error = true;
            checkSetError(field);
        }
    } else {
        if(field.error){
            field.error = false;
            checkSetNoError(field);
        }
    }
}

//checkDouble(field, boolean)
//checkDouble(field, boolean, double, double)
//Is used to test is the content of a field is an double
//if the field is required and of length 0 it is in error
//if max is defined and the field is bigger than max it is in error
//if min is defined and the field is smaller than max it is in error
function checkDouble(field, required, min, max){
    if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    
    var error = false;

    if(isNaN(field.value)){
        error = true;
    }
    
    if(required && field.value.length < 1){
        error = true;
    }
    
    if(!error && max != null && parseFloat(field.value) > max){
        error = true;
    }
    
    if(!error && min != null && parseFloat(field.value) < min){
        error = true;
    }
    
    if(error){
        if(!field.error){
            field.error = true;
            checkSetError(field);
        }
    } else {
        if(field.error){
            field.error = false;
            checkSetNoError(field);
        }
    }
}

//checkCode(field, boolean)
//Is used to test is the content of a field is defined
//if the field is required and of length 0 it is in error
function checkCode(field, required){
    if(field.error == null){
        field.error = false;
        field.orgClassName = field.className;
    }
    
    var error = false;

    if(required && field.value.length < 1) {
        error = true;
    }
    
    if(error){
        if(!field.error){
            field.error = true;
            checkSetError(field);
        }
    } else {
        if(field.error){
            field.error = false;
            checkSetNoError(field);
        }
    }
}