/*--------------------------------------------------------------------------*/
/*	BDAjaxWindow	
*	This is a script for creating modal dialog windows (like the ones your operating
*	system uses)
*	
*/

var BDAjaxWindow = {
	/* hideAll - ferme toutes les fenetres BDajaxWindow ouvertes */	
	hideAll: function(){				
		if ($('BDAjaxWindowDiv')){
			Element.hide('BDAjaxWindowDiv');
			Element.remove('BDAjaxWindowDiv');
		}	
		if ($('BDAjaxWindowOverlay')){
			Element.remove('BDAjaxWindowOverlay');
		}
	}
}
BDAjaxWindow.base = Class.create();
BDAjaxWindow.base.prototype = {
    
	initialize: function(pUrl, pParams, options){
		//start by hiding all lightboxes				
		BDAjaxWindow.hideAll();
	  var externalControlEl = null;	  	  	 	 		
		
	  this.urlRequest = pUrl;
	  this.params = pParams;
	  
		this.options = Object.extend({						
			externalControl : false,			
			showLoading: false,
			closeOnOverlayClick: false,
			overlayHeight:'100%',
			isModal: false,
			width: 'auto',
			height: 'auto',
			bgcolor: '#FFFFFF',
			bordercolor: false,
			effectDuration: 0.1
		}, options || {} );
							
		// cree le div qui contiendra le flux
		this.container = document.createElement('div');
		this.container.style.display = 'none';
		this.container.style.padding = 0;
		this.container.style.margin = 0;    
		this.container.style.background = this.options.bgcolor;
		this.container.style.border = 0;	
		this.container.id = 'BDAjaxWindowDiv';			
					
		Element.setStyle(this.container,'width:'+this.options.width);
		Element.setStyle(this.container,'height:auto');
		Element.setStyle(this.container,'opacity:0; filter:alpha(opacity=0);');
		//Element.setStyle(this.container,'min-height:1px');
		//Element.setStyle(this.container,'_height:1px');
		Element.setStyle(this.container, 'position:absolute; z-index:999;');
		if (this.options.bordercolor) {
			Element.setStyle(this.container, 'border:1px solid ' + this.options.bordercolor);
		}
		
		document.body.appendChild(this.container);
		
		//cree un overlay
		if (this.options.isModal)	{
			new Insertion.Before(this.container, "<div id='BDAjaxWindowOverlay' style='display:none;'></div>");			
			Element.setStyle($('BDAjaxWindowOverlay'), 'padding:0; margin:0; border:0; position:fixed; _position:absolute; top:0;left:0;width:100%;height:100%;z-index:900;background-color:#000000;');
			/* IE6 */
			Element.setStyle($('BDAjaxWindowOverlay'), '_position: absolute; _top:expression(documentElement.scrollTop+body.scrollTop);');
			if (this.options.closeOnOverlayClick) {
				Event.observe($('BDAjaxWindowOverlay'), 'click', this.hideBox.bindAsEventListener(this) );			
			}		
		}
								
		Event.observe(window,'resize', this.center.bindAsEventListener(this));
		//Event.observe(window,'scroll', this.center.bindAsEventListener(this));

		this.show();
														
	},
	
	show : function(){
		var objWindow = this;
	    //this.center();
	  	var myAjax = new Ajax.Updater (
			this.container,
		  	this.urlRequest,
		    {		    	
		   		method: 'post',
		   		parameters : this.params,
				evalScripts: true,
		     	onCreate : function () {		     				     		
		     		if (objWindow.options.showLoading) {		     			
		     			new BDLoadingIndicator.base({pic:'ajax-loading.gif'});	     		
		     		}
		     	},
		     	onComplete: function() {		     				     		
		     		if (objWindow.options.showLoading) {		     			
		     			BDLoadingIndicator.hideAll();     					     			
		     		}
		     	},
		     	onSuccess: function() {		     		
		     		if (objWindow.options.isModal) {
		    			Effect.Appear($('BDAjaxWindowOverlay'), {	   	
		    			   	duration:0.1,	
		    			   	from:0.0,
		    			   	to:0.3,	   	
		    			   	queue: {position:'end', scope: 'BDajaxwindowscope'} 	
		    			});
		    		 }		
		     		Effect.Appear($('BDAjaxWindowDiv'), {
		    		   	duration:objWindow.options.effectDuration,	
		    		   	from:0.0,
		    		   	to:1.0,	
		    		   	fps:30,
		    		   	queue: {position:'end', scope: 'BDajaxwindowscope'},
		    		   	afterFinish: function() {
		    		   		objWindow.center();
		    		   		if (objWindow.options.externalControl){														
		    		   			var externalControl = objWindow.options.externalControl;					   			
		    						for(var i=0; i < (externalControl.length); i++) {
		    							Event.observe($(externalControl[i]), 'click', objWindow.hideBox.bindAsEventListener(objWindow));
		    						}
		    					}					   		
		    		   		}					   	
		    	    });		     				    		
		     	},
		     	onFailure: function(pResponse) {
		     		  
		     	}       
		     }					    
		  );	  	
	   return false;
	},
	
	hideBox : function(evt){			
		BDAjaxWindow.hideAll();		
		return false;
	},
		
	center : function(){
		var objWindow = this;
		
		var my_width  = 0;
		var my_height = 0;
				
		if(Prototype.Browser.IE) {			
			if (navigator.appVersion.indexOf('MSIE 6.0') > -1) {
				my_width  = document.body.clientWidth;
				my_height = document.body.clientHeight;
			}
			else {
				my_width  = document.documentElement.clientWidth;
				my_height = document.documentElement.clientHeight;
			}			
		}
		else {
			if ( typeof( window.innerWidth ) == 'number' ){
			my_width  = window.innerWidth;
			my_height = window.innerHeight;
			}else if ( document.documentElement && 
					 ( document.documentElement.clientWidth ||
					   document.documentElement.clientHeight ) ){
				my_width  = document.documentElement.clientWidth;
				my_height = document.documentElement.clientHeight;
			}
			else if ( document.body && 
					( document.body.clientWidth || document.body.clientHeight ) ){
				my_width  = document.body.clientWidth;
				my_height = document.body.clientHeight;
			}
		}				
		
		Element.setStyle(this.container, 'position:absolute; z-index:999;');		
		
		var scrollY = 0;
		
		if ( document.documentElement && document.documentElement.scrollTop ){
			scrollY = document.documentElement.scrollTop;
		}else if ( document.body && document.body.scrollTop ){
			scrollY = document.body.scrollTop;
		}else if ( window.pageYOffset ){
			scrollY = window.pageYOffset;
		}else if ( window.scrollY ){
			scrollY = window.scrollY;
		}
		
		var elementDimensions = Element.getDimensions(this.container);

		
		var setX = ( my_width  - elementDimensions.width  ) / 2;
		var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;
		//alert(Element.getHeight(this.container));
		//var setY = (this.container.offsetHeight) / 2 + scrollY;
		//var setY = 50 + scrollY;
		Element.setStyle(this.container,'left:'+setX+'px; top:'+setY+'px;');
		
		setX = ( setX < 0 ) ? 0 : setX;
		setY = ( setY < 0 ) ? 0 : setY;				
		
		// L'objet devient deplacable
		new Draggable(this.container,{
			// Apres un deplacement, l'objet se replace
			revert:true
		});
	}
	
}