function clMenup()
{
	this.menupClass = '';
	this.menupClassOver = '';

	this.clone = null;
	this.cloneButton = null;
	
	this.init = clMenupInit;
	this.addEvent = clAddEvent;
	this.mouseOutOver = clmouseOutOver;
	this.createPuceClone = clcreatePuceClone;
	this.createButtonClone = clcreateButtonClone;
	this.clickButton = clclickButton;
}

function clMenupInit(pNomClasse, pNomClasseOver, pPuceImage, pOpenImage, pOpenTitle, pOpenAlt, pClosedImage, pClosedTitle, pClosedAlt, pNomClasseCadreFils)
{
	this.menupClass = pNomClasse;
	this.menupClassOver = pNomClasseOver;
	

	//if (this.clone)
	this.createPuceClone(pPuceImage);
	this.createButtonClone();
			
	if(!document.getElementById || !document.createTextNode){return;}
	var tags=document.getElementsByTagName('DIV');
	
	//Initialisation des tableaux pour les boutons Ouvrir/Fermer
   	ImageSrc = new Array();
   	ImageTitle = new Array();
   	ImageAlt = new Array();
   	Display = new Array();

	ImageSrc[0] = pClosedImage;
	ImageTitle[0] = pClosedTitle;
	ImageAlt[0] = pClosedAlt;
	Display[0] = 'none';
			
	ImageSrc[1] = pOpenImage;
	ImageTitle[1] = pOpenTitle;
	ImageAlt[1] = pOpenAlt;
	Display[1] = '';

	
	for(var i=0;i<tags.length;i++){
		if(!cssjs('check',tags[i],this.menupClass)){continue;}
		this.addEvent(tags[i],'mouseover', this.mouseOutOver, false);
		tags[i].onmouseover=function(){return false;} // Safari hack
		this.addEvent(tags[i],'mouseout', this.mouseOutOver, false);
		tags[i].onmouseout=function(){return false;} // Safari hack

		tags[i].menupClass = this.menupClass;
		tags[i].menupClassOver = this.menupClassOver;

		//Noeud Enfant
		var bNiveauInf = false;
		if (pNomClasseCadreFils != '')
		{
			var frere = tags[i].nextSibling;
			while (frere)
			{
				bNiveauInf = cssjs('check',frere, pNomClasseCadreFils);
				if (bNiveauInf)
				{
					break;
				}
				if (cssjs('check',frere, pNomClasse)) break;
				frere = frere.nextSibling;
			}
		}
		
		if (bNiveauInf) // On doit developper
		{
			var buttonClone = this.cloneButton.cloneNode(true);
			
			buttonClone.ctrlSection = frere;
			nom = buttonClone.ctrlSection.id;
			if (nom.substring(0, 5) == "Layer")
			{
				var indice = nom.substring(5);
   				vis[indice] = LectureVariableMenu(indice);

				buttonClone.ImageSrc = ImageSrc;
				buttonClone.ImageTitle = ImageTitle;
				buttonClone.ImageAlt = ImageAlt;
				buttonClone.Display = Display;

				buttonClone.src = buttonClone.ImageSrc[vis[indice]];
				buttonClone.alt = buttonClone.ImageAlt[vis[indice]];
				buttonClone.title = buttonClone.ImageTitle[vis[indice]];
    			buttonClone.ctrlSection.style.display = buttonClone.Display[vis[indice]];
    		}

			this.addEvent(buttonClone, 'click', this.clickButton, true);
			buttonClone.onclick = function(){return false;} // Safari hack		
			tags[i].insertBefore(buttonClone, tags[i].firstChild);
		}
		else
		{
			tags[i].insertBefore(this.clone.cloneNode(true), tags[i].firstChild);
		}
	}
}

function clcreatePuceClone(pPuceImage)
{
	this.clone = document.createElement('img');
	this.clone.src= pPuceImage;
}

function clcreateButtonClone()
{
	this.cloneButton = document.createElement('img');
}

function getTarget(el){
	// A noter que sous IE l'evenement est toujours lance par window donc ce qui suit :
	var target = window.event ? window.event.srcElement : el ? el.target : null;
	if (!target){return false;}
	
	return target;
}


function clclickButton(el)
{
	var elm = getTarget(el); //Remplace this qui fonctionne pas sous IE
	var nom = elm.ctrlSection.id;
	var indice;

	if (nom.substring(0, 5) == "Layer")
	{
		indice = nom.substring(5);

		var flag = (vis[indice] == 1)? 0 : 1;
		elm.src = elm.ImageSrc[flag];
		elm.alt = elm.ImageAlt[flag];
		elm.title = elm.ImageTitle[flag];

		elm.ctrlSection.style.display = elm.Display[flag];
		vis[indice] = flag;

		MouvementMenu(indice,flag);
	}
}


function clmouseOutOver(el)
{
	//this ici c est la div et non la classe... 
	//cssjs('swap', this, this.menupClass, this.menupClassOver);
	//Remplace this qui fonctionne pas sous IE
	var elm = getTarget(el); 

	if ((elm.nodeName.toLowerCase() == 'a') | (elm.nodeName.toLowerCase() == 'img')){elm = elm.parentNode;}

	cssjs('swap', elm, elm.menupClass, elm.menupClassOver);
}


function clAddEvent(elm, evType, fn, useCapture)
{
	if (elm.addEventListener) 
	{
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}
}

//Tentative pour voir si la methode est privee...
function cssjs(a,o,c1,c2)
{
	switch (a){
		case 'swap':
			o.className=!cssjs('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
		break;
		case 'add':
			if(!cssjs('check',o,c1)){o.className+=o.className?' '+c1:c1;}
		break;
		case 'remove':
			var rep=o.className.match(' '+c1)?' '+c1:c1;
			o.className=o.className.replace(rep,'');
		break;
		case 'check':
			return new RegExp("(^|\s)" + c1 + "(\s|$)").test(o.className);
		break;
	}
}
