/*////////////////////////////////////////////////////////////////////
Auteur : Marc ISIDORE
Date : 1 Octobre 2008
Version  : 1.0.3
copyright : addonline
cvs : oui 
////////////////////////////////////////////////////////////////////*/
if(!Prototype){throw("requiere la librairie Prototype JavaScript framework, version 1.6.0");}
var aoLoader  = Class.create({
	version:"1.0.2",
	_parentLoader:null,
	_elementLoader:null,
	_elementFondLoader:null,
	_elementimageLoader:null,
	_imageLoader:null,
	_idElementLoader :"aoLoader",
	_idElementLoaderFond :"aoLoaderFond",
	_idElementLoaderImg :"aoLoaderFondImage",
	_idElementImg :"aoLoaderImage",
	_srcImage: "images/ajax-loader.gif",
	_cible: null,
	initialize: function(cible,srcImage,proprieteLoader){ //defautProprietesLoader,defautProprietesFondImg,defautProprietesImg
		//RECUPERATION DES INFORMATIONS
		var imageSrc = (srcImage!="" && srcImage!=null)? srcImage : this._srcImage;
		var defautProprietes = {
			display:"block",
			position:"absolute",
			top:0,
			left:0,
			width:"100%",
			height:"100%"
		};
		var defautProprietesLoader = {
			zIndex:1,
			display:"none",
			overflow:"hidden"
		};
		Object.extend(defautProprietesLoader, arguments[3] || {});
		var defautProprietesFond = {
			backgroundColor:"#000000",
			opacity:"0.5",
			zIndex:1
		};
		Object.extend(defautProprietesFond, proprieteLoader);
		var defautProprietesFondImg = {
			zIndex:2
		};
		Object.extend(defautProprietesFondImg, arguments[4] || {});
		var defautProprietesImg = {
			width:"32px",
			height:"32px",
			top:"50%",
			left:"50%"
		};
		Object.extend(defautProprietesImg, arguments[5] || {});
		
		//SUPPRESSION DES ELEMENTS
		this._elementLoader = $(this._idElementLoader);
		if(this._elementLoader){this.supprimer();}
		//RECUPERATION DES INFORMATION
		this._elementLoader = $(document.createElement("div"));
		
		this._elementLoader.id = this._idElementLoader;
		this._elementLoader.setStyle(defautProprietes);
		this._elementLoader.setStyle(defautProprietesLoader);

		this._elementFondLoader = $(document.createElement("div"));
		this._elementFondLoader.id = this._idElementLoaderFond;
		this._elementFondLoader.setStyle(defautProprietes);
		this._elementFondLoader.setStyle(defautProprietesFond);
		this._elementLoader.appendChild(this._elementFondLoader);
		
		this._elementimageLoader = $(document.createElement("div"));
		this._elementimageLoader.id = this._idElementLoaderImg;
		this._elementimageLoader.setStyle(defautProprietes);
		this._elementimageLoader.setStyle(defautProprietesFondImg);
		this._elementLoader.appendChild(this._elementimageLoader);

		this._imageLoader = $(document.createElement("img"));
		this._imageLoader.id= this._idElementImg;
		this._imageLoader.src= imageSrc;
		this._imageLoader.setStyle(defautProprietes)
		this._imageLoader.setStyle(defautProprietesImg);
		this._elementimageLoader.appendChild(this._imageLoader);
	
		this._cible = (cible==null)? $(document.body) : $(cible);
		var position = this._cible.getStyle("position");
		
		if(position!="relative" && position!="absolute"){
			this._cible.setStyle({position:"relative"});
		}
		
		this._cible.appendChild(this._elementLoader);
		this.initLoader();
		if(this._cible == document.body && this.getElementImage()){
			Event.observe(window, 'resize',this.initLoader.bindAsEventListener(this));
			Event.observe(window, 'scroll',this.replaceElementimageLoader.bindAsEventListener(this)); 
		}
	},
	getElementFondCouleur:function(){return $(this._idElementLoaderFond);},
	getElementFondImage:function(){	return $(this._idElementLoaderImg);},
	getElementImage:function(){return $(this._idElementImg);},
	cacher:function(){this._elementLoader.setStyle({display:"none"});},
	afficher:function(){this._elementLoader.setStyle({display:"block"});},
	supprimer:function(){var cible = $(this._elementLoader.parentNode);cible.removeChild(this._elementLoader);},
	setOpacity:function(valeur){this._elementFondLoader.setStyle({opacity:valeur});	},
	setBackgroundColor:function(valeur){this._elementFondLoader.setStyle({backgroundColor:valeur});},
	initLoader:function(){
		var width  = "1px";
		var height = "1px";
		var paddingLeft = 0;
		var paddingTop = 0;
		this._elementLoader.setStyle({left:"0"});
		this._elementLoader.setStyle({top:"0"});
		if(this._cible == document.body){
			var tempDisplay = document.body.style.display;
			var dimensionsScroll = document.viewport.getScrollOffsets();
			var dimensions = {height:document.body.scrollHeight,width:document.body.scrollWidth} //document.body.getDimensions();
			width  = dimensions.width;
			height = dimensions.height;
		}else{
			var dimensions = this._cible.getDimensions(); 
			width  = dimensions.width;
			height = dimensions.height;
			if(width==0 && height==0){
				height = parseInt(this._cible.getStyle("height"))
				width  = parseInt(this._cible.getStyle("width"))
			}
		}
		var paddingLeft = this._cible.getStyle("marginLeft");
		var paddingTop = this._cible.getStyle("marginTop");
		
		if(Prototype.Browser.Gecko){
			if(paddingLeft!=0){this._elementLoader.setStyle({left:"-"+paddingLeft});}
			if(paddingTop!=0){this._elementLoader.setStyle({top:"-"+paddingTop});}
		}
		
		this._elementLoader.setStyle({width:width+"px",height:height+"px"});

		if(this.getElementImage()){
			this._imageLoader.setStyle({marginTop:(-(parseInt(this._imageLoader.getStyle("height"))/2))+"px",marginLeft:(-(parseInt(this._imageLoader.getStyle("width"))/2))+"px"})
			if(this._cible == document.body){
				this._elementimageLoader.setStyle({border:"1px solid green"});
				var scrollY = (document.body.scrollTop!=undefined)?document.body.scrollTop:window.scrollY; 
				this._elementimageLoader.setStyle({height:document.body.clientHeight+"px",width:document.body.clientWidth+"px",top:scrollY+"px"});
			}
		}
	;
		this.afficher();
	},
	replaceElementimageLoader :function(event){
		var scrollY = (document.body.scrollTop) ? document.body.scrollTop : window.scrollY; 
		this._elementimageLoader.setStyle({top:scrollY+"px"})
	}
});