var hidetreeelements=new Object();
var menupluginelementtree= new Object();
var menupluginelementsavailable = new Object();
var bShowGlobalMinicalendar = true;

function MenuNodes() {}
MenuNodes.createBigButtonContext = function (uniqueid,headertext,imgsrc,cb) {
    var mynode=$("menu_bigbutton_template").cloneNode(true);
    mynode.id=uniqueid;
    removeChildNodes(mynode.getElementsByTagName("div")[3]);
    mynode.getElementsByTagName("div")[3].appendChild(addTranslated(headertext));
    mynode.getElementsByTagName("img")[0].src=imgsrc;
    if (cb) {
        addDOMEvent(mynode.getElementsByTagName("img")[0], "click", cb);
    }
    return mynode;  
}
MenuNodes.createSmallButtonContext = function(uniqueid,headertext) {
	var mynode=$("menu_smallbutton_template").cloneNode(true);
    mynode.id=uniqueid;
	removeChildNodes(mynode.getElementsByTagName("div")[2]);
    mynode.getElementsByTagName("div")[2].appendChild(addTranslated(headertext));
    
    return { node : mynode , body : mynode.getElementsByTagName("tbody")[1] }	
}
MenuNodes.createSmallButton = function(smallcontext, uniqueid, text, imgactive, imginactive,cbactive,cbinactive){
	var element = newnode("tr", {}, { id: uniqueid }, [
        newnode("td", {}, { className: "height16" }, [
            newnode("div", {}, { className: "height16" }, [
                newnode("img", {}, { className: "activeimg", alt: "", src: imgactive}, [])
            ])
		]), 
		newnode("td", {}, {}, [
		    newnode("div", {}, { className: "contenttext paddingleft7px" }, [
                addTranslated(text)
            ])
		])
    ]);
	allnodes[element.id]=element;
	if (cbactive) {
		addDOMEvent(element, "click", function(){
			cbactive();
		});
	}
	smallcontext.body.appendChild(element);
	if (imginactive) {
		var element2 = newnode("tr", { display: "none" }, { id: uniqueid + "_na" }, [
		  newnode("td", {}, { className: "height16" }, [
		      newnode("div", {}, { className: "height16" }, [
			     newnode("img", {}, { className: "notactiveimg", alt: "", src: imgactive }, [])
			  ])
		  ]), 
		  newnode("td", {}, {}, [
		      newnode("div", {}, { className: "contenttextdisable font-color-disabled paddingleft7px" }, [
			     addTranslated(text)
              ])
		  ])
		]);
		if (cbinactive) {
			addDOMEvent(element, "click", function(){
				cbactive();
			});
		}
		allnodes[element2.id]=element2;
		smallcontext.body.appendChild(element2);
	}
}
MenuNodes.DYNAMIC=null;
MenuNodes.FIXED=null;
register("Loaded",function() {
	MenuNodes.DYNAMIC = $("menu_dynamic_content");
	MenuNodes.FIXED = $("menu_complete");
});
function addMenuNode(node,parent,index) {
	var tmpObject= { "node" : node , "parent" : parent };
	if(!menupluginelementtree[parent.id]) {
        menupluginelementtree[parent.id]=new Array();
    } 
    if (menupluginelementsavailable[node.id]) {
        for (var i = 0; i < menupluginelementtree[parent.id].length; i++) {
            if (menupluginelementtree[parent.id].node.id == node.id) {
                menupluginelementtree[parent.id].splice(i, 1);
                break;
            }
        }
    }
    menupluginelementtree[parent.id].splice(index, 0, tmpObject);
    menupluginelementsavailable[node.id] = tmpObject;
	hidetreeelements[node.id]=tmpObject;
    try { parent.removeChild(node); } catch(e) {}
	for(var i=0;i<menupluginelementtree[parent.id].length;i++) {
	    menupluginelementtree[parent.id][i].index=i;
	}
}
function addHideTreeNode(node,parent) {
	var tmpObject= { "node" : node , "parent" : parent };
    hidetreeelements[node.id]=tmpObject;
    try { parent.removeChild(node); } catch(e) {}
}
function appendNode(id,cd2) {
	var mynode =hidetreeelements[id];
	if(mynode) {
		if(!menupluginelementsavailable[id]) {
			mynode.parent.appendChild(mynode.node);	
		} else {
			var nodeafter=null;
			for(var i=0;i<mynode.parent.childNodes.length;i++) {
				nodeafter=mynode.parent.childNodes[i];
				if(nodeafter.nodeType==1) {
					if(nodeafter.id) {
						if(menupluginelementsavailable[nodeafter.id] && menupluginelementsavailable[nodeafter.id].index != undefined) {
							if(mynode.index<=menupluginelementsavailable[nodeafter.id].index) { break; }	
						} else { break; }
					} else { break; }
				}
			}
			mynode.parent.insertBefore(mynode.node,nodeafter);
		}
		if(!cd2 && (mynode.node.style.display=="none" || mynode.node.style.display=="NONE")) {
			if(mynode.node.tagName == "DIV") { mynode.node.style.display = "block"; }
			else { mynode.node.style.display = ""; }
		}
	} else if ($ALL(id)) {
		if(!cd2 && ($ALL(id).style.display=="none" || $ALL(id).style.display=="NONE")) {
			if($ALL(id).tagName == "DIV") { $ALL(id).style.display = "block"; }
			else { $ALL(id).style.display = ""; }
		}
	}
	refillImages(id);
}
function refillImages(id) {
    if($ALL(id)) {
        var elements=$ALL(id).getElementsByTagName("img");
        for(var i=0;i<elements.length;i++) {
            //if(init.images[elements[i].id] && init.images[elements[i].id] != elements[i].src && (!elements[i].src || elements[i].src.match(/img\/dummy.gif/))) {
            if(init.images[elements[i].id] && init.images[elements[i].id] != elements[i].src) {
                elements[i].src=init.images[elements[i].id];
            }
        }
    }
}
function removeNode(id,cd2) {
	var mynode =hidetreeelements[id];
	if(mynode) { 
		try {
			mynode.parent.removeChild(mynode.node);
			if(!cd2 && (mynode.node.style.display!="none" || mynode.node.style.display!="NONE")) {
				mynode.node.style.display = "none";
			}	
		} catch (e) {}
	} else if ($ALL(id)) {
		if(!cd2 && ($ALL(id).style.display!="none" || $ALL(id).style.display!="NONE")) {
			$ALL(id).style.display = "none"; 
		}
	}
}
function showNode(id,changedisplay) {
	appendNode(id,changedisplay);
}
function hideNode(id,changedisplay) {
	removeNode(id,changedisplay);
}
function rebuildTree() {
	addHideTreeNode($("everything"),$("testit3333"));
	addHideTreeNode($("portal"),$("contentarea"));
	if(configGetKey("modules.mail.module")) {
		addHideTreeNode($("mail.detail"),$("contentarea"));
		addHideTreeNode($("mail.list"),$("contentarea"));
		addHideTreeNode($("mail.hsplit"),$("contentarea"));
		addHideTreeNode($("mail.vsplit"),$("contentarea"));
	}
	if(configGetKey("modules.calendar.module")) {
		addHideTreeNode($("calendarTeamDay"),$("contentarea"));
		addHideTreeNode($("calendarTeamWeek"),$("contentarea"));
		//addHideTreeNode($("calendarDay"),$("contentarea"));
		addHideTreeNode($("calendarWorkweek"),$("contentarea"));
		addHideTreeNode($("calendarWeek"),$("contentarea"));
		addHideTreeNode($("calendarMonth"),$("contentarea"));
		addHideTreeNode($("calendarAppointmentDetail"),$("contentarea"));
		addHideTreeNode($("calendarList"),$("contentarea"));
	}
	if(bShowGlobalMinicalendar)
		addHideTreeNode($("calendarMini"),$("below_folders"));
	if(configGetKey("modules.contacts.module")) {
		addHideTreeNode($("contacts"),$("contentarea"));
		addHideTreeNode($("contactCards"),$("contentarea"));
		addHideTreeNode($("contactsList"),$("contentarea"));
		addHideTreeNode($("contactDetails"),$("contentarea"));
	}
	if(configGetKey("modules.infostore.module")) {
		addHideTreeNode($("infostore_list"),$("contentarea"));
		addHideTreeNode($("infostore_split"),$("contentarea"));
		addHideTreeNode($("infostore_detail"),$("contentarea"));
	}
	if(configGetKey("modules.tasks.module")) {
		addHideTreeNode($("taskslist"),$("contentarea"));
		addHideTreeNode($("tasksdetail"),$("contentarea"));
		addHideTreeNode($("taskssplit"),$("contentarea"));
	}
	if(configGetKey("modules.infostore.module") || configGetKey("modules.mail.module")) {
		addHideTreeNode($("mailCheck"),$("below_folders"));
	}
	addHideTreeNode($("folder_props"),$("contentarea"));
	addHideTreeNode($("config"),$("configComplete"));
	addHideTreeNode($("config_tags"),$("configComplete"));
	addHideTreeNode($("config_import"),$("configComplete"));
	addHideTreeNode($("config_calendar_team"),$("configComplete"));
	addHideTreeNode($("config_calendar"),$("configComplete"));
	addHideTreeNode($("config_contact"),$("configComplete"));
	addHideTreeNode($("config_infostore"),$("configComplete"));
	addHideTreeNode($("config_mail_signatures"),$("configComplete"));
	addHideTreeNode($("config_mail"),$("configComplete"));	
	addHideTreeNode($("config_portal"),$("configComplete"));	
	addHideTreeNode($("config_tasks"),$("configComplete"));	
	addHideTreeNode($("disable_background_window"),$("everything"));	
	addHideTreeNode($("disable_confirm_window"),$("disable_background_window"));	
	addHideTreeNode($("alert_window"),$("disable_confirm_window"));	
	addHideTreeNode($("create_window"),$("disable_confirm_window"));	
	addHideTreeNode($("conflict_window"),$("disable_confirm_window"));	
	addHideTreeNode($("logout_window"),$("disable_background_window"));	
	addHideTreeNode($("rightshandling_window"),$("disable_background_window"));
	addHideTreeNode($("acceptdeny_object"),$("disable_background_window"));
	addHideTreeNode($("global_about"),$("disable_background_window"));
	addHideTreeNode($("subscribe_folder"),$("disable_background_window"));
	addHideTreeNode($("error_popup"),$("disable_background_window"));
	addHideTreeNode($("floatingdivParticipants"),$("everything"));	
	addHideTreeNode($("reminderWindow"),$("everything"));

	
	var d=$("menu_complete").childNodes;
	var tmpids=new Array();
	for(zaehler=0;zaehler<d.length;zaehler++) {
		if(d[zaehler].id) { tmpids.push(d[zaehler].id) }
	}
	for(var i=0;i<tmpids.length;i++) {
		addMenuNode($(tmpids[i]),$("menu_complete"),i+1);
	}
	var d=$("menu_dynamic_content").childNodes;
	var tmpids=new Array();
	for(zaehler=0;zaehler<d.length;zaehler++) {
		if(d[zaehler].id) { tmpids.push(d[zaehler].id) }
	}
	for(var i=0;i<tmpids.length;i++) {
		addMenuNode($(tmpids[i]),$("menu_dynamic_content"),i+1);
	}
	
	
	/*var contextmenu = MenuNodes.createSmallButtonContext("test_plugin_smallbutton","Mein Small");
	MenuNodes.createSmallButton(contextmenu,"test_plugin_smallbutton_button1", "Button1", "themes/default/img/menu/edit.gif", "themes/default/img/menu/edit_d.gif");
	MenuNodes.createSmallButton(contextmenu,"test_plugin_smallbutton_button2", "Button2", "themes/default/img/menu/edit.gif", "themes/default/img/menu/edit_d.gif");
	
	addMenuNode(contextmenu.node,MenuNodes.FIXED,2);
	changeDisplay("mail","test_plugin_smallbutton");
	menuarrows["plugin"]=new Object();
	function setFunction() {
		function changeplugin() {
			menuglobalzaehler=0;
            menuarrows["plugin"]["test_plugin_smallbutton"]=new Array();
			menu_display_contents("plugin","test_plugin_smallbutton",menucountselected==1, "test_plugin_smallbutton_button1");
			menu_display_contents("plugin","test_plugin_smallbutton",menucountselected>0, "test_plugin_smallbutton_button2");
		}
		register("OX_SELECTED_ITEMS_CHANGED",changeplugin);
	}
	setFunction();*/
	
	autorefill();
}
function autorefill() {
	showNode("menu_options_menu");
	showNode("menu_empty_content");
	showNode("configComplete");
	showNode("menu_empty_fillup");	
}
function changeImgPath(newPath) {
	for (var i in init.images) {
		init.images[i] = init.images[i].replace(/\/default\//g, "/"+newPath+"/");
	}
}
register("Loaded",rebuildTree);
register("OX_Configuration_Loaded_Complete",function () {
	var effectsarray1=["menu_portal_quick_settings", 
					  "menu_mail", "menu_mail2", "menu_mail_view", "menu_mail_structure", 
					  "menu_calendar", "menu_calendar_views", "menu_calendar_timerange", "menu_calendar_teammember", 
					  "menu_contact", "menu_contact2", "menu_contacts_views", 
					  "menu_tasks", "menu_tasks_views",
					  "menu_infostore", "menu_infostore2", "menu_infostore_version", "menu_infostore_views", "menu_infostore_send",
					  "menu_import", "menu_configuration_folder", "menu_config_portal_external", "menu_config_mail_signatures", 
					  "menu_configuration_user", "menu_configuration_teams_teams", "menu_configuration_settings_categories", "menu_configuration_teams_member", "menu_configuration_adminright", "menu_configuration_folderright_folder", "menu_configuration_objectright_read", "menu_configuration_objectright_write", "menu_configuration_objectright_delete", "menu_global_confirmation", "menu_global_attachments", 
					  "menu_linking"];
	var effectsarray2 = ["menu_global_tags"];
	var singlearray1=["menu_search_mail_clearfield","menu_search_global_clearfield"];
	var singlearray2=["menu_small_mail","menu_small_calendar","menu_small_contacts",
				      "menu_small_distributionlist","menu_small_tasks","menu_small_infostore"];
	var singlearray3=["menu_big_portal","menu_big_mail","menu_big_calendar","menu_big_contacts","menu_big_tasks","menu_big_infostore","menu_big_save"];
						  
	if(configGetKey("gui.effects.global")) {
		for(var zaehler=0;zaehler<effectsarray1.length;zaehler++) {
			makeButtonElement1($ALL(effectsarray1[zaehler]));
		}
		for(var zaehler=0;zaehler<effectsarray2.length;zaehler++) {
			makeButtonElement2($ALL(effectsarray2[zaehler]));
		}
		for(var zaehler=0;zaehler<singlearray1.length;zaehler++) {
			setDOMMenuElement1($ALL(singlearray1[zaehler]));
		}
		for(var zaehler=0;zaehler<singlearray2.length;zaehler++) {
			setDOMMenuElement2($ALL(singlearray2[zaehler]));
		}
		for(var zaehler=0;zaehler<singlearray3.length;zaehler++) {
			setDOMMenuElement3($ALL(singlearray3[zaehler]));
		}
	}
});