			var _startX = 0;
			var _startY = 0;
			var _offsetX = 0;
			var _offsetY = 0;
			var _dragElement;
			var _oldZIndex = 0;
			var deltax = 0;
			var deltay = 0;
			var posx = -720;
			var posy = -525;
			var oldx;
			var oldy;
			var timeratt;
			var timermov;
			var imagefond;
			
			// Positionne ou déplace la carte et la carte témoin
			function bougemap()
			{
				if ((posx + deltax <= 0) && (posx + deltax >= (-1440)))
					posx = posx + deltax;
				if ((posy + deltay <= 0) && (posy + deltay >= (-1105)))
					posy = posy + deltay;
				document.getElementById('internecarte').style.left = posx;
				document.getElementById('internecarte').style.top = posy;
			}
			
			// Lance une boucle pour déplacer la carte lorsque l'utilisateur survole une flèche
			function avancecarte(mx,my)
			{
				deltax = mx;
				deltay = my;
				timermov = window.setInterval('bougemap()', 10);
			}
			
			// Retourne un tableau contenant les coordonnées absolues de l'élément obj
			function findPos(obj) {
				var curleft = curtop = 0;
				if (obj.offsetParent) {
					curleft = obj.offsetLeft
					curtop = obj.offsetTop
					while (obj = obj.offsetParent) {
						curleft += obj.offsetLeft;
						curtop += obj.offsetTop;
					}
				}
				return [curleft,curtop];
			}
			
			// Arrête la boucle de déplacement de la carte
			function stopcarte()
			{
				window.clearInterval(timermov);
				deltax = 0;
				deltay = 0;
			}
			
			// Initialise le Glisser/Déposer
			function InitDragDrop()
			{
				document.onmousedown = OnMouseDown;
				document.onmouseup = OnMouseUp;
			}
			
			// L'utilisateur clique
			function OnMouseDown(e)
			{
				if (e == null)
					var e = window.event;
				
				// On identifie l'élément cliqué
				var target = e.target != null ? e.target : e.srcElement;
				
				// Ce n'est pas un bouton et c'est un objet glissable, on va donc autoriser son déplacement
				if ((e.button == 1 && window.event != null || e.button == 0) && target.className == 'drag')
				{
					_startX = e.clientX;
					_startY = e.clientY;
					
					_offsetX = ExtractNumber(target.style.left);
					_offsetY = ExtractNumber(target.style.top);
					
					_oldZIndex = target.style.zIndex;
					target.style.zIndex = 10000;
					
					_dragElement = target;
					
					document.onmousemove = OnMouseMove;
					
					document.body.focus();
					
					document.onselectstart = function() { return false; };
					
					return false;
				}
			}
			
			// L'utilisateur bouge la souris ( cet évènement n'est capturé que si l'utilisateur a préalablement cliqué et pas encore relaché )
			function OnMouseMove(e)
			{
				if (e == null)
					var e = window.event;
				
				if (_dragElement.id != 'internecarte' && _dragElement.id != 'cadrerouge')
				{
					// On déplace un élément autre que la carte ou le cadre rouge de la carte témoin, on peut donc le déplacer sans aucune restriction
					_dragElement.style.left = (_offsetX + e.clientX - _startX) + 'px';
					_dragElement.style.top = (_offsetY + e.clientY - _startY) + 'px';
				}
				
				if (_dragElement.id == 'cadrerouge')
				{
					// On déplace le cadre rouge de la carte témoin, donc on va déplacer la carte en conséquence
					if ((_offsetX + e.clientX - _startX) >=0 && (_offsetX + e.clientX - _startX)<=144)
						posx = (_offsetX + e.clientX - _startX) * (-10);
					if ((_offsetY + e.clientY - _startY) >=0 && (_offsetY + e.clientY - _startY)<=105)
						posy = (_offsetY + e.clientY - _startY) * (-10);
					bougemap();
				}
				
				if (_dragElement.id == 'internecarte')
				{
					// On déplace la map
					if ((_offsetX + e.clientX - _startX) >0)
						posx = 0;
					if ((_offsetY + e.clientY - _startY) >0)
						posy = 0;
					if ((_offsetX + e.clientX - _startX)<(-1440))
						posx = -1440;
					if ((_offsetY + e.clientY - _startY)<(-1105))
						posy = -1105;
					if ((_offsetX + e.clientX - _startX) <=0 && (_offsetX + e.clientX - _startX)>=(-1440))
						posx = _offsetX + e.clientX - _startX;
					if ((_offsetY + e.clientY - _startY) <=0 && (_offsetY + e.clientY - _startY)>=(-1050))
						posy = _offsetY + e.clientY - _startY;
					// On va donc actualiser la position du cadre rouge sur la carte témoin
					bougemap();
				}
				
			}
			
			// Activée lorsque l'utilisateur relache le clic ( Déposer )
			function OnMouseUp(e)
			{
				if (e == null)
					var e = window.event;
				
				if (_dragElement!=null && _dragElement.id.substr(0,8) == 'batiment')
				{
					// C'est un batiment que l'on faisait glisser
					lebatiment = document.getElementById(_dragElement.id);
					carte = document.getElementById('cartecontenu');
					
					positionbat = findPos(lebatiment);
					positionmap = findPos(carte);
					
					// On vérifie que le bâtiment a été déposé sur la carte
					if ((positionbat[0] >= positionmap[0]) && (ExtractNumber(lebatiment.style.width) + positionbat[0] <= 540 + positionmap[0]) && (positionbat[1] >= positionmap[1]) && (ExtractNumber(lebatiment.style.height) + positionbat[1] <= 450 + positionmap[1]))
					{
						coorddragx = positionbat[0] - positionmap[0];
						coorddragy = positionbat[1] - positionmap[1];
						abscisssebat = coorddragx - posx;
						ordonneebat = coorddragy - posy;
						idbat = _dragElement.id.substr(8,_dragElement.id.length);
						ajoutbat(coorddragx - posx, coorddragy - posy, idbat);
						document.getElementById(_dragElement.id).style.display = 'none';
						oldx = _offsetX;
						oldy = _offsetY;
					}
					else
					{
						// Sinon on replace le bâtiment à sa position d'origine
						document.getElementById(_dragElement.id).style.left = _offsetX;
						document.getElementById(_dragElement.id).style.top = _offsetY;
					}
					
					_dragElement.style.zIndex = _oldZIndex;
					
					document.onmousemove = null;
					document.onselectstart = null;
					
					_dragElement = null;
				}
				
				if (_dragElement != null)
				{
					_dragElement.style.zIndex = _oldZIndex;
					
					document.onmousemove = null;
					document.onselectstart = null;
					
					_dragElement = null;
				}
			}
			
			function ExtractNumber(value)
			{
				var n = parseInt(value);
				
				return n == null || isNaN(n) ? 0 : n;
			}
			
			// On affiche la div d'attente avec la barre défilante
			function affattente(heure)
			{
				imagefond = new Image(1054,798);
				imagefond.src = 'http://www.imagine-online.fr/betav3/css/jeu/terre1.jpg?x='+heure;
				document.getElementById('divattente').style.display = 'block';
				document.getElementById('cartecontenu').style.display = 'none';
				timeratt = window.setInterval("verifFondDiv()",500);
			}
			
			// On vérifie si l'image de la map est finie de charger
			function verifFondDiv()
			{
				if (imagefond.complete==true) {
					window.clearInterval(timeratt);
					cachattente();
				}
			}
			
			// On masque la div d'attente
			function cachattente()
			{
				document.getElementById('cartecontenu').style.display = 'block';
				document.getElementById('divattente').style.display = 'none';
			}				