/**
 * Classe Overlay - permet de positionner un calque sur un élément donné
 */
 
var Overlay = Class.create(
{
	/**
	 * constructeur - si un élément est passé en paramètre (node ou ID), ajoute un calque (element <div>) au dessus de l'élément en position absolue. Si pas de paramètre,a lors il faudra appelé la méthode overlay(elementID)
	 * 
	 * @param string|Element element élément ou ID de l'élément
	 * @return Overlay
	 * @access public
	 */
	initialize:				function(element)
							{
								// on ne lance le traitement que si le paramètre existe
								if(!(Object.isUndefined(element) || element === null))
								{
									this.options = {};
									// options
									Object.extend(this.options,arguments[1] || {});
									
									// création du <div> calque
									this.DOM = new Element('div');
									
									var defaultOptions = 
									{
										'display'			: 'block',
										'position'			: 'absolute',
										'border'			: 'none',
										// on s'assure que le calque est au dessus de tout élément
										'zIndex'			: '1000',
										'cursor'			: 'pointer',
										// IE a des problèmes si on ne défini pas le background
										'backgroundColor'	: '#CCCCCC',
										'MozOpacity'		: '0.1',
										'filter'			: 'alpha(opacity=10)'
									};
									
									this.DOM.setStyle(Object.extend(defaultOptions,this.options.style));
									
									// overlay de l'élément
									this.overlay(element);
								}
							},
	/**
	 * positionne un calque en position absolue sur l'élément passé en paramètre (node ou ID)
	 * 
	 * @param string|Element element élément ou ID de l'élément
	 * @access public
	 */
	overlay:				function(element)
							{
								// normalisation de l'élément
								element = $(element);
								if(element)
								{
									// sauvegarde de l'élément "calqué" (donc sous le calque) dans targetElement
									this.targetElement = element;
									
									// copie des dimensions et positions
									this.copyTargetOffset();
									this.copyTargetDimensions();
									
									// ajout dans le document courant
									document.body.appendChild(this.toElement());
									
									// opacitée à 0%, principalement pour IE (cf. initialize())
									var defaultOptions = {'duration':0.0,'from':1.0,'to':0.0};
									
									new Effect.Opacity(this.toElement(),Object.extend(defaultOptions,this.options));
								}
							},
	
	/**
	 * copie les dimensions de l'élément calqué 
	 * 
	 * @access private
	 */				
	copyTargetDimensions: 	function()
							{
								this.dimensions = this.targetElement.getDimensions();
								this.DOM.setStyle({'height':this.dimensions.height+'px','width':this.dimensions.width+'px'});
							},
	/**
	 * copie la position de l'élément calqué
	 * 
	 * @access private
	 */
	copyTargetOffset:		function()
							{
								this.offset = this.targetElement.cumulativeOffset();
								this.DOM.setStyle({'top':this.offset.top+'px','left':this.offset.left+'px'});
							},
							
							
	toElement:				function()
							{
								return this.DOM;
							}
}
);
