﻿var errorSummary = '';

function sfm_show_error_msg(msg, input_elmt) {
    //document.error_disp_handler.ShowMsg(msg, input_elmt);
    errorSummary = errorSummary + msg + '\n';
}

function validateEmail(email) {
    var splitted = email.match("^(.+)@(.+)$");
    if (splitted == null) return false;
    if (splitted[1] != null) {
        var regexp_user = /^\"?[\w-_\.]*\"?$/;
        if (splitted[1].match(regexp_user) == null) return false;
    }
    if (splitted[2] != null) {
        var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
        if (splitted[2].match(regexp_domain) == null) {
            var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
            if (splitted[2].match(regexp_ip) == null) return false;
        } // if
        return true;
    }
    return false;
}

function IsCheckSelected(objValue, chkValue) {
    var selected = false;
    var objcheck = objValue.form.elements[objValue.name];
    if (objcheck.length) {
        var idxchk = -1;
        for (var c = 0; c < objcheck.length; c++) {
            if (objcheck[c].value == chkValue) {
                idxchk = c;
                break;
            } //if
        } //for
        if (idxchk >= 0) {
            if (objcheck[idxchk].checked == "1") {
                selected = true;
            }
        } //if
    }
    else {
        if (objValue.checked == "1") {
            selected = true;
        } //if
    } //else	

    return selected;
}
function TestDontSelectChk(objValue, chkValue, strError) {
    var pass = true;
    pass = IsCheckSelected(objValue, chkValue) ? false : true;

    if (pass == false) {
        if (!strError || strError.length == 0) {
            strError = "Can't Proceed as you selected " + objValue.name;
        } //if			  
        sfm_show_error_msg(strError, objValue);

    }
    return pass;
}
function TestShouldSelectChk(objValue, chkValue, strError) {
    var pass = true;

    pass = IsCheckSelected(objValue, chkValue) ? true : false;

    if (pass == false) {
        if (!strError || strError.length == 0) {
            strError = "You should select " + objValue.name;
        } //if			  
        sfm_show_error_msg(strError, objValue);

    }
    return pass;
}
function TestRequiredInput( objId, strError) {

    var objValue = document.getElementById(objId);

    var ret = true;
    var val = objValue.value;
    val = val.replace(/^\s+|\s+$/g, ""); //trim
    if (eval(val.length) == 0) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + " : Required Field";
        } //if 
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}
function TestMaxLen(objId, strMaxLen, strError) {

    var objValue = document.getElementById(objId);

    var ret = true;
    if (eval(objValue.value.length) > eval(strMaxLen)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + " : " + strMaxLen + " characters maximum ";
        } //if 
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}
function TestMinLen(objId, strMinLen, strError) {

    var objValue = document.getElementById(objId);

    var ret = true;
    if (eval(objValue.value.length) < eval(strMinLen)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + " : " + strMinLen + " characters minimum  ";
        } //if               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}
function TestInputType(objId, strRegExp, strError, strDefaultError) {

    var objValue = document.getElementById(objId);

    if (objValue.value == '') return true;
    
    var ret = true;

    var charpos = objValue.value.search(strRegExp);
    if (objValue.value.length > 0 && charpos >= 0) {
        if (!strError || strError.length == 0) {
            strError = strDefaultError;
        } //if 
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}

function TestSQLInjection(objId) {
    var objValue = document.getElementById(objId);

    if (objValue.value == '') return true;
    
    var sqlregex = /(cast\s*\()|(((exec)|(execute))((\s+)|(\()|(\[)))|(script\s+src)|(((alter)|(create)|(drop))\s+((@)|(database)|(function)|(index)|(login)|(proc)|(role)|(schema)|(table)|(trigger)|(user)|(view)))|(((alter)|(create)|(declare)|(delete\s+from)|(drop)|(insert))\s*\[)|(declare\s+((@)|(cursor)|(table)|(xml)))|(delete((\s+top)|(\s*\[)))|(((delete\s+from)|(delete))\s+((@)|(dbo)|(tbl)|(hbm\s*\.)|(tempdb)|(master)))|(insert\s+((@)|(into)|(tbl)|(vw)))|(truncate((log)|(\s+table)))|((43|63)(41|61)(53|73)(54|74)(20|09|0A|0B|0C|0D)*(28))|((((45|65)(58|78)(45|65)(43|63))|((45|65)(58|78)(45|65)(43|63)(55|75)(54|74)(45|65)))(((20|09|0A|0B|0C|0D)+)|((28))|((5b))))|((53|73)(43|63)(52|72)(49|69)(50|70)(54|74)(20|09|0A|0B|0C|0D)+(53|73)(52|72)(43|63))|((((41|61)(4c|6c)(54|74)(45|65)(52|72))|((43|63)(52|72)(45|65)(41|61)(54|74)(45|65))|((44|64)(52|72)(4f|6f)(50|70)))(20|09|0A|0B|0C|0D)+(((40))|((44|64)(41|61)(54|74)(41|61)(42|62)(41|61)(53|73)(45|65))|((46|66)(55|75)(4e|6e)(43|63)(54|74)(49|69)(4f|6f)(4e|6e))|((49|69)(4e|6e)(44|64)(45|65)(58|78))|((4c|6c)(4f|6f)(47|67)(49|69)(4e|6e))|((50|70)(52|72)(4f|6f)(43|63))|((52|72)(4f|6f)(4c|6c)(45|65))|((53|73)(43|63)(48|68)(45|65)(4d|6d)(41|61))|((54|74)(41|61)(42|62)(4c|6c)(45|65))|((54|74)(52|72)(49|69)(47|67)(47|67)(45|65)(52|72))|((55|75)(53|73)(45|65)(52|72))|((56|76)(49|69)(45|65)(57|77))))|((((41|61)(4c|6c)(54|74)(45|65)(52|72))|((43|63)(52|72)(45|65)(41|61)(54|74)(45|65))|((44|64)(45|65)(43|63)(4c|6c)(41|61)(52|72)(45|65))|((44|64)(45|65)(4c|6c)(45|65)(54|74)(45|65)(20|09|0A|0B|0C|0D)+(46|66)(52|72)(4f|6f)(4d|6d))|((44|64)(52|72)(4f|6f)(50|70))|((49|69)(4e|6e)(53|73)(45|65)(52|72)(54|74)))(20|09|0A|0B|0C|0D)*(5b))|((44|64)(45|65)(43|63)(4c|6c)(41|61)(52|72)(45|65)(20|09|0A|0B|0C|0D)+(((40))|((43|63)(55|75)(52|72)(53|73)(4f|6f)(52|72))|((54|74)(41|61)(42|62)(4c|6c)(45|65))|((58|78)(4d|6d)(4c|6c))))|((44|64)(45|65)(4c|6c)(45|65)(54|74)(45|65)(((20|09|0A|0B|0C|0D)+(54|74)(4f|6f)(50|70))|((20|09|0A|0B|0C|0D)*(5b))))|((((44|64)(45|65)(4c|6c)(45|65)(54|74)(45|65)(20|09|0A|0B|0C|0D)+(46|66)(52|72)(4f|6f)(4d|6d))|((44|64)(45|65)(4c|6c)(45|65)(54|74)(45|65)))(20|09|0A|0B|0C|0D)+(((40))|((44|64)(42|62)(4f|6f))|((54|74)(42|62)(4c|6c))|((48|68)(42|62)(4d|6d)(20|09|0A|0B|0C|0D)*(2e))|((54|74)(45|65)(4d|6d)(50|70)(44|64)(42|62))|((4d|6d)(41|61)(53|73)(54|74)(45|65)(52|72))))|((49|69)(4e|6e)(53|73)(45|65)(52|72)(54|74)(20|09|0A|0B|0C|0D)+(((40))|((49|69)(4e|6e)(54|74)(4f|6f))|((54|74)(42|62)(4c|6c))|((56|76)(57|77))))|((54|74)(52|72)(55|75)(4e|6e)(43|63)(41|61)(54|74)(45|65)(((4c|6c)(4f|6f)(47|67))|((20|09|0A|0B|0C|0D)+(54|74)(41|61)(42|62)(4c|6c)(45|65))))|((0043|0063)(0041|0061)(0053|0073)(0054|0074)(0020|0009|000A|000B|000C|000D)*(0028))|((((0045|0065)(0058|0078)(0045|0065)(0043|0063))|((0045|0065)(0058|0078)(0045|0065)(0043|0063)(0055|0075)(0054|0074)(0045|0065)))(((0020|0009|000A|000B|000C|000D)+)|((0028))|((005b))))|((0053|0073)(0043|0063)(0052|0072)(0049|0069)(0050|0070)(0054|0074)(0020|0009|000A|000B|000C|000D)+(0053|0073)(0052|0072)(0043|0063))|((((0041|0061)(004c|006c)(0054|0074)(0045|0065)(0052|0072))|((0043|0063)(0052|0072)(0045|0065)(0041|0061)(0054|0074)(0045|0065))|((0044|0064)(0052|0072)(004f|006f)(0050|0070)))(0020|0009|000A|000B|000C|000D)+(((0040))|((0044|0064)(0041|0061)(0054|0074)(0041|0061)(0042|0062)(0041|0061)(0053|0073)(0045|0065))|((0046|0066)(0055|0075)(004e|006e)(0043|0063)(0054|0074)(0049|0069)(004f|006f)(004e|006e))|((0049|0069)(004e|006e)(0044|0064)(0045|0065)(0058|0078))|((004c|006c)(004f|006f)(0047|0067)(0049|0069)(004e|006e))|((0050|0070)(0052|0072)(004f|006f)(0043|0063))|((0052|0072)(004f|006f)(004c|006c)(0045|0065))|((0053|0073)(0043|0063)(0048|0068)(0045|0065)(004d|006d)(0041|0061))|((0054|0074)(0041|0061)(0042|0062)(004c|006c)(0045|0065))|((0054|0074)(0052|0072)(0049|0069)(0047|0067)(0047|0067)(0045|0065)(0052|0072))|((0055|0075)(0053|0073)(0045|0065)(0052|0072))|((0056|0076)(0049|0069)(0045|0065)(0057|0077))))|((((0041|0061)(004c|006c)(0054|0074)(0045|0065)(0052|0072))|((0043|0063)(0052|0072)(0045|0065)(0041|0061)(0054|0074)(0045|0065))|((0044|0064)(0045|0065)(0043|0063)(004c|006c)(0041|0061)(0052|0072)(0045|0065))|((0044|0064)(0045|0065)(004c|006c)(0045|0065)(0054|0074)(0045|0065)(0020|0009|000A|000B|000C|000D)+(0046|0066)(0052|0072)(004f|006f)(004d|006d))|((0044|0064)(0052|0072)(004f|006f)(0050|0070))|((0049|0069)(004e|006e)(0053|0073)(0045|0065)(0052|0072)(0054|0074)))(0020|0009|000A|000B|000C|000D)*(005b))|((0044|0064)(0045|0065)(0043|0063)(004c|006c)(0041|0061)(0052|0072)(0045|0065)(0020|0009|000A|000B|000C|000D)+(((0040))|((0043|0063)(0055|0075)(0052|0072)(0053|0073)(004f|006f)(0052|0072))|((0054|0074)(0041|0061)(0042|0062)(004c|006c)(0045|0065))|((0058|0078)(004d|006d)(004c|006c))))|((0044|0064)(0045|0065)(004c|006c)(0045|0065)(0054|0074)(0045|0065)(((0020|0009|000A|000B|000C|000D)+(0054|0074)(004f|006f)(0050|0070))|((0020|0009|000A|000B|000C|000D)*(005b))))|((((0044|0064)(0045|0065)(004c|006c)(0045|0065)(0054|0074)(0045|0065)(0020|0009|000A|000B|000C|000D)+(0046|0066)(0052|0072)(004f|006f)(004d|006d))|((0044|0064)(0045|0065)(004c|006c)(0045|0065)(0054|0074)(0045|0065)))(0020|0009|000A|000B|000C|000D)+(((0040))|((0044|0064)(0042|0062)(004f|006f))|((0054|0074)(0042|0062)(004c|006c))|((0048|0068)(0042|0062)(004d|006d)(0020|0009|000A|000B|000C|000D)*(002e))|((0054|0074)(0045|0065)(004d|006d)(0050|0070)(0044|0064)(0042|0062))|((004d|006d)(0041|0061)(0053|0073)(0054|0074)(0045|0065)(0052|0072))))|((0049|0069)(004e|006e)(0053|0073)(0045|0065)(0052|0072)(0054|0074)(0020|0009|000A|000B|000C|000D)+(((0040))|((0049|0069)(004e|006e)(0054|0074)(004f|006f))|((0054|0074)(0042|0062)(004c|006c))|((0056|0076)(0057|0077))))|((0054|0074)(0052|0072)(0055|0075)(004e|006e)(0043|0063)(0041|0061)(0054|0074)(0045|0065)(((004c|006c)(004f|006f)(0047|0067))|((0020|0009|000A|000B|000C|000D)+(0054|0074)(0041|0061)(0042|0062)(004c|006c)(0045|0065))))/;

    if (sqlregex.test(objValue.value)) {
        return false;
    }
    
    return true;
}


function TestEmail(objId, strError) {

    var objValue = document.getElementById(objId);

    var ret = true;
    if (objValue.value.length > 0 && !validateEmail(objValue.value)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + ": Enter a valid Email address ";
        } //if                                               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if 
    return ret;
}
function TestLessThan(objId, strLessThan, strError) {

    var objValue = document.getElementById(objId);
    var ret = true;
    if (isNaN(objValue.value)) {
        sfm_show_error_msg(objValue.name + ": Should be a number ", objValue);
        ret = false;
    } //if 
    else
        if (eval(objValue.value) >= eval(strLessThan)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + " : value should be less than " + strLessThan;
        } //if               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if   
    return ret;
}

function TestGreaterThan(objId, strGreaterThan, strError) {

    var objValue = document.getElementById(objId);
    var ret = true;
    if (isNaN(objValue.value)) {
        sfm_show_error_msg(objValue.name + ": Should be a number ", objValue);
        ret = false;
    } //if 
    else
        if (eval(objValue.value) <= eval(strGreaterThan)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + " : value should be greater than " + strGreaterThan;
        } //if               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if  
    return ret;
}
function TestRegExp(objId, strRegExp, strError) {

    var objValue = document.getElementById(objId);
    var ret = true;
    if (objValue.value.length > 0 &&
        !objValue.value.match(strRegExp)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + ": Invalid characters found ";
        } //if                                                               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    } //if return ret;
}
function TestDontSelect(objId, dont_sel_index, strError) {

    var objValue = document.getElementById(objId);
    var ret = true;
    if (objValue.selectedIndex == null) {
        sfm_show_error_msg("ERROR: dontselect command for non-select Item");
        ret = false;
    }
    if (objValue.selectedIndex == eval(dont_sel_index)) {
        if (!strError || strError.length == 0) {
            strError = objValue.name + ": Please Select one option ";
        } //if                                                               
        sfm_show_error_msg(strError, objValue);
        ret = false;
    }
    return ret;
}
function TestSelectOneRadio(objId, strError) {

    var objValue = document.getElementById(objId);
    
    var objradio = objValue.form.elements[objValue.name];
    var one_selected = false;
    for (var r = 0; r < objradio.length; r++) {
        if (objradio[r].checked) {
            one_selected = true;
            break;
        }
    }
    if (false == one_selected) {
        if (!strError || strError.length == 0) {
            strError = "Please select one option from " + objValue.name;
        }
        sfm_show_error_msg(strError, objValue);
    }
    return one_selected;
}


function trim(str) {
    return str.replace(/^\s+|\s+$/g, '');
}

function TestPhoneNumber(objId,   // element to be validated
                         //infofield,  // id of element to receive info/error msg
                         strError )   // true if required
{
    var objValue = document.getElementById(objId);

    if (objValue.value == '') return true; // if no input passed then we call it good. 
    
    var tfld = trim(objValue.value);  // value of field with whitespace trimmed off
    var telnr = /^\+?[0-9 ()-]+[0-9]$/;
    if (!telnr.test(tfld)) {
        //msg(infofield, "error", "ERROR: not a valid telephone number. Characters permitted are digits, space ()- and leading +");
        strError = "Not a valid telephone number. Characters permitted are digits, space ()- and leading +";
        sfm_show_error_msg(strError, objValue);
        //setfocus(objValue);
        return false;
    }

    var numdigits = 0;
    for (var j = 0; j < tfld.length; j++)
        if (tfld.charAt(j) >= '0' && tfld.charAt(j) <= '9') numdigits++;

    if (numdigits < 6) {
        //msg(infofield, "error", "ERROR: " + numdigits + " digits - too short");
        //setfocus(objValue);
        strError = numdigits + " digits - too short";
        sfm_show_error_msg(strError, objValue);
        return false;
    }
//    if (numdigits > 14)
//        msg(infofield, "warn", numdigits + " digits - check if correct");
//    else {
//        if (numdigits < 10)
//            msg(infofield, "warn", "Only " + numdigits + " digits - check if correct");
//        else
//            msg(infofield, "warn", "");
//    }
    return true;
}
