
// compatibilité -----------------------------------------------
var ns4= (document.layers);
var ie4= (document.all && !document.getElementById);
if(ie4) {
	document.getElementById= function(id) { return(document.all(id)); }
	document.getElementsByTagName= function(id) { return(document.all.tags(id)); }
}
if(ns4) {
	document.getElementById= function(id) { return(document.layers[id]); }
}


var newCount=0;
var menuType=1;

// Menu principal : c'est un div qui contiendra tous les autres div
// Si le type est :
// 1 : alors on récupère la position courante dans un champ hidden du menu
// 2 : alors on récupère la position courante dans le hash de l'url :  #pos=ID...

function main(type) {
	// ID du main est ID0
	// Le nombre de noeud se trouve dans le champ masque
	var intCount = newCount++;
	var id='ID' + intCount;
	
	if((type==null)||((type!=1)&&(type!=2))) {type=1;}
	menuType=type;
	this.id=id;
	this.count=intCount;
	this.text = '<div id=' + id + '></div><input type="hidden" id=h' + intCount + ' value="0">';
	if(type==1) {this.text += '<input type="hidden" id=posMenu value="">';}
	document.write(this.text);
	this.parent=null;
}


// ------------------------------------------------------------
// Les noeuds principaux : ils sont rattachés au Menu principal
// Ils sont composés d'un div contenant : une image et le titre (sous-div), avec une action possible quand on clique dessus
// et d'un autre sous-div : pour les sous-noeuds qui leur sont accrochés
// S'il y a une image devant le noeud, et si on clique sur le titre ou sur l'image, alors cela développe le sous-div subID
// Quand un sous-noeud lui est rajouté, alors le alt de l'image n'est plus vide, et un l'image devient un '+'.
// Il est egalement possible de rajouter deux images de taille imposée à cote du titre.
// On rajoute dans le champ masqué le numero ID de son parent

function addNode(caption,pNode,act,classe,img1,img2) {
	if(act==null) {act='';}
	if(classe==null) {classe='';}
	if(img1==null) {img1='';}
	if(img2==null) {img2='';}
	// Crée le contenu du noeud : le niveau permet l'indentation
	this.niv = 1;
	intCount = newCount++;
	sText =  '<div title="">';
	sText += '<div class="struct" id=ID' + intCount;
	sText += ' onClick="Collapse(' + intCount + ');"  >';
/*	sText += ' onmouseover="this.className=\'divmenu divmenuhover\';" ';*/
/*	sText += ' onmouseout="this.className=\'divmenu\';">';*/
	sText += '<img src="icones/tr_menuempty.gif" height="9" width="9" id="imgID' + intCount + '" alt="">';
	if(act=='') {
		sText += '&nbsp;' + caption;
	} else {
		sText += '&nbsp;<a href="#pos=ID' + intCount + '" id=aID' + intCount + ' class="' + classe + '" ';
		sText += ' onclick="Collapse(' + intCount + ',false); ';
		sText += 'setPos(' + intCount + ',posCurrent()); ';
		sText += act + '">' + caption + '</a>';
	}
	if(img1!='') { sText += '&nbsp;<img src="' + img1 + '">'; }
	if(img2!='') { sText += '&nbsp;<img src="' + img2 + '">'; }
	sText += '</div>';
	sText += '<div id="SUB' + intCount + '" style="display:none"></div>';
	sText += '<input type="hidden" id=h' + intCount + ' value="' + pNode.count + '" alt="' + classe + '">';
	sText += '</div>';
	document.getElementById(pNode.id).innerHTML += sText
	this.id = 'ID' + intCount;
	this.count = intCount;
	this.imgID= 'imgID' + intCount;
	this.subID= 'SUB' + intCount;
	this.hID= 'h' + intCount;
	this.parent = pNode;
	document.getElementById('h0').value = parseInt(document.getElementById('h0').value) + 1;
	return (this);
}

// Les sous-noeuds sont des noeuds rattachés à des noeuds principaux ou secondaires (donc pas au Menu principal)
// S'il y a une action, donc si c'est un lien, on doit re-ouvrir le noeud, et pour cela on met false
// car il doit être fermé (clic sur le lien), puis redéveloppé par le clic sur le div

function addSubNode(caption,pNode,act,classe,classe2,img1,img2) {
	if(classe==null) {classe=' ';}
	if(img1==null) {img1='';}
	if(img2==null) {img2='';}
	// Modifie l'image et le alt de l'image du titre du noeud parent
	document.getElementById(pNode.imgID).src='icones/tr_menuplus.gif';
	document.getElementById(pNode.imgID).alt='+';
	// Le niveau est incrémenté de 1 par rapport au noeud parent (pNode) style="display:block;margin-left:' + (this.niv * 7) + 'pt;"  |+ ' class="' + classe + '" '
	this.niv = parseInt(pNode.niv) + 1;
	// Crée le contenu du noeud
	intCount = newCount++;
	sText =  '<div  class=' + classe+ '>';
	sText += '<div id=ID' + intCount;
	sText += ' onClick="Collapse(' + intCount + ');" ';
	sText += ' onmouseover="this.className=\'divmenu divmenuhover\';" ';
	sText += ' onmouseout="this.className=\'divmenu\';">';
	sText += '<img src="icones/tr_menuempty.gif" height="9" width="9" id="imgID' + intCount + '" alt="">';
	if(act=='') {
		sText += '&nbsp;' + caption;
	} else {
		sText += '&nbsp;<a href="'+act;
		if(menuType==2) {sText += 'pos=ID' + intCount;}
		sText +='" id=aID' + intCount + '  class=' + classe;
		sText += '  onclick="Collapse(' + intCount + ',false); ';
		sText += 'setPos(' + intCount + ',posCurrent()); ';
		sText += '">' + caption + '</a>';
	}
	if(img1!='') { sText += '&nbsp;<img src="' + img1 + '">'; }
	if(img2!='') { sText += '&nbsp;<img src="' + img2 + '">'; }
	sText += '</div>';
	sText += '<div id="SUB' + intCount + '" style="display:none"></div>';
	sText += '<input type="hidden" id=h' + intCount + ' value="' + pNode.count + '" alt="' + classe + '">';
	sText += '</div>';
	document.getElementById(pNode.subID).innerHTML += sText
	this.id = 'ID' + intCount;
	this.count = intCount;
	this.imgID= 'imgID' + intCount;
	this.subID= 'SUB' + intCount;
	this.hID= 'h' + intCount;
	this.parent = pNode;
	document.getElementById('h0').value = parseInt(document.getElementById('h0').value) + 1;
	return (this);
}

// Ouvre ou ferme le noeud s'il a un plus ou un moins
// Si 'open' est renseigné et est true (c'est le booléen pas le string), alors ouvre forcément, si false ferme forcément
function Collapse(snode,open) {
	node=document.getElementById('SUB' + snode);
	img=document.getElementById('imgID' + snode);
	if (img.alt!='') {
		if (open==null) {
			if (node.style.display=='none') {
				node.style.display='block';
				img.src='icones/tr_menuminus.gif';
				img.alt='-';
		
			} else {
				node.style.display='none';
				img.src='icones/tr_menuplus.gif';
				img.alt='+';
			}
		} else if (open==false) {
			node.style.display='none';
			img.src='icones/tr_menuplus.gif';
			img.alt='+';	
		} else if (open==true) {
			node.style.display='block';
			img.src='icones/tr_menuminus.gif';
			img.alt='-';
		}
	}
}

// Ouvre (open=true) le noeud et tous ses ascendants, ou ouvre (open=false) le noeud et tous ses descendants
function CollapseAll(snode,open) {
	var node=document.getElementById('h' + snode);
	var img=document.getElementById('imgID' + snode);
	if (open==true) {
		while(node.value != 0) {
			Collapse(node.value,open);
			img=document.getElementById('imgID' + node.value);
			node=document.getElementById('h' + node.value);
		}
	} else if (open==false) {
		Collapse(snode,true);
		for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
			if (isChild(i,snode)) {
				Collapse(i,true);
			}
		}
	}
}

// Ouvre (open=true) seulement le noeud et tous ses ascendants en fermant ses voisins
// ou ferme (open=false) le noeud et tous ses descendants
function CollapseOnly(snode,open) {
	///var node=document.getElementById('SUB' + snode);
	///var img=document.getElementById('imgID' + snode);
	if (open==true) {
		CollapseOnly(getRoot(snode),false);
		CollapseAll(snode,true);
	} else if (open==false) {
		Collapse(snode,false);
		for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
			if (isChild(i,snode)) {
				Collapse(i,false);
			}
		}
	}
}

// Retourne le noeud parent à la racine
function getRoot(snode) {
	var node = document.getElementById('SUB' + snode);
	var root = parseInt(snode);
	for (i=1;i<=parseInt(document.getElementById('h0').value);i++) {
		if ((isChild(root, i)) && (parseInt(document.getElementById('h' + i).value)==0)) {
			root=i;
		}
	}
	return (root);
}

// Retourne si le cNoeud est un descendant du pNoeud
function isChild(cNoeud,pNoeud) {
	var bool = false;
	if ((parseInt(cNoeud)>1) && (parseInt(pNoeud)>0)) {
		var nParent = document.getElementById('h' + cNoeud).value;
		while ((bool==false) && (parseInt(nParent) > 0)) {
			if (parseInt(nParent) == parseInt(pNoeud)) {
				bool=true
			}
			nParent = document.getElementById('h' + nParent).value;
		}
	}
	return (bool);
}


// Retourne la position active du menu
function posCurrent() {
	if(menuType==1){
		return (document.getElementById('posMenu').value);
	} else if(menuType==2) {
		var temp=location.hash;
		var bool=temp.lastIndexOf('pos=ID');
		if(bool==-1) {
			return ('');
		} else {
			i= 0;
			var pos=temp.substring(bool + 6,temp.length)
			while(isInteger(temp.substring(bool + 6,temp.length - i))==false) {
				pos=temp.substring(bool + 6,temp.length - i);
				i++;
			}
			return (pos);
		}
	}
}

// Définit la nouvelle position active du menu
// Et remet l'ancienne position active avec les class par défaut
function setPos(newPos,oldPos) {
	// ClassPosition est la classe de l'élément actif du menu
	var ClassPosition = 'posmenu';

	if (menuType==1) {document.getElementById('posMenu').value=newPos;}
	if (oldPos!='') {
		document.getElementById('aID' + oldPos).className=document.getElementById('h' + oldPos).alt;
	}
	document.getElementById('aID' + newPos).className=ClassPosition;
}


// Regarde si le texte est un nombre entier
function isInteger(sText)
{
	var ValidChars = "0123456789";
	var isNumber=true;
	var Char;
	for (i = 0; i < sText.length && isNumber == true; i++) {
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
			isNumber = false;
		}
	}
	return isNumber;
}


// Construit le menu, noeud par noeud : a parametrer
function buildMenu() {
	// <!> : Ne pas oublier les 'new' sinon il se basera toujours le même objet Node
	//       Pour les actions utiliser des : \'
	var mainMenu=new main(1);
	var node10=new addNode('Documentation',mainMenu);

	var node11=new addSubNode('Biography',node10,'','titreSection');		
	var node12=new addSubNode('Resume',node11,'moteur.asp?head=2&lng=en&body=15','lien');	
	var node14=new addSubNode('Chronology',node11,'moteur.asp?head=2&lng=en&body=14','lien');
	var node15=new addSubNode('Honors & grants',node11,'moteur.asp?head=2&lng=en&body=16','lien');

	var node3=new addSubNode('Art shows',node10,'','titreSection');		
	var node31=new addSubNode('One man shows',node3,'moteur.asp?head=2&lng=en&body=12','lien');
	var node32=new addSubNode('Group exhibitions',node3,'moteur.asp?head=2&lng=en&body=20','lien');
	var node33=new addSubNode('Performances',node3,'moteur.asp?head=2&lng=en&body=21','lien');

	var node4=new addSubNode('Collections',node10,'','titreSection');		
	var node41=new addSubNode('Public art',node4,'moteur.asp?head=2&lng=en&body=19','lien');
	var node42=new addSubNode('Public collections',node4,'moteur.asp?head=2&lng=en&body=18','lien');
	var node43=new addSubNode('Corporate collections',node4,'moteur.asp?head=2&lng=en&body=11','lien');

	var node5=new addSubNode('References',node10,'','titreSection');		
	var node51=new addSubNode('Bibliography',node5,'moteur.asp?head=2&lng=en&body=17','lien');
	var node52=new addSubNode('Critics \'  commentaries',node5,'moteur.asp?head=2&lng=en&body=23','lien');
	var node53=new addSubNode('Artist writings',node5,'moteur.asp?head=2&lng=en&body=24','lien');
	
	var node6=new addNode('Gallery',mainMenu);
	var node61=new addSubNode('Reception',node6,'moteur.asp?head=2&lng=en&body=1','lienA');
	var node62=new addSubNode('Main gallery',node6,'moteur.asp?head=2&lng=en&body=2&no=1','lienA');
	var node63=new addSubNode('Young collectors’ corner',node6,'moteur.asp?head=2&lng=en&body=2&no=2','lienA');
	var node64=new addSubNode('Connoisseurs’ corner',node6,'moteur.asp?head=2&lng=en&body=2&no=3','lienA');
	var node65=new addSubNode('Major collectors’ room',node6,'moteur.asp?head=2&lng=en&body=2&no=4','lienA');
	var node66=new addSubNode('Sculptures garden',node6,'moteur.asp?head=2&lng=en&body=2&no=5','lienA');
	var node67=new addSubNode('Art Bookshop',node6,'moteur.asp?head=2&lng=en&body=2&no=6','lienA');
	var node68=new addSubNode('Price list',node6,'moteur.asp?head=2&lng=en&body=3','lienA');

	var node7=new addNode('Guide',mainMenu);
	var node71=new addSubNode('Diary',node7,'moteur.asp?head=2&lng=en&body=4','lienA');
	var node72=new addSubNode('Request for information',node7,'moteur.asp?head=2&lng=en&body=7','lienA');
	var node73=new addSubNode('Web site tour',node7,'moteur.asp?head=2&lng=en&body=0#coord','lienA');
	var node74=new addSubNode('Contacts',node7,'moteur.asp?head=2&lng=en&body=0#coord','lienA');
	var node75=new addSubNode('Marcel Barbeau',node7,'mailto:marcelbarbeau@yahoo.fr?subject=[Marcel Barbeau] ','lienA');
	var node76=new addSubNode('Ninon Gauthier',node7,'mailto:ninongauthier@yahoo.fr?subject=[Marcel Barbeau]','lienA');
	
	var node8=new addNode('Interactive rooms',mainMenu);
	var node81=new addSubNode('Overview',node8,'moteur.asp?head=2&lng=en&body=13','lienA');
	var node82=new addSubNode('Virtual guide tours',node8,'/expo/','lienA');
	var node83=new addSubNode('Film Barbeau libre comme  l\'art',node8,'film/','lienA');
	var node84=new addSubNode('Forum',node8,'forum/','lienA');
	
/*ù	var node1=new addNode('ok',myMenu,'var i=1;','amenu','icones/nouveau.gif','icones/10.gif');
	var node2=new addSubNode('ok2',node1,'','amenu');
	var node8=new addSubNode('ok8',node1,'CollapseOnly(11,true);','amenu');
	var node3=new addSubNode('ok3',node2,'','amenu');
	var node7=new addSubNode('ok7',node2,'var i=1','amenu','icones/nouveau.gif');
	var node4=new addNode('ok4',myMenu,'','amenuparent');
	var node5=new addSubNode('ok5',node1,'CollapseAll(6,false);','amenu2');
	var node6=new addSubNode('ok6',node4,'','amenu');
	var node9=new addSubNode('ok9',node7,'','amenu');
	var node10=new addSubNode('ok10',node4,'','amenu');
	var node11=new addSubNode('ok11',node10,'','amenu');
	var node12=new addSubNode('ok12',node6,'','amenu');*/
	
/*	var node22=new addSubNode('Chronologie',node2,'moteur.asp?head=2&lng=en&body=14', 'chro');
	var node23=new addSubNode('Distinctions',node2,'moteur.asp?head=2&lng=fr&body=16', 'distin');*/
	
/*	var node3=new addSubNode('Evènements expositions',node1,'amenu');
	var node31=new addSubNode('Expositions solos',node3,'moteur.asp?head=2&lng=fr&body=12&expo=1', 'sol');	
	var node32=new addSubNode('Expositions collectives',node3,'moteur.asp?head=2&lng=fr&body=12&expo=2', 'exp');
	var node33=new addSubNode('Performances',node3,'moteur.asp?head=2&lngf=r&body=12&expo=2', 'per');

	var node4=new addSubNode('Collections',node1,' amenu');
	var node41=new addSubNode('Art public',node4,'moteur.asp?head=2&lng=fr&body=11&coll=1', 'art');
	var node42=new addSubNode('Collections privées et publiques',node4,'moteur.asp?head=2&lng=fr&body=11&coll=3', 'coll priv');
	var node43=new addSubNode('Collections d\'entreprises',node4,'moteur.asp?head=2&lng=fr&body=11&coll=2', 'coll priv');

	var node5=new addSubNode('Références',node1,'menuRef');
	var node51=new addSubNode('Bibliographiel',node5,'moteur.asp?head=2&lng=fr&body=17', 'accueil	');
	var node52=new addSubNode('Commentaires critiques',node5,'moteur.asp?head=2&lng=fr&body=1', 'sall prin');
	var node53=new addSubNode('Ecrits de l"artiste',node5,'moteur.asp?head=2&lng=fr&body=1', 'jeune coll');
	
	var node6=new addNode('Galerie',mainMenu);
	var node61=new addSubNode('Accueil',node6,'moteur.asp?head=2&lng=fr&body=1', 'accueil	');
	var node62=new addSubNode('Salle principale',node6,'moteur.asp?head=2&lng=fr&body=2&no=1', 'sall prin');
	var node63=new addSubNode('Coin des jeunes colllectionneurs',node6,'moteur.asp?head=2&lng=fr&body=2&no=2', 'jeune coll');
	var node64=new addSubNode('Coin des connaisseurs',node6,'moteur.asp?head=2&lng=fr&body=2&no=3', 'conn');
	var node65=new addSubNode('Salles des grandes collectionneurs',node6,'moteur.asp?head=2&lng=fr&body=2&no=4', 'sallColl');
	var node66=new addSubNode('Jardin des sculptures',node6,'moteur.asp?head=2&lng=fr&body=2&no=5', 'scult');
	var node67=new addSubNode('Librairie',node6,'moteur.asp?head=2&lng=fr&body=2&no=6', 'lib');

	var node7=new addNode('Agenda',mainMenu);
	var node71=new addSubNode('A ll\'agenda',node7,'moteur.asp?head=2&lng=fr&body=4', 'agenda');
	var node72=new addSubNode('Demande d\'finormation',node7,'moteur.asp?head=2&lng=fr&body=7', 'amenu');
	var node73=new addSubNode('A propos du site',node7,'moteur.asp?head=2&lng=fr&body=0#coord', 'amenu');
	var node74=new addSubNode('Nos coordonnées',node7,'moteur.asp?head=2&lng=fr&body=0#coord', 'amenu');
	var node75=new addSubNode('Contacter Marcel Barbeau',node7,'mailto:marcelbarbeau@yahoo.fr?subject=[Marcel Barbeau] ', 'amenu');
	var node76=new addSubNode('Contacter Ninon Gauthier',node7,'mailto:ninongauthier@yahoo.fr?subject=[Marcel Barbeau]', 'amenu');
	
	var node8=new addNode('Salles intéractives',mainMenu);
	var node81=new addSubNode('Les Salles',node8,'salles_interac.asp', 'agenda');
	var node82=new addSubNode('Expositions virtuelles',node8,'moteur.asp?head=2&lng=fr&body=12&expo=1', 'amenu');
	var node83=new addSubNode('Film Barbeau libre comme  l\'art',node8,'film/', 'amenu');
	var node84=new addSubNode('Forum de discussion',node8,'forum/', 'amenu');*/
}
