﻿if (document.body.addEventListener)
{
    document.body.addEventListener('mousedown', ESWebForm_DocumentMouseDown, false);
    document.body.addEventListener('keydown', ESWebForm_DocumentKeyDown, false);
}
else if (document.body.attachEvent)
{
    document.body.attachEvent('onmousedown', ESWebForm_DocumentMouseDown);
    document.body.attachEvent('onkeydown', ESWebForm_DocumentKeyDown);
}

if (window.addEventListener)
{
    window.addEventListener('load', ESWebForm_OnWindowLoad, false);
}
else if (window.attachEvent)
{
    window.attachEvent('onload', ESWebForm_OnWindowLoad);
}

var _activeElement;

function ESWebForm_OnWindowLoad()
{
    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; }
            }
        }
    }
}

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';
        
        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 == ''))
        {
            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]);
}

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();