/*////////////////////////////////////////////////////////////////////
Auteur : Marc ISIDORE
Date : 25 Fevrier 2008
Version  : 1.0.0
copyright : add online
cvs : oui
////////////////////////////////////////////////////////////////////*/
if(!Prototype){throw("requiere la librairie Prototype JavaScript framework, version 1.6.0");}
var aoLayerDrag = new Object();
aoLayerDrag.selectedLayer = null;
aoLayerDrag.startDrag = function(event){
	if(this.selectedLayer){
		this.selectedLayer.setPosition(Event.pointerX(event)-this.selectedLayer._decalage.x,Event.pointerY(event)-this.selectedLayer._decalage.y);
	}
}
aoLayerDrag.eventStartDrag =  aoLayerDrag.startDrag.bindAsEventListener(aoLayerDrag);

aoLayerDrag.stopDrag = function(event){
		Event.stopObserving(window.document.body, 'mousemove',this.eventStartDrag); 
		Event.stopObserving(window.document, 'mouseup',this.eventStopDrag); 
		this.selectedLayer = null;
}
aoLayerDrag.eventStopDrag = aoLayerDrag.stopDrag.bindAsEventListener(aoLayerDrag);

var aoLayer  = Class.create({
	version:"1.0.0",
	initialize: function(identifiant,contenu) {	
		var defauts = {
			_cadreLayer:null,
			_cadreOmbreV:null,
			_cadreOmbreH:null,
			_cadreDrag:null,
			_cadreBordureTop:null,
			_cadreBordureLeft:null,
			_cadreBordureBottom:null,
			_cadreBordureRight:null,
			_cadreContenu:null,
			_decalage : {x:0,y:0},
			_borderWidth : 0,
			_ombreWidth:0,
			_widthReal:0,
			_heightReal:0,
			_heightDrag : 0,
			_isDrag:true
		};
		var defautCadre  = {
			borderWidth:"1px",
			borderStyle:"solid",
			width:"200px",
			height:"250px",
			display:"block",
			backgroundColor:"#f6f5f5",
			borderColor:"#808080",
			overflow:"auto",
			center:true
		};
		var defautOmbre  = {
			backgroundColor:"#000000",
			border:"none",
			width:5,
			opacity:0.3
		};
		var defautFermer  = {
			height:20,
			fontSize:"12px",
			color:"#fff",
			fontFamily:"Arial, Helvetica, sans-serif",
			_src:"images/bt_fermer.gif",
			_texte:"Fermer",
			_beforeFermer:null
		};
		var temps = $(identifiant);
		/* si le layer existe */
		
		if(temps){temps.parentNode.removeChild(temps);}
		
		Object.extend(this,defauts);
		this._cadreLayer = document.createElement ("div")
		this._cadreLayer.id = identifiant;
		$(this._cadreLayer);
		
		var propriete = (arguments[2]|| {})
		Object.extend(defautCadre,propriete);
		this._isDrag = (defautCadre.isDrag!=undefined)? defautCadre.isDrag :true;
		
		this._widthReal = parseInt(defautCadre.width);
		this._heightReal = parseInt(defautCadre.height);
		
		this._cadreLayer.setStyle ({display:"block", left:"50px",textAlign:"left",
								   position:"absolute",top:"50px",visibility:"hidden",
								   width:this._widthReal, height:this._heightReal
								   });
		document.body.appendChild(this._cadreLayer);
		/*++++++++++++++++++++++++ CREATION DE LA BARRE DE DRAG ++++++++++++++++++++++++++++++*/
		var fermer =  arguments[3] || {};
		Object.extend(defautFermer,fermer);

		this._borderWidth = (parseInt(defautCadre.borderWidth)>0)? parseInt(defautCadre.borderWidth) : 0;
		
		if(this._isDrag){
			this._cadreDrag = document.createElement ("div");
			this._heightDrag = defautFermer.height;
			this._cadreDrag.id = identifiant+"ligneDrag";
			$(this._cadreDrag);
			Event.observe(this._cadreDrag,"mousedown",this.startDrag.bindAsEventListener(this)) ;
			this._cadreDrag.setStyle ({cursor:"move",backgroundColor:defautCadre.borderColor, top:0, clear:"both",position:"absolute",
									//border:bordure+"px solid "+d,
									  height:defautFermer.height+"px", width:this._widthReal+"px"
									  });
			
			this._cadreLayer.appendChild(this._cadreDrag);
			this._cadreDrag.setStyle({fontFamily:defautFermer.fontFamily,fontSize:defautFermer.fontSize,color:defautFermer.color});
			this._cadreBtFermer = document.createElement ("div");
			this._cadreBtFermer.id = identifiant+"Btfermer";
			$(this._cadreBtFermer);
			if(defautFermer._beforeFermer){
				this._beforeFermer = defautFermer._beforeFermer;
			}
			Event.observe(this._cadreBtFermer,"mousedown",this.fermer.bindAsEventListener(this)) ;
			this._cadreBtFermer.setStyle ({cursor:"pointer",position:"absolute",right:"2px",
										  paddingLeft:"15px",lineHeight:defautFermer.height+"px",
										  height:defautFermer.height+"px",
										  verticalAlign:"middle",
										  backgroundPosition:"0 50%",
										   backgroundRepeat:"no-repeat",
										  backgroundImage: "url("+defautFermer._src+")"
										  });
			this._cadreDrag.appendChild(this._cadreBtFermer);
			
			//  Creation du texte 
			this._cadreTextFermer = document.createElement("strong");
			this._cadreTextFermer.appendChild(document.createTextNode(defautFermer._texte));
			$(this._cadreTextFermer);
			
			this._cadreTextFermer.setStyle({lineHeight:defautFermer.height+"px",
										   display:"inline",
										   verticalAlign:"middle"
										   });
			this._cadreBtFermer.appendChild(this._cadreTextFermer);
		}	
		/*+++++++++++++++++++++ CREATION DU CONTENEUR +++++++++++++++++++++++++++++++++*/
		this._cadreContenu = document.createElement ("div")
		this._cadreContenu.id = identifiant+"conteneur";
		$(this._cadreContenu);
		this._cadreContenu.setStyle ({position:"absolute",
								left:this._borderWidth+"px",
								top:(this._heightDrag+this._borderWidth)+"px",
								clear:"both",
								height:(this._heightReal-(this._heightDrag+(this._borderWidth*2)))+"px",
								width:(this._widthReal-(this._borderWidth*2))+"px",
								backgroundColor : defautCadre.backgroundColor,
								overflow: defautCadre.overflow
								});
		this._cadreLayer.appendChild(this._cadreContenu);
		/*++++++++++++++++++++++++ CREATION DES OMBRES ++++++++++++++++++++++++++++++*/
		var ombre = arguments[4] || {}
		Object.extend(defautOmbre,ombre);
		this._ombreWidth = defautOmbre.width;
		if(this._ombreWidth>0){
			var ombrecss = {position:"absolute",backgroundColor:defautOmbre.backgroundColor,opacity:defautOmbre.opacity};
			this._cadreOmbreV = document.createElement ("div");
			this._cadreOmbreV.id = identifiant+"ov";
			$(this._cadreOmbreV);
			this._cadreOmbreV.setStyle (ombrecss);
			this._cadreOmbreV.setStyle ({
										left:this._widthReal+"px",
										top:this._ombreWidth+"px",
										width:this._ombreWidth+"px",
										height:(this._heightReal - this._ombreWidth)+"px"
										});
			this._cadreOmbreH = document.createElement ("div");
			this._cadreOmbreH.id = identifiant+"oh";
			$(this._cadreOmbreH);
			this._cadreOmbreH.setStyle (ombrecss);
			this._cadreOmbreH.setStyle ({height:this._ombreWidth+"px",
										top:this._heightReal+"px",
										left:this._ombreWidth+"px",
										width:this._widthReal+"px"
										});
			this._cadreLayer.setStyle ({width:(this._widthReal+this._ombreWidth)+"px",
										height:(this._heightReal+this._ombreWidth)+"px"});
			
			this._cadreLayer.appendChild(this._cadreOmbreH);
			this._cadreLayer.appendChild(this._cadreOmbreV);
			
		}
	/*++++++++++++++++++++++++ CREATION DES BORDURES ++++++++++++++++++++++++++++++*/
			var bordurecss = {backgroundColor:defautCadre.borderColor,position:"absolute",fontSize:"1px"};
			this._cadreBordureTop=document.createElement ("div");
			$(this._cadreBordureTop);
			this._cadreBordureTop.setStyle(bordurecss);
			this._cadreBordureTop.setStyle({
										left:0, top: (parseInt(this._cadreContenu.getStyle("top"))-this._borderWidth)+"px",
										width: this._widthReal+"px",
										height:this._borderWidth+"px"
									});//borderWidth
			
			this._cadreBordureBottom=document.createElement ("div");
			$(this._cadreBordureBottom);
			this._cadreBordureBottom.setStyle(bordurecss);
			this._cadreBordureBottom.setStyle({
										left:0, top:(parseInt(this._cadreContenu.getStyle("top"))+parseInt(this._cadreContenu.getStyle("height")))+"px",
										width: this._widthReal+"px",
										height:this._borderWidth+"px"
									});
			
			this._cadreBordureRight=document.createElement ("div");
			$(this._cadreBordureRight)
			this._cadreBordureRight.setStyle(bordurecss);
			this._cadreBordureRight.setStyle({
							top:(parseInt(this._cadreContenu.getStyle("top"))-this._borderWidth)+"px", left : (this._widthReal-this._borderWidth)+"px",
							height : (parseInt(this._cadreContenu.getStyle("height"))+(this._borderWidth*2))+"px",
							width:this._borderWidth+"px"
						});
			this._cadreBordureLeft=document.createElement ("div");
			$(this._cadreBordureLeft)
			this._cadreBordureLeft.setStyle(bordurecss);
			this._cadreBordureLeft.setStyle({
							top:(parseInt(this._cadreContenu.getStyle("top"))-this._borderWidth)+"px", left : "0px",
							height : (parseInt(this._cadreContenu.getStyle("height"))+(this._borderWidth*2))+"px",
							width:this._borderWidth+"px"
						});
			this._cadreLayer.appendChild(this._cadreBordureTop);
			this._cadreLayer.appendChild(this._cadreBordureLeft);
			this._cadreLayer.appendChild(this._cadreBordureBottom);
			this._cadreLayer.appendChild(this._cadreBordureRight);
			
		if(defautCadre.center){this.show();}
		if(contenu!=""){this.setContenu (contenu,true);}
		return this;
	},
	startDrag : function(event){
		aoLayerDrag.selectedLayer = this;
		var positionInit = this._cadreLayer.positionedOffset();
		this._decalage ={x:Event.pointerX(event)-positionInit.left,y:Event.pointerY(event)-positionInit.top}
		Event.observe(window.document,"mouseup",aoLayerDrag.eventStopDrag) ;
		Event.observe(window.document.body,"mousemove",aoLayerDrag.eventStartDrag) ;
	},
	fermer : function(event){
		if(event){Event.stop(event);}
		if(this._beforeFermer){
			this._beforeFermer();
		}
		if(this._cadreLayer.id=="layerEnvoyerAmi"){
			reactiveLoupe();
		}
		this._cadreLayer.setStyle({display:"none"}) 
	},
	show : function(left,top){
		if(left && top){this.setPosition(left,top);}else{
			var taille = document.viewport.getDimensions(); 
			var scroll = document.viewport.getScrollOffsets()
			var h = parseInt(this._cadreLayer.getStyle("height"))-this._ombreWidth
			var l = parseInt(this._cadreLayer.getStyle("width"))-this._ombreWidth
			var x = (taille.width - l)/2+scroll.left;
			var  y = (taille.height - h)/2+scroll.top;
			this.setPosition (x,y)
		}
		this._cadreLayer.setStyle({display:"block",visibility:"visible"});
	},
	setPosition : function(x,y){
		this._cadreLayer.setStyle({left:x+"px",top:y+"px"})
	},
	setContenu : function(valeurContenu,evalscript){
		this._cadreContenu.innerHTML = valeurContenu;
		if(evalscript){valeurContenu.evalScripts();}
	}
});