navi.Registry = [];
navi.delaisRentree = 100;
navi.duree = 300;
navi.vitesse = 10;

//"constructeur" defintit les variables principales et les classes
function navi(id,l,t,w,h,couleur,orientation){
	this.ie = document.all ? 1 : 0;
	this.ns4 = document.layers ? 1 : 0;
	this.dom = document.getElementById ? 1 : 0;
	this.plateForme = (navigator.appVersion.indexOf("Win") != -1);
	this.visible = (this.dom)?"visible" : "hidden"
	this.id = "content"+id;
	this.ContId = "contener"+id;
	this.Oid = "Ocontent"+id;
	this.width = (orientation == "d")?w:h;
	this.orientation = (orientation == "d")?"left":"top";
	this.debut = 0
	this.tempsRentre = 0;
	navi.Registry[this.id] = this;
	this.Reference = "navi_"+id;
	eval(this.Reference+"=this")
	var d = document;
	d.write('<style type="text/css">');
	//classe du calque
	d.write('#' + this.id + ' { visibility:'+ this.visible +'; ');
	d.write('position: absolute;');
	d.write('left:' + 1 + 'px; ');
	//d.write('top:' + t + 'px; ');
	d.write('width:' + w + 'px; ');
	d.write('height:' + h + 'px; ');
	d.write('color: #000000; ');
	//d.write('background-color: '+ couleur +';');
	d.write('filter:Alpha(opacity=100);');
	d.write('border: 0px solid #000000;');
	d.write('z-index: 2;');
	d.write('}');
	//classe de l'ombre
	d.write('#O' + this.id + ' { visibility:'+ this.visible +'; ');
	d.write('position: absolute;');
	d.write('left:' + l + 'px; ');
	d.write('top:-2000px; ');
	d.write('width:' + (w-3) + 'px; ');
	d.write('height:' + (h-15) + 'px; ');
	//d.write('background-color: #677fa4;');
	d.write('border: 0px solid #AAAAAA;');
	d.write('filter:Alpha(opacity=40);');
	d.write('z-index: 1;');
	d.write('}');
	//classe du titre "over"
	d.write('.menu' + this.id + ' { ');
	d.write('font-family: Verdana, Arial, Helvetica, sans-serif; ');
	d.write('font-size: 10px; ');
	d.write('color: #111111; ');	
	d.write('cursor: pointer; ');
	d.write('cursor: hand; ');
	d.write('background-color: #D4E4FE;');
	//d.write('background-color: '+ couleur +';');
	d.write('border-top: 2px inset #D4E4FE;');
	d.write('border-right: 0px solid #000000;');
	d.write('border-bottom: 1px solid #FFFFFF;');
	d.write('border-left: 1px inset #D4E4FE;');
	d.write('}');
	//classe du contener
	d.write('.navigation' + id + ' { ');
	d.write('position : absolute;');
	d.write('overflow : hidden;');
	//d.write('background-color: '+ couleur +';');
	d.write('top:' + t + 'px; ');
	d.write('left : -500px;');
	d.write('width : '+w+'px;');
	d.write('height : '+(h+20)+'px;');
	d.write('}');
	d.write('</style>');
	this.lecture();
}

//definition des comportement et autres variables globales
navi.prototype.lecture = function(){
	var d = document;
	
	var calque = this.id;
	var ombre = this.Oid;
	var titre = "titre"+this.id;
	var contener = this.ContId;
	
	var objet = this.dom ? d.getElementById(calque) : this.ie ? d.all[calque] : d.layers[calque];
	var Oobjet = this.dom ? d.getElementById(ombre) : this.ie ? d.all[ombre] : d.layers[ombre];
	var titreObjet = this.dom ? d.getElementById(titre) : this.ie ? d.all[titre] : d.layers[titre];
	var Ocontener = this.dom ? d.getElementById(contener) : this.ie ? d.all[contener] : d.layers[contener];
	
	if (!objet || !Oobjet || !titreObjet || !Ocontener) window.setTimeout(this.Reference + ".lecture()", 100)
	else {
		this.menu = objet;
		this.Omenu = Oobjet;
		this.titreMenu = titreObjet;
		this.contenerMenu = Ocontener;
		
		this.style = this.ns4 ? this.menu : this.menu.style;
		this.Ostyle = this.ns4 ? this.Omenu : this.Omenu.style;
		this.contenerSyle = this.ns4 ? this.contenerMenu : this.contenerMenu.style;
		
		this.homePos = - this.width;
		this.outPos = 0;
		this.acceleration = (this.outPos - this.homePos) / navi.duree / navi.duree; 
		if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
		this.menu.onmouseout = new Function("navi.rentre('" + this.id + "')");
		this.menu.onmouseover = new Function("navi.bloque('" + this.id + "')");
	}
}

//rentre le calque
navi.rentre = function(id){
	var reg = navi.Registry;
	var objet = navi.Registry[id];
	if (reg[id].style){
		reg[id].style.zIndex = 2;
		reg[id].Ostyle.zIndex = 1;
	}
	//delai de rentour caché
	objet.tempsRentre = window.setTimeout("navi.rentreCalque('" + id + "')",navi.delaisRentree);
}

//preparation de la rentrée
navi.rentreCalque = function(id){
	var reg = navi.Registry;
	var objet = navi.Registry[id];
	if (!reg[id].dom){//ie4
		reg[id].style.visibility = "hidden";
		reg[id].Ostyle.visibility = "hidden";
	}
	reg[id].tempsRentre = window.clearTimeout(reg[id].tempsRentre);
	reg[id].tempsRentre = 0;
	if (!reg[id].boucleR) objet.debutGlisseRentre();
}

//preparation de la sortie
navi.sortie = function(id){
	var reg = navi.Registry;
	var objet = navi.Registry[id];
	if (reg[id].style){
		reg[id].style.zIndex = 10;
		reg[id].Ostyle.zIndex = 9;
		reg[id].contenerSyle.left = 151;
	}
	//le calque n'est pas sur le point de rentrer
	if (reg[id].tempsRentre == 0 ) {
		objet.debutGlisseSortie();
	}else{
		reg[id].tempsRentre = window.clearTimeout(reg[id].tempsRentre);
		reg[id].tempsRentre = 0;
	}
}

// bloque la rentrée sur over
navi.bloque = function(id){
	var reg = navi.Registry;
	var objet = navi.Registry[id];
	
	reg[id].style.zIndex = 10;
	reg[id].Ostyle.zIndex = 9;
	reg[id].titreMenu.className = "menu"+id;
	
	//si calque en train de renter y sort
	if(reg[id].boucleR) objet.debutGlisseSortie();
	
	//si sur le point de rentrer on arrete
	reg[id].tempsRentre = window.clearTimeout(reg[id].tempsRentre);
	reg[id].tempsRentre = 0;
}

//on va commencer la glisse de retour
navi.prototype.debutGlisseRentre = function(){
	this.boucleS = window.clearTimeout(this.boucleS)
	this.boucleS = 0;
	if (!this.boucleR){
		this.titreMenu.className = "Thema";
		this.debut = (new Date()).getTime();
		this.boucleR = window.setInterval(this.Reference + ".glisse('-')", navi.vitesse);
	}
}

//on va commencer la glisse de sortie
navi.prototype.debutGlisseSortie = function(){
	this.boucleR = window.clearTimeout(this.boucleR)
	this.boucleR = 0;
	this.debut = (new Date()).getTime();
	//boucle de sortie
	this.boucleS = window.setInterval(this.Reference + ".glisse('+')", navi.vitesse);
}

//fonction de glisse
navi.prototype.glisse = function(sens){
	var ecoule = (new Date()).getTime() - this.debut
	if (ecoule > navi.duree ) this.stopGlisse()
	else {
		var d =   Math.round(Math.pow(navi.duree - ecoule, 2) * this.acceleration)
		if (sens == "-") d = - this.width + d-1;
		else d = - d-1;
		this.style[this.orientation] =  d ;
		this.Ostyle[this.orientation] =  d + 5;
	}
}

//arret de la glisse
navi.prototype.stopGlisse = function() {
	//boucle de sortie
	if(this.boucleS) {
		this.boucleS = window.clearTimeout(this.boucleS);
		if (!this.dom){//ie4
			this.style.visibility = "visible";
			this.Ostyle.visibility = "visible";
		}
		this.style[this.orientation] = 0;
		this.Ostyle[this.orientation] = 4;
	}
	if(this.boucleR) {
		this.boucleR = window.clearTimeout(this.boucleR);
		this.style[this.orientation] = -this.width-5;
		this.Ostyle[this.orientation] = -this.width-5;
		this.contenerSyle.left = -this.width-300;
	}
}