function ClickShowHideMenu(id) {
    this.box1Hover = true;
    this.box2Hover = true;
    this.highlightActive = true;
    this.clickFromMenu = false;

    this.init = function() {
        if (!document.getElementById(this.id)) {
            alert("Element '"+this.id+"' does not exist in this document. ClickShowHideMenu cannot be initialized");
            return;
        }
        this.parse(document.getElementById(this.id).childNodes, this.tree, this.id);
        this.load();
 
 
 	if (navigator.userAgent.toLowerCase().indexOf('safari')!=-1) {
 		var bodyElt;
 		bodyElt = document.getElementById("bodyTag");
 	
 		if(!bodyElt){
 			bodyElt = document.getElementsByTagName("body")[0];
 		}
 
 		if (bodyElt) {
 			bodyElt.addEventListener("unload", function(e) { self.save(); }, false);
 		}
 	} 
 	else {
		if(window.attachEvent){
		    window.attachEvent("onunload", function(e) { self.save(); });
		} 
		else if(window.addEventListener){
		    window.addEventListener("unload", function(e) { self.save(); }, false);
		}
	}
 
 
/* 
 	if(window.attachEvent){
            window.attachEvent("onunload", function(e) { self.save(); });
        } 
        else if(window.addEventListener){
            window.addEventListener("unload", function(e) { self.save(); }, false);
        }
*/
    }

    this.parse = function(nodes, tree, id) {
        for(var i = 0; i < nodes.length; i++){
            if(nodes[i].nodeType != 1){
                continue;
            }
            if(nodes[i].className){
                if("box1" == nodes[i].className.substr(0, 4)){
					nodes[i].id = id + "-" + tree.length;
					tree[tree.length] = new Array();
					eval('nodes[i].onmouseover = function() { self.box1over("'+nodes[i].id+'"); }');
					eval('nodes[i].onmouseout = function() { self.box1out("'+nodes[i].id+'"); }');
					eval('nodes[i].onclick = function() { self.box1click("'+nodes[i].id+'"); }');
                }
                if("section" == nodes[i].className){
					id = id + "-" + (tree.length - 1);
					nodes[i].id = id + "-section";
					tree = tree[tree.length - 1];
                }

                if("box2" == nodes[i].className.substr(0, 4)){
					nodes[i].id = id + "-" + tree.length;
					tree[tree.length] = new Array();
					eval('nodes[i].onclick = function() { self.box2click("'+nodes[i].id+'", "'+nodes[i].className+'"); }');
                }
            }
            if(this.highlightActive && nodes[i].tagName && nodes[i].tagName == "A"){
                if(document.location.href == nodes[i].href){
                    nodes[i].className = (nodes[i].className ? ' active' : 'active')
                }
            }
            if(nodes[i].childNodes){
                this.parse(nodes[i].childNodes, tree, id);
            }
        }
    }

    this.box1over = function(id) {
        if(!this.box1Hover) return;
        if(!document.getElementById(id)) return;
        document.getElementById(id).className = (this.id_openbox == id ? "box1-open-hover" : "box1-hover");
    }

    this.box1out = function(id) {
        if(!this.box1Hover) return;
        if(!document.getElementById(id)) return;
        document.getElementById(id).className = (this.id_openbox == id ? "box1-open" : "box1");
    }

    this.box1click = function(id){
        
        if(!document.getElementById(id)){
            return;
        }
        
        var id_openbox = this.id_openbox;
        
        if(this.id_openbox){
            if(!document.getElementById(id + "-section")){
                return;
            }
            
            this.hide();
            this.cookie.del(this.id);
            
            if(id_openbox == id){
                if(this.box1hover){
                    document.getElementById(id_openbox).className = "box1-hover";
                } 
                else{
                    document.getElementById(id_openbox).className = "box1";
                }
            } 
            else{
                document.getElementById(id_openbox).className = "box1";
            }
        }
        
        if(id_openbox != id){

            this.cookie.set(this.id, id);

            this.show(id);
            var className = document.getElementById(id).className;
            
            if("box1-hover" == className){
                document.getElementById(id).className = "box1-open-hover";
            }
            
            if("box1" == className){
                document.getElementById(id).className = "box1-open";
            }
        }
    }

    this.box2click = function(id, className) {
        if(!this.box2Hover) return;
        if(!document.getElementById(id)) return;
        this.clickFromMenu = true;
        // set a cookie so we know which link was clicked
        this.cookie.set("clickedLink", id);       
    }

    this.show = function(id) {
        if(document.getElementById(id + "-section")){
            document.getElementById(id + "-section").style.display = "block";
            this.id_openbox = id;
        }
    }

    this.hide = function() {
        document.getElementById(this.id_openbox + "-section").style.display = "none";
        this.id_openbox = "";
    }

    this.save = function() {
        if(this.id_openbox && this.clickFromMenu){
            this.cookie.set(this.id, this.id_openbox);
        } 
        else{
            this.cookie.del(this.id);
            this.cookie.del("clickedLink");
        }
    }

    this.load = function() {
 	var clickedLink = this.cookie.get("clickedLink");

	if(clickedLink){
		if(document.getElementById(clickedLink)){
			document.getElementById(clickedLink).className = "box2-highlight";
		}
	}
	else{
		if(document.getElementById("currentPage")){
			document.getElementById("currentPage").className = "on";
		}
	}
 
 	var id_openbox = this.cookie.get(this.id);
        if(id_openbox){
		document.getElementById(id_openbox).className = "box1-open";
        	this.show(id_openbox);
        }
    }

    function Cookie() {
        this.get = function(name) {
            var cookies = document.cookie.split(";");
            for(var i = 0; i < cookies.length; i++){
                var a = cookies[i].split("=");
                if(a.length == 2){
                    a[0] = a[0].trim();
                    a[1] = a[1].trim();
                    if(a[0] == name){
                        return unescape(a[1]);
                    }
                }
            }
            return "";
        }
        
        this.set = function(name, value){
            document.cookie = name + "=" + escape(value);
        }
        
        this.del = function(name){
            document.cookie = name + "=; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
    }

    var self = this;
    this.id = id;
    this.tree = new Array();
    this.cookie = new Cookie();
    this.id_openbox = "";
}

if(typeof String.prototype.trim == "undefined"){
    String.prototype.trim = function() {
        var s = this.replace(/^\s*/, "");
        return s.replace(/\s*$/, "");
    }
}

