_.gdp = function ()
{
   var _ww = 0, _wh = 0;
   
   if( typeof( window.innerWidth ) == 'number' ) {  
     //Non-IE  
     _ww = window.innerWidth;  
     _wh = window.innerHeight;  
   } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {  
     //IE 6+ in 'standards compliant mode'  
     _ww = document.documentElement.clientWidth;  
     _wh = document.documentElement.clientHeight;  
   } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {  
     //IE 4 compatible  
     _ww = document.body.clientWidth;  
     _wh = document.body.clientHeight;  
   }  
   return(
		  	{	_ww: _ww,
			_wh: _wh }
			)
 };

_.gpp = function ()
{
	return(
	_.d.all ?
		_.d.body.scrollHeight > _.d.body.offsetHeight ?
			{	_w: _.d.body.scrollWidth,
				_h: _.d.body.scrollHeight}
			: 
			{	_w: _.d.body.offsetWidth,
				_h: _.d.body.offsetHeight}
		:
		{	_w: _.d.documentElement.scrollWidth,
			_h: _.d.documentElement.scrollHeight }
	)
}

function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {

        var ua = navigator.userAgent;

        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");

        if (re.exec(ua) != null)

            rv = parseFloat(RegExp.$1);

    }
    return rv;
}


/**
 * ovc : (overlay create) : crée une surface sombre et plaque le contenu de l'objet x au centre de l'écran 
 * 
 * 
 * @param   x : objet
 * @param   w : facultatif, override la largeur de l'objet x
 * @param   h : facultatif, override la hauteur de l'objet x
 *
 * @return  nothing
 *
 * @example :
 *				_.ovc(codeHTML);				: place le contenu de codeHTML 
 *				_.ovc(codeHTML,300,200);		: place le contenu de codeHTML et override la dimension du conteneur
 *				_.ovc(_.$('original'));			: copie le contenu de l'objet d'id 'original'
 *				_.ovc(_.$('original'),300,200); : copie le contenu de l'objet d'id 'original' et override la dimension du conteneur
 *
 * @note : on utilise une image png pour l'effet sombre, définition dans la feuille de style :
 *
 *			#overlay
 *			{
 *				background-image: url(overlay.png);
 *			}
 *			* html #overlay
 *			{
 * 				background-image:none;
 * 				filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="overlay.png", sizingMethod="scale");
 *			}
 *			#ovrbox (facultatif) 
 *			{
 * 				border:1px solid black;
 *			}
 */
_.ovc = function (x,css,w,h)
{
	var o1 =  _.d.getElementsByTagName('body')[0];
	var ovr = _.d.createElement('div');
	var p='px';

	// création de l'overlay
	ovr.setAttribute('id','overlay');
	var o = ovr.style;
	o.display='block';
	o.position='absolute';
	o.left=0+p;
	o.top=0+p;
	o.zIndex=998;

	// récupération de la valeur de scroll x et y (l'anchor # d'un lien replace le nav en 0,0)
	_.sc = _.gws();
	
	var a = _.gpp(); // page values
	var z = _.gwp(); // window values

	//alert("gpp._h="+a._h+"\n gwp._h="+z._h+"\n _.d.body.scrollHeight="+_.d.body.scrollHeight+"\n screen.availHeight="+screen.availHeight+"\n document.body.clientHeight="+document.body.clientHeight);

	// Si pas de scrollbar : 100 %, Sinon, on récupère les valeurs de gpp
	//o.width = _.d.body.scrollWidth > z._w ? a._w+p : "100%";
	//o.height = _.d.body.scrollHeight > z._h ? a._h+p : "100%";

	wvalue = _.d.body.scrollWidth;
	if(wvalue < z._w) {wvalue = z._w}
	if(wvalue < a._w) {wvalue = a._w}
	if(wvalue < screen.availWidth) {wvalue = screen.availWidth}
	wvalue = wvalue + "px";

	hvalue = _.d.body.scrollHeight;
	if(hvalue < z._h) {hvalue = z._h}
	if(hvalue < a._h) {hvalue = a._h}
	if(hvalue < a._h) {hvalue = a._h}
	if(hvalue < screen.availHeight) {hvalue = screen.availHeight}
	hvalue = hvalue + "px";
	
	o.width = wvalue;

	
		var ver = getInternetExplorerVersion();
		if (ver >= 8.0)
		{
			var tmp = document.body.clientHeight;
			if(tmp>hvalue)
			{
				hvalue = tmp + p;
			}
		}
	
	o.height = hvalue;

	
	/*
	o.width  = screen.availWidth +p;
	o.height = screen.availHeight +p;
	*/

	o1.insertBefore(ovr, o1.firstChild);

	// création de la boite
	var box = _.d.createElement('div');
	box.setAttribute('id','overlaybox');
	o = box.style;
	o.display='block';
	o.position=_.d.all ? 'absolute' : 'fixed';
	o.zIndex=999;
	// affectation du contenu
	box.innerHTML = typeof x == 'object' ? _.$(x).innerHTML : x;
	/*box.innerHTML = '<object type="application/x-shockwave-flash" data="res/pic/popUp/popUp.swf" width="756" height="455"><param name="allowScriptAccess" value="always" /> <param name="movie" value="res/pic/popUp/popUp.swf" /> <param name="menu" value="false" /> <param name="quality" value="best" /> <param name="wmode" value="transparent" /></object>';*/
	//alert(box.innerHTML);
	o1.insertBefore(box, o1.nextSibling);

	o = _.$('overlaybox');
	if(!_.isd(w)) // si les dimensions ne sont pas overridées, on récupère la taille
	{
		var w = _.gdi(o)._w;
		var h = _.gdi(o)._h;
	}
	s = o.style;
	s.width = w+p;
	s.height = h+p;

	
	// centrage sur l'écran
	s.left = (_.gwp()._w - w)/2 -(- _.sc._x ) + p;
	s.top =  (_.gwp()._h - h)/2 -(- _.sc._y ) + p;
	//s.left = 0 + p;
	s.top = 130 + p;
	if(window.document.all)
	{
		var ver = getInternetExplorerVersion();
		if (ver >= 8.0)
		{
			
			
		}
		else
		{
			s.left = -30 + p;
		}
	}

	// provoque le focus sur un evt blur
	_.ael(_.$(o),'blur',_.ovf);

	// IE : repositionnement absolu au centre sur evt scroll
	/*if(_.d.all)
	{
		_.ael(_.w,'scroll',_.ovs);
	}

	// provoque le resize de l'overlay et replace le bloc au centre sur evt resize
	_.ael(_.w,'resize',_.ovr);
*/
	// focus sur l'overlay
	_.ovf();

	_.$('overlay').className= css;
	_.$('overlaybox').className = css+"Box";

};

/**
 * ovd : (overlay destroy) : détruit les noeuds et les evt associés 
 *
 * @example : _.ovd();
 *
 */
_.ovd = function() 
{
	
	_.dno('overlay'); // destruction du noeud de l'overlay
	o = _.$('overlaybox');
	_.del(o,'blur',_.ovf); // suppression du keep Focus
	if(_.d.all)
	{
		_.del(_.w,'scroll',_.ovs);  // suppression du keep Scroll
	}
	
	_.del(_.w,'resize',_.ovr); // suppression du resize fix
	
	_.dno(o); // destruction du noeud de la boite
	//_.ovs();// replace le scroll au bon endroit
	
};

/**
 * ovf : (overlay focus) : bloque le focus sur l'element 'overlaybox' 
 *
 * @example : _.ovf();
 *
 */
_.ovf = function()
{
	_.$('overlaybox').focus();	
};

/**
 * ovs : (overlay scroll fix ) : appelé sur evt scroll, replace le scroll à l'origine 
 * 
 *
 * @example : _.ovs();
 *
 */
_.ovs = function()
{
	//scrollTo(_.sc._x,_.sc._y);
	
	var p='px';
	// repositionnement de l'overlaybox
	var o = _.$('overlaybox');
	var w = _.gdi(o)._w;
	var h = _.gdi(o)._h;
	var s = o.style;

	// récupération de la valeur de scroll x et y (l'anchor # d'un lien replace le nav en 0,0)
	_.sc = _.gws();
	
	// centrage sur l'écran
	s.left = (_.gwp()._w - w)/2 -(- _.sc._x ) + p;
	s.top =  (_.gwp()._h - h)/2 -(- _.sc._y ) + p;
	
};

/**
 * ovr : (overlay resize fix) : appelé sur evt resize, resize l'overlay et replace le bloc au centre 
 * 
 *
 * @example : _.ovr();
 *
 */
_.ovr = function()
{
	
	var p='px';
	
	// resize de l'overlay
	var o = _.$('overlay').style;
	
	var a = _.gpp(); // page values
	var z = _.gwp(); // window values

	// Si pas de scrollbar : 100 %, Sinon, on récupère les valeurs de gpp
	o.width = _.d.body.scrollWidth > z._w ? a._w+p : "100%";
	o.height = _.d.body.scrollHeight > z._h ? a._h+p : "100%";
	
	_.ovs();

	
};