var domtools = {
	
	//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
	// regroupement des méthodes de gestion des events cross-browser
	event : {
		
		//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
		addListener : function (domElement, type, listener)
        {
  			if( domElement.addEventListener )
			{
				domElement.addEventListener(type,listener,false);
			}
			else if( domElement.attachEvent )
			{
				// Encapsulation du listener par un autre 
				// pour avoir un comportement standard
				domElement["e"+type+listener] = listener;
				domElement[type+listener] = function ()
				{
					// ajouter ci-dessous les proprietés et méthodes
					// standards au fur et à mesure des besoins.
					var e = window.event;
					
					e.target = e.srcElement;
					
					e.preventDefault = function ()
					{
						this.returnValue=false;
					}
					
					domElement["e"+type+listener](e);
				};
				domElement.attachEvent("on"+type,domElement[type+listener]);
			}
        },
  
		//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
		removeListener : function (domElement, type, listener)
		{
			if( domElement.removeEventListener )
			{
				domElement.removeEventListener(type,listener,false);
			}
			else if( domElement.detachEvent )
			{
				if( domElement[type+listener] )
				{
					domElement.detachEvent("on"+type,domElement[type+listener]);
					domElement[type+listener] = null;
				}
			}
        },

		//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
		fireEvent : function (domElement, type)
		{
			if (document.createEvent)
			{
				var evt = document.createEvent("Events");
				evt.initEvent(type, true, true);
				domElement.dispatchEvent(evt);
			} 
			else if (document.createEventObject) 
			{
				var evt = document.createEventObject();
				domElement.fireEvent('on' + type, evt);
			}
		}
	},
	
	//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
	// regroupement des méthodes sur le className des élements
	className : {

		//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
		// is determine si un élément e est de class cn
		is : function (e, cn) 
		{
			var s = e.className;
			var p = s.split(" ");
			var l = p.length;
			for (var i = 0; i < l; i++) 
			{
				if (p[i] == cn) return true;
			}
			return false;
		},
		
		//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
		// add ajoute la classe cn à un élément e si elle n'y est pas déjà.
		add : function (e, cn) 
		{
			if( ! this.is(e, cn)  )
			{
				e.className += " " + cn;
			}
		},
	
		//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
		// remove enlève la classe cn de l'élément e.
		remove : function (e, cn) 
		{
			var s = e.className;
			var p = s.split(" ");
			var np = [];
			var l = p.length;
			var j = 0;
			for (var i = 0; i < l; i++) 
			{
				if (p[i] != cn) np[j++] = p[i];
			}
			e.className = np.join(" ");
		}
	},

	//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
	nop : function(){}
};