
/*============================================================================*\
** Name      : Bibliothèque DHTML -- collapse_menu.js                         **
** Author    : Luc Thibault <zebulon.mail@wanadoo.fr>                         **
** Copyright : 2002 - Luc Thibault - AZTEK STUDIO.                            **
\*============================================================================*/


function collapseMenu(x,y,nbr){
	this.x = x
	this.y = y
	this.name="collapse"+(collapseMenu.Count++)
	this.obj = this.name + "CollapseObject"
	eval(this.obj + "=this")

	this.preselect = null
	this.selectedPage = -1
	this.isLoaded = false
	this.activepath = new Array()

	this.rubs = new Array()
	this.items = []
	this.width = 141
	this.margin = -1
	this.indent = 5
	var i = this.items.length
	for (var i=0;i<nbr;i++) this.items[i] = new Array()

	this.add = collapseMenuAdd
	this.build = collapseMenuBuild
	this.block = collapseMenuBlock
	this.setProps = collapseMenuSetProps
	this.activate = collapseMenuActivate
	this.down = collapseMenuDown
	this.open = collapseMenuOpen
	this.close = collapseMenuClose
	this.select = collapseMenuSelect
	this.deselect = collapseMenuDeselect
	this.loadPage = collapseMenuLoadPage
	this.openThere = collapseMenuOpenThere
}

function collapseMenuBuild(){
	this.css = '#'+this.name+'Container {position: absolute; left:'+this.x+'px; top:'+this.y+'px; width:'+this.width+'px; height:300px; visibility: visible; z-index:10}\n'
	bg = (is.ns4) ? 'layer-background-color: #FFFFFF;' : 'background-color: #FFFFFF;'
	this.css += '#'+this.name+'Mask {position: absolute; left:0px; top:0px; width:'+this.width+'px; height:300px; visibility: visible; z-index:1005; '+bg+'}\n'
	this.div = '<div id="'+this.name+'Container">\n'
	for (var i=0;i<menutable.length;i++){
		tst1 = (menutable[i][2]) ? menutable[i][2] : 1
		tst2 = (menutable[i][2]) ? menutable[i][3] : null
		navigation.add(i,menutable[i][1],tst1,tst2,menutable[i][0])
	}
	this.div += '<div id="'+this.name+'Mask"><table cellspacing=0 cellpadding=0 border=0><tr><td width='+this.width+' align="center" class="navnormal"><br><br>Loading...</td></tr></table></div>\n'
	this.div += '</div>\n'
}

function collapseMenuBlock(i,txt){
	tstW = this.width-this.indent*(this.items[i].path.length-1)
	str =	'<table cellpadding=0 cellspacing=0 border=0 width='+tstW+'><tr><td width='+tstW+' colspan=2><img src="'+this.imgpath+'dot.gif" width='+tstW+' height=1></td></tr>'
	str +=	(!this.items[i].gothere) ? '<tr><td width=16 align=center valign=middle><img src="'+this.imgpath+this.imgmore+'" name="'+this.items[i].name+'Roll"></td>' : '<tr><td width=16><img src="'+this.imgpath+'transp.gif" width=16 height=1></td>'
	str +=	'<td width='+eval(tstW-16)+' class="navnormal">'+txt+'</td></tr><tr><td width='+tstW+' colspan=2><img src="'+this.imgpath+'dot.gif" width='+tstW+' height=1></td></tr></table>'
	return str
}

function collapseMenuAdd(value){
	i = parseInt(arguments[0])
	this.items[i] = new collapseItem(this.obj,i)

	this.items[i].path = arguments[4].split('x')
	for (var t=0;t<this.items[i].path.length; t++) this.items[i].path[t] = parseInt(this.items[i].path[t])
	if (this.items[i].path.length==1) this.rubs[this.items[i].path[0]] = i
	if (arguments[2]>0) {
		this.items[i].childArray = new Array()
		this.items[i].childSelect = -1
		this.items[i].childheight = this.margin
	} else {
		this.items[i].gothere = arguments[2]
		this.items[i].tgt = arguments[3]
	}
	this.items[i].rubRef = null
	this.items[i].selected = false

	tstW = this.width-this.items[i].path.length*this.indent
	this.css += '#'+this.name+'CollapseItem'+i+' {position: absolute; left:'+eval((this.items[i].path.length-1)*this.indent)+'px; top:0px; width:'+tstW+'px; z-index:'+eval(1001-this.items[i].path.length)+'; visibility:hidden; background-color:#FFFFFF;}\n'
	this.css += '#'+this.name+'CollapseItem'+i+'Txt {position: absolute; left:0px; top:0px; width:'+tstW+'px;}\n'
	this.css += '#'+this.name+'CollapseItem'+i+'Get {position: absolute; left:0px; top:0px; width:'+tstW+'px;}\n'

	this.div += '<div id="'+this.name+'CollapseItem'+i+'">\n'
	this.div += '<div id="'+this.name+'CollapseItem'+i+'Txt">'+this.block(i,arguments[1])+'</div>\n'
	this.div += '<div id="'+this.name+'CollapseItem'+i+'Get">'
	this.div += ((is.ie55)||(is.ie6)|(is.ie7))? '<img src="images/transp.gif" width=141 height=50></div>\n' : '</div>\n'
	this.div += '</div>\n'
}

function collapseMenuSetProps(){
	for (var i=0;i<menutable.length;i++){		// cree les tables des enfants
		if (!menutable[i][2]){
			for (var j=0;j<menutable.length;j++){
				if (this.items[j].path.length-1==this.items[i].path.length) {
					retvalue = true;
					for (var t=0;t<this.items[i].path.length;t++) {
						if (this.items[j].path[t]!=this.items[i].path[t])
						retvalue = false;
					}
					if (retvalue){
						this.items[i].childArray[this.items[j].path[this.items[j].path.length-1]]=j
						this.items[j].hasParent = i
						this.items[j].parentIndex = this.items[j].path[this.items[j].path.length-1]
					}
				}
			}
		}
	}
	for (var i=0;i<menutable.length;i++){		// renverse le chemin des rubriques
		if (this.items[i].path.length==1) navigation.items[i].path[0] = i
	}
	for (var i=0;i<menutable.length;i++){		// renverse le chemin des enfants et s/enfants
		if (this.items[i].hasParent>-1){
			newlength = eval(this.items[this.items[i].hasParent].path.length)
			for (t=0;t<newlength;t++) this.items[i].path[t] = this.items[this.items[i].hasParent].path[t]
			this.items[i].path.length = newlength+1
			this.items[i].path[newlength] = i
		}
		for (var j=0;j<this.rubs.length;j++){	// assigne sa rubrique à chaque s/enfant
			if (this.items[i].path[0]==this.rubs[j]) this.items[i].rubRef = j
		}
	}
}

function collapseMenuActivate(nest) {
	if (!nest) nest = ''
	this.loadmask = new DivObject(this.name+'Mask',nest+this.name+'Container')
	for (var i=0;i<this.items.length;i++) this.items[i].activate(nest)

	topPosH = 0;
	for (var i=0;i<this.rubs.length;i++) {	// positionne les rubriques
		tst = this.rubs[i]
		this.items[tst].lyr.moveTo(0,topPosH)
		topPosH += this.items[tst].itemH+this.margin
		this.items[tst].lyr.showHide(true)
	}
	for (var i=0;i<this.items.length;i++){
		if (this.items[i].childArray) {
			for (var j=0;j<this.items[i].childArray.length;j++) this.items[i].childheight += this.items[this.items[i].childArray[j]].itemH+this.margin
			this.items[i].childheight -= this.margin
		}
		if (this.items[i].hasParent){
			for (var j=this.items[i].path[this.items[i].path.length-1];j<this.items[this.items[i].hasParent].childArray.length;j++) this.items[i].blockheight += this.items[j].itemH+this.margin
		}
	}
	for (var i=0;i<this.rubs.length;i++){
		for (var j=i;j<this.rubs.length;j++) this.items[this.rubs[i]].blockheight += topPosH - this.items[j].itemH - this.margin
	}
	if (this.preselect) this.openThere(this.preselect)
	this.loadmask.showHide(false)
	this.isLoaded = true
}

function collapseMenuDown(i){
	if (this.items[i].path.length>this.activepath.length){
		this.open(i)
		if (this.items[i].tgt != 'fake'){
			this.activepath = this.items[i].path
			this.activepath.length = this.items[i].path.length
		}
	} else {
		diff = false;
		for (var t=0;t<this.items[i].path.length;t++) {
			if (this.items[i].path[t]!=this.activepath[t]) { diff=true; break; }
		}
		if (!diff) t = t-1
		for (var s=this.activepath.length-1;s>=t;s--) this.close(this.activepath[s])
		if (diff) {
			this.open(i)
			if (this.items[i].tgt != 'fake'){
				this.activepath = this.items[i].path
				this.activepath.length = this.items[i].path.length
			}
		} else if (this.items[i].tgt != 'fake'){
			if (this.items[i].hasParent) {
				this.activepath = this.items[this.items[i].hasParent].path
				this.activepath.length = this.items[this.items[i].hasParent].path.length
			} else {
				this.activepath = []
				this.activepath.length=0
			}
		}
	}
	this.items[i].isOpening = false
}

function collapseMenuOpen(i){
	if (!this.items[i].childArray){
		if (!this.items[i].selected){
			if (this.items[i].path.length>1){
				for (var s=0;s<this.items[this.items[i].hasParent].childArray.length;s++){
					if (this.items[this.items[i].hasParent].childArray[s]==i) this.items[this.items[i].hasParent].childSelect = s;
				}
			}
			this.loadPage(i)
			if (this.items[i].tgt != 'fake'){
				if (this.selectedPage>=0) this.deselect(this.selectedPage);
				this.select(i)
				this.selectedPage = i
			}
		}
	} else {
		if (this.items[i].path.length>1){
			for (var s=this.items[i].path.length-1;s>0;s--){
				this.items[this.items[this.items[i].path[s]].hasParent].childSelect = this.items[this.items[i].path[s]].parentIndex
				for (var t=this.items[this.items[this.items[i].path[s]].hasParent].childArray.length-1;t>this.items[this.items[this.items[i].path[s]].hasParent].childSelect;t--) {
					this.items[this.items[this.items[this.items[i].path[s]].hasParent].childArray[t]].lyr.setY(this.items[this.items[this.items[this.items[i].path[s]].hasParent].childArray[t]].lyr.getY()+this.items[i].childheight)
				}
			}
		}
		for (var v=this.rubs.length-1;v>this.items[i].rubRef;v--){
			this.items[this.rubs[v]].lyr.setY(this.items[this.rubs[v]].lyr.getY()+this.items[i].childheight)
		}
		tmpPosY = this.items[i].lyr.getY() + this.items[i].itemH + this.margin
		for (var v=0;v<this.items[i].childArray.length;v++){
			this.items[this.items[i].childArray[v]].lyr.setY(tmpPosY)
			tmpPosY += this.items[this.items[i].childArray[v]].itemH + this.margin
			this.items[this.items[i].childArray[v]].lyr.showHide(true)
		}
		this.items[i].txt.rollOver(this.items[i].name+'Roll',this.imgpath+this.imgless)
		this.select(i)
	}
}

function collapseMenuClose(i) {
	if (this.items[i].childArray){
		if (this.items[i].path.length>1) {
			for (var s=this.items[i].path.length-1;s>0;s--) {
				for (var t=this.items[this.items[this.items[i].path[s]].hasParent].childArray.length-1;t>this.items[this.items[this.items[i].path[s]].hasParent].childSelect;t--) {
					this.items[this.items[this.items[this.items[i].path[s]].hasParent].childArray[t]].lyr.setY(this.items[this.items[this.items[this.items[i].path[s]].hasParent].childArray[t]].lyr.getY()-this.items[i].childheight)
				}
				this.items[this.items[this.items[i].path[s]].hasParent].childSelect = -1
			}
		}
		for (var v=this.rubs.length-1;v>this.items[i].rubRef;v--) this.items[this.rubs[v]].lyr.setY(this.items[this.rubs[v]].lyr.getY()-this.items[i].childheight)
		for (var v=0;v<this.items[i].childArray.length;v++) this.items[this.items[i].childArray[v]].lyr.showHide(false)
	}
	// modif CHO
	//if (i!=this.selectedPage) this.deselect(i)		// si retenue d'une entrée active malgré mouvements nav
	// fin CHO
	this.items[i].txt.rollOver(this.items[i].name+'Roll',this.imgpath+this.imgmore)
	this.deselect(i)
}

function collapseMenuSelect(i){
	this.items[i].lyr.setBg(this.selcolor)
	//this.items[i].lyr.setHTML(this.items[i].textSelect)
	this.items[i].selected=true
}

function collapseMenuDeselect(i){
	this.items[i].lyr.setBg(this.outcolor)
	//this.items[i].lyr.setHTML(this.items[i].textNormal)
	this.items[i].selected=false
}

function collapseMenuLoadPage(i){
	switch(this.items[i].tgt){
		case 'self' : eval('window.location="'+this.items[i].gothere+'"'); break;
		case 'new'  : openWindow(this.items[i].gothere,'newWindow',800,400,0); break;
		case 'openw' : openWindow(this.items[i].gothere,'newWindow',800,400,0); break;
		default    : eval('window.location="'+this.items[i].gothere+'"');
	}
}

function collapseMenuOpenThere(path){
	path[0] = this.rubs[path[0]]
	this.activepath = [];
	for (i=0;i<path.length;i++){
		if (i > 0) path[i] = this.items[path[eval(i-1)]].childArray[path[i]]
		if (i < path.length-1) this.activepath[i] = path[i]
	}
	for (var s=0;s<path.length;s++){
		tst = path[s]
		if (this.items[tst].childArray) this.open(tst)
		this.select(tst)
	}
	if (this.selectedPage>=0) this.deselect(this.selectedPage)
	this.selectedPage = path[path.length-1]
	this.select(this.selectedPage)
}

///////////////////////////////////////////////////////////////////////////////////////////

function collapseItem(menu,i){
	this.contObj = eval(menu)
	this.index = i;
	this.isOver = false
	this.name = this.contObj.name+'Item'+i
	this.obj = this.name + "Object"
	eval(this.obj + "=this")

	this.activate = collapseItemActivate
	this.over = collapseItemOver
	this.out = collapseItemOut
	this.down = collapseItemDown
}

function collapseItemActivate(nest){
	nest += this.contObj.name+'Container'
	this.lyr = new DivObject(this.contObj.name+'CollapseItem'+this.index,nest)
	this.txt = new DivObject(this.contObj.name+'CollapseItem'+this.index+'Txt',nest+'.document.'+this.contObj.name+'CollapseItem'+this.index)
	this.get = new DivObject(this.contObj.name+'CollapseItem'+this.index+'Get',nest+'.document.'+this.contObj.name+'CollapseItem'+this.index)
	this.itemH = (is.opera) ? this.txt.getH()-3 : this.txt.getH()
	tstW = this.contObj.width-(this.path.length-1)*this.contObj.indent
	this.get.clipTo(0,0,tstW,this.itemH)
	this.lyr.clipTo(0,0,tstW,this.itemH)
	if (is.opera) {
		this.txt.setY(-3)
		this.get.setY(-3)
	}
	this.get.addEventListener('mouseover', new Function(this.obj+'.over()'))
	this.get.addEventListener('mouseout', new Function(this.obj+'.out()'))
	this.get.addEventListener('mousedown', new Function(this.obj+'.down()'),true)
}

function collapseItemOver(){
	if (!this.isOver && !this.selected){
		this.isOver = true
		this.lyr.setBg(this.contObj.overcolor)
	}
}
function collapseItemOut(){
	if (this.isOver && !this.selected){
		this.lyr.setBg(this.contObj.outcolor)
		this.isOver = false
	}
}

function collapseItemDown(){
	if (!this.isOpening){
		this.isOpening = true
		this.contObj.down(this.index)
	}
}

///////////////////////////////////////////////////////////////////////////////////////////

collapseMenu.Count=0

