
OBJ.eventAdd( window, 'load', AutoEditLoad );

var AutoEditTagName = '';
var AutoEditStyle = '';
var AutoEditPopupElement = ''; // élément source de la popup (pour le rafraichissement final)
var AutoEditPopupElementEdit = '';
var AutoEditPopupElementID = '';
var AutoEditPopupElementChamp = '';
var AutoEditPopupElementTempl = '';



function AutoEditLoad()
{
	var elms = document.getElementsByTagName('*');
	for( i=0;i<elms.length;i++)
		if( OBJ.classHas( elms[i], 'AutoEdit' ) )
		{
			AutoEditCreateElement( elms[i] );
		}
    AutoCheckTableLineInit();
    
    AutoDeployInit();
    
    AutoOngletsInit();
    
    AutoPlusElementInit();
    
    AutoCheckSelect();
    
    AutoActiveLink();
    
    AutoColor();
    
    SelectAutoBg();
    
    AutoDefile();
}

function AutoEditCreateElement( ele )
{
	OBJ.addAttr( ele,'title','Cliquez pour éditer ...');
	OBJ.eventAdd( ele, 'click', AutoEditClickElement );
	if( ele.innerHTML == '' )
		ele.innerHTML = 'Aucune information';
}

function AutoEditClickElement( event )
{
		AutoEditClick( event, 0 );
}
function AutoEditClickElementOut( event )
{
		AutoEditClick( event, 1 );
}

function AutoEditClick( event, set )
{
	//alert('test');
	var ele = FindTarget( event );
	
	var cls = ele.className.split(' ');
	
	var testEdit = new RegExp('Edit(.*)');
	var testID = new RegExp('ID([0-9]+)(.*)');
	var testTEMPL = new RegExp('TEMPL(.*)');
	
	var Edit = '';
	var ID = '';
	var Champ = '';
	var Templ = '';
	
	for(i=0;i<cls.length;i++)
	{
		if( testEdit.exec( cls[i] ) )
			Edit = RegExp.$1;
		if( testID.exec( cls[i] ) )
		{
			ID = RegExp.$1;
			Champ = RegExp.$2;
		}
		if( testTEMPL.exec( cls[i] ) )
			Templ = RegExp.$1;
	}
	
	if( !set )
	{
		AutoEditTagName = ele.tagName;
		AutoEditStyle = realStyle(ele);
	}
	
	if( Edit == 'Textarea' )
	{
		if( set )
			AutoEditTextAreaOut( ele, ID, Champ, Templ );
		else
			AutoEditTextArea( ele, ID, Champ, Templ );
	}
	if( Edit == 'Popup' )
	{
		if( set )
			AutoEditPopupOut( ele, ID, Champ, Templ );
		else
			AutoEditPopup( ele, ID, Champ, Templ );
	}
	
}
function AutoEditTextArea( ele, ID, Champ, Templ )
{
	var content = AjaxGet( '/ajaxform.php?AutoEdit='+Templ+'&mode=get&id='+ID+'&champ='+Champ );
		 
	var ta = OBJ.createEl('TEXTAREA');
	ta.value = content;
	
	ta.className = ele.className;
	copyComputedStyle( ele, ta );
	ta.style['borderWidth']='1px';
	ta.style['borderStyle']='inset';
	ta.style['borderColor']='#888';
	ta.style['backgroundColor']='#FFF';
	ta.style['height'] = 'auto';
	
	OBJ.addAttr( ta,'rows',5);
	
	OBJ.eventAdd( ta, 'blur', AutoEditClickElementOut );
	OBJ.eventAdd( ta, 'keyup', AutoEditTextAreaChange );
	
	AutoEditTextAreaChangeRun( ta );
	
	OBJ.insertAfter( ta, ele );
	ele.parentNode.removeChild( ele );
	ta.focus();
}
function AutoEditTextAreaChange( event )
{
	var ele = FindTarget( event );
	AutoEditTextAreaChangeRun( ele );
}
function AutoEditTextAreaChangeRun( ele )
{
	var n = ele.value.split("\n").length + 2;
	OBJ.addAttr(ele,'rows',n);
	//alert( ele.scrollHeight );
	//ele.style.height = (ele.scrollHeight + 20 ) + 'px';
}
function AutoEditTextAreaOut( ele, ID, Champ, Templ )
{
	var data = "val="+encodeURIComponent( ele.value );
	var newval = AjaxReturnPost( '/ajaxform.php?AutoEdit='+Templ+'&mode=set&id='+ID+'&champ='+Champ, data );
	
	var newbal = OBJ.createEl( AutoEditTagName );
	newbal.innerHTML = newval;
	
	newbal.className = ele.className;
	
	AutoEditCreateElement( newbal );
	
	OBJ.insertAfter( newbal, ele );
	ele.parentNode.removeChild( ele );
	
}


function AutoEditPopup( ele, ID, Champ, Templ )
{
	var popup = OBJ.createEl('DIV');
	OBJ.addAttr( popup, 'id', 'AutoEditMasque' );
	OBJ.addAttr( popup, 'style', 'position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.5);' );

	var html = "<div id='AutoEditPopup' style='background: white;margin: 100px auto;width:50%;height: 50%;padding: 5px;'>";
		html += "<div id='AutoEditPopupZone' style='display: block;border:1px solid green;height:90%;overflow:auto;'>";
		html += "<div id='AutoEditPopupInner'>";
		html += "<img src='/external/images/wait.gif' />";
		html += "</div>";
		html += "</div>";
		html += "<button onclick='AutoEditPopupOut();'>Ok</button>";
		html += "</div>";

	popup.innerHTML= html;
	document.getElementsByTagName('BODY')[0].appendChild( popup );
	
	AutoEditPopupElement = ele;
	AutoEditPopupElementID = ID;
	AutoEditPopupElementChamp = Champ;
	AutoEditPopupElementTempl = Templ;
	
	AjaxGet( '/ajaxform.php?AutoEdit='+Templ+'&mode=get&id='+ID+'&champ='+Champ, 'AutoEditPopupInner', 1 );
	
}

function AutoEditPopupOut( ele, ID, Champ, Templ )
{
	Del('AutoEditMasque');
	
	var data = AjaxReturn( '/ajaxform.php?AutoEdit='+AutoEditPopupElementTempl+'&mode=getval&id='+AutoEditPopupElementID+'&champ='+AutoEditPopupElementChamp );
	if( data == '' )
		data = 'Aucune information';
	AutoEditPopupElement.innerHTML = data;
	
	
}



var realStyle = function(_elem, _style) {
    var computedStyle;
    if ( typeof _elem.currentStyle != 'undefined' ) {
        computedStyle = _elem.currentStyle;
    } else {
        computedStyle = document.defaultView.getComputedStyle(_elem, null);
    }

    return _style ? computedStyle[_style] : computedStyle;
};

var copyComputedStyle = function(src, dest) {
    var style = realStyle(src);
	return setComputedStyle( dest, style );
};

var setComputedStyle = function( dest, style )
{
	var debug = '';
	for ( var i in style ) {
        // Do not use `hasOwnProperty`, nothing will get copied
        if ( typeof i == "string" && i != "cssText" && !/\d/.test(i) ) {
                // The try is for setter only properties
                try {
                        dest.style[i] = style[i];
						debug += i+":"+style[i]+"\n";
                        // `fontSize` comes before `font` If `font` is empty, `fontSize` gets
                        // overwritten.  So make sure to reset this property. (hackyhackhack)
                        // Other properties may need similar treatment
                        if ( i == "font" ) {
                                dest.style.fontSize = style.fontSize;
                        }
                } catch (e) {}
        }
    }
    return debug;
}





function AutoEditListesLoad()
{
	var elms = document.getElementsByTagName('*');
	for( var i=0;i<elms.length;i++)
	{
		if( OBJ.classHas( elms[i], 'AutoListePlus' ) )
		{
			AutoEditListesInit( elms[i] );
		}
		if( OBJ.classHas( elms[i], 'AutoCheckDisableChilds' ) )
		{
			if ( elms[i].checked && !elms[i].disabled )
				AutoEditCheckDisableChildsRun( elms[i] );
			OBJ.eventAdd( elms[i], 'change', AutoEditCheckDisableChilds );
		}
		if( OBJ.classHas( elms[i], 'AutoCheckChilds' ) )
		{
			if ( elms[i].checked && !elms[i].disabled )
				AutoEditCheckChildsRun( elms[i] );
			OBJ.eventAdd( elms[i], 'change', AutoEditCheckChilds );
		}
	}
}
function AutoEditListesInit( li )
{
	var n=0;
	var m=0;
	for( var j=0;j<li.childNodes.length;j++)
		if( li.childNodes[j].tagName=='UL' )
		{
			var sschecks =li.childNodes[j].getElementsByTagName('input');
			m=0;
			for(var k=0;k<sschecks.length;k++)
				if( sschecks[k].checked == true )
					m++;
			if( m == 0 ) // Vérifie si il n'y a pas un enfant avec un check activé ! si c'est le cas, on ne replie pas !
				li.childNodes[j].style.display='none';
			else
				li.childNodes[j].style.display='block';
			
			n++;
		}
	if( n > 0 )
	{
		var a = OBJ.createEl('A');
		a.innerHTML = ( m>0 ) ? '-' : '+';
		OBJ.eventAdd(a, 'click', AutoEditListesSwap ); 
		OBJ.insertTop( a , li );
	}
	OBJ.classRemove( li, 'AutoListePlus' ); // pour éviter d'être chargé plusieurs fois
}
function AutoEditListesSwap( event )
{
	var ele = FindTarget( event );
	var li = findParentTag( ele, 'LI',2 );
	for( j=0;j<li.childNodes.length;j++)
	{
		if( li.childNodes[j].tagName=='UL')
		{
			if( li.childNodes[j].style.display == 'block' )
			{
				li.childNodes[j].style.display='none';
				ele.innerHTML = '+';
			}
			else
			{
				li.childNodes[j].style.display='block';
				ele.innerHTML = '-';
			}
		}
	}
	
}

function AutoEditCheckDisableChilds( event )
{
	var ele = FindTarget( event );
	AutoEditCheckDisableChildsRun(ele );
}
function AutoEditCheckDisableChildsRun(ele )
{
	var li = findParentTag( ele, 'LI',2 );
	var val = ele.checked;
	if( ele.disabled == true )
		return; // si le controle et disabled ... pas d'action sur ces enfants ! 
	var checks = li.getElementsByTagName( 'input' );
	for( var i=0;i<checks.length; i++)
	{
		if( checks[i] != ele ) // pour ne pas griser le check en cours
		{
			if( ele.checked  )
			{
				checks[i].disabled=true;
				checks[i].checked=true;
			}
			else
			{
				checks[i].disabled=false;
				checks[i].checked=false;
			
			}
		}
	} 
	
	
}
function AutoEditCheckChilds( event )
{
	var ele = FindTarget( event );
	AutoEditCheckChildsRun(ele );
}
function AutoEditCheckChildsRun(ele )
{
	var li = findParentTag( ele, 'LI',2 );
	var val = ele.checked;
	var checks = li.getElementsByTagName( 'input' );
	for( var i=0;i<checks.length; i++)
	{
		if( checks[i] != ele ) // pour ne pas griser le check en cours
		{
			checks[i].checked=val;
		}
	} 
	
	
}




// PAS OPERATIONNEL COMPLETEMENT !!!
function AutoCheckTableLineInit()
{
	var els = document.getElementsByTagName('input');
	for( e in els )
	{
		if( OBJ.classHas( els[e], 'AutoCheckTableLine' ) )
			AutoCheckTableLineInitEle( els[e] );
	}
	
}
function AutoCheckTableLineInitEle( el )
{
	var tr = findParentTag( el,'TR',10 ); 
	if( tr )
	{
		OBJ.eventAdd( tr, 'click', AutoCheckTableLineClick );
		OBJ.eventAdd( el, 'click', AutoCheckTableLineClick );
	}
	
}
function AutoCheckTableLineClick( event )
{
	var ele = FindTarget( event );
	var ck = false;
	var tr = false;
	if( ele.tagName == 'INPUT' ) 
	{
		alert( 'clickA' );
	
		ck = ele;
		tr = findParentTag( ele,'TR',10 ); 
			// checke la ligne en fonction du input
		if( ck.checked )
			OBJ.classAdd( tr, 'LineChecked' );
		else
			OBJ.classRemove( tr, 'LineChecked' );
	}
	if( ele.tagName == 'TR' ) 
	{
		alert( 'clickB' );
	
		tr = ele;
		var inp = tr.document.getElementsByTagName('input');
		for( e in inp )
		{
			if( OBJ.classHas( inp[e], 'AutoCheckTableLine' ) )
				ck = inp[e];
		}
		// on inverse le checked 
		if( ck.checked == true )
		{
			OBJ.classRemove( tr, 'LineChecked' );
			ck.checked=false;
		}
		else
		{
			OBJ.classAdd( tr, 'LineChecked' );
			ck.checked=true;
		}
		
	}
	// ici, on a le check et le tr !
	
	
	
}






// Auto Deploy LI + FIELDSET
function AutoDeployInit()
{
	var els = document.getElementsByTagName('li');
	for( var e=0;e<els.length;e++ )
	{
		if( OBJ.classHas( els[e], 'AutoLIHideEmptyChilds' ) )
			AutoLIHideEmptyChildsInit( els[e] );
			
		if( OBJ.classHas( els[e], 'AutoLIDeploy' ) )
			AutoLIDeployInit( els[e] );

	}
	
	var els = document.getElementsByTagName('fieldset');
	for( var e=0;e<els.length;e++ )
	{
		if( OBJ.classHas( els[e], 'AutoFIELDDeploy' ) )
			AutoFIELDDeployInit( els[e] );

	}
	
}

// masque un li si il ne contient pas de ul avec 1 ou plusieurs li à l'intérieur
function AutoLIHideEmptyChildsInit( li )
{
	var nChilds = 0;
	var uls = li.getElementsByTagName('ul');
		
	if( uls.length > 0 )
	{	
		for( var e=0;e<uls.length;e++ )
		{
			var ssli = uls[e].getElementsByTagName('li');
			if( ssli )
				nChilds += ssli.length;
		}
	}
	if( nChilds == 0 )
	{
		li.style.display='none';
	}
}


// Ajoute un lien +/- sur les LIs pour afficher/masquer les ULs contenus
function AutoLIDeployInit( ul )
{
			
	if( ul.hasChildNodes() ) 
	{
		var titre = OBJ.getChildWithClass( ul, 'AutoLIDeployTitle');
		if( titre )
		{
			OBJ.eventAdd( titre,'click', AutoLIDeployClickEvent );
			var moins = OBJ.createEl('span');
			OBJ.classAdd( moins,'AutoLIDeployInfo');
			OBJ.insertTop(  moins, titre );
			
			titre.style.cursor='pointer';
			OBJ.addAttr( titre, 'deploy','1'); // par défaut
			moins.innerHTML = ' - ';
			var mustDeploy = 1; // défini si le bloc doit être déployé ou pas (par défaut : déployé)
			
			if( OBJ.getAttr( ul,'deploy') === '0' ) 
			{
					mustDeploy = 0; // demande de non déployage dans le code
			}
			
			var cookieName = OBJ.getAttr( ul, 'cookie'); // si on a uyn cookie et qu'il est vide, on simule le click pour cacher l'onglet
			if( cookieName )
			{
				var vCook = getCookie( 'AutoLIDeploy-'+cookieName );
				if( vCook !== false )
				{
					if(vCook == 0 ) // le cookie indique de ne plas déployer
						mustDeploy = 0;
					else
						mustDeploy = 1; //le cookie demande à laisser déployer
				}
			} 
			
			if( mustDeploy==0 )
				AutoLIDeployClick( titre ); // referme le bloc
			
						
		}
	}
}

function AutoLIDeployClickEvent( event )
{
	var titre = FindTarget(event);
	if( titre )
	{
		AutoLIDeployClick( titre );
	}
}

function AutoLIDeployClick( titre )
{
	
	var oldDeploy = OBJ.getAttr( titre, 'deploy' );
	
	// swappe les enfants
	var ul = findObjetParent( titre, 'AutoLIDeploy' );
	if( ul && ul.hasChildNodes() )
	{
	
		var enfants = ul.childNodes;
		for( var i=0;i<enfants.length;i++)
		{
			if( !OBJ.classHas(enfants[i], 'AutoLIDeployTitle' )
				&& enfants[i].style 
			  )// pour ne pas effacer le titre !!!
			{ 
				if( oldDeploy == 1 )
					enfants[i].style.display='none';
				else
					enfants[i].style.display='block';
			}
		}
		
	}
	
	// swappe le -/+
	var moins = OBJ.getChildWithClass( titre, 'AutoLIDeployInfo');
	var newDeploy = 0;
	if( oldDeploy == 1 )
	{
		OBJ.setAttr( titre, 'deploy', 0 );
		moins.innerHTML = ' + ';
	}
	else
	{
		OBJ.setAttr( titre, 'deploy', 1 );
		moins.innerHTML = ' - ';
		newDeploy = 1; // passe la valeur à 1 pour le cookie
	}
	
	// stocke le cookie si besion
	var cookieName = OBJ.getAttr( ul, 'cookie');
	if( cookieName )
	{
		setCookie( 'AutoLIDeploy-'+cookieName, newDeploy, 365 );
	}

}





// Ajoute un lien +/- sur les LIs pour afficher/masquer les ULs contenus
function AutoFIELDDeployInit( field )
{
	
	if( field.hasChildNodes() ) 
	{
		var titre = field.getElementsByTagName( 'legend' )[0];
		if( titre )
		{
			OBJ.eventAdd( titre,'click', AutoFIELDDeployClickEvent );
			var moins = OBJ.createEl('span');
			OBJ.classAdd( moins,'AutoFIELDDeployInfo');
			OBJ.insertTop(  moins, titre );
			
			titre.style.cursor='pointer';
			OBJ.addAttr( titre, 'deploy','1'); // par défaut
			moins.innerHTML = ' - ';
			
			var mustDeploy = 1; // défini si le bloc doit être déployé ou pas (par défaut : déployé)
			
			if( OBJ.getAttr( field,'deploy') === '0' ) 
			{
					mustDeploy = 0; // demande de non déployage dans le code
			}
			
			var cookieName = OBJ.getAttr( field, 'cookie'); // si on a uyn cookie et qu'il est vide, on simule le click pour cacher l'onglet
			if( cookieName )
			{
				var vCook = getCookie( 'AutoFIELDDeploy-'+cookieName );
				if( vCook !== false )
				{
					if(vCook == 0 ) // le cookie indique de ne plas déployer
						mustDeploy = 0;
					else
						mustDeploy = 1; //le cookie demande à laisser déployer
				}
			} 
			
			if( mustDeploy==0 )
				AutoFIELDDeployClick( titre ); // referme le bloc
			
		}
	}
}

function AutoFIELDDeployClickEvent( event )
{
	var titre = FindTarget(event);
	if( titre )
	{
		AutoFIELDDeployClick( titre );
	}
}

function AutoFIELDDeployClick( titre )
{
	
	var oldDeploy = OBJ.getAttr( titre, 'deploy' );
	
	// swappe les enfants
	var field = findObjetParent( titre, 'AutoFIELDDeploy' );
	if( field && field.hasChildNodes() )
	{
	
		var enfants = field.childNodes;
		for( var i=0;i<enfants.length;i++)
		{
			if( enfants[i].tagName != 'LEGEND' 
				&& enfants[i].style 
			  )// pour ne pas effacer le titre !!!
			{ 
				if( oldDeploy == 1 )
					enfants[i].style.display='none';
				else
					enfants[i].style.display='block';
			}
		}
		
	}
	
	// swappe le -/+
	var moins = OBJ.getChildWithClass( titre, 'AutoFIELDDeployInfo');
	var newDeploy = 0;
	if( oldDeploy == 1 )
	{
		OBJ.setAttr( titre, 'deploy', 0 );
		moins.innerHTML = ' + ';
		field.style.border='none';
	}
	else
	{
		OBJ.setAttr( titre, 'deploy', 1 );
		moins.innerHTML = ' - ';
		newDeploy = 1; // passe la valeur à 1 pour le cookie
		field.style.border='2px groove #888';
	}
	
	// stocke le cookie si besion
	var cookieName = OBJ.getAttr( field, 'cookie');
	if( cookieName )
	{
		setCookie( 'AutoFIELDDeploy-'+cookieName, newDeploy, 365 );
	}

}







// gère les éléments qui peuvent s'ajouter à volonté
var AutoPlusElementList = {};
var AutoPlusElementCount = 0;

function AutoPlusElementInit()
{
	var els = document.getElementsByTagName('*');
	for( var i=0;i<els.length;i++ )
	{
		if( OBJ.classHas( els[i], 'AutoPlusElement' ) )
		{
			var id = OBJ.getAttr(els[i], 'id'); // récupère l'id du modele
			var tmp = new AutoPlusElement( els[i] ); // génère le modèle et le bouton
			
			if( !id ) id = AutoPlusElementCount+1; // si pas d'id, on utilise le numéro
 			AutoPlusElementList[ id ] = tmp; // nomme l'élément si il dispose d'un ID
			AutoPlusElementCount++; // incrémente le compteur
		}
	}
}


function AutoPlusElement( el )
{
	
	var self = this; // pointeur sur l'instance pour les appels d'événements
	this.parent = null; // parent dans lequel on rajoute (parent direct de l'élément dupliqué)
	this.node = null; // contenu à dupliquer
	this.el = el; // élément à dupliquer
	this.plus = null; // bouton plus
	this.num = 0; // numéro pour les créations (remplace tous les #n# dans le modèle)
	this.length = 0; // nombre d'élements dans la liste (gère les + et les -)
	
	this.create = function()
	{
		this.parent = this.el.parentNode;
		this.node = this.el.cloneNode(true);
		
		var start;
		if( start = OBJ.getAttr(this.el,'start') ) // défini le point de départ des création par défaut 0
		{
			this.num = parseInt( start );
		}
		
		
		this.plus = OBJ.createEl( 'button','Ajouter un élément' );
		OBJ.classAdd( this.plus, 'AutoPlusButton' );
		//this.plus.href='#';
		
		OBJ.eventAdd( this.plus,'click', this.click );
		
		OBJ.insertAfter( this.plus, this.el );
		
		//this.el.style.display='none'; // efface l'élément de référence
		//this.el.innerHTML = '';
		el.parentNode.removeChild( el );
		
	}
	this.click = function( e )
	{
		e=e || event;
		e.preventDefault? e.preventDefault() : e.returnValue = false;
		
		self.add( {} );
		
		return false;
	}

	this.add = function( tab )
	{
		if( tab === false ) return false; // si aucune donnée trasmise (false), on kille
		var tmp = self.node.cloneNode(true);
		tmp.innerHTML = str_replace( tmp.innerHTML,'#n#', self.num++  );
		tmp.remove = function(){ var bloc = findObjetParent( this, 'AutoPlusElement');
								 if( bloc ) bloc.parentNode.removeChild( bloc ); 
								 self.length--; } // ajout de la fonctoin de suppression de l'élément
		var remove = OBJ.getChildWithClass( tmp, 'AutoPlusElementRemove') ;
		if( remove ) // ajoute l'événement sur le bouton/lien qui doit supprimer l'élément
			OBJ.eventAdd( remove, 'click', tmp.remove );
			
		self.parent.insertBefore( tmp, self.plus );
		FORM.autoValues( tmp, tab ); // rempli les champs avec les values existantes (on le fait après avoir insérer l'élément dans la page)
		//OBJ.insertAfter( tmp ,self.el );
		self.length++;
		return true; // tout c'est bien passé, on a ajouté l'élément
	}
	this.size = function()
	{
		return this.length;
	}
	this.create();
	
}





// AutoCheck select !!!
function AutoCheckSelect()
{
	var sel = document.getElementsByTagName('select');
	for( var i=0;i<sel.length;i++)
	{
		var check = OBJ.getAttr( sel[i], 'autocheck' );
		if( check !== false )
		{
			checkSelect( sel[i], check );
			/*	var options = sel[i].options;
				for( var j=0;j<options.length;j++)
				{
					if( options[j].value == check )
						options[j].selected=true;
					
				}
			*/
			
		}
	}
}

function checkSelect( select, val )
{
	var options = select.options;
	for( var j=0;j<options.length;j++)
	{
		if( options[j].value == val )
			options[j].selected=true;
	}
}





// AutoActiveLink
// rajoute une classe current sur le lien utilisant cette classe, si l'url en cours est celle du lien
function AutoActiveLink()
{
	var els = document.getElementsByTagName('a');
	for( var i=0;i<els.length;i++ )
	{
		if( OBJ.classHas( els[i], 'AutoCurrent' ) )
		{
			if( els[i].href == document.location.href )
				OBJ.classAdd( els[i], 'current' );
		}
		if( OBJ.classHas( els[i], 'AutoCurrentPage' ) )
		{
			if( extractUri(els[i].href) == extractUri(document.location.href) )
				OBJ.classAdd( els[i], 'current' );
		}
	}
}



// objet de gestion des selects JS
function SelectJS( uid, actif, data){

	var self = this; // pointeur sur l'instance pour les appels d'événements
	this.uid = uid;	
	this.actif = actif;
	this.actifLi = null; // objet actif
	this.actifSpan = null; // objet actif
	this.champ = null;
	this.masque = null; // masque sur le champ input
	this.divover = null;
	this.n = 0;
	this.lignes = [];
	
	
	this.create = function( data )
	{
		this.champ = document.getElementById( this.uid );
		this.champ.readOnly = true;
		this.divover = OBJ.createEl( 'DIV' );
		this.divover.style.display='none';
		OBJ.classAdd( this.divover, 'SelectJS' );
		OBJ.insertAfter( this.divover, this.champ );
		//OBJ.eventAdd( this.champ,'blur', this.blurChamp );
		//OBJ.eventAdd( this.divover,'mouseout', this.blurChamp );
		var ul = OBJ.createEl('UL');
		this.divover.appendChild( ul );
		this.addLigne( data, ul );
		
		var pos = findObjDim( this.champ );
		this.divover.style.top = pos.y+pos.h+'px';
		this.divover.style.left = pos.x+'px';
		this.divover.style.minWidth = pos.w+'px';
		
		this.masque = OBJ.createEl( 'INPUT' );
		OBJ.setAttr( this.masque, 'type', 'text' );
		this.masque.readOnly = true;
		OBJ.insertAfter( this.masque, this.champ );
		OBJ.eventAdd( this.masque,'click', this.clickChamp );
		
		OBJ.setAttr( this.champ, 'type', 'hidden' );
		
		this.setActif( this.actif );
		
	}
	this.addLigne = function( ligne, parent )
	{
		this.n ++;
		if( this.n > 10000 )
			return;
		var li = OBJ.createEl( 'LI' );
		
		var bouton = OBJ.createEl( 'SPAN' );
		li.appendChild( bouton );
		OBJ.classAdd( bouton, 'bouton');
		OBJ.addAttr( bouton, 'etat', 'plus' );
		OBJ.eventAdd( bouton, 'click', this.clickPlusMoins);
		bouton.innerHTML = '&nbsp;';
		
		var span = OBJ.createEl( 'SPAN', ligne.t );
		OBJ.classAdd( span, 'texte' );
		li.appendChild( span );
		this.lignes[ ligne.v ] = {'v':ligne.v, 't':ligne.t, 'li': li, 'span':span};
		OBJ.addAttr( span, 'v', ligne.v );
		OBJ.eventAdd( span,'click', this.clickLigne );
		OBJ.addAttr( span,'title', ligne.v );
		
		parent.appendChild(  li );
		if( ligne.e.length > 0 )
		{
			bouton.innerHTML = '+';
			var ul = OBJ.createEl( 'UL' );
			li.appendChild( ul );
			ul.style.display='none';
			for( var i=0;i<ligne.e.length;i++)
				this.addLigne( ligne.e[i], ul );
		}
	}
	
	this.clickChamp = function( event )
	{
		self.divover.style.display='block';
	}
	this.blurChamp = function( event )
	{
		self.divover.style.display='none';
	}
	this.clickLigne = function( event )
	{
		var span = FindTarget(event);
		var v = OBJ.getAttr( span, 'v' );
		self.blurChamp();
		self.setActif( v );
	}
	this.setActif = function( actif )
	{
		//OBJ.classRemove( self.actifLi, 'current' );
		//var li = self.lignes[ actif ].li;
		//OBJ.classAdd( li, 'current' );
		//self.actif = actif;
		//self.actifLi = li;
		OBJ.classRemove( self.actifSpan, 'current' );
		var span = self.lignes[ actif ].span;
		OBJ.classAdd( span, 'current' );
		self.actif = actif;
		self.actifSpan = span;
		
		self.champ.value= self.lignes[ actif ].v;
		self.masque.value= self.lignes[ actif ].t;
		
	}
	this.clickPlusMoins = function( event )
	{
		var bouton = FindTarget(event);
		var etat = OBJ.getAttr( bouton, 'etat' );
		
		var ul = bouton.parentNode.getElementsByTagName('UL')[0];
		if( etat == 'plus' )
		{
			ul.style.display='block';
			OBJ.setAttr(bouton,'etat','moins');
			bouton.innerHTML='-';
		}
		else
		{
			ul.style.display='none';
			OBJ.setAttr(bouton,'etat','plus');
			bouton.innerHTML='+';
		}
		
		
	}
	
	this.create( data );
	
}




/*
 * Auto Onglets
 * 2 solutions pour préselectionner un onglet :
 * - dans le div principal, mettre <div class='AutoOnglets' current="Numéro de l'onglet" >
 * - dans le div de l'onglet <div current='1' >
 * 
 */

var AutoOngletsListe = [];
function AutoOngletsInit()
{
	
	var els = document.getElementsByTagName('div');
	for( var i=0;i<els.length;i++ )
	{
		if( OBJ.classHas( els[i], 'AutoOnglets' ) )
		{
			var tmp = new AutoOngletBloc( els[i] );
			AutoOngletsListe.push( tmp );
			
		}
	}
}

// classe de gestion DES onglets
function AutoOngletBloc( div )
{
	this.lis = [];
	this.divs = [];
	this.onglets = [];
	this.initial = 1; // onglet sélectionné initialement
	
	this.init = function()
	{
		var cur = 1;
		for( var j=0; j<div.childNodes.length;j++)
		{
			if( div.childNodes[j].tagName == 'DIV' )
			{
				this.divs.push( div.childNodes[j] );
				cur = parseInt( OBJ.getAttr( div.childNodes[j], 'current' ) );
				if( cur > 0 )
					this.initial = this.divs.length;
			}
			if( div.childNodes[j].tagName == 'UL' )
			{
				for( var k=0;k<div.childNodes[j].childNodes.length;k++)
				{
					if( div.childNodes[j].childNodes[k].tagName == 'LI' )
						this.lis.push( div.childNodes[j].childNodes[k] );
				}
			}
		}
		
		for( var i=0;i<this.lis.length;i++)
		{
			if( this.divs[ i ] ) // on vérifie qu'il y ai bien un div associé à ce li
			{
				var tmp = new AutoOnglet( this, this.lis[i], this.divs[i], i ); // créé l'onglet
				this.onglets.push( tmp );
			}
		}
		cur = parseInt( OBJ.getAttr( div, 'current' ) );
		if( cur > 0 )
			this.initial = cur;
		this.select( this.initial );
	}
	this.select =function( n )
	{
		for( var i=0;i<this.onglets.length;i++) // on commence par cacher TOUS les divs
		{
			if( i == n-1 )
				this.onglets[i].show();
			else
				this.onglets[i].hide(); 
		}
	
	}
	
	
	this.init();
	

}
// classe pour 1 onglet
function AutoOnglet( bloc, li, div, n )
{
	var self=this;
	this.li = li;
	this.div = div;
	this.n = n+1; // numéro de l'onglet (commence à 1 pour la saisie humaine)
	this.bloc = bloc; // bloc d'onglets (parent)
	
	this.init = function()
	{
		OBJ.eventAdd( this.li,'click', this.click );
	}
	
	this.click = function( event )
	{
		self.bloc.select( self.n );
	}
	
	this.show = function()
	{
		OBJ.classAdd( li, 'current');
		div.style.display='block';
	}
	this.hide = function()
	{
		OBJ.classRemove( li, 'current');
		div.style.display='none';
	}
	
	this.init();
	
}




/*********
 * Permet de rajouter la classe 'current' sur le li parent de l'élément en cours.
 * Désactive par la même occasion tous les autres li du même niveau
 */
function setCurrentLi( el )
{
	//alert( el );
	var curli = findParentTag( el, 'LI',100 );
	//alert( curli );
	var lis = curli.parentNode.childNodes;
	for( var i=0;i<lis.length; i++)
		if( lis[i].tagName=='LI' )
			OBJ.classRemove( lis[i], 'current' );
	OBJ.classAdd( curli, 'current' );
}



function AutoColor()
{
	var els = document.getElementsByTagName('TR');
	var ret;
	for( var i=0; i<els.length;i++)
	{
		if( ret = OBJ.classHas( els[i], 'AutoColor_([0-9]+)_([0-9]+)_([0-9a-fA-F]+)_([0-9a-fA-f]+)' ) ) 
		{
			var val = ret[2];
			var max = ret[3];
			var mincolor = {'r': parseInt(ret[4].substr(0,2),16), 'v': parseInt(ret[4].substr(2,2),16), 'b': parseInt(ret[4].substr(4,2),16) };
			var maxcolor = {'r': parseInt(ret[5].substr(0,2),16), 'v': parseInt(ret[5].substr(2,2),16), 'b': parseInt(ret[5].substr(4,2),16) };
			
			var valcolor = {'r': Math.round( mincolor.r + (maxcolor.r-mincolor.r)/max * val) ,
							'v': Math.round( mincolor.v + (maxcolor.v-mincolor.v)/max * val) ,
							'b': Math.round( mincolor.b + (maxcolor.b-mincolor.b)/max * val) };
			
			
			if( OBJ.classHas(els[i],'n1') )
			{
				valcolor.r += 15;
				valcolor.v += 15;
				valcolor.b += 15;
			}
			var color = rvbToHex( valcolor );
			//alert( color );
			
			els[i].style.cssText = 'background: '+color+';';
			
			for( var j=0; j<els[i].childNodes.length;j++)
			{
				if( els[i].childNodes[j].tagName == 'TD' )
					els[i].childNodes[j].style.cssText = 'background: '+color+';';
			}
			
		}
		
	}
	
}



function SelectAutoBg()
{
	var els = document.getElementsByTagName('SELECT');
	for( var i=0; i<els.length;i++)
	{
		if( ret = OBJ.classHas( els[i], 'autobg' ) ) 
		{
				var options = els[i].options;
				for( var j=0;j<options.length;j++)
				{
					var bg = OBJ.getAttr( options[j], 'bg' );
					if( bg )
					{
						options[j].style.backgroundImage = 'url('+bg+')';
						options[j].style.backgroundRepeat = 'no-repeat';
					}
					
				}
				SelectAutoBgCheck( els[i] );
				OBJ.eventAdd( els[i], 'change', SelectAutoBgChange );
		
			
		}
	}
}
function SelectAutoBgChange( event )
{
	var option = FindTarget(event);
	
	SelectAutoBgCheck( findParentTag( option, 'SELECT',5 ) );
}
function SelectAutoBgCheck( select )
{
	var options = select.options;
	for( var j=0;j<options.length;j++)
	{
		if( options[j].selected )
		{
			var bg = OBJ.getAttr( options[j], 'bg' );
			if( bg )
			{
				select.style.backgroundImage = 'url('+bg+')';
				select.style.backgroundRepeat = 'no-repeat';
			}
		}
	}
}




var AutoDefileList = [];
var AutoDefileCount = 0;
function AutoDefile()
{
	var els = document.getElementsByTagName('DIV');
	for( var i=0;i<els.length;i++ )
	{
		if( OBJ.classHas( els[i], 'AutoDefile' ) )
		{
			
			AutoDefileList[ AutoDefileCount ] = AutoDefileInit( els[i],  AutoDefileCount );
			AutoDefileCount ++;
		}
	}
}
function AutoDefileInit( bloc, num )
{
	var time = parseInt( OBJ.getAttr( bloc, 'time' ) );
	if( !time )
		time = 3000;
	bloc.ADtime = time;	// intervale
	bloc.ADpos = 0; // position en cours 
	bloc.ADmax = bloc.getElementsByTagName('LI').length; // nombre total d'éléments
	
	bloc.ADnext = function()
	{
		this.ADpos++;
		if( this.ADpos >= this.ADmax )
			this.ADpos=0;
		this.ADview( this.ADpos );
	}
	bloc.ADview = function( n )
	{
		this.ADpos = n;
		var lis = this.getElementsByTagName('LI');
		for( var i=0;i<lis.length;i++)
		{
			if( i == n ) 
				lis[i].style.display='block';
		    else
				lis[i].style.display='none';
		}
	}
	bloc.ADinterval = setInterval( "AutoDefileList["+num+"].ADnext()", time);
	
	bloc.ADview(0);
	
	return bloc;
	
}

