﻿function trim(str) { return str.replace(/^\s+|\s+$/g, ''); };

function ClearErrorMessage() {
    lblErrorMessageControl.innerHTML = "";
}

function AddToErrorMessage(errorMess) {
    if (lblErrorMessageControl.innerHTML != "") {
        lblErrorMessageControl.innerHTML += '<br>';
    }
    lblErrorMessageControl.innerHTML += errorMess;
}

function ValidateOptionalInput(inputControlID, lblControlID, readableParamName) {
    var inputControl = document.getElementById(inputControlID);
    var lblControl = document.getElementById(lblControlID);
    if (inputControl.value.search('<') >= 0 || inputControl.value.search('>') >= 0) {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Invalid " + readableParamName);
        return false;
    }
    lblControl.style.color = 'black';
    lblControl.style.fontWeight = 'normal';
    return true;
}

function ValidateInput(inputControlID, lblControlID, readableParamName) {
    var inputControl = document.getElementById(inputControlID);
    var lblControl = document.getElementById(lblControlID);
        inputControl.value = trim(inputControl.value);
    if (inputControl.value == '') {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Missing " + readableParamName);
        return false;
    }
    else if (inputControl.value.search('<') >= 0 || inputControl.value.search('>') >= 0) {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Invalid " + readableParamName);
        return false;
    }
    else {
        lblControl.style.color = 'black';
        lblControl.style.fontWeight = 'normal';
    }
    return true;
}

function ValidateInputName(inputControlID, lblControlID, readableParamName) {
    if (!ValidateInput(inputControlID, lblControlID, readableParamName))
        return false;

    var inputControl = document.getElementById(inputControlID);
    var lblControl = document.getElementById(lblControlID);
    if (inputControl.value.length < 2) {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Invalid " + readableParamName + " (must be 2 characters or more)");
        return false;
    }
    else {
        lblControl.style.color = 'black';
        lblControl.style.fontWeight = 'normal';
    }
    return true;
}

function ValidateInputEmailAddress(inputControlID, lblControlID, readableParamName) {
    if (!ValidateInput(inputControlID, lblControlID, readableParamName))
        return false;

    var inputControl = document.getElementById(inputControlID);
    var lblControl = document.getElementById(lblControlID);
    var regExp = new RegExp("^([0-9a-zA-Z]+[-._+&amp;])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$");
    if (!regExp.test(inputControl.value)) {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Invalid " + readableParamName);
        return false;
    }
    else {
        lblControl.style.color = 'black';
        lblControl.style.fontWeight = 'normal';
    }
    return true;
}

function ValidateInputEmailAddress2(emailControlID1, emailControlID2, lblControlID2, readableParamName2) {
    if (!ValidateInput(emailControlID2, lblControlID2, readableParamName2))
        return false;

    var emailControl1 = document.getElementById(emailControlID1);
    var emailControl2 = document.getElementById(emailControlID2);
    var lblControl2 = document.getElementById(lblControlID2);

    if (emailControl1.value.toLowerCase() != emailControl2.value.toLowerCase()) {
        lblControl2.style.color = 'red';
        lblControl2.style.fontWeight = 'bold';
        AddToErrorMessage(" * Email and Re-enter Email addresses do not match");
        return false;
    }
    else {
        lblControl2.style.color = 'black';
        lblControl2.style.fontWeight = 'normal';
    }
    return true;
}

function ValidateInputNumber(inputControlID, lblControlID, readableParamName) {
    if (!ValidateInput(inputControlID, lblControlID, readableParamName))
        return false;

    var inputControl = document.getElementById(inputControlID);
    var lblControl = document.getElementById(lblControlID);
    var str = inputControl.value.replace(/ /g, '').replace(/,/g, '');
    var regExp = new RegExp("^0*[1-9][0-9]*$");
    var n = 0;
    if (regExp.test(str))
        n = parseInt(str);
    if (n <= 0) {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Invalid " + readableParamName + " (use numerical characters only)");
        return false;
    }
    else if (str.length >= 5)
    {
        var numberIsFake = true;
        for(i = 0; i < str.length - 1; i++)
        {
            // Filter out numbers made of repeating or sequential digits
            if(str[i] != str[0] && parseInt(str[i]) + 1 != str[i+1])
            {
                numberIsFake = false;
                break;
            }
        }
        if (numberIsFake)
        {
            lblControl.style.color = 'red';
            lblControl.style.fontWeight = 'bold';
            AddToErrorMessage(" * Invalid " + readableParamName + " (too large number)");
            return false;
        }
    }
    else {
        lblControl.style.color = 'black';
        lblControl.style.fontWeight = 'normal';
    }
    return true;
}

function ValidateSelect(selectControlID, lblControlID, readableParamName) {
    var selectControl = document.getElementById(selectControlID);
    var lblControl = document.getElementById(lblControlID);
    if (selectControl.selectedIndex <= 0 || selectControl.value == "--") {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Missing " + readableParamName);
        return false;
    }
    else {
        lblControl.style.color = 'black';
        lblControl.style.fontWeight = 'normal';
    }
    return true;
}

function ValidateRegCode(inputControlID, lblControlID, readableParamName) {
    if (!ValidateInput(inputControlID, lblControlID, readableParamName))
        return false;

    var inputControl = document.getElementById(inputControlID);
    var lblControl = document.getElementById(lblControlID);
    var regExp = new RegExp(/(\w{5})-(\w{5})-(\w{5})-(\w{5})-((\w{3}$)|(\w{5}-\w{3}$))/);
    if (!regExp.test(inputControl.value)) {
        lblControl.style.color = 'red';
        lblControl.style.fontWeight = 'bold';
        AddToErrorMessage(" * Wrong format of " + readableParamName);
        return false;
    }
    else {
        lblControl.style.color = 'black';
        lblControl.style.fontWeight = 'normal';
    }
    return true;
}