		if (!window.Node) {
			var Node = {
				ELEMENT_NODE: 1,
				ATTRIBUTE_NODE: 2,
				TEXT_NODE: 3,
				COMMENT_NODE: 8,
				DOCUMENT_NODE: 9,
				DOCUMENT_FRAGMENT_NODE: 11
				}
			}

		var currentItem = null
		var selectedItem = null
		var hideTimer = new Array()
		var menuParameters = new Array()

		function getID(current)
			{
			// Retourne l'ID d'un element, ex : current.id=item_m1_AE423FGB => m1_AE423FGB
			var tab = current.id.split("_")
			return tab[1] + (tab[2]!=null ? '_' + tab[2] : '')
			}

		function getMenuID(current)
			{
			// Retourne l'ID du menu d'un element, ex : current.id=item_m1_AE423FGB => m1
			var tab = current.id.split("_")
			return tab[1]
			}

		function getName(current)
			{
			// Retourne le type d'un element, ex : current.id=item_m1_AE423FGB => item
			var tab = current.id.split("_")
			return tab[0]
			}

		function setItemClassToOver(current)
			{
			// Change la classe d'un element, ajoute OVER, ex : current.className=item_m1_n1 => item_m1_n1_over
			// Si le menu est compose d'une image, on modifie egalement la source
			var currentImg = document.getElementById('img_' + getID(current))

			if (current)
				if (current.className.lastIndexOf('_over')==-1)
					current.className = current.className + '_over'

			regExp = /\.gif/gi
			if (currentImg)
				if (currentImg.src.lastIndexOf('_over')==-1)
					currentImg.src = currentImg.src.replace(regExp, '_over.gif')
			}

		function setItemClassToOut(current)
			{
			// Change la classe d'un element, enleve OVER, ex : current.className=item_m1_n1_over => item_m1_n1
			// Si le menu est compose d'une image, on modifie egalement la source
			var currentImg = document.getElementById('img_' + getID(current))

			regExp = /_over/gi
			if (current)
				if (current.className.lastIndexOf('_over')!=-1)
					current.className = current.className.replace(regExp, '')

			if (currentImg)
				if (currentImg.src.lastIndexOf('_over')!=-1)
					currentImg.src = currentImg.src.replace(regExp, '')
			}

		function setItemClassToOpen(current)
			{
			// Change la classe d'un element, ajoute OPEN, ex : current.className=item_m1_n1_over => item_m1_n1_open_over
			// Si le menu est compose d'une image, on modifie egalement la source
			var currentImg = document.getElementById('img_' + getID(current))

			regExp = /_over/gi
			if (current)
				if (current.className.lastIndexOf('_open')==-1)
					current.className = (current.className.lastIndexOf('_over')==-1) ? current.className + '_open' : current.className.replace(regExp, '_open_over')

			regExp = /\.gif/gi
			regExpB= /_over\.gif/gi
			if (currentImg)
				if (currentImg.src.lastIndexOf('_open')==-1)
					currentImg.src = (currentImg.src.lastIndexOf('_over')==-1) ? currentImg.src.replace(regExp, '_open.gif') : currentImg.src.replace(regExpB, '_open_over.gif')
			}

		function setItemClassToClose(current)
			{
			// Change la classe d'un element, enleve OPEN, ex : current.className=item_m1_n1_open_over => item_m1_n1_over
			// Si le menu est compose d'une image, on modifie egalement la source
			var currentImg = document.getElementById('img_' + getID(current))

			regExp = /_open/gi
			if (current)
				if (current.className.lastIndexOf('_open')!=-1)
					current.className = current.className.replace(regExp, '')

			if (currentImg)
				if (currentImg.src.lastIndexOf('_open')!=-1)
					currentImg.src = currentImg.src.replace(regExp, '')
			}

		function showItemsContent(current)
			{
			// Ouvre le DIV afin d'afficher les sous-menus
			if (current)
				{
				var isItem = (getName(current)!='content')
				var content
				if (isItem)
					content = document.getElementById('content_' + getID(current))
				else
					content = current
				if (content && isItem)
					content.style.display = 'block'
				if (isItem)
					{
					current.status = 'open'
					setItemClassToOpen(current)
					}
				}
			}

		function hideItemsContent(current)
			{
			// Cache le DIV afin d'effacer les sous-menus
			if (current)
				{
				var isItem = (getName(current)!='content')
				var content
				if (isItem)
					content = document.getElementById('content_' + getID(current))
				else
					content = current
				if (content)
					{
					var child = content.childNodes
					for (var i = 0; i<child.length; i++)
						if (child[i].nodeType==Node.ELEMENT_NODE)
							hideItemsContent(child[i])
					if (isItem)
						content.style.display = 'none'
					}
				if (isItem)
					{
					current.status = 'close'
					setItemClassToClose(current)
					}
				}
			}

		function hideAllItems(id)
			{
			// Cache tous les sous-menus a partir du DIV selectionne
			var content = document.getElementById('content_' + id)
			if (content)
				{
				changeItemsClassToOut(content)
				hideItemsContent(content)
				currentItem = content
				}
			}

		function changeItemsClassToOut(current)
			{
			if (current)
				{
				var isItem = (getName(current)!='content')
				var content
				if (isItem)
					content = document.getElementById('content_' + getID(current))
				else
					content = current
				if (content)
					{
					var child = content.childNodes
					for (var i = 0; i<child.length; i++)
						if (child[i].nodeType==Node.ELEMENT_NODE)
							changeItemsClassToOut(child[i])
					}
				if (isItem)
					setItemClassToOut(current)
				}
			}

		function contains(a, b)
			{
			// remonte par les parents de b jusqu'à ce que nous en trouvions un
			while (b && (a!=b) && (b!=null)) b = b.parentNode
			return a == b
			}

		function eMouseOver(e, newItem, id)
			{
			//var id = getMenuID(newItem)
			clearTimeout(hideTimer[id])

			var eSrc
			if (e.srcElement) { eSrc = e.srcElement; e.cancelBubble = true } else { eSrc = e.target; e.stopPropagation() }
			if (eSrc)
				{
				var newItemID = getID(newItem)
				var newItemContent = document.getElementById('content_' + newItemID)
	
				if (newItem!=currentItem && eSrc!=newItemContent)
					{
					//direction : 1 si vers un fils ; -1 si vers le pere ; 0 sinon
					var direction = (contains(currentItem, newItem)) ? 1 : ((contains(newItem, currentItem)) ? -1 : 0)
					if (direction==-1)
						if (menuParameters[id]['mouseOverGenerateClick']) eClick(e, currentItem, null, null)
					currentItem = newItem
					if (direction==1 || direction==0)
						if (menuParameters[id]['mouseOverGenerateClick']) eClick(e, currentItem, null, null)
					setItemClassToOver(currentItem)
					}
				}
			}

		function eMouseOut(e, item, id)
			{
			//var id = getMenuID(item)
			clearTimeout(hideTimer[id])

			var eTo
			if (e.srcElement) { eTo = e.toElement; e.cancelBubble = true } else { eTo = e.relatedTarget; e.stopPropagation() }
			if (eTo)
				{
				var newItemID = getID(eTo)
				var newItem = document.getElementById('item_' + newItemID)
				var newItemContent = document.getElementById('content_' + newItemID)
	
				if (newItem!=currentItem && (eTo!=newItemContent || eTo==document.getElementById('content_' + id)))
					{
					changeItemsClassToOut(currentItem)
					if (menuParameters[id]['mouseOverGenerateClick'])
						hideTimer[id] = setTimeout('hideAllItems("' + id + '")', 200)
					else
						currentItem = null
					}
				}
			}

		function eClick(e, item, href, target)
			{
			if (e.srcElement) { e.cancelBubble = true } else { e.stopPropagation() }
			if (href)
				{
				href = setUrl(href, 'nodeID', getID(item))
				if (target && target!='' && top.frames[target])
					top.frames[target].location = href
				else
					location = href
				}
			else
				{
				if (item.status=='open')
					hideItemsContent(item)
				else
					{
					hideItemsContent(item.parentNode)
					showItemsContent(item)
					}
				}
			}

		function openSelectedAndAncestors(current)
			{
			if (current && (getName(current)=='content' || getName(current)=='item') && menuParameters[getMenuID(current)]['openSelectedIfRefresh'])
				{
				showItemsContent(current)
				openSelectedAndAncestors(current.parentNode)
				}
			}

// ****************
// GESTION DES URLs

function setUrl(url, param, value) { //v1.0
	var r = getUrlString(url)
	if (arguments[3]!=null) r = arguments[3]
	var query = getQueryString(url)
	var sep = '?'
	for(var i=0; i<query.length; i++) {
		if (query[i].indexOf(param + '=')==-1) { r += sep + query[i]; sep = '&' }
	}
	if (value!='') r += sep + param + '=' + value
	return r
}

function getUrlString(url) { //v1.0
	var pos = url.indexOf('?')
	if (pos!=-1) {
		var r = url.substr(0, pos)
	} else {
		var r = url
	}
	return r
}

function getQueryString(url) { //v1.0
	var pos = url.indexOf('?')
	if (pos!=-1) {
		var query = url.substr(pos + 1)
		var apos = query.indexOf('#')
		if (apos!=-1) {
			var epos = query.substr(apos + 1).indexOf('&')
			query = query.substr(0, apos) + (epos!=-1 ? query.substr(apos + 1 + epos) : '')
		}
		var tquery = query.split('&')
		query = '?' + query
	} else {
		var query = ''
		var tquery = []
	}
	if (arguments[1]==true) return query
	else return tquery
}