var NOE_ie=document.all
var NOE_ns6=document.getElementById&&!document.all
var NOE_d;
var NOE_docker; //container cible
var NOE_input, input2; //input1 est l'input cible, input2 l'input au temps 0


var NOE_ELEMENT_DEPLACABLE;
var NOE_ELEMENT_DEPLACABLE_offsetX;
var NOE_ELEMENT_DEPLACABLE_offsetY;
var mouse;


//=======================déplacement d'objet
function NOE_moveElement(obj, e)
{
	mouse=(NOE_ns6)?e: event;
	NOE_ELEMENT_DEPLACABLE=obj;

	NOE_ELEMENT_DEPLACABLE_offsetX=mouse.clientX+document.body.scrollLeft-NOE_formatPx(obj.style.left);
	NOE_ELEMENT_DEPLACABLE_offsetY=mouse.clientY+document.body.scrollTop-NOE_formatPx(obj.style.top);

	document.onmousemove=function ()
	{
		NOE_ELEMENT_DEPLACABLE.style.top=mouse.clientY+document.body.scrollTop-NOE_ELEMENT_DEPLACABLE_offsetY;
		NOE_ELEMENT_DEPLACABLE.style.left=mouse.clientX+document.body.scrollLeft-NOE_ELEMENT_DEPLACABLE_offsetX;
		return false;
	}

	document.onmouseup=function()
	{
		document.onmousemove=function NOE_dragDragger(e)
		{
			NOE_d=document.getElementById("dragger");
			mouse=(NOE_ns6)?e: event;
			NOE_d.style.top=mouse.clientY+5+document.body.scrollTop;
			NOE_d.style.left=mouse.clientX+1+document.body.scrollLeft;
			NOE_setAlpha(NOE_d, 100);
			NOE_d.style.zIndex=NOE_ZINDEX_DRAG_UNDER;
			if(NOE_lastDocker)
				return false;
		}
		document.onmouseup=NOE_dock;

	}
	return false;
}



/*Note
les container doivent tous être plus petits ou égal que le plus petit élément déplaçable

Les éléments container doivent gérer cet événement
	onMouseOver="setDock(event, 'idInput')"

les objets déplaçables
	onMouseDown="grab(event)"
*/

//configuration du script
var NOE_INVERT_ELEMENT=true;
var NOE_ZINDEX_DRAG_UNDER=10;
var NOE_ZINDEX_DRAG_OVER=9999;


//supprime le [0-9]*px de la fin d'un chaine
function NOE_formatPx(chaine)
{
	if(chaine.substr(chaine.length-1,chaine.length)=="%")
		return chaine.substr(0,chaine.length);
	else
		return Number(chaine.substr(0,chaine.length-2));
}


//modifie la transparence d'un élément
function NOE_setAlpha(obj, value)
{
	if(obj)
	{
		obj.style.filter="alpha(opacity="+value+")";
		obj.style.opacity=value/100;
	}
}

//déplacement du drager (d)
//~ document.onmousemove=function NOE_dragDragger(e)
//~ {
	//~ NOE_d=document.getElementById("dragger");
	//~ mouse=(NOE_ns6)?e: event;
	//~ NOE_d.style.top=mouse.clientY+2+document.body.scrollTop;
	//~ NOE_d.style.left=mouse.clientX+document.body.scrollLeft;
	//~ NOE_setAlpha(NOE_d, 100);
	//~ NOE_d.style.zIndex=NOE_ZINDEX_DRAG_UNDER;
	//~ if(NOE_lastDocker)
		//~ return false;
//~ }


var NOE_grabedObj, NOE_lastDocker;

//attrapage (grab) de l'élément a déplacé. L'élément (dragedObj) sera mis dans le drager (d)
function NOE_grab(obj, event)
{
	NOE_grabedObj=obj.cloneNode(true);
	NOE_setAlpha(obj.firstChild, 30);

	NOE_grabedObj.style.zIndex="3";
	NOE_lastDocker=obj; 	//Sauvegarde de container a temps 0
	if(!obj.firstChild)
		return;

	offsetTop=obj.offsetTop-event.clientY;
	offsetLeft=obj.offsetLeft-event.clientX;
	document.body.appendChild(NOE_grabedObj);

	//obj.parent.appendChild(obj.cloneNode(true));

	NOE_grabedObj.style.position="absolute";




	document.onmousemove=function move(e)
	{
		if(!document.all)
			event=e;
		NOE_grabedObj.style.top=event.clientY+document.body.scrollTop+offsetTop;
		NOE_grabedObj.style.left=event.clientX+document.body.scrollLeft+offsetLeft;
	}

	//au relachement de la souris dockage de l'élément déplacé
	document.onmouseup=function NOE_dock(e)
	{
		if(!document.all)
			event=e;

		objX=event.clientX+document.body.scrollLeft;
		objY=event.clientY+document.body.scrollTop;


		element=document.getElementsByTagName("button");
		for(i=0;i<element.length;i++)
		{
			if(element[i].className=="NOE_docker")
			{
				newDocker=element[i];
				if(Math.abs(newDocker.offsetLeft+newDocker.offsetWidth/2-objX)<(newDocker.offsetWidth/2)   && Math.abs(newDocker.offsetTop+newDocker.offsetHeight/2-objY)<(newDocker.offsetHeight/2) && NOE_grabedObj!=newDocker && newDocker!=NOE_lastDocker)
				{
					//la case est disponible
					if(newDocker.innerHTML=="&nbsp;" || !newDocker.firstChild)
					{
						if(newDocker.getAttribute("idTarget"))
						{
							document.getElementById(newDocker.getAttribute("idTarget")).value=NOE_grabedObj.firstChild.getAttribute("valeur");
						}

						if(NOE_lastDocker.getAttribute("idTarget"))
						{
							document.getElementById(NOE_lastDocker.getAttribute("idTarget")).value="";
						}


						document.body.removeChild(document.body.lastChild);
						NOE_lastDocker.removeChild(NOE_lastDocker.firstChild);

						NOE_lastDocker.innerHTML="&nbsp;";

						NOE_grabedObj.style.zIndex="2";
						NOE_grabedObj.style.position="relative";

						if(newDocker.innerHTML=="&nbsp;")
							newDocker.removeChild(newDocker.firstChild);

						newDocker.appendChild(NOE_grabedObj.firstChild);
						NOE_grabedObj.style.top=0;
						NOE_grabedObj.style.left=0;
					}

					else //inversion des objets
					{

						if(newDocker.getAttribute("idTarget"))
						{
							document.getElementById(newDocker.getAttribute("idTarget")).value=NOE_grabedObj.firstChild.getAttribute("valeur");
						}

						if(NOE_lastDocker.getAttribute("idTarget"))
						{
							document.getElementById(NOE_lastDocker.getAttribute("idTarget")).value=newDocker.firstChild.getAttribute("valeur");
						}


						NOE_lastDocker.removeChild(NOE_lastDocker.firstChild);
						NOE_lastDocker.appendChild(newDocker.firstChild);

						newDocker.appendChild(NOE_grabedObj.firstChild);
						NOE_grabedObj.style.top=0;
						NOE_grabedObj.style.left=0;
						document.body.removeChild(document.body.lastChild);

					}

					document.onmousemove=function()
					{
						return false;
					}
					document.onmouseup=document.onmousemove;
					return;
				}
			}
		}

		document.body.removeChild(document.body.lastChild);
		NOE_setAlpha(NOE_lastDocker.firstChild, 100);

		document.onmousemove=function()
		{
			return false;
		}

		document.onmouseup=document.onmousemove;
		return;
	}
}


function toto()
{

	document.onmousedown=function (){return true;};
	//est ce qu'un objet est déplacé
	if(NOE_grabedObj && NOE_lastDocker)
	{
		//si un nouveau container a été défini
		if(NOE_docker)
		{

			//si container cible contient déjà un objet
			//docker est l'objet contenu dans le container
			if(NOE_docker.firstChild)
			{

				//alert();
				if(NOE_INVERT_ELEMENT)
				{
					//affection de la bonne valeur dans l'input source

					if(document.getElementById(NOE_getInputId(NOE_lastDocker)))
					{
						document.getElementById(NOE_getInputId(NOE_lastDocker)).value=NOE_docker.firstChild.getAttribute("valeur");
					}
					//affectation de la bonne valeur dans l'input cible
					if(document.getElementById(NOE_input))
					{
						document.getElementById(NOE_input).value=NOE_grabedObj.getAttribute("valeur");
					}

                    //l 'objet contenu le container cible est mis dans le container source
					NOE_lastDocker.appendChild(NOE_docker.firstChild);
					//on met l'objet déplacé dans le nouveau container
					NOE_docker.appendChild(NOE_grabedObj);
					NOE_docker.style.borderStyle="none";
					NOE_docker.style.backgroundColor="transparent";
				}
				else
				{
					NOE_lastDocker.appendChild(NOE_grabedObj);
					if(document.getElementById(NOE_getInputId(NOE_lastDocker)))
						document.getElementById(NOE_getInputId(NOE_lastDocker)).value=NOE_grabedObj.getAttribute("valeur");
				}

				//changement des couleurs de inputs
				//document.getElementById(getInputId(lastDocker)).style.backgroundColor=docker.style.backgroundColor;
				//document.getElementById(input).style.backgroundColor=grabedObj.style.backgroundColor;

				//restauration des valeurs de transparence
			}
			else
			{

				NOE_lastDocker.appendChild(NOE_grabedObj);
				if(document.getElementById(NOE_getInputId(NOE_lastDocker)))
				{
					//alert(document.getElementById(NOE_getInputId(NOE_lastDocker)));
					document.getElementById(NOE_getInputId(NOE_lastDocker)).value=NOE_grabedObj.getAttribute("valeur");
				}
				//NOE_docker.style.width=1;
			}
			//si le container cible est vide
		}
		//aucun container cible a été trouvé, on remet l'élément déplacé dans son container source
		else
		{

			NOE_lastDocker.appendChild(NOE_grabedObj);
			if(document.getElementById(NOE_getInputId(NOE_lastDocker)))
			{
				//alert(document.getElementById(NOE_getInputId(NOE_lastDocker)));
				document.getElementById(NOE_getInputId(NOE_lastDocker)).value=NOE_grabedObj.getAttribute("valeur");
			}
			//document.getElementById(getInputId(lastDocker)).style.backgroundColor=grabedObj.style.backgroundColor;
		}

		//remise des variables à leur état initial
		//NOE_lastDocker.removeChild();

		NOE_d.removeChild(NOE_d.firstChild);
		NOE_lastDocker.className="NOE_docker";
		NOE_docker.className="NOE_docker";
		NOE_lastDocker.style.width="";
		NOE_d.style.width=0;
		//NOE_grabedObj.style.display=inlibne
		NOE_setAlpha(NOE_grabedObj, 100);
		NOE_grabedObj=false;
		NOE_docker=false;
		NOE_lastDocker=false;
	}
	return;

}

//fonction de traintement de chaine pour récupérer l'id d'un input cible
function NOE_getInputId(element)
{
	chaine=new String(element.getAttribute("onmouseover"));
	//traitement pour mozilla
	t1=chaine.replace(/.*\'(.*)\'\);*/, "$1");

	///traitement pour ie
	t2=t1.replace(/.*\n*.*\n*(.*)\n*.*\n*/, "$1");

	//alert(t2);

	if(t2.length)
		return t2;
	else
		return t1;
}

//=============================================================================================
//=============================================================================================

function NOE_grabText(objet, idTarget)
{
	if (window.getSelection)
		txt = window.getSelection();
	else if (document.getSelection)
		txt = document.getSelection();
	else if (document.selection)
		txt = document.selection.createRange().text;


	txtt=new String(txt);


	if(txtt.length>0)
	{

		reponse=new String(txt);

		if (document.selection)
		{
			varRange=document.selection.createRange();
			varRange.execCommand("BackColor", false, "chartreuse");
			document.getElementById(idTarget).value=objet.innerHTML;
		}
		else
		{
			range=txt.getRangeAt(0);
			newNode=document.createElement("font");
			newNode.style.backgroundColor="chartreuse";
			range.surroundContents(newNode);
			range.detach();
			//mozilla ajoute des balise a ; donc suppression de ces dernières
			value=objet.innerHTML.replace(/<a>/gi, '');
			value=value.replace(/<\/a>/gi, '');
			document.getElementById(idTarget).value=value;

			tempNode=objet.cloneNode(true);
			objet.parentNode.appendChild(tempNode);
			objet.parentNode.removeChild(objet);

		}
	}

	document.getElementById(idTarget).focus();
	//alert(document.getElementById(idTarget).innerHTML);
	return false;
}

var NOE_txt=new Array();
var NOE_txtId;

function NOE_saveGrab()
{
	obj=document.getElementsByName("NOE_textGrab");
	for(i=0; i<obj.length; i++)
	{
		NOE_txt[obj[i].id]=obj[i].innerHTML;
	}
}

function NOE_resetGrabText(id, id2)
{
	document.getElementById(id).innerHTML=NOE_txt[id];
	document.getElementById(id2).value=NOE_txt[id];
}
