﻿function XBrowserAddEventHandler(target,eventName,handlerName) {
	if(!target) return;
	if (target.addEventListener) {
		target.addEventListener(eventName, function(e){eval(handlerName)(e);}, false);
	} else if (target.attachEvent) {
		target.attachEvent("on" + eventName, function(e){eval(handlerName)(e);});
	} else {
		var originalHandler = target["on" + eventName];
		if (originalHandler) {
			target["on" + eventName] = function(e){originalHandler(e);eval(handlerName)(e);};
		} else {
			target["on" + eventName] = eval(handlerName);
		}
	}
}

function AddValidatingEvents()
{
    try { if (!Page_Validators) return; } catch (e) { return; }

    for (iValidators=0; iValidators<Page_Validators.length; iValidators++) {
        if (Page_Validators[iValidators].oldFunction == null) {
            Page_Validators[iValidators].oldFunction = Page_Validators[iValidators].evaluationfunction;
        }
        Page_Validators[iValidators].evaluationfunction = function (validator)
            {
                var result = validator.oldFunction(validator);
                validator.isvalid = result;
                if (!validator.isvalid && typeof(validator.focusOnError) == 'string' && validator.focusOnError == 't'
                      && document.getElementById(validator.controltovalidate).nodeName.toLowerCase() == 'span')
                {
                    var radioButtons = document.getElementById(validator.controltovalidate).getElementsByTagName('input');
                    if (radioButtons.length > 0) { radioButtons[0].focus(); radioButtons[0].blur(); }
                }
                myValidatorUpdateDisplay(validator);
                return result;
            }
    }
}

function myValidatorUpdateDisplay(validatorToUpdate)
{
    var divIsValid = true;
    var validators = validatorToUpdate.parentNode.getElementsByTagName("span");
    for (iVal=0; iVal<validators.length; iVal++)
    {
        if ((typeof(validators[iVal].enabled) == 'undefined' || validators[iVal].enabled))
        {
            if (!validators[iVal].isvalid) { divIsValid = false; break; }
        }
    }

    if (!divIsValid)
        showError(validatorToUpdate.id);
    else
        hideError(validatorToUpdate.id);
}

function showError(validatorId)
{
    var parentDiv = document.getElementById(validatorId).parentNode.parentNode;

    if (parentDiv.className.indexOf('formelement') > -1 && parentDiv.className.indexOf('errormsg') < 0)
        parentDiv.className += ' errormsg';
}

function hideError(validatorId)
{
    var parentDiv = document.getElementById(validatorId).parentNode.parentNode;

    if (parentDiv.className.indexOf('formelement') > -1)
        parentDiv.className = parentDiv.className.replace(' errormsg', '');
}

function Validator_Disable(validator)
{
    validator.enabled = false;
    validator.isvalid = true;
    myValidatorUpdateDisplay(validator);
    ValidatorUpdateDisplay(validator);
    ValidatorUpdateIsValid();
}

function Validator_Enable(validator)
{
    validator.enabled = true;
    var result = validator.oldFunction(validator);
    validator.isvalid = result;
    ValidatorUpdateIsValid();
}

function RegularExpressionValidateControl(controlidtovalidate, pattern, validateempty)
{
    validateempty = (typeof(RegularExpressionValidateControl.arguments[2])=='undefined')
                        ? false : RegularExpressionValidateControl.arguments[2];
    var value = ValidatorGetValue(controlidtovalidate);
    if (!validateempty && ValidatorTrim(value).length == 0)
        return true;
    var rx = new RegExp(pattern);
    var matches = rx.exec(value);
    return (matches != null && value == matches[0]);
}

function RequiredFieldValidateControl(controlidtovalidate, initialvalue)
{
    initialvalue = (typeof(RequiredFieldValidateControl.arguments[1])=='undefined')
                        ? '' : RequiredFieldValidateControl.arguments[1];
    return (ValidatorTrim(ValidatorGetValue(controlidtovalidate)) != ValidatorTrim(initialvalue));
}

function getControlToValidate(control)
{
    if (control.tagName.toLowerCase() != "input" && control.tagName.toLowerCase() != "textarea"
        && control.tagName.toLowerCase() != "select")
    {
        if (control.childNodes.length == 0)
            return null;
        else
            return control.childNodes[0];
    }
    return control;
}
function executeValidatorsOfControl(control)
{
    control = getControlToValidate(control);
    if (!control)
        return;

    var vals;
    try { vals=control.Validators; if (vals.length < 1) return; } catch (e) { return; }
    var i;

    for (i = 0; i < vals.length; i++)
    {
        ValidatorValidate(vals[i]);
    }
    ValidatorUpdateIsValid();
}

function blockValidatorsOfControl(control)
{
    control = getControlToValidate(control);
    if (!control)
        return;

    var vals;
    try { vals=control.Validators; if (vals.length < 1) return; } catch (e) { return; }
    var i;

    for (i = 0; i < vals.length; i++)
    {
        Validator_Disable(vals[i]);
    }
}
function unblockValidatorsOfControl(control)
{
    control = getControlToValidate(control);
    if (!control)
        return;

    var vals;
    try { vals=control.Validators; if (vals.length < 1) return; } catch (e) { return; }
    var i;

    for (i = 0; i < vals.length; i++)
    {
        Validator_Enable(vals[i]);
    }
}
