/*
This file is part of http://www.dwee.uni-jena.de/
Deutsche Wortfeldetymologie in europäischem Kontext
Copyright: Sächsische Akademie der Wissenschaften zu Leipzig
Author: Stefan Lotze
*/

window.onload = function() {
    ChOIR.visuals.setClassOpacity("menu_list", 0.9);
    ChOIR.visuals.setClassOpacity("menu_int_list", 0.9);
    ChOIR.visuals.setClassHoverOpacity("home_logo", 1, 0.95);
    ChOIR.visuals.setClassHoverOpacity("logo", 1, 0.7);
    /* ChOIR.visuals.setClassHover("menu_item", "#DAA520", "#00213F"); */
    ChOIR.menuOps.init("top_link", "_list", "#DAA520", "#00213F", "left");
    ChOIR.menuOps.init("top_int_link", "_list", "#DAA520", "#00213F", "right");
    if(/msie\s*6/i.test(navigator.userAgent)) {
        /* to avoid some block displaying problems with IE6 */
        ChOIR.menuOps.createBlockLinks("menu_list", "menu_item");
        ChOIR.menuOps.createBlockLinks("menu_int_list", "menu_item");
        }
    if(/msie/i.test(navigator.userAgent)) {
        /* load alpha support for png (for ie6 and ie7!) */
        ChOIR.visuals.alphaLoader();
        }
    };
ChOIR = new Object();
ChOIR.commons = {
    getElementsByClassName: function(className) {
      	var elements = (document.all) ? document.all : document.getElementsByTagName("*");
      	var toReturn = [];
      	for(var i = 0; i < elements.length; i++) {
            if(typeof(elements[i].className) != "undefined") {
                var parts = elements[i].className.split(" ");
                if(ChOIR.commons.inArray(className, parts)) {
          			toReturn.push(elements[i]);
                    }
                }
          	}
      	return toReturn;
        },
    browsersOpacity: function(elem, opacity) {
        if(typeof(elem.style.opacity) != "undefined") {
            elem.style.opacity = opacity;
            }
        else if(typeof(elem.style.Opacity) != "undefined") {
            elem.style.Opacity = opacity;
            }    
        else if(typeof(elem.style.MozOpacity) != "undefined") {
            elem.style.MozOpacity = opacity;
            }    
        else if(typeof(elem.style.filter) != "undefined") {
            elem.style.filter = "Alpha(opacity="+(opacity*100)+")";
            }    
        },
    browsersHoverOpacity: function(elem, mouseOverOpac, mouseOutOpac) {
        ChOIR.commons.browsersOpacity(elem, mouseOutOpac);
        elem.mouseOverOpac = mouseOverOpac;
        elem.mouseOutOpac  = mouseOutOpac;
        elem.onmouseover   = function() {
            ChOIR.commons.browsersOpacity(this, this.mouseOverOpac);
            }
        elem.onmouseout    = function() {
            ChOIR.commons.browsersOpacity(this, this.mouseOutOpac);
            }
        },
    getAbsOffset: function(elem) {
        var thisOffset = {
            top:  elem.offsetTop,
            left: elem.offsetLeft
            };
        while(elem = elem.offsetParent) {
            thisOffset.top  += elem.offsetTop;
            thisOffset.left += elem.offsetLeft; 
            }
        return thisOffset;    
        },
    inArray: function(needle, haystack) {
        for(var i = 0; i < haystack.length; i++) {
    		if(haystack[i] == needle) {
                return true;
        		}
            }
        return false;
        }
    };
ChOIR.menuOps = {
    opened: null,
    closeTimeout: null,
    openTimeout: null,
    init: function(className, listIdExtension, color, backgroundColor, menuPosition) {
        var affElems = ChOIR.commons.getElementsByClassName(className);
        for(var i = 0; i < affElems.length; i++) {
            affElems[i].col = affElems[i].style.color;
            affElems[i].hoverCol = color;
            affElems[i].bgCol = affElems[i].style.backgroundColor;
            affElems[i].hoverBgCol = backgroundColor;
            affElems[i].assignedMenu = document.getElementById(affElems[i].id + listIdExtension);
            affElems[i].assignedMenu.assignedButton = affElems[i];
            affElems[i].menuPosition = menuPosition;
            affElems[i].onmouseover = function() {
                if(ChOIR.menuOps.opened != null) {
                    if(ChOIR.menuOps.closeTimeout != null) {
                        window.clearTimeout(ChOIR.menuOps.closeTimeout);
                        ChOIR.menuOps.closeTimeout = null;
                        }
                    if(ChOIR.menuOps.opened != this) {
                        ChOIR.menuOps.close(ChOIR.menuOps.opened);
                        ChOIR.menuOps.open(this);
                        }
                    }
                else {
                    if(ChOIR.menuOps.openTimeout != null) {
                        window.clearTimeout(ChOIR.menuOps.openTimeout);
                        ChOIR.menuOps.openTimeout = null;
                        ChOIR.menuOps.open(this);
                        }
                    else {
                        var elem = this;
                        ChOIR.menuOps.openTimeout = window.setTimeout(function() {
                            ChOIR.menuOps.open(elem);
                            ChOIR.menuOps.openTimeout = null;
                            }, 100);
                        }    
                    }    
                };
            affElems[i].onmouseout = function() {
                if(ChOIR.menuOps.openTimeout != null) {
                    window.clearTimeout(ChOIR.menuOps.openTimeout);
                    ChOIR.menuOps.openTimeout = null;
                    }
                var elem = this;
                ChOIR.menuOps.closeTimeout = window.setTimeout(function() {
                    ChOIR.menuOps.close(elem);
                    ChOIR.menuOps.closeTimeout = null;
                    }, 100);
                };
            affElems[i].assignedMenu.onmouseover = function() {
                if(ChOIR.menuOps.closeTimeout != null) {
                    window.clearTimeout(ChOIR.menuOps.closeTimeout);
                    ChOIR.menuOps.closeTimeout = null;
                    }
                if(ChOIR.menuOps.opened != this.assignedButton) {
                    if(ChOIR.menuOps.opened != null) {
                        ChOIR.menuOps.close(ChOIR.menuOps.opened);
                        }
                    ChOIR.menuOps.open(this.assignedButton);
                    }
                };    
            affElems[i].assignedMenu.onmouseout = function() {
                var elem = this.assignedButton;
                ChOIR.menuOps.closeTimeout = window.setTimeout(function() {
                    ChOIR.menuOps.close(elem);
                    ChOIR.menuOps.closeTimeout = null;
                    }, 750);
                };    
            }
        },
    open: function(button) {
        button.style.color = button.hoverCol;
        button.style.backgroundColor = button.hoverBgCol;
        button.assignedMenu.style.display = "block";
        button.assignedMenu.style.top = (ChOIR.commons.getAbsOffset(button).top + button.offsetHeight) + "px";
        if(button.menuPosition == "right") {
            button.assignedMenu.style.left = ChOIR.commons.getAbsOffset(button).left - (button.assignedMenu.offsetWidth - button.offsetWidth) + "px";
            }
        else {
            button.assignedMenu.style.left = ChOIR.commons.getAbsOffset(button).left + "px";
            }    
        ChOIR.menuOps.opened = button;
        document.body.onclick = function() {
            if(ChOIR.menuOps.opened != null) {
                ChOIR.menuOps.close(ChOIR.menuOps.opened);
                }
            }
        },    
    close: function(button) {
        button.style.color = button.col;
        button.style.backgroundColor = button.bgCol;
        button.assignedMenu.style.display = "none";
        button.assignedMenu.style.top = "0px";
        button.assignedMenu.style.left = "-1500px";
        ChOIR.menuOps.opened = null;
        document.body.onclick = null;
        },
    createBlockLinks: function(menuClassName, itemClassName) {  /* to avoid some block displaying problems particularly with IE6 */ 
        var affElems = ChOIR.commons.getElementsByClassName(menuClassName);
        for(var i = 0; i < affElems.length; i++) {
            affElems[i].style.display = "block";
            affElems[i].baseWidth = affElems[i].offsetWidth;
            affElems[i].style.display = "none";
            theseAffElems = (affElems[i].all) ? affElems[i].all : affElems[i].getElementsByTagName("*");
            for(var k = 0; k < theseAffElems.length; k++) {
                if(theseAffElems[k].className == itemClassName) {
                    theseAffElems[k].style.width = affElems[i].baseWidth + "px";
                    }
                }
            } 
        }    
    };        
ChOIR.visuals = {
    alphaLoader: function() {
        var allImages = document.getElementsByTagName("img");
            for(var i = 0; i < allImages.length; i++) {
                if(typeof(allImages[i].style.filter) != "undefined") {
                    if(/png$/i.test(allImages[i].src)) {
                      allImages[i].style.width = allImages[i].offsetWidth + "px";
                      allImages[i].style.height = allImages[i].offsetHeight + "px";
                      allImages[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+allImages[i].src+"', sizingMethod='scale')";
                      allImages[i].src = allImages[i].src.replace(/\/[^\/]*$/i, "/spacer.gif");
                    }
                }
            } 
        },
    setClassOpacity: function(className, opacity) {
        var affElems = ChOIR.commons.getElementsByClassName(className);
        for(var i = 0; i < affElems.length; i++) {
            ChOIR.commons.browsersOpacity(affElems[i], opacity);
            } 
        },
    setClassHoverOpacity: function(className, mouseOverOpac, mouseOutOpac) {   
        var affElems = ChOIR.commons.getElementsByClassName(className);
        for(var i = 0; i < affElems.length; i++) {
            ChOIR.commons.browsersHoverOpacity(affElems[i], mouseOverOpac, mouseOutOpac);
            } 
        },
    setClassHover: function(className, color, backgroundColor) {
        var affElems = ChOIR.commons.getElementsByClassName(className);
        for(var i = 0; i < affElems.length; i++) {
            affElems[i].col = affElems[i].style.color;
            affElems[i].hoverCol = color;
            affElems[i].bgCol = affElems[i].style.backgroundColor;
            affElems[i].hoverBgCol = backgroundColor;
            affElems[i].onmouseover = function() {
                this.style.color = this.hoverCol;
                this.style.backgroundColor = this.hoverBgCol;
                }
            affElems[i].onmouseout = function() {
                this.style.color = this.col;
                this.style.backgroundColor = this.bgCol;
                }
            } 
        }    
    };
