﻿/* <?php header("Content-Type: text/javascript");?>
domtools.js by Artwaï, http://www.artwai.com/ */
/* js released under Creative Commons License - http://creativecommons.org/licenses/by-sa/2.5/  */
/* Created: February 20th, 2006 */
/* Updated: July 22th, 2006 */

var domtools = {

	insertAdjacentHTML : function (domElement, sWhere, sHTML) 
	{
		if( domElement.insertAdjacentHTML )
		{
			domElement.insertAdjacentHTML(sWhere, sHTML);
		}
		else if(document.createRange)
		{
			var df;	// : DocumentFragment
			var r = domElement.ownerDocument.createRange();
			
			switch (String(sWhere).toLowerCase()) {
				case "beforebegin":
					r.setStartBefore(domElement);
					df = r.createContextualFragment(sHTML);
					domElement.parentNode.insertBefore(df, domElement);
					break;
					
				case "afterbegin":
					r.selectNodeContents(domElement);
					r.collapse(true);
					df = r.createContextualFragment(sHTML);
					domElement.insertBefore(df, domElement.firstChild);
					break;
					
				case "beforeend":
					r.selectNodeContents(domElement);
					r.collapse(false);
					df = r.createContextualFragment(sHTML);
					domElement.appendChild(df);
					break;
					
				case "afterend":
					r.setStartAfter(domElement);
					df = r.createContextualFragment(sHTML);
					domElement.parentNode.insertBefore(df, domElement.nextSibling);
					break;
			}	
		}

	},
	
	//-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
	// 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 : null
};
