﻿/// <reference name="MicrosoftAjax.js" />
/// <reference name="MicrosoftAjaxWebForms.js" />

var _formEnabled = true;
var _activeElement;
var _mouseElement;
var _lastPopUpClientId;
var _submitting = false;

var _treeToggleNodeFunctionWrapped;

if (window.addEventListener) {
    window.addEventListener('load', WindowLoadHandler, false);
} else if (window.attachEvent) {
    window.attachEvent('onload', WindowLoadHandler);
}

if (document.body)
{
    if (document.addEventListener) {
        document.body.addEventListener('mousedown', ESWebForm_DocumentMouseDown, false);
        document.body.addEventListener('keydown', ESWebForm_DocumentKeyDown, false);
    }
    else if (document.attachEvent) {
        document.body.attachEvent('onmousedown', ESWebForm_DocumentMouseDown);
        document.body.attachEvent('onkeydown', ESWebForm_DocumentKeyDown);
    }
}

if ((typeof (Sys) !== "undefined") && (Sys.WebForms !== undefined))
{
    var updateCovers = new Array();
    var requestManager = Sys.WebForms.PageRequestManager.getInstance();

    function BeginRequestHandler(sender, args)
    {
        document.body.style.cursor = "wait";
        document.body.className = "Waiting";
        
        if (PopUpPanelExists())
            return;
        
        var postBackPanel = args.get_postBackElement();

        if ((typeof (updatePanelsData) != "undefined"))
        {
            for (i = 0; i < updatePanelsData.length; i++)
            {
                var singleUpdatePanelData = updatePanelsData[i];

                if (singleUpdatePanelData.length == 2)
                {
                    var providerPanelID = singleUpdatePanelData[0];
                    var consumerPanelIDs = singleUpdatePanelData[1];

                    var providerPanel = WebForm_GetElementById(providerPanelID);

                    if (providerPanel && !IsInPopUpControl(postBackPanel) && ESWebForm_ElementContains(providerPanel, postBackPanel))
                    {
                        for (j = 0; j < consumerPanelIDs.length; j++)
                        {
                            var consumerPanelID = consumerPanelIDs[j];
                            var consumerPanel = WebForm_GetElementById(consumerPanelID);

                            if (consumerPanel)
                                CreateUpdateCover(consumerPanel);
                        }
                    }
                }
            }
        }
    }

    function EndRequestHandler(sender, args)
    {
        document.body.className = "";
        document.body.style.cursor = "";

        DestroyUpdateCovers();

        if (typeof (extraBasePath) != "undefined") {

            var expression = extraBasePath.toLowerCase()
            var tagNames = ["INPUT", "IMG"];

            for (var i = 0; i < tagNames.length; i++) {
                var elements = document.getElementsByTagName(tagNames[i]);
                for (var j = 0; j < elements.length; j++) {
                    var source = elements[j].src.toLowerCase();
                    if (source.indexOf("webresource") == -1)
                        elements[j].src = source.replace(expression, "");
                }
            }
        }

        FixClientUrls();
        FixMenuZOrder();
    }

    requestManager.add_beginRequest(BeginRequestHandler);
    requestManager.add_endRequest(EndRequestHandler);

    function CreateUpdateCover(updatePanel)
    {
        var updatePanelPos = WebForm_GetElementPosition(updatePanel);
        
        var updateCover = document.createElement("DIV");
        updateCovers.push(updateCover);
        
        updateCover.style.position = "absolute";
        updateCover.style.display = "none";
        
        try
        {
            updateCover.style.filter = "alpha(opacity=20)";
        }
        catch (ex)
        {
        }
        
        updateCover.className = "UpdateCover";
        
        document.body.appendChild(updateCover);
        
        WebForm_SetElementX(updateCover, updatePanelPos.x);
        WebForm_SetElementY(updateCover, updatePanelPos.y);
        
        WebForm_SetElementHeight(updateCover, updatePanelPos.height);
        WebForm_SetElementWidth(updateCover, updatePanelPos.width);
        
        updateCover.style.display = "";
    }

    function DestroyUpdateCovers()
    {
        while (updateCovers.length > 0)
        {
            var updateCover = updateCovers.pop();
            updateCover.parentNode.removeChild(updateCover);
        }
    }

    function IsInPopUpControl(element)
    {
        var pathElement = element.parentElement;
        
        while (pathElement != null)
        {
            if (pathElement.getAttribute("isPopUpControl") == "true")
                return true;
            
            pathElement = pathElement.parentElement;
        }
        return false;
    }

    function PopUpPanelExists()
    {
        var panels = WebForm_GetElementsByTagName(document.body, "DIV");
        
        for (var i = 0; i < panels.length; i++)
        {
            if (panels[i].getAttribute("isPopUpPanel") == "true")
                return true;
        }
        return false;
    }
}

function WindowLoadHandler()
{
    if (typeof(document.activeElement) == 'undefined')
    {
        for (var i = 0; i < document.forms.length; i++)
        {
            var elements = document.forms[i].elements;
            
            for (var j = 0; j < elements.length; j++)
            {
                elements[j].onfocus = function() { _activeElement = this; }
                elements[j].onblur = function() { _activeElement = null; }
            }
        }
    }
    
    var forms = document.body.getElementsByTagName("form");
    
    for (var i = 0; i < forms.length; i++)
    {
        var elements = forms[i].elements;
        
        for (var j = 0; j < elements.length; j++)
        {
            var element = elements[j];
            
            if (element.addEventListener)
                element.addEventListener('focus', ElementFocusHandler, false);
            else if (element.attachEvent)
                element.attachEvent('onfocus', ElementFocusHandler);
        }
    }

    FixClientUrls();
    FixMenuZOrder();
}

function PageIsDirty() {

    var tagNames = ['input', 'select'];

    for (var i = 0; i < tagNames.length; i++) {

        var elements = ESWebForm_GetElementsByTagName(document.body, tagNames[i]);

        for (var j = 0; j < elements.length; j++) {

            var element = elements[j];
            var initialValue = element.getAttribute('initialValue');

            if (initialValue != null) {

                var currentValue;

                switch (element.tagName.toLowerCase()) {
                    case "input":
                        currentValue = (element.type == "checkbox") ? element.checked : element.value;
                        break;
                    case "select":
                        currentValue = element.value;
                        break;
                }

                if (initialValue != currentValue)
                    return true;
            }
        }
    }

    return false;
}

function NotifySubmitting() {
    _submitting = true;
}

function IsSubmitting() {
    return _submitting;
}

function ElementFocusHandler(e)
{
    if (!e)
        e = window.event;
    
    if (!e)
        return;
    
    var element = e.srcElement;
    
    if (!element)
        element = e.target;
    
    var hiddenField = document.getElementById ? document.getElementById("__LASTFOCUS") : document.all ? document.all["__LASTFOCUS"] : null;
    
    if (hiddenField)
        hiddenField.value = element.name;
}

function RestoreFocus(elementName)
{
    if (!elementName)
        return;
    
    var forms = document.body.getElementsByTagName("form");
    
    for (var i = 0; i < forms.length; i++)
    {
        var element = forms[i].elements[elementName];
        
        if (element)
        {
            try
            {
                element.focus();
            }
            catch (ex)
            {
            }
            
            break;
        }
    }
}

function EnableForm()
{
    SetFormEnabled(true);
}

function DisableForm()
{
    SetFormEnabled(false);
}

function SetFormEnabled(value)
{
    if (_formEnabled == value)
        return;
    
    document.body.className = value ? "" : "Disabled";
    _formEnabled = value;
}

function HideNotPrintableElements(keepBackup, excludePrinter)
{
    for (var i = 0; i < document.all.length; i++)
    {
        var element = document.all[i];

        if (IsNotPrintableElement(element, excludePrinter)) {
            if (keepBackup)
                element.originalDisplay = element.style.display;

            element.style.display = 'none';
        } else if ((element.tagName.toLowerCase() == "td") && !element.hasChildNodes()) {
            element.innerText = " ";
        }
    }
}

function ShowNotPrintableElements(useBackup, excludePrinter)
{
    for (var i = 0; i < document.all.length; i++)
    {
        var element = document.all[i];

        if (IsNotPrintableElement(element, excludePrinter))
        {
            if (useBackup)
                element.style.display = element.originalDisplay ? element.originalDisplay : '';
            else
                element.style.display = '';
        }
    }
}

function IsNotPrintableElement(element, excludePrinter)
{
    return (element.getAttribute('printable') == 'false') && (!excludePrinter || (element.id != 'tdPrinter')) //||
        //((element.tagName.toLowerCase() == "td") && !element.hasChildNodes());
}

function SetHeaderVisible(value) {
    var tblHeader = ESWebForm_GetElementById("tblHeader");
    if (tblHeader) tblHeader.style.display = value ? "" : "none";
}

function ESWebForm_GetElementById(elementId)
{
    if (document.getElementById)
        return document.getElementById(elementId);
    else if (document.all)
        return document.all[elementId];
    else
        return null;
}

function ESWebForm_GetElementByTagName(element, tagName)
{
    var elements = ESWebForm_GetElementsByTagName(element, tagName);
    
    if (elements && elements.length > 0)
        return elements[0];
    else
        return null;
}

function ESWebForm_GetElementsByTagName(element, tagName)
{
    if (element && tagName)
    {
        if (element.getElementsByTagName)
            return element.getElementsByTagName(tagName);
        else if (element.all && element.all.tags)
            return element.all.tags(tagName);
    }
    return null;
}

function ESWebForm_GetElementPosition(element)
{
    var result = new Object();
    
    result.x = 0;
    result.y = 0;
    result.width = 0;
    result.height = 0;
    
    if (element.offsetParent)
    {
        result.x = element.offsetLeft;
        result.y = element.offsetTop;
        
        var parent = element.offsetParent;
        
        while (parent && (parent.style.position == ''))
        {
            result.x += parent.offsetLeft;
            result.y += parent.offsetTop;
            
            var parentTagName = parent.tagName.toLowerCase();
            
            if (parentTagName != "table" &&
                parentTagName != "body" && 
                parentTagName != "html" && 
                parentTagName != "div" && 
                parent.clientTop && 
                parent.clientLeft)
            {
                result.x += parent.clientLeft;
                result.y += parent.clientTop;
            }
            parent = parent.offsetParent;
        }
    }
    else if (element.left && element.top)
    {
        result.x = element.left;
        result.y = element.top;
    }
    else
    {
        if (element.x)
            result.x = element.x;
        if (element.y)
            result.y = element.y;
    }
    
    if (element.offsetWidth && element.offsetHeight)
    {
        result.width = element.offsetWidth;
        result.height = element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && element.style.pixelHeight)
    {
        result.width = element.style.pixelWidth;
        result.height = element.style.pixelHeight;
    }
    return result;
}

function ESWebForm_SetElementHeight(element, height)
{
    if (element && element.style)
        element.style.height = height + "px";
}

function ESWebForm_SetElementWidth(element, width)
{
    if (element && element.style) 
        element.style.width = width + "px";
}

function ESWebForm_SetElementX(element, x)
{
    if (element && element.style)
        element.style.left = x + "px";
}

function ESWebForm_SetElementY(element, y)
{
    if (element && element.style)
        element.style.top = y + "px";
}

function ESWebForm_GetElementsByTagName(element, tagName)
{
    if (element && tagName)
    {
        if (element.getElementsByTagName)
            return element.getElementsByTagName(tagName);
        if (element.all && element.all.tags)
            return element.all.tags(tagName);
    }
    return null;
}

function ESWebForm_IsIE()
{
    return ESWebForm_IsBrowser("Microsoft Internet Explorer");
}

function ESWebForm_IsNetscape()
{
    return ESWebForm_IsBrowser("Netscape");
}

function ESWebForm_IsOpera()
{
    return ESWebForm_IsBrowser("Opera");
}

function ESWebForm_IsBrowser(browserName)
{
    return (window.navigator && (window.navigator.appName == browserName));
}

function ESWebForm_GetIEBrowserVersion()
{
    var match = window.navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
    return match == null ? 0 : Number(match[1]);
}

function InputButton(elementId, allowEdit, allowSpin, useExpandCollapseButton, autoPostBack, nullable, textAlign, value, minValue, maxValue, 
    validationErrorMessage, expandImageSrc, expandImageText, collapseImageSrc, collapseImageText, 
    spinUpImageSrc, spinUpDisabledImageSrc, spinUpHoverImageSrc, spinUpPressedImageSrc,
    spinDownImageSrc, spinDownDisabledImageSrc, spinDownHoverImageSrc, spinDownPressedImageSrc)
{
    var instance = new Object();
    
    instance.element = ESWebForm_GetElementById(elementId);
    
    instance.allowEdit = allowEdit;
    instance.allowSpin = allowSpin;
    instance.useExpandCollapseButton = useExpandCollapseButton;
    instance.textAlign = textAlign;
    
    instance.value = value;
    instance.minValue = minValue;
    instance.maxValue = maxValue;
    instance.validationErrorMessage = validationErrorMessage;
    instance.autoPostBack = autoPostBack;
    instance.nullable = nullable;
    
    instance.expanded = false;
    
    instance.expandImageSrc = expandImageSrc ? expandImageSrc : __ib_defaultExpandImage;
    instance.expandImageText = expandImageText;
    
    instance.collapseImageSrc = collapseImageSrc ? collapseImageSrc : __ib_defaultCollapseImage;
    instance.collapseImageText = collapseImageText;
    
    instance.spinUpImageSrc = spinUpImageSrc ? spinUpImageSrc : __ib_defaultSpinUpImage;
    instance.spinUpDisabledImageSrc = spinUpDisabledImageSrc ? spinUpDisabledImageSrc : __ib_defaultSpinUpDisabledImage;
    instance.spinUpHoverImageSrc = spinUpHoverImageSrc ? spinUpHoverImageSrc : __ib_defaultSpinUpHoverImage;
    instance.spinUpPressedImageSrc = spinUpPressedImageSrc ? spinUpPressedImageSrc : __ib_defaultSpinUpPressedImage;
    
    instance.spinDownImageSrc = spinDownImageSrc ? spinDownImageSrc : __ib_defaultSpinDownImage;
    instance.spinDownDisabledImageSrc = spinDownDisabledImageSrc ? spinDownDisabledImageSrc : __ib_defaultSpinDownDisabledImage;
    instance.spinDownHoverImageSrc = spinDownHoverImageSrc ? spinDownHoverImageSrc : __ib_defaultSpinDownHoverImage;
    instance.spinDownPressedImageSrc = spinDownPressedImageSrc ? spinDownPressedImageSrc : __ib_defaultSpinDownPressedImage;
    
    instance.initializeElements = InputButton_InitializeElements;
    instance.toggle = InputButton_Toggle;
    instance.refreshToggleState = InputButton_RefreshToggleState;
    instance.refreshSpinAbilities = InputButton_RefreshSpinAbilities;
    instance.handleValueChange = InputButton_HandleValueChange;
    instance.handleValueKeyDown = InputButton_HandleValueKeyDown;
    instance.setValue = InputButton_SetValue;
    instance.updateValue = InputButton_UpdateValue;
    instance.validate = InputButton_Validate;
    instance.setFocus = InputButton_SetFocus;
    
    instance.spinUp = InputButton_SpinUp;
    instance.spinDown = InputButton_SpinDown;
    
    instance.hoverSpinUp = InputButton_HoverSpinUp;
    instance.unhoverSpinUp = InputButton_UnhoverSpinUp;
    instance.pressSpinUp = InputButton_PressSpinUp;
    instance.unpressSpinUp = InputButton_UnpressSpinUp;
    
    instance.hoverSpinDown = InputButton_HoverSpinDown;
    instance.unhoverSpinDown = InputButton_UnhoverSpinDown;
    instance.pressSpinDown = InputButton_PressSpinDown;
    instance.unpressSpinDown = InputButton_UnpressSpinDown;
    
    instance.callback = null;
    
    if (instance.element)
    {
        instance.initializeElements();
        
        if (ESWebForm_IsIE())
        {
            if (instance.toggleImage)
            {
                instance.toggleImage.attachEvent('onclick', function InvokeToggle() { instance.toggle(); });
            }
            
            if (instance.textBox)
            {
                instance.textBox.attachEvent('onchange', function InvokeHandleValueChange() { instance.handleValueChange(); });
                instance.textBox.attachEvent('onkeydown', function InvokeHandleValueKeyDown() { instance.handleValueKeyDown(); });
            }
            
            if (instance.spinUpImage)
            {
                instance.spinUpImage.attachEvent('onclick', function InvokeSpinUp() { instance.spinUp(); });
                instance.spinUpImage.attachEvent('ondblclick', function InvokeSpinUp() { instance.spinUp(); });
                instance.spinUpImage.attachEvent('onmouseenter', function InvokeHoverSpinUp() { instance.hoverSpinUp(); });
                instance.spinUpImage.attachEvent('onmouseleave', function InvokeUnhoverSpinUp() { instance.unhoverSpinUp(); });
                instance.spinUpImage.attachEvent('onmousedown', function InvokePressSpinUp() { instance.pressSpinUp(); });
                instance.spinUpImage.attachEvent('onmouseup', function InvokeUnpressSpinUp() { instance.unpressSpinUp(); });
            }
            
            if (instance.spinDownImage)
            {
                instance.spinDownImage.attachEvent('onclick', function InvokeSpinDown() { instance.spinDown(); });
                instance.spinDownImage.attachEvent('ondblclick', function InvokeSpinDown() { instance.spinDown(); });
                instance.spinDownImage.attachEvent('onmouseenter', function InvokeHoverSpinDown() { instance.hoverSpinDown(); });
                instance.spinDownImage.attachEvent('onmouseleave', function InvokeUnhoverSpinDown() { instance.unhoverSpinDown(); });
                instance.spinDownImage.attachEvent('onmousedown', function InvokePressSpinDown() { instance.pressSpinDown(); });
                instance.spinDownImage.attachEvent('onmouseup', function InvokeUnpressSpinDown() { instance.unpressSpinDown(); });
            }
        }
    }
    
    instance.refreshToggleState();
    instance.refreshSpinAbilities();
    
    return instance;
}

function InputButton_InitializeElements()
{
    if (!this.element || !this.element.rows || !this.element.rows.length || (this.element.rows.length == 0))
        return;
    
    var mainRow = this.element.rows[0];
    
    if (!mainRow.cells || !mainRow.cells.length)
        return;
    
    var textBoxCell = null;
    var valueLabelCell = null;
    var toggleImageCell = null;
    var spinImagesCell = null;
    
    var cellIndex;
    
    switch (this.textAlign)
    {
        case "left":
            cellIndex = 0;
            break;
        case "right":
            cellIndex = 1;
            break;
        default:
            return;
    }
    
    if (mainRow.cells.length > cellIndex)
    {
        if (this.useExpandCollapseButton || !this.allowEdit)
            valueLabelCell = mainRow.cells[cellIndex];
        else
            textBoxCell = mainRow.cells[cellIndex];
        
        cellIndex++;
    }
    
    if ((mainRow.cells.length > cellIndex) && this.allowSpin)
    {
        spinImagesCell = mainRow.cells[cellIndex];
        cellIndex++;
    }
    
    if (this.useExpandCollapseButton && this.allowEdit)
    {
        if (mainRow.cells.length > cellIndex)
        {
            toggleImageCell = mainRow.cells[cellIndex];
            cellIndex++;
        }
        
        this.toggleRow = this.element.rows.length >= 2 ? this.element.rows[1] : null;
        textBoxCell = this.toggleRow ? this.toggleRow.cells[0] : null;
    }
    else
    {
        this.toggleRow = null;
    }
    
    this.toggleImage = toggleImageCell ? ESWebForm_GetElementByTagName(toggleImageCell, "img") : null;
    this.valueLabel = valueLabelCell ? ESWebForm_GetElementByTagName(valueLabelCell, "span") : null;
    this.textBox = textBoxCell ? ESWebForm_GetElementByTagName(textBoxCell, "input") : null;
    
    var spinImages = spinImagesCell ? ESWebForm_GetElementsByTagName(spinImagesCell, "img") : null;
    
    if (spinImages && spinImages.length && (spinImages.length == 2))
    {
        this.spinUpImage = spinImages[0];
        this.spinDownImage = spinImages[1];
    }
    else
    {
        this.spinUpImage = null;
        this.spinDownImage = null;
    }
}

function InputButton_Toggle()
{
    this.expanded = !this.expanded;
    this.refreshToggleState();
    this.setFocus();
}

function InputButton_RefreshToggleState()
{
    if (this.toggleRow)
        this.toggleRow.style.display = this.expanded ? "" : "none";
    
    if (this.toggleImage)
    {
        this.toggleImage.src = this.expanded ? this.collapseImageSrc : this.expandImageSrc;
        this.toggleImage.alt = this.expanded ? this.collapseImageText : this.expandImageText;
    }
}

function InputButton_RefreshSpinAbilities()
{
    this.spinUpEnabled = (this.value == null) || (this.value < this.maxValue);
    this.spinDownEnabled = (this.value != null) && (this.value > this.minValue);
    
    if (this.spinUpImage)
    {
        this.spinUpImage.src = this.spinUpEnabled ? this.spinUpImageSrc : this.spinUpDisabledImageSrc;
        this.spinUpImage.style.display = "";
    }
    
    if (this.spinDownImage)
    {
        this.spinDownImage.src = this.spinDownEnabled ? this.spinDownImageSrc : this.spinDownDisabledImageSrc;
        this.spinDownImage.style.display = "";
    }
}

function InputButton_HandleValueChange()
{
    var newValue = this.validate();

    if (((newValue == null) && this.nullable) || !isNaN(newValue))
    {
        this.setValue(newValue);
    }
    else
    {
        this.setValue(this.value);
        this.setFocus();
    }
}

function InputButton_HandleValueKeyDown(e)
{
    if (!e) e = window.event;
    if (!e) return;
    
    if (e.keyCode)
    {
        switch (e.keyCode)
        {
            case 13:
                e.returnValue = false;
                break;
            case 38:
                this.spinUp();
                break;
            case 40:
                this.spinDown();
                break;
        }
    }
}

function InputButton_SetFocus()
{
    if ((this.expanded || !this.useExpandCollapseButton) && this.textBox)
    {
        try {
            this.textBox.focus();
            this.textBox.select();
        }
        catch (ex) {
        }
    }
}

function InputButton_SpinUp()
{
    if (this.spinUpEnabled)
        this.setValue(this.value == null ? 1 : this.value + 1);
    
    this.setFocus();
}

function InputButton_SpinDown()
{
    if (this.spinDownEnabled)
        this.setValue(this.value == null ? 1 : this.value - 1);
    
    this.setFocus();
}

function InputButton_SetValue(newValue)
{
    this.value = newValue;
    this.updateValue();
    this.refreshSpinAbilities();
    
    if (this.callback)
        this.callback(newValue);
}

function InputButton_UpdateValue()
{
    var text = this.value == null ? "" : this.value.toString();
    
    if (this.valueLabel)
    {
        if (ESWebForm_IsNetscape())
            this.valueLabel.textContent = text;
        else
            this.valueLabel.innerText = text;
    }
    
    if (this.textBox)
        this.textBox.value = text;
}

function InputButton_Validate()
{
    var value;
    var valid = true;
    
    if (!this.textBox)
        valid = false;
    
    if (valid)
    {
        var textValue = this.textBox.value;
        if (!textValue && !this.nullable) valid = false;
    }
    
    if (valid)
    {
        value = textValue ? parseInt(textValue) : null;
        if (isNaN(value)) valid = false;
    }
    
    if (valid)
    {
        if ((value != null) && (((value < this.minValue) || (value > this.maxValue))))
            valid = false;
    }
    
    if (!valid && this.validationErrorMessage)
    {
        alert(this.validationErrorMessage);
        
        try
        {
            this.textBox.focus();
        }
        catch (ex)
        {
        }
    }
    
    return valid ? value : NaN;
}

function InputButton_HoverSpinUp()
{
    if (this.spinUpImage && this.spinUpEnabled)
        this.spinUpImage.src = this.spinUpHoverImageSrc;
}

function InputButton_UnhoverSpinUp()
{
    if (this.spinUpImage && this.spinUpEnabled)
        this.spinUpImage.src = this.spinUpImageSrc;
}

function InputButton_PressSpinUp()
{
    if (this.spinUpImage && this.spinUpEnabled)
        this.spinUpImage.src = this.spinUpPressedImageSrc;
}

function InputButton_UnpressSpinUp()
{
    if (this.spinUpImage && this.spinUpEnabled)
        this.spinUpImage.src = this.spinUpHoverImageSrc;
}

function InputButton_HoverSpinDown()
{
    if (this.spinDownImage && this.spinDownEnabled)
        this.spinDownImage.src = this.spinDownHoverImageSrc;
}

function InputButton_UnhoverSpinDown()
{
    if (this.spinDownImage && this.spinDownEnabled)
        this.spinDownImage.src = this.spinDownImageSrc;
}

function InputButton_PressSpinDown()
{
    if (this.spinDownImage && this.spinDownEnabled)
        this.spinDownImage.src = this.spinDownPressedImageSrc;
}

function InputButton_UnpressSpinDown()
{
    if (this.spinDownImage && this.spinDownEnabled)
        this.spinDownImage.src = this.spinDownHoverImageSrc;
}

function ESWebForm_DocumentMouseDown(eventObj)
{
    if (!eventObj)
        eventObj = window.event;
    
    if (!eventObj)
        return;
    
    var focusElement = ESWebForm_GetEventSourceElement(eventObj);
    var autoHideableElements = ESWebForm_GetAutoHideableElements();

    for (var i = 0; i < autoHideableElements.length; i++)
    {
        if ((focusElement == null) || ((autoHideableElements[i] != focusElement) && !ESWebForm_ElementContains(autoHideableElements[i], focusElement)))
            ESWebForm_ProcessAutoHide(autoHideableElements[i]);
    }
}

function ESWebForm_DocumentKeyDown(eventObj)
{
    if (!eventObj)
        eventObj = window.event;
    
    if (!eventObj)
        return;
    
    if (eventObj.keyCode == 27)
    {
        var focusElement = ESWebForm_GetEventSourceElement(eventObj);
        var autoHideableElements = ESWebForm_GetAutoHideableElements(focusElement);
        
        for (var i = 0; i < autoHideableElements.length; i++)
        {
            if ((focusElement == null) || ((autoHideableElements[i] != focusElement) && !ESWebForm_ElementContains(autoHideableElements[i], focusElement)))
                if (ESWebForm_ProcessAutoHide(autoHideableElements[i])) return;
        }
        
        var element = focusElement;
        
        while ((element != null) && (element != document.body))
        {
            if (ESWebForm_ProcessAutoHide(element))
                break;
            
            element = element.parentElement;
        }
    }
}

function ESWebForm_GetEventSourceElement(eventObj)
{
    if (eventObj.srcElement)
        return eventObj.srcElement;
    else if (eventObj.target)
        return eventObj.target;
    else
        return null;
}

function ESWebForm_GetEventFromElement(eventObj)
{
    if (eventObj.fromElement)
        return eventObj.fromElement;
    else if ((eventObj.type == "mouseout") && eventObj.target)
        return eventObj.target;
    else if ((eventObj.type == "mouseover") && eventObj.relatedTarget)
        return eventObj.relatedTarget;
    else
        return null;
}

function ESWebForm_GetEventToElement(eventObj)
{
    if (eventObj.toElement)
        return eventObj.toElement;
    else if ((eventObj.type == "mouseover") && eventObj.target)
        return eventObj.target;
    else if ((eventObj.type == "mouseout") && eventObj.relatedTarget)
        return eventObj.relatedTarget;
    else
        return null;
}

function ESWebForm_ProcessAutoHide(element)
{
    if (element.getAttribute("autoHide") == "true")
    {
        element.style.display = 'none';
        
        if (element.originalParent)
        {
            element.parentNode.removeChild(element);
            element.originalParent.appendChild(element);
            element.originalParent = undefined;
        }
        
        var clientEventNotifier = ESWebForm_GetClientEventNotifier(element);
        
        if (clientEventNotifier)
            clientEventNotifier.value = "1";
        
        return true;
    }
    return false;
}

function ESWebForm_GetAutoHideableElements(container)
{
    if (container == null)
        container = document.body;
    
    return ESWebForm_GetElementsByTagName(container, 'DIV');
}

function ESWebForm_GetClientEventNotifier(container)
{
    if (container == null)
        container = document.body;
    
    var inputElements = ESWebForm_GetElementsByTagName(container, 'INPUT');
    if (!inputElements) return false;
    
    for (var i = 0; i < inputElements.length; i++)
    {
        var inputElement = inputElements[i];
        if (inputElement.type = "hidden") return inputElement;
    }
}

function ESWebForm_GetActiveElement()
{
    if (document.activeElement)
        return document.activeElement;
    else if (_activeElement)
        return _activeElement;
    else
        return null;
}

function ESWebForm_GetElementById(elementId)
{
    if (document.getElementById)
        return document.getElementById(elementId);
    else if (document.all)
        return document.all[elementId];
    else
        return null;
}

function ESWebForm_GetChildByTagName(element, tagName)
{
    var children = ESWebForm_GetChildrenByTagName(element, tagName);
    return (!children || (children.length == 0)) ? null : children[0];
}

function ESWebForm_GetChildrenByTagName(element, tagName)
{
    if (element && tagName)
    {
        if (element.children && element.children.tags)
        {
            return element.children.tags(tagName);
        }
        else if (element.childNodes)
        {
            var childNodes = element.childNodes;
            var children = new Array();
            
            for (var i = 0; i < childNodes.length; i++)
            {
                var childNode = childNodes[i];
                
                if (childNode.tagName && (childNode.tagName == tagName))
                    children.push(childNode);
            }
            
            return children;
        }
    }
    return null;
}

function ESWebForm_GetTableRows(table)
{
    if (table.rows)
    {
        return table.rows;
    }
    else
    {
        var rows = new Array();
        
        var tableRows = ESWebForm_GetChildrenByTagName(table, "TR");
        var tableBodies = ESWebForm_GetChildrenByTagName(table, "TBODY");
        
        if (tableRows)
        {
            for (var i = 0; i < tableRows.length; i++)
                rows.push(tableRows[i]);
        }
        
        if (tableBodies)
        {
            for (var i = 0; i < tableBodies.length; i++)
            {
                var tableBodyRows = ESWebForm_GetChildrenByTagName(tableBodies[i], "TR");
                
                for (var j = 0; j < tableBodyRows.length; j++)
                    rows.push(tableBodyRows[j]);
            }
        }
        
        return rows;
    }
}

function ESWebForm_GetTableCells(table)
{
    if (table.cells)
        return table.cells;
    
    var rows = new Array();
    var cells = new Array();
    
    var childRows = ESWebForm_GetChildrenByTagName(table, "TR");
    var childBodies = ESWebForm_GetChildrenByTagName(table, "TBODY");
    var childHeads = ESWebForm_GetChildrenByTagName(table, "THEAD");
    var childFoots = ESWebForm_GetChildrenByTagName(table, "TFOOT");
    
    if (childRows)
    {
        for (var i = 0; i < childRows.length; i++)
            rows.push(childRows[i]);
    }
    
    if (childBodies)
    {
        for (var i = 0; i < childBodies.length; i++)
        {
            var bodyRows = ESWebForm_GetChildrenByTagName(childBodies[i], "TR");
            
            if (bodyRows)
            {
                for (var j = 0; j < bodyRows.length; j++)
                    rows.push(bodyRows[j]);
            }
        }
    }
    
    if (childHeads)
    {
        for (var i = 0; i < childHeads.length; i++)
        {
            var headRows = ESWebForm_GetChildrenByTagName(childHeads[i], "TR");
            
            if (headRows)
            {
                for (var j = 0; j < headRows.length; j++)
                    rows.push(headRows[j]);
            }
        }
    }
    
    if (childFoots)
    {
        for (var i = 0; i < childFoots.length; i++)
        {
            var footRows = ESWebForm_GetChildrenByTagName(childFoots[i], "TR");
            
            if (footRows)
            {
                for (var j = 0; j < footRows.length; j++)
                    rows.push(footRows[j]);
            }
        }
    }
    
    for (var i = 0; i < rows.length; i++)
    {
        var rowCells = ESWebForm_GetChildrenByTagName(rows[i], "TD");
        
        if (rowCells)
        {
            for (var j = 0; j < rowCells.length; j++)
                cells.push(rowCells[j]);
        }
    }
    
    return cells;
}

function ESWebForm_ElementContains(element, siblingElement)
{
    if (!element || !siblingElement || (element == siblingElement))
        return false;
    else if (element.contains)
        return element.contains(siblingElement);
    else
    {
        var pathElement = siblingElement;
        
        do
        {
            if (pathElement == element)
                return true;
            else
                pathElement = pathElement.parentNode;
            
        } while (pathElement != null)
        
        return false;
    }
}

function ESWebForm_GetElementPosition(element)
{
    var result = new Object();
    
    result.x = 0;
    result.y = 0;
    result.width = 0;
    result.height = 0;
    
    if (element.offsetParent)
    {
        result.x = element.offsetLeft;
        result.y = element.offsetTop;
        
        var parent = element.offsetParent;

        //while (parent && (parent.style.position == ''))
        while (parent)
        {
            result.x += parent.offsetLeft;
            result.y += parent.offsetTop;
            
            var parentTagName = parent.tagName.toLowerCase();
            
            if (parentTagName != "table" &&
                parentTagName != "body" && 
                parentTagName != "html" && 
                parentTagName != "div" && 
                parent.clientTop && 
                parent.clientLeft)
            {
                result.x += parent.clientLeft;
                result.y += parent.clientTop;
            }
            parent = parent.offsetParent;
        }
    }
    else if (element.left && element.top)
    {
        result.x = element.left;
        result.y = element.top;
    }
    else
    {
        if (element.x)
            result.x = element.x;
        if (element.y)
            result.y = element.y;
    }
    
    if (element.offsetWidth && element.offsetHeight)
    {
        result.width = element.offsetWidth;
        result.height = element.offsetHeight;
    }
    else if (element.style && element.style.pixelWidth && element.style.pixelHeight)
    {
        result.width = element.style.pixelWidth;
        result.height = element.style.pixelHeight;
    }
    return result;
}

function ESWebForm_SetElementHeight(element, height)
{
    if (element && element.style)
        element.style.height = height + "px";
}

function ESWebForm_SetElementWidth(element, width)
{
    if (element && element.style) 
        element.style.width = width + "px";
}

function ESWebForm_SetElementX(element, x)
{
    if (element && element.style)
        element.style.left = x + "px";
}

function ESWebForm_SetElementY(element, y)
{
    if (element && element.style)
        element.style.top = y + "px";
}

function ESWebForm_GetElementsByTagName(element, tagName)
{
    if (element && tagName)
    {
        if (element.getElementsByTagName)
            return element.getElementsByTagName(tagName);
        if (element.all && element.all.tags)
            return element.all.tags(tagName);
    }
    return null;
}

function ESWebForm_IsIE()
{
    return ESWebForm_IsBrowser("Microsoft Internet Explorer");
}

function ESWebForm_IsNetscape()
{
    return ESWebForm_IsBrowser("Netscape");
}

function ESWebForm_IsOpera()
{
    return ESWebForm_IsBrowser("Opera");
}

function ESWebForm_IsBrowser(browserName)
{
    return (window.navigator && (window.navigator.appName == browserName));
}

function ESWebForm_GetIEBrowserVersion()
{
    var match = window.navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
    return match == null ? 0 : Number(match[1]);
}

function ESCheckBoxListEx(containerID)
{
    this.container = ESWebForm_GetElementById(containerID);
    this.checkAllBox = null;
    
    this.validateContinuous = ESCheckBoxListEx_ValidateContinuous;
    this.updateCheckAllBox = ESCheckBoxListEx_UpdateCheckAllBox;
    this.applyCheckAllBox = ESCheckBoxListEx_ApplyCheckAllBox;
    
    return this;
}

function ESCheckBoxListEx_ValidateContinuous()
{
    var container = this.container;
    var checkAllBox = this.checkAllBox;
    
    if (!container || !checkAllBox) return;
    
    var checkBoxes = ESWebForm_GetElementsByTagName(container, "INPUT");
    
    var foundCheckedRange = false;
    var foundUncheckedRange = false;
    
    for (var i = 0; i < checkBoxes.length; i++)
    {
        var checkBox = checkBoxes[i];
        
        if ((checkBox.type == "checkbox") && (checkBox != checkAllBox))
        {
            if (!foundCheckedRange && checkBox.checked)
                foundCheckedRange = true;
            else if (foundCheckedRange && !foundUncheckedRange && !checkBox.checked)
                foundUncheckedRange = true;
            else if (foundCheckedRange && foundUncheckedRange && checkBox.checked)
                return false;
        }
    }
    
    return true;
}

function ESCheckBoxListEx_UpdateCheckAllBox()
{
    var container = this.container;
    var checkAllBox = this.checkAllBox;
    
    if (!container || !checkAllBox) return;
    
    var checkBoxes = ESWebForm_GetElementsByTagName(container, "INPUT");
    var allChecked = true;
    
    for (var i = 0; i < checkBoxes.length; i++)
    {
        var checkBox = checkBoxes[i];
        
        if ((checkBox.type == "checkbox") && (checkBox != checkAllBox))
        {
            if (!checkBox.checked)
            {
                allChecked = false;
                break;
            }
        }
    }
    
    checkAllBox.checked = allChecked;
}

function ESCheckBoxListEx_ApplyCheckAllBox(value)
{
    var container = this.container;
    var checkAllBox = this.checkAllBox;
    
    if (!container || !checkAllBox) return;

    var checkBoxes = ESWebForm_GetElementsByTagName(container, "INPUT");
    
    for (var i = 0; i < checkBoxes.length; i++)
    {
        var checkBox = checkBoxes[i];
        
        if ((checkBox.type == "checkbox") && (checkBox != checkAllBox))
            checkBox.checked = checkAllBox.checked;
    }
}

function ESDropDownCheckBoxList_ProcessCheckBoxClick(list, checkbox)
{
    var checkboxes = ESWebForm_GetElementsByTagName(list, 'INPUT');
    
    if (checkboxes == null)
        return;
    
    var role = checkbox.checkBoxRole;
    
    if ((role == undefined) || (role == null))
        return;
    
    if (role == 'all')
    {
        for (var i = 0; i < checkboxes.length; i++)
        {
            var itemRole = checkboxes[i].checkBoxRole;
            
            if ((itemRole != undefined) && (itemRole != null) && (itemRole == 'item'))
                checkboxes[i].checked = checkbox.checked
        }
    }
    else if (role == 'item')
    {
        var allChecked = null;
        var allCheckBox = null;
        
        for (var i = 0; i < checkboxes.length; i++)
        {
            var itemRole = checkboxes[i].checkBoxRole;
            
            if ((itemRole != undefined) && (itemRole != null))
            {
                if (itemRole == 'all')
                    allCheckBox = checkboxes[i];
                else if (itemRole == 'item')
                {
                    itemChecked = checkboxes[i].checked;
                    
                    if (allChecked == null)
                        allChecked = itemChecked;
                    else if (allChecked != itemChecked)
                    {
                        allChecked = false;
                        break;
                    }
                }
            }
        }
        
        if ((allCheckBox != null) && (allChecked != null))
            allCheckBox.checked = allChecked;
    }
}

function FlexDataList(tableId)
{
    var instance = new Object();
    
    instance.table = ESWebForm_GetElementById(tableId);

    if (instance.table) {

        var allRows = ESWebForm_GetTableRows(instance.table);
        var pageRows = new Array();

        for (var i = 0; i < allRows.length; i++) {

            var row = allRows[i];
            var hasContent = false;

            for (var j = 0; j < row.cells.length; j++) {
                if (row.cells[j].childNodes.length > 0) {
                    hasContent = true;
                    break;
                }
            }
            
            if (hasContent)
                pageRows.push(row);
        }

        instance.tableRows = pageRows;
    }
    
    instance.pageIndex = -1;
    instance.pageCount = 0;
    
    instance.pageRowCount = 0;
    instance.pageChangeInterval = 0;
    
    instance.pagingEnabled = false;
    instance.intervalHandler = null;
    
    instance.initialize = FlexDataList_Initialize;
    instance.startPaging = FlexDataList_StartPaging;
    instance.stopPaging = FlexDataList_StopPaging;
    instance.incrementPage = FlexDataList_IncrementPage;
    instance.updatePage = FlexDataList_UpdatePage;
    instance.handleMouseOver = FlexDataList_HandleMouseOver;
    instance.handleMouseOut = FlexDataList_HandleMouseOut;
    
    if (instance.table)
    {
        if (instance.table.addEventListener)
        {
            instance.table.addEventListener('mouseover', FlexDataList_HandleMouseOver, false);
            instance.table.addEventListener('mouseout', FlexDataList_HandleMouseOut, false);
        }
        else if (instance.table.attachEvent)
        {
            instance.table.attachEvent('onmouseover', FlexDataList_HandleMouseOver);
            instance.table.attachEvent('onmouseout', FlexDataList_HandleMouseOut);
        }
    }
    
    return instance;
}

function FlexDataList_Initialize(pageRowCount, pageChangeInterval)
{
    this.pageRowCount = pageRowCount;
    this.pageChangeInterval = pageChangeInterval;
    
    if (this.tableRows && (this.pageRowCount > 0))
    {
        this.pageIndex = 0;
        this.pageCount = Math.ceil(this.tableRows.length / this.pageRowCount);
        this.updatePage();
    }
}

function FlexDataList_StartPaging()
{
    this.pagingEnabled = true;
    
    if ((this.pageRowCount > 0) && (this.pageChangeInterval > 0))
    {
        var instance = this;
        var code = function() { instance.incrementPage(); };
        this.intervalHandler = window.setInterval(code, this.pageChangeInterval);
    }
}

function FlexDataList_StopPaging()
{
    this.pagingEnabled = false;
    
    if (this.intervalHandler)
    {
        window.clearInterval(this.intervalHandler);
        this.intervalHandler = null;
    }
}

function FlexDataList_IncrementPage()
{
    if (_mouseElement && this.table && ((_mouseElement == this.table) || ESWebForm_ElementContains(this.table, _mouseElement)))
        return;
    
    var activeElement = ESWebForm_GetActiveElement();
    
    if ((this.table != null) && (activeElement != null) && 
        ((this.table == activeElement) || ESWebForm_ElementContains(this.table, activeElement)))
        return;
    
    this.pageIndex++;
    
    if (this.pageIndex >= this.pageCount)
        this.pageIndex = 0;
    
    this.updatePage();
}

function FlexDataList_UpdatePage()
{
    if (!this.tableRows || ((typeof(PopUpPanelExists) == "function") && PopUpPanelExists()))
        return;
    
    for (var i = 0; i < this.tableRows.length; i++)
    {
        var row = this.tableRows[i];
        var rowPageIndex = this.pageRowCount > 0 ? Math.floor(i / this.pageRowCount) : rowPageIndex;
        row.style.display = (rowPageIndex == this.pageIndex) || (this.pageIndex == -1) ? '' : 'none';
    }
}

function FlexDataList_HandleMouseOver(e)
{
    if (!e) e = window.event;
    if (!e) return;
    
    _mouseElement = ESWebForm_GetEventToElement(e);
}

function FlexDataList_HandleMouseOut(e)
{
    if (!e) e = window.event;
    if (!e) return;
    
    _mouseElement = ESWebForm_GetEventToElement(e);
}

function ESNumRngInv_CheckBoxClick()
{
    var box = (window.event == null ? null : window.event.srcElement);
    
    if ((box == null) || (box.tagName != "INPUT") || (box.type != "checkbox"))
        return;
    
    var container = box.parentElement.parentElement.parentElement.parentElement;
    var allBoxes = ESWebForm_GetElementsByTagName(container, "INPUT");
    
    var firstCheckedIndex = -1;
    var lastCheckedIndex = -1;
    
    for (var i = 0; i < allBoxes.length; i++)
    {
        if (allBoxes[i].checked)
        {
            if (firstCheckedIndex == -1)
                firstCheckedIndex = i;
            
            lastCheckedIndex = i;
        }
    }
    
    if ((firstCheckedIndex >= 0) && (lastCheckedIndex >= 0))
    {
        for (var i = firstCheckedIndex; i <= lastCheckedIndex; i++)
            allBoxes[i].checked = true;
    }
}

function AdjustCellWidths(grid)
{
    if (!grid)
    {
        var grids = document.getElementsByTagName("DIV");
        
        for (var i = 0; i < grids.length; i++)
        {
            if (grids[i].shouldAdjustCellWidths == "true")
                AdjustCellWidths(grids[i]);
        }
        
        return;
    }
    
    var bodyDiv;
    var bodyTable;
    var firstBodyRow;
    
    var childTables = grid.children.tags("TABLE");
    var childDivs = grid.children.tags("DIV");
    
    if (childDivs.length != 1) return;
    
    bodyDiv = childDivs[0];
    
    bodyTable = bodyDiv.children.tags("TABLE").item(0);
    if (bodyTable == null) return;
    
    firstBodyRow = bodyTable.rows[0];
    if (firstBodyRow == null) return;
    
    var bodyWidth = bodyDiv.offsetWidth;
    
    bodyDiv.style.width = "1000px";
    var scrollbarWidth = 1000 - bodyDiv.clientWidth;
    
    bodyDiv.style.width = (bodyWidth + scrollbarWidth) + "px";
    bodyTable.style.width = bodyWidth + "px";
    
    for (var tableIndex = 0; tableIndex < childTables.length; tableIndex++)
    {
        childTables[tableIndex].style.width = (bodyWidth + scrollbarWidth) + "px";
        
        if (childTables[tableIndex].rows.length == 1)
        {
            var row = childTables[tableIndex].rows[0];
            
            if ((row.cells.length > 0) && (row.cells.length == firstBodyRow.cells.length))
            {
                var emptyCell = document.createElement(row.cells[0].tagName);
                row.appendChild(emptyCell);
                emptyCell.scope = "col";
                
                for (var cellIndex = 0; cellIndex < firstBodyRow.cells.length; cellIndex++)
                {
                    var cellWidth = firstBodyRow.cells[cellIndex].offsetWidth - bodyTable.cellPadding * 2;
                    
                    if (cellWidth > 0)
                        row.cells[cellIndex].style.width = cellWidth + "px";
                }
            }
        }
    }
}

function ESPopUpPanel_GetProperLeft(panel)
{
    var parentPos = ESWebForm_GetElementPosition(panel.parentNode);
    var pos = ESWebForm_GetElementPosition(panel);
    var posLeft = parentPos.x + parentPos.width - pos.width;
    
    if (posLeft < 0)
        posLeft = 0;
        
    return posLeft;
}

function ESPopUpPanel_GetProperTop(panel)
{
    var parentPos = ESWebForm_GetElementPosition(panel.parentNode);
    var posTop = parentPos.y + parentPos.height;
    
    if (posTop < 0)
        posTop = 0;
    
    return posTop;
}

function ESPopUpPanel_PositionById(panelId, formId)
{
    var panel = ESWebForm_GetElementById(panelId);

    if (panel && panel.tagName.toLowerCase() == "div")
    {
        ESPopUpPanel_Position(panel);
        panel.style.visibility = "visible";
    }
}

function ESPopUpPanel_Position(panel)
{
    var pos = ESWebForm_GetElementPosition(panel);
    var parentPos = ESWebForm_GetElementPosition(panel.parentNode);
    
    var winLeft = document.body.scrollLeft;
    var winTop = document.body.scrollTop;
    
    var winWidth = document.documentElement.scrollWidth;
    var winHeight = document.documentElement.scrollHeight;
    
    var minX = winLeft;
    var maxX = winLeft + winWidth - pos.width;
    
    var minY = winTop;
    var maxY = winTop + winHeight - pos.height;
    
    var newPosX = parentPos.x + parentPos.width - pos.width;
    var newPosY = parentPos.y + parentPos.height;
    
    if (newPosX < minX)
        newPosX = minX;
    
    if (newPosY > maxY)
    {
        newPosY = parentPos.y - pos.height;
        
        if (newPosY < minY)
            newPosY = minY;
    }
    
    ESWebForm_SetElementX(panel, newPosX);
    ESWebForm_SetElementY(panel, newPosY);
}

function ESPopUpPanel_ShowById(panelId)
{
    var panel = ESWebForm_GetElementById(panelId);
    
    if (panel && panel.tagName.toLowerCase() == "div")
        ESPopUpPanel_Show(panel);
}

function ESPopUpPanel_Show(panel)
{
    panel.style.visibility = "hidden";
    panel.style.display = "inline";
    
    if (!panel.offset)
    {
        panel.scrollTop = 0;
        panel.offset = 0;
    }
    
    ESPopUpPanel_Position(panel);
    panel.style.visibility = "visible";
}

function ESPopUpPanel_PositionFrame(panel)
{
    var z = 1;
    
    if (ESWebForm_IsIE())
    {
        var childFrameId = panel.id + "_PopUpIFrame";
        var childFrame = ESWebForm_GetElementById(childFrameId);
        var parent = panel.offsetParent;
        
        if (!childFrame)
        {
            childFrame = document.createElement("iframe");
            childFrame.id = childFrameId;
            childFrame.src = "about:blank";
            childFrame.style.position = "absolute";
            childFrame.style.display = "none";
            childFrame.scrolling = "no";
            childFrame.frameBorder = "0";
            
            if (parent.tagName.toLowerCase() == "html")
                document.body.appendChild(childFrame);
            else
                parent.appendChild(childFrame);
        }
        
        var pos = ESWebForm_GetElementPosition(panel);
        var parentPos = ESWebForm_GetElementPosition(parent);
        
        ESWebForm_SetElementX(childFrame, pos.x - parentPos.x);
        ESWebForm_SetElementY(childFrame, pos.y - parentPos.y);
        ESWebForm_SetElementWidth(childFrame, pos.width);
        ESWebForm_SetElementHeight(childFrame, pos.height);
        
        childFrame.style.display = "block";
        
        if (panel.currentStyle && panel.currentStyle.zIndex)
            z = panel.currentStyle.zIndex;
        else if (panel.style.zIndex)
            z = panel.style.zIndex;
    }
    panel.style.zIndex = z;
}

function ESPopUpPanel_HideById(panelId)
{
    var panel = ESWebForm_GetElementById(panelId);
    
    if (panel && panel.tagName.toLowerCase() == "div")
        ESPopUpPanel_Hide(panel);
}

function ESPopUpPanel_Hide(panel)
{
    panel.style.visibility = "hidden";
    panel.style.display = "none";
    
    if (ESWebForm_IsIE())
    {
        var childFrameId = panel.id + "_PopUpIFrame";
        var childFrame = ESWebForm_GetElementById(childFrameId);
        
        if (childFrame)
            childFrame.style.display = "none";
    }
}

function ValidateProductSelectorLists(tableId, errorMessage)
{
    var table = ESWebForm_GetElementById(tableId);
    if (!table) return true;
    
    var cells = ESWebForm_GetTableCells(table);
    if (!cells) return true;
    
    for (var i = 0; i < cells.length; i++)
    {
        var radios = ESWebForm_GetElementsByTagName(cells[i], "input");
        
        if (radios && (radios.length > 0))
        {
            var hasSelection = false;
            
            for (var j = 0; j < radios.length; j++)
            {
                if (radios[j].checked)
                {
                    hasSelection = true;
                    break;
                }
            }
            
            if (!hasSelection)
            {
                alert(errorMessage);
                return false;
            }
        }
    }
    
    return true;
}

function ValidateProductSelectorTables(tableId, errorMessage)
{
    var table = ESWebForm_GetElementById(tableId);
    if (!table) return true;
    
    var cells = ESWebForm_GetTableCells(table);
    if (!cells) return true;

    for (var i = 0; i < cells.length; i++)
    {
        var nestedTable = ESWebForm_GetChildByTagName(cells[i], "TABLE");
        
        if (nestedTable)
        {
            var nestedCells = ESWebForm_GetTableCells(nestedTable);
            
            if (nestedCells)
            {
                for (var j = 0; j < nestedCells.length; j++)
                {
                    var textBox = ESWebForm_GetElementByTagName(nestedCells[j], "input");
                    
                    if (textBox && (textBox.type == "text") && (parseFloat(textBox.value) > 0))
                        return true;
                }
            }
        }
    }
    
    alert(errorMessage);
    return false;
}

function ESScrollableGridView(containerID)
{
    this.containerID = containerID;
    this.maxHeight = "";
    
    this.adjustSize = ESAdjustScrollableGridViewSize;
    
    var instance = this;
    var resizeHandler = function () { instance.adjustSize() };

    if (window.addEventListener) {
        window.addEventListener('resize', resizeHandler, false);
    } else if (window.attachEvent) {
        window.attachEvent('onresize', resizeHandler);
    }
}

function ESAdjustScrollableGridViewSize()
{
    var container = ESWebForm_GetElementById(this.containerID);
    var maxHeight = this.maxHeight;
    var hasScrollbar = false;
    
    if (!container) return;
    
    if (maxHeight != "")
    {
        container.style.height = this.maxHeight;
        
        if (container.offsetHeight > container.scrollHeight)
            container.style.height = "";
        else
            hasScrollbar = true;
    }
    
    var marginWidth;
    
    if (hasScrollbar)
    {
        container.style.borderWidth = "0px";
        marginWidth = container.offsetWidth - container.clientWidth;
        
        if (marginWidth < 0)
            marginWidth = 0;
        
        container.style.borderWidth = "";
    }
    else
    {
        marginWidth = 0;
    }
    
    var tables = ESWebForm_GetElementsByTagName(container, "TABLE");
    
    if (tables && (tables.length > 0))
        container.style.width = tables[0].offsetWidth == 0 ? "100%" : (tables[0].offsetWidth + marginWidth) + "px";

    if ((container.parentNode.parentNode.style.height == "") && (container.parentNode.offsetHeight > 0))
        container.parentNode.parentNode.style.height = container.parentNode.offsetHeight + "px";

    container.parentNode.parentNode.style.width = container.parentNode.offsetWidth == 0 ? "100%" : container.parentNode.offsetWidth + "px";
}

function ObjectListWebPart(tableId)
{
    var instance = new Object();
    
    instance.table = ESWebForm_GetElementById(tableId);
    instance.tableRows = instance.table ? ESWebForm_GetTableRows(instance.table) : null;
    
    instance.pageIndex = -1;
    instance.pageCount = 0;
    
    instance.pageRowCount = 0;
    instance.pageChangeInterval = 0;
    
    instance.pagingEnabled = false;
    instance.intervalHandler = null;
    
    instance.initialize = ObjectListWebPart_Initialize;
    instance.startPaging = ObjectListWebPart_StartPaging;
    instance.stopPaging = ObjectListWebPart_StopPaging;
    instance.incrementPage = ObjectListWebPart_IncrementPage;
    instance.updatePage = ObjectListWebPart_UpdatePage;
    instance.handleMouseOver = ObjectListWebPart_HandleMouseOver;
    instance.handleMouseOut = ObjectListWebPart_HandleMouseOut;
    
    if (instance.table)
    {
        if (instance.table.addEventListener)
        {
            instance.table.addEventListener('mouseover', ObjectListWebPart_HandleMouseOver, false);
            instance.table.addEventListener('mouseout', ObjectListWebPart_HandleMouseOut, false);
        }
        else if (instance.table.attachEvent)
        {
            instance.table.attachEvent('onmouseover', ObjectListWebPart_HandleMouseOver);
            instance.table.attachEvent('onmouseout', ObjectListWebPart_HandleMouseOut);
        }
    }
    
    return instance;
}

function ObjectListWebPart_Initialize(pageRowCount, pageChangeInterval)
{
    this.pageRowCount = pageRowCount;
    this.pageChangeInterval = pageChangeInterval;
    
    if (this.tableRows && (this.pageRowCount > 0))
    {
        this.pageIndex = 0;
        this.pageCount = Math.ceil(this.tableRows.length / this.pageRowCount);
        this.updatePage();
    }
}

function ObjectListWebPart_StartPaging()
{
    this.pagingEnabled = true;
    
    if ((this.pageRowCount > 0) && (this.pageChangeInterval > 0))
    {
        var instance = this;
        var code = function() { instance.incrementPage(); };
        this.intervalHandler = window.setInterval(code, this.pageChangeInterval);
    }
}

function ObjectListWebPart_StopPaging()
{
    this.pagingEnabled = false;
    
    if (this.intervalHandler)
    {
        window.clearInterval(this.intervalHandler);
        this.intervalHandler = null;
    }
}

function ObjectListWebPart_IncrementPage()
{
    if (_mouseElement && this.table && ((_mouseElement == this.table) || ESWebForm_ElementContains(this.table, _mouseElement)))
        return;
    
    var activeElement = ESWebForm_GetActiveElement();
    
    if ((this.table != null) && (activeElement != null) && 
        ((this.table == activeElement) || ESWebForm_ElementContains(this.table, activeElement)))
        return;
    
    this.pageIndex++;
    
    if (this.pageIndex >= this.pageCount)
        this.pageIndex = 0;
    
    this.updatePage();
}

function ObjectListWebPart_UpdatePage()
{
    if (!this.tableRows || ((typeof(PopUpPanelExists) == "function") && PopUpPanelExists()))
        return;
    
    for (var i = 0; i < this.tableRows.length; i++)
    {
        var row = this.tableRows[i];
        var rowPageIndex = this.pageRowCount > 0 ? Math.floor(i / this.pageRowCount) : rowPageIndex;
        row.style.display = (rowPageIndex == this.pageIndex) || (this.pageIndex == -1) ? '' : 'none';
    }
}

function ObjectListWebPart_HandleMouseOver(e)
{
    if (!e) e = window.event;
    if (!e) return;
    
    _mouseElement = ESWebForm_GetEventToElement(e);
}

function ObjectListWebPart_HandleMouseOut(e)
{
    if (!e) e = window.event;
    if (!e) return;
    
    _mouseElement = ESWebForm_GetEventToElement(e);
}

function ESWebParts_SetChromeContentPadding(chromeTableId, alterContainerId, contentPadding)
{
    var chromeTable = ESWebForm_GetElementById(chromeTableId);
    
    if (!chromeTable)
        chromeTable = ESWebForm_GetElementById(alterContainerId);
    
    if (!chromeTable)
        return;
    
    var chromeRows = chromeTable.rows;
    if (!chromeRows || (chromeRows.length == 0)) return;
    
    var contentCells = chromeRows[chromeRows.length - 1].cells;
    if (!contentCells || (contentCells.length == 0)) return;
    
    contentCells[0].style.padding = contentPadding + "px";
}

function ESWebParts_ClearZonePadding(zoneID)
{
    var zone = ESWebForm_GetElementById(zoneID);
    
    if ((zone != null) && zone.cells && (zone.cells.length == 1))
        zone.cells[0].style.padding = "0px";
}

function ESWebParts_ToggleExpandCollapse(contentID, hiddenFieldID, expand)
{
    var content = ESWebForm_GetElementById(contentID);
    var hiddenField = ESWebForm_GetElementById(hiddenFieldID);
    
    if (content != null)
        content.style.display = expand ? "" : "none";
    
    if (hiddenField != null)
        hiddenField.value = expand ? "1" : "0";
}

function ESWebParts_ToggleHyperlinks(showLinkID, hideLinkID)
{
    var showLink = ESWebForm_GetElementById(showLinkID);
    var hideLink = ESWebForm_GetElementById(hideLinkID);
    
    if (showLink)
        showLink.style.display = "";
    
    if (hideLink)
        hideLink.style.display = "none";
}

function ESWebParts_SetExpandCollapseVerbsLinksClientIDs(titleID, expandLinkID, collapseLinkID)
{
    var titleElement = ESWebParts_GetTitleElement(titleID);
    
    if (!titleElement)
        return;
    
    var hyperlinks = titleElement.nextSibling ? ESWebForm_GetChildrenByTagName(titleElement.nextSibling, "A") : null;
    
    if (!hyperlinks || (hyperlinks.length < 2))
        return;
    
    hyperlinks[0].id = expandLinkID;
    hyperlinks[1].id = collapseLinkID;
}

function ESWebParts_SetTitleClass(titleID, className) {
    
    var container = ESWebParts_GetTitleContainer(titleID);
    if (!container) return;
    
    if (container.className != "")
        className = container.className + " " + className;
    
    container.className = className;
}

function ESWebParts_SetTitleVisibility(titleID, value) {

    var container = ESWebParts_GetTitleContainer(titleID);

    if (container)
        container.parentNode.parentNode.parentNode.style.display = value ? "" : "none";
    
}

function ESWebParts_GetTitleElement(titleID)
{
    var titleElement = ESWebForm_GetElementById(titleID);
    
    if (titleElement)
        return titleElement;
        
    var containerID = titleID + "_Container";
    
    var container = ESWebForm_GetElementById(containerID);
    if (!container) return;

    var cells = container.getElementsByTagName("TD");

    if (cells.length >= 2)
        return cells[1];
}

function ESWebParts_GetTitleContainer(titleID) {
    var titleElement = ESWebParts_GetTitleElement(titleID);

    if (!titleElement || !titleElement.parentNode || !titleElement.parentNode.parentNode || !titleElement.parentNode.parentNode.parentNode)
        return null;

    var container = titleElement.parentNode.parentNode.parentNode.parentNode;

    if (!container || (container.tagName != "TD"))
        return null;

    return container;
}

function DatePickerTextChangedCallback(arg, context) {
    
    var errorMessage = context[0];
    var textBoxId = context[1];
    var clientValueHolderId = context[2];
    var popUpBoxId = context[3];
    var hrefArgName = context[4];

    var textBox = ESWebForm_GetElementById(textBoxId);
    var clientValueHolder = ESWebForm_GetElementById(clientValueHolderId);
    var popUpBox = ESWebForm_GetElementById(popUpBoxId);

    if (!arg) {
        alert(errorMessage);
        if (textBox) {
            textBox.value = textBox.getAttribute('originalValue');
            textBox.focus();
        }
        return;
    }

    if (textBox)
        textBox.setAttribute('originalValue', textBox.value);

    if (clientValueHolder)
        clientValueHolder.value = arg;

    if (popUpBox)
        popUpBox.href = ChangeHRef(popUpBox.href, hrefArgName, arg);
}

function ChangeHRef(href, argName, argValue) {
    var argValuePrefix = argName + '=';
    var startPos = href.indexOf(argValuePrefix);
    if (startPos != -1) {
        startPos += argValuePrefix.length;
        var result = href.substring(0, startPos) + argValue;
        var endPos = href.indexOf("&", startPos);
        if (endPos != -1) {
            result += href.substring(endPos);
        }
        return result;
    } else {
        return href + '&' + argValuePrefix + argValue;
    }
}

function ESFireDefaultButton(event, target) {

    var element = event.srcElement;
    if (!element) element = event.target;

    if (event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {

        var defaultButton = ESWebForm_GetElementById(target);

        if (defaultButton) {
            if (defaultButton.click) {
                defaultButton.click();
            } else {
                eval(defaultButton.getAttribute('href'));
            }
        }

        event.cancelBubble = true;
        if (event.stopPropagation) event.stopPropagation();
        return false;
    }

    return true;
}

function GetImageUrlPrefix() {
    
    if (typeof (extraBasePath) == "undefined") return "";

    var depth = 0;
    var index = 0;

    while (index != -1) {

        index = extraBasePath.indexOf("/", index);

        if (index >= 0) {
            depth++;
            index++;
        }
    }

    var prefix = "";

    for (var i = 0; i < depth; i++) {
        prefix += "../";
    }

    return prefix;
}

function FixClientUrls() {
    
    var prefix = GetImageUrlPrefix();
    if (prefix == "") return;
    
    var elements = document.getElementsByTagName("*");
    
    for (var i = 0; i < elements.length; i++) {

        var element = elements[i];
        var b = (element.style && element.style.backgroundImage.indexOf("tab.jpg") != -1);

        if (element.style && element.style.backgroundImage) {

            var url = element.style.backgroundImage.trimStart().replace("\\", "/");

            if (url.startsWith("url(") && url.endsWith(")")) {

                var mainPart = url.substring(4, url.length - 1).trim();

                if (mainPart.startsWith("\"") || mainPart.startsWith("'"))
                    mainPart = mainPart.substr(1, mainPart.length - 1);

                if (mainPart.endsWith("\"") || mainPart.endsWith("'"))
                    mainPart = mainPart.substr(0, mainPart.length - 1);

                if (mainPart.indexOf(":") != -1) {
                    var arr = ["app_themes", "app_scenario", "user_themes", "user_scenario"];
                    var mainPartLowerCase = mainPart.toLowerCase();
                    for (var j in arr) {
                        var pos = mainPartLowerCase.indexOf(arr[j]);
                        if (pos != -1) mainPart = mainPart.substr(pos, mainPart.length - pos);
                    }
                }

                if (!mainPart.startsWith("/") && !mainPart.startsWith(prefix)) {
                    element.style.backgroundImage = "url(" + prefix + mainPart + ")";
                }
            }
        }
    }
}

function FixMenuZOrder() {

    var mainForm = document.body.getElementsByTagName("form")[0];
    if (!mainForm) return;

    var popUpContainers = document.getElementsByTagName("div");

    for (var i = 0; i < popUpContainers.length; i++) {
        
        var popUpContainer = popUpContainers[i];

        if ((popUpContainer.parentNode != mainForm) && popUpContainer.id && (popUpContainer.id.indexOf("Items") == popUpContainer.id.length - 5)) {
            popUpContainer.parentNode.removeChild(popUpContainer);
            mainForm.appendChild(popUpContainer);
        }
    }
}

function BeforeTreeToggleNode(data) {

    var prefix = GetImageUrlPrefix();
    if (prefix == "") return;

    for (var i = 0; i < data.images.length; i++) {
        if (!data.images[i].startsWith(prefix)) {
            data.images[i] = prefix + data.images[i];
        }
    }
}

function WrapTreeToggleNode() {

    if (typeof (TreeView_ToggleNode) != "undefined") {

        if (_treeToggleNodeFunctionWrapped)
            return;

        _treeToggleNodeFunctionWrapped = true;

        var originalFunction = TreeView_ToggleNode;
        TreeView_ToggleNode = function(data, index, node, lineType, children) { BeforeTreeToggleNode(data); originalFunction(data, index, node, lineType, children); };
    }

}

function EditorZone_TabClick(menuId, partId, index, instructionsContainerId) {

    var instructionsContainer = ESWebForm_GetElementById(instructionsContainerId);

    if (instructionsContainer && (instructionsContainer.getAttribute("IsProperty") == "true")) {
        instructionsContainer.style.display = "none";
    }
    
    var menu = ESWebForm_GetElementById(menuId);
    if (!menu) return;

    var part = ESWebForm_GetElementById(partId);
    if (!part) return;
    
    var parent = part.parentNode;
    var parts = ESWebForm_GetChildrenByTagName(parent, "DIV");
    
    for (var i = 0; i < parts.length; i++) {
        parts[i].style.display = "none";
    }

    part.style.display = "";

    var selectedClasses = menu.getAttribute("selectedClass").split(" "); ;

    if (selectedClasses) {

        var links = ESWebForm_GetElementsByTagName(menu, "a");
        if (links.length <= index) return;

        var link = links[index];
        var linkTable;
        var selectedClasses = menu.getAttribute("selectedClass").split(" ");

        if (selectedClasses.length > 0) {
            for (var i = 0; i < links.length; i++) {
                for (var j = 0; j < selectedClasses.length; j++) {
                    Sys.UI.DomElement.removeCssClass(links[i], selectedClasses[j]);
                    linkTable = links[i].parentElement.parentElement.parentElement.parentElement;
                    if (linkTable.tagName.toLowerCase() == "table") {
                        Sys.UI.DomElement.removeCssClass(linkTable, selectedClasses[j]);
                    }
                }
            }
        }

        linkTable = link.parentElement.parentElement.parentElement.parentElement;
        
        for (var i = 0; i < selectedClasses.length; i++) {
            Sys.UI.DomElement.addCssClass(link, selectedClasses[i]);
            if (linkTable.tagName.toLowerCase() == "table") {
                Sys.UI.DomElement.removeCssClass(linkTable, selectedClasses[i]);
            }
        }
    }
}

function EditorZone_ModeClick(checkBox) {

    var modeClassName = checkBox.checked ? "Advanced" : "Simple";
    var propertiesTables = ESWebForm_GetElementsByTagName(checkBox.parentElement.parentElement.nextSibling, "table");
    
    for (var i = 0; i < propertiesTables.length; i++) {
        propertiesTables[i].className = modeClassName;
    }
}

function EditorZone_InstructionClick(containerId, value) {

    var container = ESWebForm_GetElementById(containerId);
    if (!container) return;

    var control = ESWebForm_GetChildByTagName(container, "input");

    if (control) {
        switch (control.type) {
            case "text":
                control.value = value;
                break;
            case "checkbox":
                switch (value.toLowerCase()) {
                    case "true":
                    case "1":
                    case "on":
                    case "checked":
                        control.checked = true;
                    default:
                        control.checked = false;
                }
                break;
        }
    }
}

function GalleryPreview(elementId, gid, useDocuments, popUpWidth, popUpHeight) {

    var link, image;
    var element = ESWebForm_GetElementById(elementId);

    switch (element.tagName) {
        case "A":
            link = element;
            image = ESWebForm_GetChildByTagName(element, "IMG");
            break;
        case "IMG", "INPUT":
            link = null;
            image = element;
            break;
    }

    var regExp = new RegExp("id=[a-fA-F0-9\-]+&doc=(true|false)");

    if (link) {
        link.href = link.href.replace(regExp, "id=" + gid + "&doc=" + useDocuments.toString());
    }
    
    if (image) {
        image.src = image.src.replace(regExp, "id=" + gid + "&doc=" + useDocuments.toString());
    }

    jQuery('#' + elementId).fancybox({ 'width': popUpWidth, 'height': popUpHeight, 'type': 'iframe' });
}

function ApplyTreeViewLevelClasses(treeViewId, classNames) {

    var treeView = ESWebForm_GetElementById(treeViewId);
    if (!treeView) return;

    if ((treeView.tagName.toLowerCase() == "div") && (classNames.length > 0) && classNames[0])
        Sys.UI.DomElement.addCssClass(treeView, classNames[0]);

    var containers = ESWebForm_GetElementsByTagName(treeView, "div");

    for (var i = 0; i < containers.length; i++ ) {

        var container = containers[i];

        if (!container.id || !container.id.endsWith("Nodes"))
            continue;

        var level = 1;
        var pathElement = container.parentNode;

        while (pathElement != treeView) {
            if (pathElement.tagName.toLowerCase() == "div")
                level += 1;
            pathElement = pathElement.parentNode;
        }

        if (level < classNames.length)
            container.className = classNames[level];
    }
}

function closeWindow() {
    window.close();
    return false;
}