function hasClassName(element, pClassName)
{
	var reg = new RegExp("(^| )"+pClassName+"( |$)", "i");
	return element && element.className && reg.test(element.className);
}
function addClassName(element, pClassName)
{
	if (element && !hasClassName(element, pClassName))
	{
		if (!element.className)
		{
			element.className = pClassName;
		}
		else
		{
			element.className = (element.className+" "+pClassName).replace(/ +/," ");
		}
	}
}
function removeClassName(element, pClassName)
{
	if (hasClassName(element, pClassName))
	{
		var reg = new RegExp("(^| )"+pClassName+"( |$)", "ig");
		element.className = element.className.replace(reg," ");
	}
}

function $(element)
{
	if (typeof element == 'string')
	{
		element = document.getElementById(element);
	}
	return element;
}

function getElementStyle(element, style)
{
	element = $(element);
	style = style.camelize();
	var value = element.style[style];
	if (!value)
	{
		if (document.defaultView && document.defaultView.getComputedStyle)
		{
			var css = document.defaultView.getComputedStyle(element, null);
			value = css ? css[style] : null;
		}
		else if (element.currentStyle)
			value = element.currentStyle[style];
	}
	return parseInt(value.match(/^-?[0-9]*/));
}

String.prototype.trim = function() {
	var trimed = this.replace(/^\s+/,"");
	return trimed.replace(/\s+$/,"");
}
String.prototype.camelize = function() {
	var parts = this.split('-'), len = parts.length;
	if (len == 1) return parts[0];

	var camelized = this.charAt(0) == '-'
		? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
		: parts[0];

	for (var i = 1; i < len; i++)
		camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

	return camelized;
}

Array.prototype.containsValue = function(value)
{
	for (var i = 0; i < this.length; i++)
		if (this[i] == value)
			return true
	return false;
}

function addEvent(element, event, func, param)
{
	param_FF = param ? true : false;
	if (event == "DOMContentLoaded") {
		if(document.addEventListener)
			document.addEventListener("DOMContentLoaded", func, param_FF);
		else
			addEvent.DOMContentLoadedFunctions[addEvent.DOMContentLoadedFunctions.length] = func;
	} else if (element.addEventListener){
		element.addEventListener(event, func, param_FF);
//	} else if (element.attachEvent) {
//		element.attachEvent('on'+event, func);
	} else {
		// assign each event handler a unique ID
		if (!func.$$guid) func.$$guid = addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[event];
		if (!handlers) {
			handlers = element.events[event] = {};
			// store the existing event handler (if there is one)
			if (element["on" + event]) {
				handlers[0] = element["on" + event];
			}
		}
		// store the event handler in the hash table
		handlers[func.$$guid] = func;
		// assign a global event handler to do all the work
		element["on" + event] = addEvent.handleEvent;
	}
}
function removeEvent(element, event, func)
{
	if (element.removeEventListener)
		element.removeEventListener(event, func, false);
	else if (element.events && element.events[event] && func.$$guid)
		delete element.events[event][func.$$guid];
}
addEvent.guid = 1;
addEvent.DOMContentLoadedInitDone = false;
addEvent.DOMContentLoadedFunctions = [];
addEvent.handleEvent = function (event)
{
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || addEvent.fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
}

addEvent.fixEvent = function (event) {
	// add W3C standard event methods
	event.preventDefault = addEvent.fixEvent.preventDefault;
	event.stopPropagation = addEvent.fixEvent.stopPropagation;
	return event;
};
addEvent.fixEvent.preventDefault = function() {
	this.returnValue = false;
};
addEvent.fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};

function DOMContentLoadedScheduler() {
	if (addEvent.DOMContentLoadedInitDone) return true;

	if(/KHTML|WebKit/i.test(navigator.userAgent)) {
		if(/loaded|complete/.test(document.readyState)) {
			fireDOMContentLoaded();
		} else {
			setTimeout(DOMContentLoadedScheduler, 250);
		}
	}

	return true;
}

function fireDOMContentLoaded() {
	if (addEvent.DOMContentLoadedInitDone) return;

	addEvent.DOMContentLoadedInitDone = true;
	for (var i = 0; i < addEvent.DOMContentLoadedFunctions.length; i++)
		addEvent.DOMContentLoadedFunctions[i]();
}
// Schedule to run the init function.
setTimeout(DOMContentLoadedScheduler, 250);

// Just in case window.onload happens first, add it there too.
addEvent(window, "load", fireDOMContentLoaded);

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
	document.write("<script id='__ie_onload' defer src=\"//:\"><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			fireDOMContentLoaded(); // call the onload handler
		}
	};
/*@end @*/


function stopEvent(event)
{
	if (!event)
		event=window.event;
	if (event.stopPropagation)
		event.stopPropagation();
	event.cancelBubble = true;
}

function getTarget(evt) {
	var targ;
	if (!evt) evt = window.event;
	if (evt.target) targ = evt.target;
	else if (evt.srcElement) targ = evt.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	return targ;
}

function getWindowDimensions(fenetre)
{
	var myWidth = 0, myHeight = 0;
	if( typeof( fenetre.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = fenetre.innerWidth;
		myHeight = fenetre.innerHeight;
	} else if( fenetre.document.documentElement && ( fenetre.document.documentElement.clientWidth || fenetre.document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = fenetre.document.documentElement.clientWidth;
		myHeight = fenetre.document.documentElement.clientHeight;
	} else if( fenetre.document.body && ( fenetre.document.body.clientWidth || fenetre.document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = fenetre.document.body.clientWidth;
		myHeight = fenetre.document.body.clientHeight;
	}
	var myLeft = 0, myTop = 0;
	if (fenetre.left) {
		myLeft = fenetre.left;
		myTop = fenetre.top;
	} else if (fenetre.screenX)
	{
		myLeft = fenetre.screenX;
		myTop = fenetre.screenY+(fenetre.outerHeight-fenetre.innerHeight)/2;
	} else if (fenetre.screenLeft)
	{
		myLeft = fenetre.screenLeft;
		myTop = fenetre.screenTop;
	}
	return {width: myWidth, height: myHeight, left: myLeft, top: myTop};
}
function cancelOrConfirm(message, yesfunc, nofunc, cancelfunc, yesLabel, noLabel, cancelLabel, title)
{
	return open_window('cancel_or_confirm.htm', 350, 130, {
					message: {innerHTML: message},
					title: title,
					yes: {onclick: yesfunc, innerHTML: yesLabel},
					no: {onclick: nofunc, innerHTML: noLabel},
					cancel: {onclick: cancelfunc, innerHTML: cancelLabel}
				});
}
function waitLoading2(message, title)
{
	return open_window('Provider/message_popup.htm', 350, 110, {message: {innerHTML: message}, title: title});
}
function open_window(popupSrc, popupW, popupH, options)
{
	var popup = call_window(popupSrc, popupW, popupH);
	var onpopupload = function(){
		if (popup.isLoaded)
		{
			for (var elt in options)
				if (elt == 'title')
					popup.document.title = options[elt];
				else
					for (var attr in options[elt])
						popup.document.getElementById(elt)[attr] = options[elt][attr];
		}
		else
			window.setTimeout(onpopupload, 100);
	}
	window.setTimeout(onpopupload, 100);
	return popup;
}
function call_window(popupSrc, popupW, popupH, options)
{
	var popupOptions = "";
	for (var opt in call_window.default_options) {
		if (options && options[opt])
			popupOptions += opt+"="+options[opt]+",";
		else
			popupOptions += opt+"="+call_window.default_options[opt]+",";
	}

	var windowDims = getWindowDimensions(window);
	var popupL = windowDims.left + (windowDims.width - popupW)/2;
	var popupT = windowDims.top + (windowDims.height - popupH)/2;
	return window.open(popupSrc,'_blank',popupOptions+'height='+popupH+',width='+popupW+',left='+popupL+',top='+popupT);
}
call_window.default_options = {'dependent':'yes','resizable':'no','scrollbars':'no','menubar':'no','location':'no','status':'no','toolbar':'no','hotkeys':'no'};
// MEL 21-12-2007 -- Fonctions pour remplissage d'un select à partir du contenu d'un autre.
// Bonnes fêtes :)

function remplirChild_DoubleSelect(value,select2)
{
  	var Text_Select2  = Vecteur_text[value];
	var Value_Select2 = Vecteur_value[value];
    select2.options.length = Text_Select2.length;
    for (i=0; i<Text_Select2.length; i++)
    {
		select2.options[i].value = Value_Select2[i];
		select2.options[i].text = Text_Select2[i];
    }
    select2.options.selectedIndex = 0;

	// Fix IE6 bug...
	select2.style.display='none';
	select2.style.display='';
}

function Is_Empty_Group(value,select2)
{
  	var Text_Select2  = Vecteur_text[value];
	var Value_Select2 = Vecteur_value[value];
    select2.options.length = Text_Select2.length;
    if(Text_Select2.length==1){
    return(true);
    }
    else{
    return(false);
    }
}

function remplirChild_DoubleSelect2bis(mytt,select2,mytt2)
  {
 // var Text_Select2  = Vecteur_text[value];
  //var Value_Select2 = Vecteur_value[value];
    //for( l=0; l<select2.options.length;l++){
     // select2.removeChild(select2.options[l]);
   // }
   if(mytt.length>0)
       select2.length = mytt.length;
    else
       select2.length = 1;
   var tt = select2.options.length;
   if(mytt.length >0){
	    for (i=0; i<mytt.length; i++)
	    { //alert(mytt.length);
        if(i < tt) {
//	       select2.appendChild(option);
	      select2.options[i].value = mytt2[i];
	      select2.options[i].text = mytt[i];

	      //select2.options.selectedIndex = 0;
	   } else {
			select2.innerHTML = select2.innerHTML + '<option value="' + mytt2[i] + '">' + mytt[i] + '</option>';
	    }
	     select2.disabled = false;
	   }
    }else{
       select2.options[0].value = "";
	   select2.options[0].text = "Pas de groupe";
	   select2.length = 1;
	   //select2.disabled = true;
    }

		// Fix IE6 bug...
		select2.style.display='none';
		select2.style.display='';
    }

// FIN - MEL 21-12-2007 -- Fonctions pour remplissage d'un select à partir du contenu d'un autre.

// MEL 15-01-2008 -- Fonction permettant de connaître la position d'un objet
//par rapport au bord gauche de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
function getLeft(MyObject)
    {
    if (MyObject.offsetParent)
        return (MyObject.offsetLeft + getLeft(MyObject.offsetParent));
    else
        return (MyObject.offsetLeft);
    }
//Fonction permettant de connaître la position d'un objet
//par rapport au bord haut de la page.
//Cet objet peut être à l'intérieur d'un autre objet.
function getTop(MyObject)
    {
    if (MyObject.offsetParent)
        return (MyObject.offsetTop + getTop(MyObject.offsetParent));
    else
        return (MyObject.offsetTop);
    }
// FIN - MEL 15-01-2008

var form_management = {
	fillSelect : function (selectElt, fromTable, selected, none) {
		var noneLabel;
		var noneValue;
		if (typeof (none) == "string") {
			noneLabel = none;
			noneValue = '';
		}
		else if (typeof (none) != "undefined") {
			noneLabel = none.label;
			noneValue = none.value;
		}
		if (typeof (noneValue) != "undefined") {
			var optionNone = document.createElement('option');
			optionNone.setAttribute("value", noneValue);
			optionNone.appendChild(document.createTextNode(noneLabel));
			selectElt.appendChild(optionNone);
		}
		for (var elt in fromTable)
		{
			var optionElt = document.createElement('option');
			optionElt.setAttribute("value", elt);

			optionElt.appendChild(document.createTextNode(fromTable[elt]));
			if (selected == elt)
				optionElt.selected = true;

			selectElt.appendChild(optionElt);
		}
		// Fix IE6 bug...
		selectElt.style.display='none';
		selectElt.style.display='';
	}
}

// Ensemble de fonctions déstinées à afficher des infobulles

	function GetId(id)
	{
		return document.getElementById(id);
	}

	function move(e)
	{
	  if(testi==true)
	  {
	    if (navigator.appName!="Microsoft Internet Explorer")
		{
	    	GetId("id_div_infobulle").style.left=e.pageX - 120+"px";
	    	GetId("id_div_infobulle").style.top=e.pageY - 210+"px";
	    }
	    else
		{
	    	if(document.documentElement.clientWidth>0)
			{
				GetId("id_div_infobulle").style.left=20+event.x+document.documentElement.scrollLeft+"px";
				GetId("id_div_infobulle").style.top=10+event.y+document.documentElement.scrollTop+"px";
	    	}
			else
			{
				GetId("id_div_infobulle").style.left=20+event.x+document.body.scrollLeft+"px";
				GetId("id_div_infobulle").style.top=10+event.y+document.body.scrollTop+"px";
	        }
	    }
	  }
	}

	function montre(text) {
	  if(testi==false) {
		  GetId("id_div_infobulle").innerHTML = text;
		  GetId("id_div_infobulle").style.visibility="visible";
		  testi=true;
	  }
	}

	function cache() {
		if(testi==true) {
			GetId("id_div_infobulle").innerHTML = '';
			GetId("id_div_infobulle").style.visibility="hidden";
			testi=false;
		}
	}

// FIN Ensemble de fonctions déstinées à afficher des infobulles


