// JavaScript Document
Object.extend(Element, {
   	getWidth: function(element) {
    element = $(element);
    return element.offsetWidth;
	},
    getX: function(element) {
    element = $(element);
    return (document.all)?element.style.pixelLeft:parseInt(element.style.left) 
	},
 	getY: function(element) {
    element = $(element);
    return (document.all)?element.style.pixelTop:parseInt(element.style.top) 
	},
  	htZoneAffichage: function() {
		var windowHeight=0;
		if (typeof(window.innerHeight)=='number') {
			windowHeight=window.innerHeight;
		}
		else {
		 if (document.documentElement&&
		   document.documentElement.clientHeight) {
			 windowHeight = document.documentElement.clientHeight;
		}
		else {
		 if (document.body&&document.body.clientHeight) {
			 windowHeight=document.body.clientHeight;
		  }
		}
    }
    return windowHeight;
	},
	getOffSetPositionTop: function(element) {
		element = $(element);
		var position = 0;
		while (element && element.tagName != 'body')
		{
			position += element.offsetTop;
			element = element.offsetParent;
		}
		return position;
	},
   	getOffSetPositionLeft: function(element) {
		element = $(element);
		var position = 0;
		while (element && element.tagName != 'body')
		{
			position += element.offsetLeft;
			element = element.offsetParent;
		}
		return position;
	},
  	getScrollTop: function() {
		return document.documentElement.scrollTop || document.body.scrollTop;
	},
 	fixeHeight: function(element) {
		element = $(element);
		Element.setStyle(element,{height:Element.getHeight(element)+'px'});
	},
	fixeWidth: function(element) {
		element = $(element);
		Element.setStyle(element,{width:Element.getWidth(element)+'px'});
	},
 	fixeElement: function(element) {
   		element = $(element)
		Element.fixeHeight(element)
		Element.fixeWidth(element)
	},
	versPosition: function(element) {
		element = $(element);
		var x = 0,
		   y=Element.getOffSetPositionTop(element);
		window.scrollTo(x, y);
  	}
});

// detection sur tout le document (et non body (original)); Ie5.5 : ne marche pas avec un parent
document.getElementsByClassName = function(className, parentElement) {
	var children = $(parentElement) ?  $(parentElement).getElementsByTagName('*') : document.all || document.getElementsByTagName('*');
	return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(child);
    return elements;
  });
}

function mpx(element) {
	return parseInt(element.replace(/px/,""));
}

function ppx(element) {
	element = element.toString()
	return element.search(/px/)== -1 ? element+'px':element;
}
/* ------------------------ Img_Rollover ---------------------------------*/
Img_rollover = Class.create();
Img_rollover.prototype = {
	   initialize: function(img) {
			this.image = img;
			this.source = this.image.src;
			this.url = this.source.substring(0,this.source.lastIndexOf('.'));
			this.format = this.source.substring(this.source.lastIndexOf('.'),this.source.length);
			this.source_on = this.url+"_on"+this.format;
			//assigning our method to the event
			this.image.onmouseover = this.change_on.bindAsEventListener(this);
			this.image.onmouseout = this.change_off.bindAsEventListener(this);
	   },
	   change_on: function(evt) {
		 this.image.src = this.source_on;
	   },
	   change_off: function(evt) {
		  this.image.src = this.source;
	   }
	};
/* ------------------------ /Img_Rollover ---------------------------------*/

/*------------------------------------------------- haut de page ---------------------------------------------------*/
Bt_haut_de_page = Class.create();
Bt_haut_de_page.prototype = {
	initialize: function(element,page,diff_bas_page,taille_bt_haut_page) {
		this.element = $(element);/* element haut de page */
		this.margin = mpx(Element.getStyle(element,'margin-top'))/* margin-top (marge entre le debut de la zone d'affichage et le bouton)*/
		this.taille = taille_bt_haut_page ? taille_bt_haut_page : Element.getHeight(element);/* taille du haut de page */
		this.actif=false;/* boolean permettant l'activation du scrolling */
		this.position_initiale = Element.getOffSetPositionTop(element) - this.margin;/* position initiale par rapport au debut du document(marge comprise) */
		if(browser.isIE){this.position_initiale -=13}/* defaut de IE */
		this.hauteur_page = page;/* hauteur de la page */
		this.diff_bas_page = diff_bas_page;/* distance entre la position max du haut de page et la fin de la page */
		if(this.affichage())
		{
			if(this.actif){if(browser.isLinux){new PeriodicalExecuter(this.deplacer.bindAsEventListener(this), 0.02);}else{window.onscroll = this.deplacer.bindAsEventListener(this);}}
		}
		else
		{Element.setStyle(element,{display:'none'})}
	},
	affichage: function() {
		// si la page est plus grande que la zone d'affichage et que le bouton haut de page peut scroller -> activation + affichage
		if((this.hauteur_page > Element.htZoneAffichage()) && ((this.position_initiale + this.taille + this.margin) < (this.hauteur_page - this.diff_bas_page)))
		{this.actif=true;return true;}
		// si la page est plus grande que la zone d'affichage et que le bouton haut de page ne peut pas scroller -> pas d'activation + affichage
		if(this.hauteur_page > Element.htZoneAffichage())
		{
			Element.setStyle(this.element,{position:'relative'});
			//bt image pour ie (vas savoir pourquoi)			
			if(browser.isIE)
			{
				Element.setStyle(this.element,{height:Element.getHeight(this.element)+'px'});
				Element.setStyle(this.element,{width:Element.getWidth(this.element)+'px'});
			}
		return true;}
		return false;
	},
	deplacer: function(evt) {
		var scroltop = Element.getScrollTop()
			if((this.position_initiale - scroltop)<=0)
			{
				Element.setStyle(this.element,{top:scroltop-this.position_initiale+"px"})
			}			
			//corrige defaut (pour que le bouton haut de page revient à sa position initiale(du au proccessus moins rapide que le deplacement du scroll))
			if((this.position_initiale - scroltop)>0)
			{
				Element.setStyle(this.element,{top:0+"px"})
			}
	 }
};
/*------------------------------------------------- /haut de page ---------------------------------------------------*/
/*------------------------------------------------- MooX ---------------------------------------------------*/
/*MooX = Class.create();
MooX.prototype = {
	   initialize: function() {
			this.nb_elements_ouverts = 0;
			this.element_ouvert = null;
			this.elements = new Array;
			this.anim=false;
	   },
	  add:function(element) {
			this.elements.push(element);
			if(element.etat_initial)
			{
				this.nb_elements_ouverts++;
				if(this.nb_elements_ouverts>1){alert("Pour l'initialisation du script, il ne doit y avoir qu'un seul conteneur d'ouvert au maximum")}
				this.element_ouvert = element;
			}			
	   }
	};*/
/*------------------------------------------------- /MooX ---------------------------------------------------*/
/*------------------------------------------------- MooXElement ---------------------------------------------------*/
/*MooXElement = Class.create();
MooXElement.prototype = {
	   initialize: function(id_lien,id_conteneur,gestionnaire) {
			this.lien = $(id_lien);
			this.conteneur = $(id_conteneur);
			this.gestionnaire = $(gestionnaire);
			this.etat_initial = Element.getStyle(this.conteneur,'display') == 'block' ? true : false;// true ouvert, false ferme
			this.lien.onclick = this.onclick.bindAsEventListener(this);
	   },
	  onclick: function(evt) {
		 if(this.etat_initial)
		 {
			this.ferme()
			}
		 else
		 {
			 this.ouvre()
			}
	   },
	   ouvre: function() {
			Element.setStyle(this.conteneur,{display:'block'});
			  if(this.gestionnaire.element_ouvert != null &&  this.gestionnaire.element_ouvert != this){this.gestionnaire.element_ouvert.ferme()}
			  this.etat_initial = true;
			  this.gestionnaire.element_ouvert = this;	  
	   },
	   ferme: function() {
		   Element.setStyle(this.conteneur,{display:'none'});
			this.etat_initial = false;
	   }
	};*/
/*------------------------------------------------- /MooXElement ---------------------------------------------------*/
/*------------------------------------------------- MooX ---------------------------------------------------*/
MooX = Class.create();
MooX.prototype = {
	   initialize: function() {
			this.nb_elements_ouverts = 0;
			this.element_ouvert = null;
			this.elements = new Array;
			this.anim=false;
	   },
	  add:function(element) {
			this.elements.push(element);
			if(element.etat_initial)
			{
				this.nb_elements_ouverts++;
				if(this.nb_elements_ouverts>1){alert("Pour l'initialisation du script, il ne doit y avoir qu'un seul conteneur d'ouvert au maximum")}
				this.element_ouvert = element;
			}			
	   }
	};
/*------------------------------------------------- /MooX ---------------------------------------------------*/
/*------------------------------------------------- MooXElement ---------------------------------------------------*/
MooXElement = Class.create();
MooXElement.prototype = {
	   initialize: function(id_lien,id_conteneur,gestionnaire) {
			this.lien = $(id_lien);
			this.conteneur = $(id_conteneur);
			this.gestionnaire = $(gestionnaire);
			Element.fixeElement(this.conteneur);
			if(!Element.hasClassName(this.conteneur,"on"))
			{
				Element.setStyle(this.conteneur,{display:'none'});
			}
			this.etat_initial = Element.hasClassName(this.conteneur,"on") ? true : false;// true ouvert, false ferme
			this.lien.onclick = this.onclick.bindAsEventListener(this);
	   },
	  onclick: function(evt) {
		if(!this.gestionnaire.anim)
		 {
			 //alert('click')
			 if(this.etat_initial)
			 {
				this.ferme()
				}
			 else
			 {
				 this.ouvre()
			}
		 }
	   },
	   ouvre: function() {
		 Effect.BlindDown(this.conteneur,{gestionnaire:this.gestionnaire, duration:0.5, beforeStart:function() {this.gestionnaire.anim=true;}, afterFinish:function(){this.gestionnaire.anim=false;}});
		  if(this.gestionnaire.element_ouvert != null &&  this.gestionnaire.element_ouvert != this){this.gestionnaire.element_ouvert.ferme()}
		  this.etat_initial = true;
		  this.gestionnaire.element_ouvert = this;
		  
	   },
	   ferme: function() {
		  Effect.BlindUp(this.conteneur,{gestionnaire:this.gestionnaire, duration:0.5, beforeStart:function() {this.gestionnaire.anim=true;}, afterFinish:function(){this.gestionnaire.anim=false}});
			this.etat_initial = false;
	   }
	};
/*------------------------------------------------- /MooXElement ---------------------------------------------------*/
