function Menu_parms(){
	this.activeStyles=new Array()
	this.setCentre()
	this.buildStyles=new Array()
	this.isResetMenu="bodyClick"
	this.menuExt=""
	this.menulayerVars=new Array()
	this.menulayerVars["type"]="vertical"
	this.menulayerVars["xDisposition"]="right"
	this.menulayerVars["yDisposition"]="down"
	this.offsetLeft=0
	this.offsetTop=0
	this.overLabel=true
	this.pathStyles=new Array()
	this.pointerColorStd="Black"
	this.pointerColorPath="Black"
	this.pointerColorActive="Black"
	this.pointerColorPathRebuild="Black"	
	this.positioning="absolute"
	this.styles=new Array(new Array(new Array()))
	this.styles["textDecoration"]="none"
	this.styles["padding"]="1px"
	this.styles["paddingLeft"]="2px"
	this.styles["paddingRight"]="2px"
	this.usePointers=1
}
Menu_parms.prototype.setCentre=
function setCentre(){
	this.centre=new Array(
meta1.myBrowser.windowWidth/2,meta1.myBrowser.windowHeight/2)
}

function Menu(parent,myXml,parms){
	this.parent=new HtmlDiv(parent)
	this.myXml=myXml
	this.myXml.ns
		?this.nsPrefix=this.myXml.ns+":"
		:this.nsPrefix=""
	parms	?this.parms=parms
		:this.parms=new Menu_parms()
	this.menulayers=new Array()
	if(this.parms.positioning=="fixed"&&
	bd.browser=="IE"&&bd.version<7){
		this.parms.positioning="absolute"
	}
}
Menu.prototype.addMenuExt=
function addMenuExt(str){
	for(var x=0;x<this.menulayers.length;x++){
		for(var y=0;y<this.menulayers[x].menuitems.length;y++){
	var element=this.menulayers[x].menuitems[y].a.element
	element.setAttribute("href",element.getAttribute("href")+str)
		}
	}
}
Menu.prototype.addMenulayer=
function addMenulayer(node,level){
	var menulayer=new Menulayer(this,this.parent.element,node,level)
	this.menulayers.push(menulayer)
	return menulayer
}
Menu.prototype.build=
function build(pageId){
	if(	!this.myXml.selectNodes("//"+this.nsPrefix+pageId).length)
		pageId= this.myXml.xmlDom.documentElement.childNodes[0].nodeName.split(":").pop()
	this.currId=pageId
	this.ancestorNodes=
this.myXml.selectNodes("//"+this.nsPrefix+this.currId+"/ancestor-or-self::*")
//if(this.ancestorNodes.length)
	if( this.ancestorNodes[0].nodeName.split(":")[1]!="sitemap")
		this.ancestorNodes.reverse()
		
	for(var x=0;x<this.ancestorNodes.length-1;x++){
//alert(this.ancestorNodes[x].nodeName)	
		this.addMenulayer(this.ancestorNodes[x],x)
	}
}
Menu.prototype.getMenuitem=
function getMenuitem(id){
	for(var x=0;x<this.menulayers.length;x++){
		for(var y=0;y<this.menulayers[x].menuitems.length;y++){
	if(id==this.menulayers[x].menuitems[y].nodename)
			return this.menulayers[x].menuitems[y]
		}
	}
}
Menu.prototype.getMenuitemStatus=
function getMenuitemStatus(menuitem){
	if(menuitem.nodename==pageId)return "active"
	for(var x=0;x<this.ancestorNodes.length-1;x++)
		if(menuitem.node==this.ancestorNodes[x])
			return "path"
}
Menu.prototype.isActive=
function isActive(id){
	for(var x=0;x<this.menulayers.length;x++){
		if(this.menulayers[x].parentid==id)return 1
	}
	return 0
}
Menu.prototype.miBaseMouseover=
function miBaseMouseover(event,element){
	var pageId=element.id.substr(5)
	if(this.parms.overLabel)this.miMouseover(pageId)
}
Menu.prototype.miLabelMouseout=
function miLabelMouseout(event,element){
	this.hoverMenuitem.setStyles()
}
Menu.prototype.miLabelMouseover=
function miLabelMouseover(event,element){
	var pageId=element.id.substr(6)
	if(this.parms.overLabel)this.miMouseover(pageId)
}
Menu.prototype.miMouseover=
function miMouseover(pageId){
	this.hoverMenuitem=this.getMenuitem(pageId)
	if(this.getMenuitemStatus(this.hoverMenuitem)!="active")
		this.setBuildStyles(this.hoverMenuitem)
	var mi=this.getMenuitem(pageId)
		if(mi.status!="path"&&mi.pointerImg){
	var src=mi.getPointerSrc(this.parms.pointerColorPathRebuild)
	mi.pointerImg.element.setAttribute("src",src)
		}
	var level=mi.menulayer.level
	for(var x=0;x<this.menulayers[level].menuitems.length;x++){
		var layerMi=this.menulayers[level].menuitems[x]
		if((layerMi==mi)||(!layerMi.node.childNodes.length))
			continue
		var src=layerMi.getPointerSrc(layerMi.pointerColor)
if(this.parms.usePointers==1)		
		layerMi.pointerImg.element.setAttribute("src",src)
	}
	if(!this.isActive(pageId))
		this.rebuild(pageId)
}
Menu.prototype.miPointerMouseover=
//function miPointerMouseover(myEvent){
function miPointerMouseover(event,element){
	this.miMouseover(element.id)
}
Menu.prototype.rebuild=
function rebuild(id){
	this.currId=id
	var nodelist=
this.myXml.selectNodes("//"+this.nsPrefix+this.currId+"/ancestor-or-self::*")

	if(nodelist[0].nodeName.split(":")[1]!="sitemap")
		nodelist.reverse()
	
	var y=nodelist.length-2
	for(var x=this.menulayers.length-1;x>y;x--){
		myDoc.removeElement(this.menulayers[x].div.element)
		this.menulayers.pop()
	}
	var menulayer=this.addMenulayer(
nodelist[nodelist.length-1],this.menulayers.length)
}
Menu.prototype.resetMenu=
function(){
	for(var x=this.menulayers.length-1;x>0;x--){
		myDoc.removeElement(this.menulayers[x].div.element)
		this.menulayers.pop()
	}
	for(var x=0;x<this.menulayers[0].menuitems.length;x++){
		this.menulayers[0].menuitems[x].setStyles()
		if(
this.menulayers[0].menuitems[x].base.element.childNodes[0].nodeName=="IMG"){
			this. menulayers[0].menuitems[x].base.element.childNodes[0].setAttribute("src",this.menulayers[0].menuitems[x].getPointerSrc(this.parms.pointerColorStd))
		}else if(
this.menulayers[0].menuitems[x].base.element.childNodes[1]&&	
this.menulayers[0].menuitems[x].base.element.childNodes[1].nodeName=="IMG"){
			this. menulayers[0].menuitems[x].base.element.childNodes[1].setAttribute("src",this.menulayers[0].menuitems[x].getPointerSrc(this.parms.pointerColorStd))
		}
	}
}
Menu.prototype.reset=
function reset(){
	this.isResetting=true
	for(var x=this.menulayers.length-1;x>-1;x--){
		myDoc.removeElement(this.menulayers[x].div.element)
		this.menulayers.pop()
	}
	this.parms.setCentre()
	this.build(this.currId)
	this.isResetting=false
}
Menu.prototype.setBuildStyles=
function(mi){
	for(var x=0;x<mi.menulayer.menuitems.length;x++){
		if(mi.menulayer.menuitems[x]==mi){
			if(this.getMenuitemStatus(mi)!="active")
	mi.setStylesDetail(this.parms.buildStyles)
		}else{
			mi.menulayer.menuitems[x].setStyles()
		}
	}
	if(mi.menulayer.parentMi)
		this.setBuildStyles(mi.menulayer.parentMi)
}
Menu.prototype.setMenuitemStyles=
function setMenuitemStyles(menuitem,styles){
	for(var s in styles){
		menuitem.base.element.style[s]=styles[s]
	}
}

function Menulayer(menu,parentElement,parentnode,level){
	this.menu=menu
	this.div=new HtmlDiv(parentElement)
	this.parentid=parentnode.nodeName.split(":").pop()
	this.level=level
	this.parentMi=this.menu.getMenuitem(this.parentid)
	this.type=this.getVariable("type")
	this.xDisposition=this.getVariable("xDisposition")
	this.yDisposition=this.getVariable("yDisposition")
	this.menuitems=new Array()
	var nodes=this.menu.myXml.selectNodes("child::*",parentnode)
	if(this.level>0){
		if(this.menu.parms.isResetMenu){
			meta1.resetMenu=this.menu
			meta1.resetMenus.push(this.menu)
		}
		this.prevMenulayer=this.menu.menulayers[this.level-1]
		this.parentElement=document.getElementById(
					"base_"+this.parentid)
		this.parentPos=new MyElement(this.parentElement).
							findPos()
		switch(bd.browser){
		case "IE":
		if(this.menu.isResetting){
	var myElement=new MyElement(this.prevMenulayer.div.element)
	this.pmlOffsetLeft=myElement.getStylePixelValue("left")
	this.pmlOffsetTop=myElement.getStylePixelValue("top")
	this.parentPos[0]+=this.pmlOffsetLeft
	this.parentPos[1]+=this.pmlOffsetTop
			}
		}
		switch(this.xDisposition){
		case "centring":
			var fromCentre=
	this.parentPos[0]+(this.parentElement.offsetWidth/2)-this.menu.parms.centre[0]
			fromCentre>0
				?this.xDispDerived="left"
				:this.xDispDerived="right"
			break
		case "derived":
	this.xDispDerived=this.prevMenulayer.xDispDerived
			break
		}
	}
	if(this.type=="horizontal"){
		this.pointerDir=this.yDisposition
	}else{
		if((this.xDisposition=="left")
		||(this.xDispDerived=="left")){
			this.pointerDir="left"
		}else{
			this.pointerDir="right"
		}
	}
	for(var x=0;x<nodes.length;x++){
		var menuitem=new Menuitem(this,nodes[x])
		this.menuitems.push(menuitem)
	}
	if((this.type=="horizontal")&&menuitem){
		var myElement=new MyElement(menuitem.base.element)
		var n=0
		n+=myElement.getStylePixelValue("borderTopWidth")
		n+=myElement.getStylePixelValue("paddingTop")
		this.div.element.style.paddingTop=n+"px"
		this.div.element.style.paddingBottom=n+"px"
	}
	this.div.element.style.position=this.menu.parms.positioning
	this.div.element.style.left=this.getOffsetLeft()+"px"
	this.div.element.style.top=this.getOffsetTop()+"px"
}
Menulayer.prototype.getOffsetLeft=
function getOffsetLeft(){
	if(this.level==0)
		switch(this.xDisposition){
		case "centred":
		case "centring":
		case "parentcentred":
			var offset=this.menu.parms.centre[0]-
				(this.div.element.offsetWidth/2)
			return offset
		case "rightedge":
		case "left":
		case "parentleft":
			var offset=
 this.menu.parms.offsetRight-this.div.element.offsetWidth
 			return offset
		case "leftedge":
		case "right":
		case "parentright":
			return this.menu.parms.offsetLeft
		}
	switch(this.type){
	case "horizontal":
		if(this.prevMenulayer.type=="vertical"){
			var offset=this.parentPos[0]
			this.prevMenulayer.xDisposition=="left"
		?offset-=this.div.element.offsetWidth
		:offset+=this.prevMenulayer.div.element.offsetWidth
			return offset
		}
		switch(this.xDisposition){
		case "centred":
			if(this.menu.isResetting){
				switch(bd.browser){
				case "IE":
					var offsetLeft=this.pmlOffsetLeft
				}
			}else{
				var offsetLeft=this.prevMenulayer.
						div.element.offsetLeft
			}
			var offset=offsetLeft+
(this.prevMenulayer.div.element.offsetWidth/2)-
(this.div.element.offsetWidth/2)
			return offset
		case "parentcentred":
			var offset=
this.parentPos[0]+this.parentElement.offsetWidth/2-this.div.element.offsetWidth/2
			return offset
		case "centring":
			var halfW=this.div.element.offsetWidth/2
			var offset=
this.parentPos[0]+this.parentElement.offsetWidth/2-halfW
			var fromCentre=
this.menu.parms.centre[0]-offset-halfW
			return offset+(fromCentre*.25)
		case "leftedge":
			return this.menu.parms.offsetLeft
		case "parentleft":
			var offset=
this.parentPos[0]+this.parentElement.offsetWidth-this.div.element.offsetWidth
			return offset
		case "rightedge":
			var offset=
 this.menu.parms.offsetRight-this.div.element.offsetWidth
 			return offset
		case "parentright":
			return this.parentPos[0]
		}
	case "vertical":
		var offset=this.parentPos[0]
		if(this.prevMenulayer.type=="horizontal"){
			if((this.xDisposition=="left")
			||(this.xDispDerived=="left"))
				offset+=
this.parentElement.offsetWidth-this.div.element.offsetWidth
		}else{
	if((this.prevMenulayer.xDisposition=="left")
	||(this.prevMenulayer.xDispDerived=="left")){
		offset-=this.div.element.offsetWidth
	}else{
		offset+=this.prevMenulayer.div.element.offsetWidth
	}
		}
		return offset
	}
}
Menulayer.prototype.getOffsetTop=
function getOffsetTop(){
	if(this.level==0)
		switch(this.yDisposition){
		case "centred":
		case "centring":
		case "parentcentred":
			var offset=
this.menu.parms.centre[1]-(this.div.element.offsetHeight/2)
			return offset
		case "down":
			return this.menu.parms.offsetTop
		case "up":
			var offset=
this.menu.parms.offsetBottom-this.div.element.offsetHeight
			return offset
		}
	switch(this.type){
	case "horizontal":
		var offset=this.parentPos[1]
		if(this.prevMenulayer.type=="horizontal"){
			this.prevMenulayer.yDisposition=="up"
?offset-=this.div.element.offsetHeight
:offset+=this.prevMenulayer.div.element.offsetHeight
		}
		return offset
	case "vertical":
		if(this.prevMenulayer.type=="horizontal"){
			var offset=this.parentPos[1]
			this.prevMenulayer.yDisposition=="down"
?offset+=this.prevMenulayer.div.element.offsetHeight
:offset-=this.div.element.offsetHeight
			return offset
		}
		switch(this.yDisposition){
		case "down":
			return this.parentPos[1]
		case "up":
			var offset=this.parentPos[1]+
this.parentElement.offsetHeight-this.div.element.offsetHeight
			return offset
		case "centring":
			var halfW=this.div.element.offsetHeight/2
			var offset=
this.parentPos[1]+this.parentElement.offsetHeight/2-halfW
			var fromCentre=
this.menu.parms.centre[1]-offset-halfW
			return offset+(fromCentre*.25)
		case "parentcentred":
			var offset=
this.parentPos[1]+this.parentElement.offsetHeight/2
-this.div.element.offsetHeight/2
			return offset
		case "centred":
			var offset=
this.prevMenulayer.div.element.offsetTop+
(this.prevMenulayer.div.element.offsetHeight/2)-
(this.div.element.offsetHeight/2)
			return offset
		}
	}
}
Menulayer.prototype.getVariable=
function getVariable(variable){
	var variables=variable+"s"
	if(!this.menu.parms.menulayerVars[variables])
		return this.menu.parms.menulayerVars[variable]
	for(var x=this.level;x>-1;x--)
		if(this.menu.parms.menulayerVars[variables][x])
			return this.menu.parms.menulayerVars[variables][x]
}
	
function Menuitem(menulayer,node){
	this.menulayer=menulayer
	this.node=node
	this.nodename=this.node.nodeName.split(":").pop()
	if(link=this.node.getAttribute("link")){
		var href=link
	}else{
		var href=meta1.getHrefBase(this.nodename)
	}
	if(this.menulayer.menu.parms.menuExt)
		href+=this.menulayer.menu.parms.menuExt

	if(pageId==this.nodename){
		this.a=new HtmlSpan(this.menulayer.div.element)
	}else{
		this.a=new HtmlA(this.menulayer.div.element,href)
		this.a.element.style.textDecoration="none"
	}
	if(this.menulayer.type=="horizontal"){
		this.base=new HtmlSpan(this.a.element)
	}else{
		this.base=new HtmlDiv(this.a.element)
	}
	this.base.element.id="base_"+this.nodename

//	if(pageId!=this.nodename){
		this.base.element.onmouseover= meta1.associateObjWithEvent(
		this.menulayer.menu,"miBaseMouseover")
//	}
	this.status=this.menulayer.menu.getMenuitemStatus(this)
	this.setStyles()
	if(this.node.childNodes.length){
		if(this.menulayer.pointerDir=="left"){
			this.setPointer()
		}
	}
	var label=new HtmlSpan(this.base.element)
	var str=this.getLabel(node).split("!{br}!")
	for(var x=0;x<str.length;x++){
		if(x)new HtmlBr(label.element)
		new HtmlSpan(label.element,str[x])
	}	
	label.element.id="label_"+this.nodename
	if(pageId!=this.nodename){
		label.element.onmouseover=meta1.associateObjWithEvent(
			this.menulayer.menu,"miLabelMouseover")
		label.element.onmouseout=meta1.associateObjWithEvent(
			this.menulayer.menu,"miLabelMouseout")
	}
	if(this.menulayer.pointerDir=="left"){
		this.base.element.style.textAlign="right"
	}
	if(this.node.childNodes.length){
		if(this.menulayer.pointerDir!="left"){
			this.setPointer()
		}
	}
}
Menuitem.prototype.getLabel=
function getLabel(node){
	var label=node.getAttribute("label")
	if(!label)label=this.nodename
	return label
}
Menuitem.prototype.getPointerSrc=
function getPointerSrc(color){
	var pointerSrc=UVPath+"content/images/_design/pointers/"+
this.menulayer.pointerDir+color+".gif"
	return pointerSrc
}
Menuitem.prototype.setPointer=
function setPointer(){
	if(this.menulayer.menu.parms.usePointers==0)return
	switch(this.status){
	case "path":
this.pointerColor=this.menulayer.menu.parms.pointerColorPath;break
	case "active":
this.pointerColor=this.menulayer.menu.parms.pointerColorActive;break
	default:
this.pointerColor=this.menulayer.menu.parms.pointerColorStd
	}
	var pointerSrc=this.getPointerSrc(this.pointerColor)
	this.pointerImg=new HtmlImg(this.base.element,pointerSrc)
	this.pointerImg.element.style.border="none"
	this.pointerImg.element.id=this.nodename
	if(this.menulayer.type=="horizontal"){
		this.pointerImg.element.style.paddingLeft="2px"
		this.pointerImg.element.style.paddingRight="2px"
	}else{
			if(this.menulayer.pointerDir=="left"){
		this.pointerImg.element.style.paddingLeft="2px"
		this.pointerImg.element.style.paddingRight="4px"
//this.pointerImg.element.style.paddingTop="2px"
//this.pointerImg.setStyle("float","left")
					}else{
		this.pointerImg.element.style.paddingLeft="4px"
		this.pointerImg.element.style.paddingRight="2px"
			}
	}
	this.pointerImg.element.onmouseover=meta1.associateObjWithEvent(
			this.menulayer.menu,"miPointerMouseover")
}
Menuitem.prototype.setStyles=
function setStyles(){
	this.setStylesDetail(this.menulayer.menu.parms.styles)
	if(this.menulayer.menu.parms.styles[this.menulayer.level]){
		this.setStylesDetail( this.menulayer.menu.parms.styles[this.menulayer.level])
		if(
this.menulayer.menu.parms.styles[this.menulayer.level][this.level])
			this.setStylesDetail(
this.menulayer.menu.parms.styles[this.menulayer.level][this.level])
	}
	if(
this.menulayer.menu.parms.menuitemStyles&&
this.menulayer.menu.parms.menuitemStyles[this.nodename])
		this.setStylesDetail( this.menulayer.menu.parms.menuitemStyles[this.nodename])
	switch(this.status){
	case "path":
this.setStylesDetail(this.menulayer.menu.parms.pathStyles)
		break
	case "active":
this.setStylesDetail(this.menulayer.menu.parms.activeStyles)
	}
}
Menuitem.prototype.setStylesDetail=
function setStylesDetail(styles){
	for(var s in styles){
		this.base.element.style[s]=styles[s]
	}
}

