/**
* Objet Dom
*
* Permet d'encapsuler le Dom
* et offre quelques methodes utiles
*
* <script>
*/

function Dom()
{
	
	/**
	* Construit un Element
	*
	* @param String 	Le type
	* @param Array 		Les attributs, chaque case a la forme "nom=>val"
	* @param Array	 	Les evenements, chaque case a la forme "nom=>fonction"
	* @return Element 	L'Element
	*/
	this.newElement = function(type,attribs,events){
		elem = document.createElement(type);
		
		if(attribs != null)
		{
			for(i=0;i<attribs.length;i++)
			{
				tab = attribs[i].split("=>");
				att = tab[0];
				val = tab[1];
				elem.setAttribute(att,val);
			}
		}
			
		if(events != null)
		{
			for(i=0;i<events.length;i++)
			{
				tab = events[i].split("=>");
				evt = tab[0];
				val = tab[1];
				
				eval("elem."+evt+"="+val);
			}
		}
		return elem;
	}
	
	/**
	* Construit un TextNode
	*
	* @param String 	Le texte
	* @return TextNode 	Le TxtNode
	*/
	this.textNode = function(msg){
		return document.createTextNode(msg);
	}

	this.removeAllChilds = function(elem){
		while(elem.childNodes.length > 0)
			elem.removeChild(elem.firstChild);
	}
	
	this.addElemTo = function(elem,parentId){
		document.getElementById(parentId).appendChild(elem);
		
	}
	
	/**
	* Ajoute un fils
	*
	* @param Object le parent
	* @param Object le fils
	*/
	this.addChild = function(par,enf){
		if(enf.childNodes.length > 0){
			
			//if(enf.parentNode)
				//alert("recurse de "+enf.nodeName+" enfants:"+enf.childNodes.length+" parent:"+enf.parentNode.nodeName);
			var tmpe = new Array();
			
			while(enf.childNodes.length > 0){
				var elem = enf.removeChild(enf.firstChild);
				
				//alert("array push de "+elem.nodeName+" ("+elem.childNodes.length+") enfants");
				tmpe.push(elem);
			}
			if(enf.parentNode){
				var epar = enf.parentNode;
				var el = epar.removeChild(enf);
				par.appendChild(this.clone(el));
			}
			else
				par.appendChild(this.clone(enf));
			var cmpt=0;
			while(tmpe.length>0){//for(i=0;i<tmpe.length;i++){//
				//alert("vidage du temp "+cmpt);
				this.addChild(par.lastChild,tmpe.shift());
				//alert("retour cmpt="+cmpt+" tab length="+tmpe.length);
				cmpt++;
			}
		}
		else{
	    	if(par.nodeName == "SCRIPT" && document.all){
				par.text = enf.nodeValue;
			}
			else
			par.appendChild(this.clone(enf));
			
		}
	}
	
	this.clone = function(elem){
		
		if(elem.nodeName == "#text"){
			if(document.all){
				return document.createTextNode(elem.nodeValue);
			}
			else{
				var gr = document.createElement("div");
				gr.innerHTML = elem.nodeValue;
				
//				alert(gr.innerHTML);
				return document.createTextNode(gr.innerHTML);
			}
		}
		var c;
		if(document.all){
			var curr,flag = false ;
			for(var i=0;i<elem.attributes.length;i++){
				curr = elem.attributes[i];
				if(curr.name == "name"){
					flag = true;
					break;
				}
			}
			if(flag)
				c = document.createElement("<"+elem.nodeName+" name='"+curr.value+"'>");
			else
				c = document.createElement(elem.nodeName);
		}
		else
			c = document.createElement(elem.nodeName);
		//alert(elem.attributes.length);
		//alert(c.name);
		if(elem.attributes.length > 0){
			for(var i=0;i<elem.attributes.length;i++){
				var curr = elem.attributes[i];
				//alert("av");
				c.setAttribute(curr.name,curr.value);	
				//alert("ap");
			}
		}
		//alert(elem.nodeName);
		return c;
	}
	
	this.nearMouse = function(elem,e){
		if(!e) e=window.event;
		domdrag = new Mover();
		elem.style.position	= "absolute";
		domdrag.move(elem,e);
	}

	/**
	* Centre un element dans la page
	*
	* @param Element l'element
	*/
	this.centerElement = function(elem){
		elem.style.position = "absolute";
		elem.style.zIndex = "90000000";
		
		var scw,sch,sl,st;
		
		if (self.innerHeight) 
		{
			//MOZILLA
			scw = self.innerWidth;
			sch = self.innerHeight;
			sl = self.pageXOffset;
			st = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
		{
			scw = document.documentElement.clientWidth;
			sch = document.documentElement.clientHeight;
			sl = document.documentElement.scrollLeft;
			st = document.documentElement.scrollTop;
		}
		else if (document.body) 
		{
			// IE
			scw = document.body.clientWidth;
			sch = document.body.clientHeight;
			sl = document.body.scrollLeft;
			st = document.body.scrollTop;
		}
		elem.style.left = (scw-elem.clientWidth)/2 + sl + "px";
		elem.style.top    = (sch-elem.clientHeight)/2 + st +"px";
	}
	
	this.calc = function(){
		if (self.innerHeight) 
		{
			this.screenWidth = self.innerWidth;
			this.screenHeight = self.innerHeight;
			this.screenLeft = self.pageXOffset;
			this.screenTop = self.pageYOffset;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
		{
			this.screenWidth = document.documentElement.clientWidth;
			this.screenHeight = document.documentElement.clientHeight;
			this.screenLeft = document.documentElement.scrollLeft;
			this.screenTop = document.documentElement.scrollTop;
		}
		else if (document.body) 
		{
			this.screenWidth = document.body.clientWidth;
			this.screenHeight = document.body.clientHeight;
			this.screenLeft = document.body.scrollLeft;
			this.screenTop = document.body.scrollTop;
		}
	}
	
	this.getScreenWidth = function(){
		return this.screenWidth;	
	}
	
	this.calc();
}