
	function coreHelperMenuBase(sInstanceName, sOpenAllActivatorId)
	{
		this.translate	=	function (mVar)
		{
			if ("function" === typeof(translate))
			{
				return translate(mVar);
			}
			return mVar;
		}
		
		this.sCloseAllText			=	this.translate("close_all");
		this.sOpenAllText			=	this.translate("open_all");
		
		this.sInstanceName 			= "menu_"+sInstanceName;
		this.iExpireDays			= 31;
		this.sCookie 				= getCookie(this.sInstanceName);
		this.sOpenAllActivatorId	= sOpenAllActivatorId;
		
		this.toggle	=	function(oActivator)
						{
							if ("undefined" !== typeof(oActivator) && "undefined" !== typeof(oActivator.id))
							{
								var oChildElement = document.getElementById(oActivator.id+'_child');
								if (null !== oChildElement)
								{
									var sActivatorClassName	= oActivator.parentNode.className;
									if (null === sActivatorClassName)
									{
										sActivatorClassName = "";
									}
									
									var sOriginalClassName 	= oChildElement.className;
									if (null === sOriginalClassName)
									{
										sOriginalClassName = "";
									}
									
									var sClassName	= "closed";
									if (-1 !== sOriginalClassName.indexOf(sClassName))
									{
										sClassName	= "open";
									}
									var oRegExp = new RegExp("\s*(open|closed)\s*", "gi");
									oChildElement.className = sOriginalClassName.replace(oRegExp, " ")+" "+sClassName;
									this.setCookie(oChildElement.id, sClassName);
									oActivator.parentNode.className = sActivatorClassName.replace(oRegExp, " ")+" "+sClassName;
									this.checkOpenElements();
								}
							}
						};
						
		this.checkOpenElements = function(bToggling)
		{
			var bHasOpen = false;
			if ("undefined" === typeof(bToggling) || true !== bToggling)
			{
				bToggling = false;
			}
			if ("undefined" !== typeof(this.sOpenAllActivatorId))
			{
				var oCloseAll = document.getElementById(this.sOpenAllActivatorId);
				if (null !== oCloseAll
				&&  "undefined" !== typeof(oCloseAll.parentNode) 
				&&  "undefined" !== typeof(oCloseAll.parentNode.parentNode))
				{
					var oMainElement 	= oCloseAll.parentNode.parentNode;
					var iChildCount		= oMainElement.childNodes.length;
					for (var pCount = 0; pCount < iChildCount; pCount++)
					{
						if ("undefined" !== typeof(oMainElement.childNodes[pCount].className) && -1 !== oMainElement.childNodes[pCount].className.indexOf("branch") && -1 !== oMainElement.childNodes[pCount].className.indexOf("open"))
						{
							bHasOpen = true;
							break;
						}
					}
				}
				if ((true === bHasOpen && false === bToggling) || (false === bHasOpen && true === bToggling))
				{
					oCloseAll.innerHTML = this.sCloseAllText;
					oCloseAll.className = "open";
				}
				else
				{
					oCloseAll.innerHTML = this.sOpenAllText;
					oCloseAll.className = "closed";
				}
			}
			return bHasOpen;
		}
						
		this.toggleAll = 	function (oActivator)
							{
								if ("undefined" !== typeof(oActivator) 
								&&  "undefined" !== typeof(oActivator.parentNode) 
								&&  "undefined" !== typeof(oActivator.parentNode.parentNode))
								{
									var bHasOpen 		= this.checkOpenElements(true);
									var oMainElement 	= oActivator.parentNode.parentNode;
									this.toggleElements(oMainElement, bHasOpen);
								}
							}
		
		this.toggleElements = function(oParent, bClose)
		{
			if ("undefined" !== oParent.childNodes)
			{
				var iChildCount		= oParent.childNodes.length;
				for (var pCount = 0; pCount < iChildCount; pCount++)
				{

					if ("undefined" !== typeof(oParent.childNodes[pCount].className) && -1 !== oParent.childNodes[pCount].className.indexOf("branch"))
					{
						if (true === bClose && -1 !== oParent.childNodes[pCount].className.indexOf("open"))
						{
							this.toggle(oParent.childNodes[pCount].childNodes[0]);
						}
						else if (true !== bClose && -1 === oParent.childNodes[pCount].className.indexOf("open"))
						{
							this.toggle(oParent.childNodes[pCount].childNodes[0]);
						}
						
						if ("undefined" !== typeof(oParent.childNodes[pCount].childNodes))
						{
							this.toggleElements(oParent.childNodes[pCount].childNodes[2], bClose);
						}
					}
				}
			}
		}
						
		this.setCookie = function(sElementName, sElementStatus)
						{
							sElementName = sElementName+"\;"
							var oRegExp = new RegExp(sElementName, "gi");
							this.sCookie = this.sCookie.replace(oRegExp, "");
							if ("open" === sElementStatus)
							{
								this.sCookie += sElementName;
							}
							setCookie( this.sInstanceName, this.sCookie, this.iExpireDays );
						};
		
		
	}
