/*
* overlay functions
* Gestion des dialogues : messages, alerte et popup avec contenu issu d'un script php
* 
* Appel dialogue de message: 
	MyOverlayInfo( message_content, offset_top_pixels, delay_seconds, hide_event, width_pixels, height_pixels, display_close )
*
*
* Exemple 1: Message d'INFORMATION qui disparat aprs 5 secondes ou sur un click 
* sur la div,  100 pixels du haut, de taille 600 * 480 et sans bouton OK
*
	MyOverlayInfo( 'Everything was all right :-)', '100', 5, true, 600, 480, false );
	<a href="javascript:void(0)" 
	onclick="javascript:MyOverlayInfo( 'Everything was all right :-)', '100', 5, true, 600, 480, false );">Message</a>
*
*
* Exemple 2: Demande de CONFIRMATION, restant  l'cran jusqu' un click sur le 
* bouton OK,  50 pixels du haut, de taille 400 * 300 et avec bouton OK
*
	MyOverlayInfo( 'Are you sure you want to boost ?', '50', 10000, false, 400, 300, true );
	<a href="javascript:void(0)" 
	onclick="javascript:MyOverlayInfo( 'Are you sure you want to boost ?', '50', 10000, '', 400, 300, true );">Confirmation</a>
*
* Lien d'appel dialogue message: 
*
  <a href="javascript:void(0)" 
  onclick="javascript:MyOverlayDialog( 'popup.php', '100', 500, 500, true );">Edit</a>
*
*/
// var ie = (document.all) ? true : false;				// True si le navigateur est IE
// var ns4 = (document.layers) ? true : false;			// True si le navigateur est NS version < 6
// var ns6 = (document.getElementById) ? true : false; // True si le navigateur est NS version 6

var ie = (document.all) ? true : false;				// True si le navigateur est IE
var ns4 = (document.layers) ? true : false;			// True si le navigateur est NS version < 6
var ns6 = (document.getElementById) ? true : false; // True si le navigateur est NS version 6

var overlayTimer = null;
var overlayVisible = false;
var overlayDelay = 5;
var overlayDebug = false;

/* 
* Affiche un message d'information en surbrillance, modal ou non (défaut=non)
* et disparaissant dans le délai specifique (défaut=3 secondes) 
*/
var MyOverlayInfo = function( message, offset_px, delay_second, disapear_on_click, width_px, height_px, dsp_close ) 
{
	var div = document.getElementById("msgNode");

	if( overlayVisible && ie ) {
		Event.stopObserving( div, 'click', MyHideOverlay );
		return MyHideOverlay();
	}

	// Use default delay if needed
	if( empty( delay_second ) ) delay_second = overlayDelay;

	MyOverlay( offset_px, message, "SHOW", width_px, height_px, dsp_close );

	if( overlayVisible ) {
		if( delay_second > 0 && delay_second < 1000 ) {
			// Disapear after timeout
			if( overlayTimer ) clearTimeout( overlayTimer );
			overlayTimer = setTimeout( "MyHideOverlay();", delay_second * 1000 );
		}		
		if( disapear_on_click ) {
			Event.observe( div, 'click', MyHideOverlay );
		} else {
			Event.stopObserving( div, 'click', MyHideOverlay );
		}
	} else {
		Event.stopObserving( div, 'click', MyHideOverlay );
	}

	return true;
};

/* 
* Affiche le contenu d'un script php dans une popup charge en surbrillance
* et disparaissant lors d'un appel  MyOverlay
*/
var MyOverlayDialog = function( href, offset_px, width_px, height_px, dsp_close ) 
{
	var div = document.getElementById("msgNode");
	var divMsg = document.getElementById("msgNodeMessage");

	// Use default delay if needed
	// if( empty( delay_second ) ) delay_second = overlayDelay;

	// popup content
	var contents = "";

	if( ! overlayVisible ) 
	{
		// apply overlay
		picto = '<img src="./images/common/loading.gif" style="margin:32px;" />';
		MyOverlay( offset_px, picto, 'SHOW', width_px, height_px, dsp_close );

		// Disapear if click allowed cause not modal
		Event.stopObserving( div, 'click', MyHideOverlay );

		// get contents using ajax
		new Ajax.Request( href, {
		  method: 'get',
		  asynchronous:true,
		  evalScript:true,
		  onComplete: function(transport) {
			if (transport.status == 200) {
				MyOverlaySetContent( divMsg, transport.responseText );
			}
			else alert('There was a problem with the request.');
		  }
		});
	}
};

/* 
* Masque la div principale et la div d'erreur
*/
var MyHideOverlay = function () 
{
	if( ! overlayVisible ) return;

	var sts = MyOverlay( 100, '', 'HIDE', '', '', false );
	
	return sts;
};

/* 
* Permute l'affichage et l'opacité de la div principale et de la div d'erreur
*/
var MyOverlay = function( offset_px, contents, force, width_px, height_px, dsp_close ) 
{
	if ( empty( force ) ) force = false;
	if ( dsp_close != false && dsp_close != true && empty( dsp_close ) ) dsp_close = true;

	var display = "";
	if( force == "HIDE" ) display = false;
	else if( force == "SHOW" ) display = true;
	else { alert( "bad !!!" ); return; }
	// alert( "F: "+force+", D: "+display );

	if( overlayDebug ) db( "Display: "+display );

	// exit if overlay hidden and force display not active
	// if( ! overlayVisible || ! display ) return false;

	// offset from client top 
	if( empty( offset_px ) ) offset_px = 100;

	// div contents
	if( contents == "" || contents == null || contents == undefined ) contents = "";

	// page node
	var pag = document.getElementById("global");
	if( empty( pag ) ) {
		return(alert("No div with id=global can be found in current page ! Please check to use MyOverlay :-)"));
	}

	// div node 
	var div = document.getElementById("msgNode");
	if( empty( div ) ) {
		return(alert("No div with id=msgNode can be found in current page ! Please check to use MyOverlay :-)" ));
	}

	// div node contents
	var divCnt = document.getElementById("msgNodeContent");
	if( empty( divCnt ) ) {
		return(alert("No content div with id=msgNodeContent can be found in current page ! Please check to use MyOverlay :-)" ));
	}

	// div node message
	var divMsg = document.getElementById("msgNodeMessage");
	if( empty( divMsg ) ) {
		return(alert("No message div with id=msgNodeMessage can be found in current page ! Please check to use MyOverlay :-)" ));
	}

	// div node close
	var divCls = document.getElementById("msgNodeClose");
	if( empty( divCls ) && dsp_close ) {
		return(alert("No close div with id=msgNodeClose can be found in current page ! Please check to use MyOverlay :-)" ));
	}

	// Pas de réaffichage
	if( overlayVisible && display == true ) {
		return true;
	}
	// Pas de remasquage
	if( ! overlayVisible && display == false ) {
		Event.stopObserving( div, 'click', MyHideOverlay );
		return false;
	}

	// Window scroll
	var wSiz = getPageSize();
	var wScr = getPageScroll();
	
	// top offset min
	m_left = wScr[0] + ( ( wSiz[2] - width_px ) / 2 );
	m_top = wScr[1] + parseInt( offset_px );
	// alert( "lft: "+m_left+" / "+"top: "+m_top );
	// alert( wScr[0]+" * "+wScr[1]+" => "+m_left+" / "+m_top );
	// if( overlayDebug ) db( wScr[0]+" * "+wScr[1]+" => "+m_left+" / "+m_top );

	if( overlayTimer ) {
		clearTimeout(overlayTimer);
		overlayTimer = null;
	}

	if( display == true ) 
	{
		// SHOW error

		MyOverlaySetContent( divMsg, contents );
		// pag.style.filter = 'alpha(opacity=30)';
		if( ! ie ) pag.style.MozOpacity = '0.30';

		if( width_px != "" ) {
			divCnt.style.width = width_px+"px";
		}
		if( height_px != "" ) {
			divCnt.style.height = height_px+"px";
		}

		// div.style.marginTop = m_top+"px";
		if( ie ) {
			div.style.paddingLeft = (m_left/2)+"px";
			div.style.paddingTop = m_top+"px";
		} else if( ns6 ) {
			div.style.paddingLeft = m_left+"px";
			div.style.paddingTop = m_top+"px";
		}
		
		if( ! dsp_close ) divCls.style.display='none';
		else divCls.style.display='';
		
		
		if( !ie ) {
			div.style.filter = 'alpha(opacity=0)';
			div.style.MozOpacity = '0.0';
			// C'est là
			new Effect.Appear('msgNode', {duration: 0.6, from: 0.0, to: 0.90, queue: 'front'});
			div.style.display = '';
			
		} else {
			div.style.display = '';
		}

		status = true;
		overlayVisible = true;
	}
	else 
	{
		// HIDE error

		div.style.display = 'none';
		if( ! ie ) pag.style.MozOpacity = '1.0';
		// pag.style.filter = 'alpha(opacity=100)';
		

		status = false;
		overlayVisible = false;
	}

	return status;
};

/*
* Retourne une url ou un lien 
*/
var MyOverlaySetContent = function( divMsg, contents )
{
	// check div node message
	if( empty( divMsg ) ) {
		return(alert("Bad div specified to MyOverlaySetContent :-)" ));
	}

	// check div contents
	if( contents == null || contents == undefined ) contents = "";

	// set div contents
	divMsg.innerHTML = '<p style="margin:8px">'+contents+'</p>';
}

/*
* Retourne une url ou un lien 
*/
var MyOverlayCloseLink = function( ref_only, title, css_class )
{
	if( empty( ref_only ) ) ref_only = false;

	ref = "MyHideOverlay()";
	if( ref_only ) return ref;

	lnk = '<a href="javascript:void(0)" ';
	if( ! empty( css_class ) ) lnk+= 'class="'+css_class+'" ';
	lnk+= 'onclick="'+ref+';">';
	lnk+= title+'</a>';

	alert( lnk );

	return lnk;
}

var empty = function ( mixedVar )
{
	if( mixedVar == undefined || mixedVar == null || mixedVar == "" /* || mixedVar == 0 */ ) 
	{
		// to do: object or array
		return true;
	}
	return false;
};

function getPageSize() {
	
	var xScroll, yScroll, pageWidth, pageHeight;
	
    if (window.innerHeight != null && window.scrollMaxY) {   
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
    } else if (document.body != null) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if (yScroll < windowHeight) pageHeight = windowHeight;
	else pageHeight = yScroll;

	// for small pages with total width less then width of the viewport
	if (xScroll < windowWidth) pageWidth = windowWidth;
	else pageWidth = xScroll;

	return new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
}

function getPageScroll() {
	var yScroll, xScroll;
	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop) {
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	}
	else if (document.body) {
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;
	}
	return new Array(xScroll,yScroll) 
}

