﻿// Make .net client side validators block level by default
function ValidatorUpdateDisplay(val)
{
    if (typeof (val.display) == "string")
    {
        if (val.display == "None")
        {
            return;
        }
        if (val.display == "Dynamic")
        {
            val.style.display = val.isvalid ? "none" : "block";
            return;
        }
    }
    if ((navigator.userAgent.indexOf("Mac") > -1) && (navigator.userAgent.indexOf("MSIE") > -1))
    {
        val.style.display = "block";
    }
    val.style.visibility = val.isvalid ? "hidden" : "visible";
}

// Fix date validator so it doesn't give a javascript error on bad format
function ValidatorConvert(op, dataType, val)
{
    function GetFullYear(year)
    {
        var twoDigitCutoffYear = val.cutoffyear % 100;
        var cutoffYearCentury = val.cutoffyear - twoDigitCutoffYear;
        return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year));
    }
    var num, cleanInput, m, exp;
    if (dataType == "Integer")
    {
        exp = /^\s*[-\+]?\d+\s*$/;
        if (op.match(exp) == null)
            return null;
        num = parseInt(op, 10);
        return (isNaN(num) ? null : num);
    }
    else if (dataType == "Double")
    {
        exp = new RegExp("^\\s*([-\\+])?(\\d*)\\" + val.decimalchar + "?(\\d*)\\s*$");
        m = op.match(exp);
        if (m == null)
            return null;
        if (m[2].length == 0 && m[3].length == 0)
            return null;
        cleanInput = (m[1] != null ? m[1] : "") + (m[2].length > 0 ? m[2] : "0") + (m[3].length > 0 ? "." + m[3] : "");
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num);
    }
    else if (dataType == "Currency")
    {
        var hasDigits = (val.digits > 0);
        var beginGroupSize, subsequentGroupSize;
        var groupSizeNum = parseInt(val.groupsize, 10);
        if (!isNaN(groupSizeNum) && groupSizeNum > 0)
        {
            beginGroupSize = "{1," + groupSizeNum + "}";
            subsequentGroupSize = "{" + groupSizeNum + "}";
        }
        else
        {
            beginGroupSize = subsequentGroupSize = "+";
        }
        exp = new RegExp("^\\s*([-\\+])?((\\d" + beginGroupSize + "(\\" + val.groupchar + "\\d" + subsequentGroupSize + ")+)|\\d*)"
                        + (hasDigits ? "\\" + val.decimalchar + "?(\\d{0," + val.digits + "})" : "")
                        + "\\s*$");
        m = op.match(exp);
        if (m == null)
            return null;
        if (m[2].length == 0 && hasDigits && m[5].length == 0)
            return null;
        cleanInput = (m[1] != null ? m[1] : "") + m[2].replace(new RegExp("(\\" + val.groupchar + ")", "g"), "") + ((hasDigits && m[5].length > 0) ? "." + m[5] : "");
        num = parseFloat(cleanInput);
        return (isNaN(num) ? null : num);
    }
    else if (dataType == "Date")
    {
        var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$");
        m = op.match(yearFirstExp);
        var day, month, year;
        if (op.length == 10)
        {
            if (m != null && (m[2].length == 4 || val.dateorder == "ymd"))
            {
                day = m[6];
                month = m[5];
                year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10))
            }
            else
            {
                if (val.dateorder == "ymd")
                {
                    return null;
                }
                var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$");
                m = op.match(yearLastExp);
                if (m == null)
                {
                    return null;
                }
                if (val.dateorder == "mdy")
                {
                    day = m[3];
                    month = m[1];
                }
                else
                {
                    day = m[1];
                    month = m[3];
                }
                year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10))
            }
            month -= 1;
            var date = new Date(year, month, day);
            if (year < 100)
            {
                date.setFullYear(year);
            }
            return (typeof (date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
        } else
        {
            return null;
        }
    }
    else
    {
        return op.toString();
    }
}

// fix jquery date picker issue
function ValidatorOnChange(event)
{
    if (!event)
    {
        event = window.event;
    }
    Page_InvalidControlToBeFocused = null;
    var targetedControl;
    if ((typeof (event.srcElement) != "undefined") && (event.srcElement != null))
    {
        targetedControl = event.srcElement;
    }
    else
    {
        targetedControl = event.target;
    }
    var vals;
    if (typeof (targetedControl.Validators) != "undefined")
    {
        vals = targetedControl.Validators;
    }
    else
    {
        if (targetedControl.tagName.toLowerCase() == "label")
        {
            targetedControl = document.getElementById(targetedControl.htmlFor);
            vals = targetedControl.Validators;
        }
    }
    var i;
    if (vals != undefined)
    {
        for (i = 0; i < vals.length; i++)
        {
            ValidatorValidate(vals[i], null, event);
        }
    }
    ValidatorUpdateIsValid();
}

function RegularExpressionValidatorEvaluateIsValid(val) {
    var value = ValidatorGetValue(val.controltovalidate);
    if (ValidatorTrim(value).length == 0)
        return true;
    var rx = null;
    if (val.validationexpression.indexOf("(?i)") >= 0) {
        rx = new RegExp(val.validationexpression.replace("(?i)", ""), "i");
    }
    else {
        rx = new RegExp(val.validationexpression);
    }
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}

function ValidationGroupEnable(validationGroupName, isEnable) {
    for (i = 0; i < Page_Validators.length; i++) {
        if (Page_Validators[i].validationGroup == validationGroupName) {
            ValidatorEnable(Page_Validators[i], isEnable);
        }
    }
}
