﻿/*********************************************************************************

 Common function
    GetElementPosition(element)
    function GetElementSize(element)
    function SetElementHeight(element, height)
    function SetElementWidth(element, width)
    function SetElementX(element, x)
    function SetElementY(element, y)
    function SetElementPosition(element, position)
    function SetElementDisplay(element, display)
    function GetElementById(elementId)
    
    function getBodyScrolls() // Определяет на сколько прокручен документ сверху и слева
    function getBodyScrollTop() // Определяет на сколько прокручен документ сверху
    function getBodyScrollLeft() // Определяет на сколько прокручен документ слева
    
    function GetDocumentSize() // Размеры документа вместе со скроллингами, а не только её видимой части
    function getDocumentWidth() // Размер документа по горизонтали вместе со скроллингом, а не только её видимой части
    function getDocumentHeight() // Размер документа по вертикали вместе со скроллингом, а не только её видимой части
    
    function GetClientCenter() // координаты центра окна с учетом скроллинга
    function getClientCenterX() // координаты центра окна по ширине с учетом скроллинга
    function getClientCenterY() // координаты центра окна по высоте с учетом скроллинга
    
    function GetClientSize() // Размеры видимой части документа
    function getClientWidth() // Ширина видимой части документа
    function getClientHeight() // Высота видимой части документа

    
*********************************************************************************/

function 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) {
            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 GetElementSize(element) {
    var result = new Object();
    result.width = 0;
    result.height = 0;
    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 SetElementHeight(element, height) {
    if (element && element.style) {
        element.style.height = height + "px";
    }
}

function SetElementWidth(element, width) {
    if (element && element.style) {
        element.style.width = width + "px";
    }
}

function SetElementX(element, x) {
    if (element && element.style) {
        element.style.left = x + "px";
    }
}

function SetElementY(element, y) {
    if (element && element.style) {
        element.style.top = y + "px";
    }
}

function SetElementPosition(element, position) {
    if (element && element.style) {
        element.style.position = position;
    }
}

function SetElementDisplay(element, display) {
    if (element && element.style) {
        element.style.display = display;
    }
}

function GetElementById(elementId) {
    if (document.getElementById) {
        return document.getElementById(elementId);
    }
    else if (document.all) {
        return document.all[elementId];
    }
    else return null;
}


// Определяет на сколько прокручен документ сверху и слева
function getBodyScrolls() {
    var result = new Object();
    result.Top = 0;
    result.Left = 0;
    result.Top = getBodyScrollTop();
    result.Left = getBodyScrollLeft();
    return result;
}
// Определяет на сколько прокручен документ сверху
function getBodyScrollTop() {
    return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}
// Определяет на сколько прокручен документ слева
function getBodyScrollLeft() {
    return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}


// Размеры документа вместе со скроллингами, а не только её видимой части
function GetDocumentSize() {
    var result = new Object();
    result.width = 0;
    result.height = 0;
    result.width = getDocumentWidth();
    result.height = getDocumentHeight();
    return result;
}
// Размер документа по горизонтали вместе со скроллингом, а не только её видимой части
// Если браузер находится в режиме CSS1Compat (режим следования стандартам) правильные значения можно получить через document.documentElement
// но все меняется наоборот если браузер находиться в режиме обратной совместимости (document.compatMode == "BackCompat")
function getDocumentWidth() {
    return (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
}
// Размер документа по вертикали вместе со скроллингом, а не только её видимой части
function getDocumentHeight() {
    return (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
}


// координаты центра окна с учетом скроллинга
function GetClientCenter() {
    var result = new Object();
    result.x = 0;
    result.y = 0;
    result.x = getClientCenterX();
    result.y = getClientCenterY();
    return result;
}
// координаты центра окна по ширине с учетом скроллинга
function getClientCenterX() {
    return parseInt(getClientWidth() / 2) + getBodyScrollLeft();
}
// координаты центра окна по высоте с учетом скроллинга
function getClientCenterY() {
    return parseInt(getClientHeight() / 2) + getBodyScrollTop();
}


// Размеры видимой части документа
function GetClientSize() {
    var result = new Object();
    result.width = 0;
    result.height = 0;
    result.width = getClientWidth();
    result.height = getClientHeight();
    return result;
}
// Ширина видимой части документа
function getClientWidth() {
    if (typeof (window.innerWidth) == 'number') {
        return window.innerWidth;
    }
    else if (document.documentElement && document.documentElement.clientWidth) {
        return document.documentElement.clientWidth;
    }
    else if (document.body && document.body.clientWidth) {
        return document.body.clientWidth;
    }
}
// Высота видимой части документа
function getClientHeight() {
    if (typeof (window.innerWidth) == 'number') {
        return window.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight) {
        return document.documentElement.clientHeight;
    }
    else if (document.body && document.body.clientHeight) {
        return document.body.clientHeight;
    }
}