// http://blogs.msdn.com/phaniraj/archive/2007/04/16/howto-change-visible-tab-using-javascript-in-the-ms-AJAX-tabcontrol.aspx
var RegularExpressionValidator = {

    process: function() {
        try {
            var noOfValidators = Page_Validators.length;

            // Use rever order for validator array
            for (var validatorIndex = noOfValidators - 1; validatorIndex >= 0; validatorIndex--) {
                var validator = Page_Validators[validatorIndex];

                if (!validator.isvalid) {
                    var tabPanel = undefined;
                    var controltovalidate = document.getElementById(validator.controltovalidate);

                    if (validator.parentElement != undefined) {
                        tabPanel = validator.parentElement.control;
                    }
                    else {
                        // In Mozilla element.parentElement == undefined. Use element.parentNode
                        if (validator.parentNode != undefined && validator.parentNode.control != undefined) {
                            tabPanel = validator.parentNode.control;
                        }
                        else {
                            try {
                                tabPanel = controltovalidate.parentNode.control;
                            }
                            catch (Error) {
                                RegularExpressionValidator.openParent(validator);
                            }
                        }
                    }

                    if (tabPanel != undefined) {
                        var tabContainer = tabPanel.get_owner();

                        if (tabContainer != undefined) {
                            tabContainer.set_activeTabIndex(tabPanel.get_tabIndex());
                            // Recursive open tabs
                            RegularExpressionValidator.openParent(document.getElementById(tabContainer.get_id()));
                        }
                    }
                    else {
                        RegularExpressionValidator.openParent(validator);
                    }

                    controltovalidate.focus();
                }
            }
        }
        catch (Error) {
        }
    },

    openParent: function(element) {
        try {
            try {
                // In Mozilla element.parentElement == undefined. Use element.parentNode
                var tabPanel = null;
                if (element.parentElement != undefined) {
                    tabPanel = element.parentElement.control;
                }
                else {
                    tabPanel = element.parentNode.control;
                }

                var tabContainer = tabPanel.get_owner();
                tabContainer.set_activeTabIndex(tabPanel.get_tabIndex());
                RegularExpressionValidator.openParent(tabContainer);
            }
            catch (Error) {
                if (element.parentElement != undefined) {
                    RegularExpressionValidator.openParent(element.parentElement);
                }
                else {
                    RegularExpressionValidator.openParent(element.parentNode);
                }
            }
        }
        catch (Error) {
        }
    },

    manualValidation: function(validationGroup) {
        var noOfValidators = Page_Validators.length;
        for (var validatorIndex = 0; validatorIndex < noOfValidators; validatorIndex++) {
            var validator = Page_Validators[validatorIndex];
            // Check ValidationGroup property
            if (validationGroup != undefined && validationGroup != validator.validationGroup) {
                continue;
            }

            ValidatorValidate(validator);
            if (!validator.isvalid) {
                return false;
            }
        }

        return true;
    }
}
