function findParentForm(obj)
{	
	// Si l'élément lui même est une 'form'
	if(obj.tagName.toUpperCase() == "FORM")
	    return obj;
	
	// Trouver l'élément parent
	obj = obj.parentNode;	
	
	// Boucler tant que la 'form' parent n'est pas trouvée
    while(obj.tagName.toUpperCase() != "FORM")
	    if(obj.parentNode != null)
	        obj = obj.parentNode;
		else
		{
		    obj = null;
		    break;
		}
	
	// Retourner l'élément 'form'
	return obj;
}

function isEmpty(s){return ((s=='')||/^\s*$/.test(s));}

String.prototype.repeat = function(l)
{
	return new Array(l + 1).join(this);
};

function getElementsByClass(c) 
{
	var e = [];
	var r = [];
	var e = document.getElementsByTagName("*");

	for (var i=0, k=0; i<e.length; i++)
    { 	
		// Pour des classes multiples		
		var t = e[i].className.split(" ");		
		
		for(var j=0; j<t.length; j++)
			if (t[j] == c) 
			{
				r[k] = e[i];
				k++;
			}	
	}
	
	return r;
}

function toggleCheck(obj)
{
	var state = obj.checked;
	var f = findParentForm(obj);
	
	var e = f.getElementsByTagName('input');
	
	for(var i=0; i<e.length; i++)	
		if(e[i].type == "checkbox")
			if(e[i].id != obj.id)
				e[i].checked = state;	
}

function checkMarking(masterId, obj)
{
	var state = obj.checked;
	
	if(document.getElementById(masterId).checked && state == false)
		document.getElementById(masterId).checked = false;
	
	if(state)
	{
		var f = findParentForm(obj);
		var e = f.getElementsByTagName('input');
		var c = 0;
		var t = 0;
		
		for(var i=0; i<e.length; i++)	
			if(e[i].type == "checkbox")
			{
				if(e[i].id != masterId)
				{
					if(e[i].checked == true)
						c++;
						
					t++;
				}
				
			}
		
		if(c == t)
			document.getElementById(masterId).checked = true;
	}
}

function moveOptionElement(from, to)
{
	if(document.getElementById(from) == null || document.getElementById(to) == null)
		return
		
	var f = document.getElementById(from);
	var t = document.getElementById(to);
	
	if(f.options.length == 0)
		return;
	
	if(f.selectedIndex == -1)
		return;
		
	var option = document.createElement('option');
	option.text = f.options[f.selectedIndex].text;
	option.value = f.options[f.selectedIndex].value;	
	
	try
	{
		// Standard
		t.add(option, null); 
	}
	catch(ex)
	{
		// IE 
		t.add(option); 
	}
	
	f.remove(f.selectedIndex);
}

function charCount(obj, visualizer, limit)
{	
	if(document.getElementById(visualizer) == null)
		return;
	
	var visualizer = document.getElementById(visualizer);	
	var now = limit - obj.value.length;
	
	if(obj.value.length > limit)
	{
		obj.value = obj.value.substr(0, limit);
		visualizer.innerHTML = 0;
		return;
	}
	
	visualizer.innerHTML = now;
}

function copyToClipboard(s)
{
	if( window.clipboardData && clipboardData.setData )
	{
		clipboardData.setData("Text", s);
	}
	else
	{
		// You have to sign the code to enable this or allow the action in about:config by changing
		user_pref("signed.applets.codebase_principal_support", true);
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

		var clip = Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;

		// create a transferable
		var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;

		// specify the data we wish to handle. Plaintext in this case.
		trans.addDataFlavor('text/unicode');

		// To get the data from the transferable we need two new objects
		var str = new Object();
		var len = new Object();

		var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);

		var copytext=meintext;

		str.data=copytext;

		trans.setTransferData("text/unicode",str,copytext.length*[[[[2]]]]);

		var clipid=Components.interfaces.nsIClipboard;

		if (!clip) return false;

		clip.setData(trans,null,clipid.kGlobalClipboard);	   
	}
}

function changeElementValue(id, val, submitAfter)
{
	if(document.getElementById(id) == null)
		return;
	
	if(document.getElementById(val) == null)
		var v = val;
	else
		var v = document.getElementById(val);
		
	var e = document.getElementById(id);
			
	if(e.value == null)
	{
		if(v.value == null)
			e.innerHTML = v.innerHTML;
		else
			e.innerHTML = v.value;
	}
	else
	{
		if(v.value == null)
			e.value = v.innerHTML;
		else
			e.value = v.value;		
	}
	
	if(submitAfter)
	{
		var f = findParentForm(e);
		f.submit();
	}
}

function selectAllOptions(id)
{
	if(document.getElementById(id) == null)
	    return;
		
	var selObj = document.getElementById(id);
	for (var i=0; i<selObj.options.length; i++) 	
		selObj.options[i].selected = true;	
}

function copySelectObject(obj)
{
	// Limite d'élément (selon le nombre d'options)
	var limit  = obj.options.length - 1; 
	
	// Nombre de copies déjà présente
	var nbElement = 0;
	for(var i=0; i<obj.parentNode.childNodes.length; i++)	
		if(obj.parentNode.childNodes[i].tagName != null)		
			if(obj.parentNode.childNodes[i].tagName.toUpperCase() == "SELECT")
				nbElement++;		
	
	// Valider la suite
	if(nbElement == limit)
		return;
	
	var br     = document.createElement("br");
	var select = document.createElement("select");
	select.className = obj.className;
	select.name = obj.name;
	select.onchange = function(){ copySelectObject(this) };
	
	for(var i=0; i<obj.options.length; i++)
	{ 
		var opt   = document.createElement("option");
		opt.text  = obj.options[i].text; 
		opt.value = obj.options[i].value;
		
		select.options[i] = opt;
	}
	
	obj.parentNode.appendChild(br);
	obj.parentNode.appendChild(select);
}

function exist(id)
{
	if(document.getElementById(id) != null)
		return true;
	else
		return false;
}

function removeAllChild(e)
{	
	while (e.firstChild) 	
		e.removeChild(e.firstChild);	
}

function generateDomList(array)
{
	var ul = document.createElement("ul");
	
	for(var i=0; i<array.length; i++)
	{
		// Créer les éléments
		var li = document.createElement("li");
		var tx = document.createTextNode(array[i]);
		
		// Assigner < la liste
		li.appendChild(tx);
		ul.appendChild(li);
	}
	
	return ul;
}

function getInnerHTML(obj)
{
	return obj.innerHTML;
}

function countChildElements(parent_obj, child_tag)
{
	return (parent_obj.getElementsByTagName(child_tag).length);			
}







