function byId(id)
{
	if (document.getElementById(id) != null)
		return document.getElementById(id);
	else
	{
		if (document.getElementById("_debug_") != null)
			_debug_add("<font style='color:red;font-weight:bold;'>byId:</font> "+id+" n'existe pas.");
		return null;
	}
}

function byName(name)
{
	if (document.getElementsByName(name) != null)
		return document.getElementsByName(name);
	else
	{
		if (document.getElementById("_debug_") != null)
			_debug_add("<font style='color:red;font-weight:bold;'>byName:</font> "+name+" n'existe pas.");
		return null;
	}
}
function css2js(css_prop) { return css_prop.replace(/[-](\w)/g, function (strMatch, p1) { return p1.toUpperCase() } ); } 
function newElements(tagName, attribut)
{
	var newElement = document.createElement(tagName);
	if (!newElement)
	{
		if (byId("_debug_"))
			_debug_add("<font style='color:red;font-weight:bold;'>newElements:</font> Une erreur est survenu. (1).");
		else
			alert("newElements: Une erreur est survenu. (1).");
		return;
	}
	if (typeof attribut != "object" && !isset(attribut))
		return;
	
	for(k in attribut)
	{
		if (k == "style" && document.all)
			newElement.style.setAttribute("cssText", attribut[k]);
		else if (k == "onclick")
		{
			if (!document.all)
				newElement.setAttribute(k, attribut[k]);
		}
		else
			newElement.setAttribute(k, attribut[k]);
	}
	if (byId("_debug_"))
		_debug_add("<font style='color:green;font-weight:bold;'>newElements:</font> Succes.");
	return newElement;
}

function addElements(Elements, Parents)
{
	if (Elements && Parents)
	{
		if (Parents == "body")
			document.body.appendChild(Elements);
		else
			Parents.appendChild(Elements);
		if (byId("_debug_"))
			_debug_add("<font style='color:green;font-weight:bold;'>addElements:</font> Succes.");
	}
	else
	{
		if (byId("_debug_"))
			_debug_add("<font style='color:red;font-weight:bold;'>newElements:</font> Une erreur est survenu. (1).");
		else
			alert("addElements: Une erreur est survenu. (1).");
	}
}

function delElements(Elements)
{
	if (Elements)
	{
		if (Elements.parentNode)
			Elements.parentNode.removeChild(Elements);
		else
			if (byId("_debug_"))
				_debug_add("<font style='color:green;font-weight:bold;'>delElements:</font> Une erreur est survenu. (2).");
			else
				;//alert("delElements: Une erreur est survenu. (2).");
	}
	else
		if (byId("_debug_"))
			_debug_add("<font style='color:green;font-weight:bold;'>delElements:</font> Une erreur est survenu. (1).");
		else
			;//alert("delElements: Une erreur est survenu. (1).");
}

function removeElement( el ){ if(document.all) el.removeNode(true); else el.parentNode.removeChild(el); }
function elt_att_css(el, css_prop) { if( css_prop.indexOf(',') != -1 ) css_prop = css_prop.trimAll().split(','); if( css_prop instanceof Array ) { var CSS={},p,i=0; while( p = css_prop[i] ) { CSS[p] = elt_att_css(el, p); i++; } return CSS; } var v; v = el.style[css_prop]; if( v !== undefined ) return v; v = el.style[css2js(css_prop)]; if( v !== undefined ) return v; } 
function getPar( el, tag ) // le parent OU lui-même si est du même nodeName
{
         tag = tag.toUpperCase();
         while(  el.nodeName.toUpperCase() != tag ) { el = el.parentNode; }
         return el;
}
function elt_scrollMode(el) { var v = elt_css(el,'overflow'); return( v && v.match('auto|scroll') ? v : ''); }
function elt_css(el, css_prop, css_val) // si css_val défini -> affectation
{ if( arguments.length == 3 ) { el.style[css2js(css_prop)] = css_val; return; } var css_val = elt_att_css( el, css_prop ); if( css_val && css_val != 'auto' ){ // rien a faire
} else if(document.defaultView && document.defaultView.getComputedStyle){ css_val = document.defaultView.getComputedStyle(el, '').getPropertyValue(css_prop); } else if(el.currentStyle){ css_prop = css2js(css_prop); css_val = el.currentStyle[css_prop]; } return (css_val) ? css_val.toString().toLowerCase() : ''; } 
function elt_offset(el, elPar)   //nb: offsetTop/Left ignore la bordure des offsetParent
{
                                 var oBody = document.body, eP_scrollable=0;
                                 var yx = {y:0,x:0}; // offsets
        
        if( ! elPar ) elPar = oBody;

      // offset
         var eP = el; 
         while( eP && eP != elPar )
	 {
                if( elt_scrollMode(eP) ) eP_scrollable = eP;
                    yx.y += eP.offsetTop;
                    yx.x += eP.offsetLeft;   
                    //elt_offset__addBorders(yx, eP);
                eP = eP.offsetParent;
	 }
         //alert(yx.y);

         var elPar_squizzed = ( eP != elPar );

         var eP = el.parentNode;
         if( ! eP_scrollable ) // ou... pas de parent overflow=auto
         {
             while( eP &&  eP != elPar )
             {
                  if( elt_scrollMode(eP) )  // /!\ IE ne l'interprete pas ainsi si overflow=auto mais height non fixée...
                  {
                      eP_scrollable = eP;
                      //elt_offset__addBorders(yx, eP);
                  }
                  eP = eP.parentNode;
             }
         }
         if( elPar_squizzed && elPar != document.body )
         {
             elPar_YX = elt_offset(elPar);
                      yx.y -= elPar_YX.y - elt_css_num(elPar,'border-top-width');
                      yx.x -= elPar_YX.x - elt_css_num(elPar,'border-left-width');
         }

         if( eP_scrollable && elPar == oBody && eP_scrollable != elPar && eP_scrollable != el )
         {
             yx.y -= eP_scrollable.scrollTop;
             yx.x -= eP_scrollable.scrollLeft;
         }
         return yx;
}


function getParent(  el, tag ) // obligatoirement le parent
{
         return getPar( el.parentNode, tag );
}

function inText(el) {
                      var txt = el.innerText ; if( txt === undefined ) txt =  el.textContent;
                      return (txt)? txt.replace(/^\s+|\s+$/, '') : '';
}


function _Hide(Elements) { if (Elements) Elements.style.display = 'none'; }

function _Show(Elements) { if (Elements) Elements.style.display = ''; }

function _Scroll(Elements) { Elements.scrollTop = Elements.scrollHeight; }

function get_offsetXY(el, elPar)
{                                  var oBody = document.body;
                                   var el_0 = el;
	if( ! elPar ) elPar = oBody;
	if( elPar != oBody )
	{
	          var XY_P =  get_offsetXY( elPar );
	          var XY_E =  get_offsetXY( el );
	   return Array( XY_E[0] - XY_P[0] , XY_E[1] - XY_P[1] );
	 }
	 var offY=0; var offX=0;
      // offset
         while( el != elPar )
	 {
		offY += el.offsetTop;
		offX += el.offsetLeft;
                el = el.offsetParent;
	 }
      // body : margin
         if( el == oBody ) // -> + margin
         {   var mg;
                    if( (mg = el.style.marginLeft) && (mg = parseInt(mg)) && ! isNaN(mg) ) { offX += mg;  }
	            if( (mg = el.style.marginTop ) && (mg = parseInt(mg)) && ! isNaN(mg) ) { offY += mg;  }
         }
      // overflow:auto ?
         el = el_0;  var sY=0, sX=0;
         while( (el = el.parentNode) && el != elPar )
         {
                if( (sY = el.scrollTop) || (sX = el.scrollLeft) )
                {
                     if( sY ) offY -= sY;
                     if( sX ) offX -= sX;
                }
         }

         return Array(offX, offY);
}

function getParentDiv(elem, type) { var parent = elem; if (!parent || !parent.tagName) { return false; } while (parent.tagName != type) { parent = parent.parentNode; if (!parent || !parent.tagName) { return false; } } return parent; } 
function evt_SrcEl(e) // srcElement
{ return e.target || e.srcElement; } 
function getStyle(el, strCssRule)
{                                         var strValue = '';

	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(el, '').getPropertyValue(strCssRule);
	}
	else if(el.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){ return p1.toUpperCase();} );
		strValue = el.currentStyle[strCssRule];
	}
	return strValue;
}

function	InsertNode(el)
{
	
}

