/*--------------------------------------------------------------------------*/
/*  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,
			revert: true,
			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:'+this.options.height);
		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,
						queue: {position:'end', scope: 'BDajaxwindowscope'},
						afterFinish: function() {
							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 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;

		setX = ( setX < 0 ) ? 0 : setX;
		setY = ( setY < 0 ) ? 0 : setY;

		Element.setStyle(this.container,'left:'+setX+'px; top:'+setY+'px;');

		// L'objet devient deplacable
		new Draggable(this.container,{
			// Apres un deplacement, l'objet se replace
			revert:this.options.revert
		});

	}

}
