function GetElementPosition(id) {
    var elem = document.getElementById(id);
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;
    var l = 0;
    var t = 0;

    while (elem) {
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }
    return {"left":l, "top":t, "width": w, "height":h};
}


function ddmenu_show(item_id, menu_id, offset_left) {
    var obItem = document.getElementById(item_id);
    var obMenu = document.getElementById(menu_id);

    if (!obMenu || !obItem) return;

    var posItem = GetElementPosition(item_id);
    var posMenu = GetElementPosition(menu_id);

    var MenuLeft = posItem.left;

    if (typeof offset_left == "undefined") offset_left = 0;

    MenuLeft += offset_left;
    obMenu.style['left'] = MenuLeft + "px";
    obMenu.style['top'] = (posItem.top + posItem.height) + "px";
    obMenu.style.zIndex = 15;
    obMenu.style.visibility = "visible";

    // hideElement("SELECT", document.getElementById(menu_id));
    // hideElement("OBJECT", document.getElementById(menu_id));

    obItem.onmouseout = function() {
        ddmenu_hide(this.id, menu_id);
    }
    obMenu.onmouseout = function() {
        ddmenu_hide(item_id, menu_id);
    }
    obMenu.onmouseover = function() {
        ddmenu_show(item_id, menu_id, offset_left);
    }
}


function ddmenu_hide(item_id, menu_id) {
    var obItem = document.getElementById(item_id);
    var obMenu = document.getElementById(menu_id);

    if (!obMenu || !obItem) return;

    if (!obItem.onmouseout && !obMenu.onmouseout) return;

    obMenu.style.visibility = "hidden";
    // showElement("SELECT");
    // showElement("OBJECT");
}


function GetPos(el) {
    if (!el || !el.offsetParent)return false;
    var res = Array()
    res["left"] = el.offsetLeft;
    res["top"] = el.offsetTop;
    var objParent = el.offsetParent;
    while (objParent.tagName.toUpperCase() != "BODY") {
        res["left"] += objParent.offsetLeft;
        res["top"] += objParent.offsetTop;
        objParent = objParent.offsetParent;
    }
    res["right"] = res["left"] + el.offsetWidth;
    res["bottom"] = res["top"] + el.offsetHeight;
    return res;
}


function hideElement(elName, Menu) {
//    if(BrVer!='E') return;
    for (i = 0; i < document.all.tags(elName).length; i++) {
        Obj = document.all.tags(elName)[i];
        if (!(pMenu = GetPos(Menu)))continue;
        if (!(pObj = GetPos(Obj)))continue;

        if (pObj["left"] < pMenu["right"] && pMenu["left"] < pObj["right"] && pObj["top"] < pMenu["bottom"] && pMenu["top"] < pObj["bottom"])
            Obj.style.visibility = "hidden";
    }
}


function showElement(elName) {
    //   if(BrVer!='E') return;
    for (i = 0; i < document.all.tags(elName).length; i++) {
        obj = document.all.tags(elName)[i];
        if (!obj || !obj.offsetParent)continue;
        if (obj.style.visibility == "hidden")
            obj.style.visibility = "visible";
    }
}

function getBrowserInfo() {
    var t,v = undefined;
    if (window.opera) t = 'Opera';
    else if (document.all) {
        t = 'IE';
        var nv = navigator.appVersion;
        var s = nv.indexOf('MSIE') + 5;
        v = nv.substring(s, s + 1);
    }
    else if (navigator.appName) t = 'Netscape';
    return {type:t,version:v};
}

function bookmark(a) {
    var url = window.document.location;
    var title = window.document.title;
    var b = getBrowserInfo();
    if (b.type == 'IE' && b.version >= 4) window.external.AddFavorite(url, title);
    else if (b.type == 'Opera') {
        a.href = url;
        a.rel = "sidebar";
        a.title = title;
        return true;
    }
    else if (b.type == "Netscape") window.sidebar.addPanel(title, url, "");
    else alert("Нажмите CTRL-D, чтобы добавить страницу в закладки.");
    return false;
}


function byId(node) {
    return typeof node == 'string' ? document.getElementById(node) : node
}

function getRealDisplay(elem) {
    if (elem.currentStyle) {
        return elem.currentStyle.display
    } else if (window.getComputedStyle) {
        var computedStyle = window.getComputedStyle(elem, null)

        return computedStyle.getPropertyValue('display')
    }
}

function hide(el) {
    if (!el.getAttribute('displayOld')) {
        el.setAttribute("displayOld", el.style.display)
    }

    el.style.display = "none"
}

displayCache = {}

function isHidden(el) {
    var width = el.offsetWidth, height = el.offsetHeight,
            tr = el.nodeName.toLowerCase() === "tr"

    return width === 0 && height === 0 && !tr ?
            true : width > 0 && height > 0 && !tr ? false : getRealDisplay(el)
}

function toggle(el) {
    isHidden(el) ? show(el) : hide(el)
}


function show(el) {

    if (getRealDisplay(el) != 'none') return

    var old = el.getAttribute("displayOld");
    el.style.display = old || "";

    if (getRealDisplay(el) === "none") {
        var nodeName = el.nodeName, body = document.body, display

        if (displayCache[nodeName]) {
            display = displayCache[nodeName]
        } else {
            var testElem = document.createElement(nodeName)
            body.appendChild(testElem)
            display = getRealDisplay(testElem)

            if (display === "none") {
                display = "block"
            }

            body.removeChild(testElem)
            displayCache[nodeName] = display
        }

        el.setAttribute('displayOld', display)
        el.style.display = display
    }
}

function bindReady(handler) {

    var called = false

    function ready() { // (1)
        if (called) return
        called = true
        handler()
    }

    if (document.addEventListener) { // (2)
        document.addEventListener("DOMContentLoaded", function() {
            ready()
        }, false)
    } else if (document.attachEvent) {  // (3)

        // (3.1)
        if (document.documentElement.doScroll && window == window.top) {
            function tryScroll() {
                if (called) return
                if (!document.body) return
                try {
                    document.documentElement.doScroll("left")
                    ready()
                } catch(e) {
                    setTimeout(tryScroll, 0)
                }
            }

            tryScroll()
        }

        // (3.2)
        document.attachEvent("onreadystatechange", function() {

            if (document.readyState === "complete") {
                ready()
            }
        })
    }

    // (4)
    if (window.addEventListener)
        window.addEventListener('load', ready, false)
    else if (window.attachEvent)
        window.attachEvent('onload', ready)
    /*  else  // (4.1)
     window.onload=ready
     */
}

readyList = []

function onReady(handler) {

    if (!readyList.length) {
        bindReady(function() {
            for (var i = 0; i < readyList.length; i++) {
                readyList[i]()
            }
        })
    }

    readyList.push(handler)
}

onReady(function() {
    var newsFilterLink = byId('news-mark-filter');

    newsFilterLink.onclick = function() {
        toggle(byId('news-auto-marks'));
        return false;
    }

    var newsModelFilterLink = byId('news-mark-model-filter');
    if (newsModelFilterLink) {
        newsModelFilterLink.onclick = function() {
            toggle(byId('news-auto-models'));
            return false;
        }
    }
});

