
function ValidatorValidateEx(val, enable, validationGroup, event) {
    val.isvalid = true;
    if ((typeof(val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup)) {
        if (typeof(val.evaluationfunction) == "function") {
            val.isvalid = val.evaluationfunction(val);
            if (!val.isvalid && Page_InvalidControlToBeFocused == null &&
                typeof(val.focusOnError) == "string" && val.focusOnError == "t") {
                ValidatorSetFocus(val, event);
            }
        }
    }
    if(!enable)
    {
		ValidatorUpdateDisplay(val);
	}
	else
    {
		var isvalid = val.isvalid;
		val.isvalid = true;
		ValidatorUpdateDisplay(val);
		val.isvalid = isvalid;
	}
}

function ValidatorEnableEx(val, enable) {
    val.enabled = (enable != false);
    ValidatorValidateEx(val, enable);
    ValidatorUpdateIsValid();
}



///
/// NetX.UI.Validation namespace
///
if(typeof(Type) == "undefined")
{
    NetX = {};
    NetX.UI = {};
    String.prototype.trim = function() { this.replace(/^\s+|\s+$/, ''); };
    String.isNullOrEmpty = function(s) {
        if(s == null)
            return true;
        else if(s.trim().length == 0)
            return true;
        else
            return false;
    };
}
else
{
    Type.registerNamespace('NetX.UI.Validation');
}

NetX.UI.Validation =
{
    //
    // Date Validation
    //
    // Date Range in .NET
    // Minimum: 01/01/0001
    // Maximum: 12/31/9999
    //
    isValidDate: function(day, month, year) {

        if(typeof (month) == 'undefined')// && typeof(year) == 'undefined')
        {
            var list = day.split('/');
            day = list[0];
            month = list[1];
            year = list[2];
        }

        day = parseInt(day);
        month = parseInt(month);
        year = parseInt(year);

        if(isNaN(day) || isNaN(month) || isNaN(year))
            return false;

        if(year < 1 || year > 9999)
            return false;

        if(month < 1 || month > 12)
            return false;

        var daysInMonth = this._daysInMonth[month - 1];
        if(month == 2 && this.isLeapYear(year))
            daysInMonth++;

        if(day < 1 || day > daysInMonth)
            return false;

        return true;
    },

    isLeapYear: function(year) {
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    },

    _daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
}

function MultiplePartDateValidatorEvaluateIsValid(val) {
    var day = ValidatorTrim(ValidatorGetValue(val.daycontrol));
    var month = ValidatorTrim(ValidatorGetValue(val.monthcontrol));
    var year = ValidatorTrim(ValidatorGetValue(val.yearcontrol));
    if(String.isNullOrEmpty(day) || String.isNullOrEmpty(month) || String.isNullOrEmpty(year))
        return true;
    else
        return NetX.UI.Validation.isValidDate(day, month, year);
}

function __RegularExpressionValidatorEvaluateIsValid(val)
{
	var value = ValidatorGetValue(val.controltovalidate);
	if (ValidatorTrim(value).length == 0)
		return true;
	var rx;// = new RegExp(val.validationexpression);
	if(val.validationexpression.indexOf('(?i)') != -1)
		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]);
}