
_.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 }
	)
}

/**
 * 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

	// 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%";
	

	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;
	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;


	// 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();

	
};