Number.prototype.between = function(range){	
		return range.include(this);	
		}

var SimpleWindow = Class.create();
SimpleWindow.prototype={
	initialize:function(element){
		
		this.element = $(element);
		var defaults = {			
			tolerance : 5,
			dragOptions :{}
		}	
		this.position_etat = false;	
		this.positionY = 0;
		this.positionX = 0;
		this.options = Object.extend(defaults,arguments[1] || {});
		this.draggable = new Draggable(this.element,this.options.dragOptions);
		Draggables.unregister(this.draggable);
		
		//Fixes IE bugs
		Draggables.deactivate();
		document.body.ondragstart = function() { return false; };
		document.body.ondrag = function(){return false;};
    		document.body.onselectstart = function() { return false; };
    		document.body.onselect = function(){return false;};
    		document.body.oncontextmenu = function(){ return false;};
		
		this.onMouseOver = this.isOnResizeHandler.bindAsEventListener(this);
		this.onMouseDown = this.startDrag.bindAsEventListener(this);
		this.onMouseMove = this.onResize.bindAsEventListener(this);
		this.onMouseUp = this.onResizeEnd.bindAsEventListener(this);
		this.oncontextmenu = this.onMenu.bindAsEventListener(this);
		
		this.launchListeners();	
					
	},
	launchListeners : function(){
		Event.observe(this.element,'mousemove',this.onMouseOver);
		Event.observe(this.element,'mouseover',this.onMouseOver);
		Event.observe(this.element,'mousedown',this.onMouseDown);
		Event.observe(this.element,'contextmenu',this.oncontextmenu);
	},
	stopListeners : function(){
		Event.stopObserving(this.element,'mousemove',this.onMouseOver);
		Event.stopObserving(this.element,'mouseover',this.onMouseOver);
		Event.stopObserving(this.element,'mousedown',this.onMouseDown);
		Event.stopObserving(this.element,'contextmenu',this.oncontextmenu);
	},
	show : function(){
		this.launchListeners();
		this.element.show();
	},
	hide : function(){
		this.stopListeners();
		this.element.hide();	
	},
	isOnResizeHandler : function(e){
		
		//détermine ses tailles et coordonnées
		var right = Position.cumulativeOffset(this.element)[0]+this.element.getDimensions().width;
		var bottom = Position.cumulativeOffset(this.element)[1]+this.element.getDimensions().height;
		var left = Position.cumulativeOffset(this.element)[0];
		var top = Position.cumulativeOffset(this.element)[1];
		
		//déterminer l'action a éffectuer par rapport au placement du pointer sur l'objet
		//sud est
		if((Event.pointerX(e).between($R(right-this.options.tolerance, right)) || Event.pointerX(e).between($R(right, right+this.options.tolerance))) && (Event.pointerY(e).between($R(bottom-this.options.tolerance, bottom)) || Event.pointerY(e).between($R(bottom, bottom+this.options.tolerance)))){
			this.element.setStyle({cursor:'se-resize'});
			this.overResize='sudest';			
		}
		//sud ouest
		else if((Event.pointerY(e).between($R(bottom-this.options.tolerance, bottom)) || Event.pointerY(e).between($R(bottom, bottom+this.options.tolerance))) && (Event.pointerX(e).between($R(left, left+this.options.tolerance)) || Event.pointerX(e).between($R(left, left-this.options.tolerance)))){
			this.element.setStyle({cursor:'sw-resize'});
			this.overResize='sudouest';			
		}
		//nord ouest
		else if((Event.pointerY(e).between($R(top, top+this.options.tolerance)) || Event.pointerY(e).between($R(top, top-this.options.tolerance))) && (Event.pointerX(e).between($R(left, left+this.options.tolerance)) || Event.pointerX(e).between($R(left, left-this.options.tolerance)))){
			this.element.setStyle({cursor:'nw-resize'});
			this.overResize='nordouest';			
		}
		//nord est
		else if((Event.pointerX(e).between($R(right-this.options.tolerance, right)) || Event.pointerX(e).between($R(right, right+this.options.tolerance))) && (Event.pointerY(e).between($R(top, top+this.options.tolerance)) || Event.pointerY(e).between($R(top, top-this.options.tolerance)))){
			this.element.setStyle({cursor:'ne-resize'});
			this.overResize='nordest';			
		}
		//sud
		else if((Event.pointerY(e).between($R(bottom-this.options.tolerance, bottom)) || Event.pointerY(e).between($R(bottom, bottom+this.options.tolerance)))){
			this.element.setStyle({cursor:'s-resize'});
			this.overResize='sud';	
		}
		//nord
		else if((Event.pointerY(e).between($R(top, top+this.options.tolerance)) || Event.pointerY(e).between($R(top-this.options.tolerance, top)))){
			this.element.setStyle({cursor:'n-resize'});
			this.overResize='nord';	
		}
		//ouest
		else if((Event.pointerX(e).between($R(left, left+this.options.tolerance)) || Event.pointerX(e).between($R(left-this.options.tolerance, left)))){
			this.element.setStyle({cursor:'w-resize'});
			this.overResize='ouest';	
		}
		//est
		else if((Event.pointerX(e).between($R(right-this.options.tolerance, right)) || Event.pointerX(e).between($R(right, right+this.options.tolerance)))){
			this.element.setStyle({cursor:'e-resize'});
			this.overResize='est';	
		}
		//déplacement
		else if(Event.pointerX(e).between($R(left+this.options.tolerance,right-this.options.tolerance))&& Event.pointerY(e).between($R(top+this.options.tolerance, bottom-this.options.tolerance))){
			this.element.setStyle({cursor:'move'});
			this.overResize = 'move';	
		}			
		else{
			this.element.setStyle({cursor:''});
			this.overResize = '';
		}
	},
	startDrag : function(e){
			
		//MENU CONTEXTUEL INVISIBLE
		document.getElementById('menuCont').style.display = 'none';	

		document.getElementById('top').value = 'top:'+(this.element.offsetTop - 120);
		document.getElementById('left').value = 'left: '+this.element.offsetLeft;
		document.getElementById('width').value = 'width: '+(this.element.offsetWidth - 2);
		document.getElementById('height').value = 'height: '+(this.element.offsetHeight - 2);
		
		//SI UNE ACTION SUR UN OBJET EST DETERMINEE
		if(this.overResize != ''){
			//SI AUTRE QUE DEPLACEMENT
			if(this.overResize != 'move'){
				//on récupère les anciennes valeurs
				this.oldTop = this.element.offsetTop;
				this.oldLeft = this.element.offsetLeft;
				this.oldBottom = this.element.offsetTop + this.element.offsetHeight;
				this.oldRight = this.element.offsetLeft + this.element.offsetWidth;
				
				if(this.position_etat === false){
					if (navigator.appName == "Microsoft Internet Explorer") this.positionY = document.body.scrollTop + event.clientY;
						else this.positionY = document.body.scrollTop + e.pageY;
					if (navigator.appName == "Microsoft Internet Explorer") this.positionX = document.body.scrollLeft + event.clientX;
						else this.positionX = document.body.scrollLeft + e.pageX;
					this.position_etat = true;
				}
				
				Draggables.unregister(this.draggable);
				this.mouseCoords =[Event.pointerX(e),Event.pointerY(e)];
				Event.stop(e);
				this.dimensions=this.element.getDimensions();
				Draggables.deactivate();
				Event.observe(document,'mousemove',this.onMouseMove);
				Event.observe(document,'mouseup',this.onMouseUp);
				
			}
			//SI DEPLACEMENT, AJOUT DANS LES OBJETS DRAGGABLES
			else{	
				Draggables.register(this.draggable);		
				
			}
		}
		
	},
	onResize : function(e){
		Draggables.deactivate();//Fixes IE bug
		//détermine dans quel direction on part pour le redimmensionnement
		//W,H,L,T
		if (navigator.appName == "Microsoft Internet Explorer") currentY = document.body.scrollTop + event.clientY;
			else currentY = document.body.scrollTop + e.pageY;
		if (navigator.appName == "Microsoft Internet Explorer") currentX = document.body.scrollLeft + event.clientX;
			else currentX = document.body.scrollLeft + e.pageX;
			
		//SUD-EST
		if(this.overResize == 'sudest'){
			//on redétermine la hauteur pour la direction SUD
			$(this.element).style.height = ((this.oldBottom + (currentY - this.positionY)) - $(this.element).offsetTop - 2) + 'px';
			//on redétermine la largeur pour la direction EST
			$(this.element).style.width = ((this.oldRight + (currentX - this.positionX)) - $(this.element).offsetLeft - 2) + 'px';
		}
		//SUD-OUEST
		else if(this.overResize == 'sudouest'){
			//on redétermine la hauteur pour la direction SUD
			$(this.element).style.height = ((this.oldBottom + (currentY - this.positionY)) - $(this.element).offsetTop - 2) + 'px';
			//on redétermine la hauteur pour la direction OUEST
			$(this.element).style.left = this.oldLeft - (this.positionX - currentX) + 'px';
			$(this.element).style.width = (this.oldRight - $(this.element).offsetLeft - 2) + 'px';
			
		}
		//NORD-EST
		else if(this.overResize == 'nordest'){
			//on redétermine la hauteur, le top pour la direction NORD
			$(this.element).style.top = this.oldTop - (this.positionY - currentY) + 'px';
			$(this.element).style.height = (this.oldBottom - $(this.element).offsetTop - 2) + 'px';
			//on redétermine la largeur pour la direction est
			$(this.element).style.width = ((this.oldRight + (currentX - this.positionX)) - $(this.element).offsetLeft - 2) + 'px';
		}
		//NORD-OUEST
		else if(this.overResize == 'nordouest'){
			//on redétermine la hauteur, le top pour la direction NORD
			$(this.element).style.top = this.oldTop - (this.positionY - currentY) + 'px';
			$(this.element).style.height = (this.oldBottom - $(this.element).offsetTop - 2) + 'px';
			//on redétermine la largeur, le left pour la direction OUEST
			$(this.element).style.left = this.oldLeft - (this.positionX - currentX) + 'px';
			$(this.element).style.width = (this.oldRight - $(this.element).offsetLeft - 2) + 'px';
		}
		//NORD
		else if(this.overResize == 'nord'){
			//on redétermine la hauteur, le top pour la direction NORD
			$(this.element).style.top = this.oldTop - (this.positionY - currentY) + 'px';
			$(this.element).style.height = (this.oldBottom - $(this.element).offsetTop - 2) + 'px';
		}
		//SUD
		else if(this.overResize == 'sud'){
			//on redétermine la hauteur pour la direction SUD
			$(this.element).style.height = ((this.oldBottom + (currentY - this.positionY)) - $(this.element).offsetTop - 2) + 'px';
		}
		//OUEST
		else if(this.overResize == 'ouest'){
			//on redétermine la largeur, le left pour la direction OUEST
			$(this.element).style.left = this.oldLeft - (this.positionX - currentX) + 'px';
			$(this.element).style.width = (this.oldRight - $(this.element).offsetLeft - 2) + 'px';
		}
		//EST
		else if(this.overResize == 'est'){
			//on redétermine la largeur pour la direction EST
			$(this.element).style.width = ((this.oldRight + (currentX - this.positionX)) - $(this.element).offsetLeft - 2) + 'px';
		}
		
		document.getElementById('top').value = 'top:'+($(this.element).offsetTop - 120);
		document.getElementById('left').value = 'left: '+$(this.element).offsetLeft;
		document.getElementById('width').value = 'width: '+($(this.element).offsetWidth - 2);
		document.getElementById('height').value = 'height: '+($(this.element).offsetHeight - 2);
	},
	onResizeEnd : function(e){
		this.position_etat = false;	
		this.positionY = 0;
		this.positionX = 0;
		Draggables.revertDrag(this.draggable);
		Event.stopObserving(document,'mouseup',this.onMouseUp);
		Event.stopObserving(document,'mousemove',this.onMouseMove);		
	},
	onMenu : function(e){
		//on détermine la position du curseur
		if (navigator.appName == "Microsoft Internet Explorer") this.positionY = document.body.scrollTop + event.clientY;
			else this.positionY = document.body.scrollTop + e.pageY;
		if (navigator.appName == "Microsoft Internet Explorer") this.positionX = document.body.scrollLeft + event.clientX;
			else this.positionX = document.body.scrollLeft + e.pageX;
		
		//on affiche le menu à la bonne position
		document.getElementById('menuCont').style.display = '';	
		document.getElementById('menuCont').style.left = this.positionX + 'px';
		document.getElementById('menuCont').style.top = this.positionY + 'px';
		
		//on l'affiche au-dessus des autres divs
		var vgzorder = parseInt(document.getElementById("maxOrder").value) + 1;
		document.getElementById('menuCont').style.zIndex = vgzorder;
		
		//objet sur lequel le menu a été demandé
		document.getElementById('itemsel').value = $(this.element).id;
	}	
}

function zorder(itemsel, order){
	//déterminer le z-order des div pour savoir ceux situés au dessus des autres
	var group = itemsel.split('_');
	var vgzorder = parseInt(document.getElementById("maxOrder").value) + 1;
	var tab = new Array();
	
	//si l'objet fait parti d'un groupe
	if(group[1] != 0)
	{
		var Divs = document.getElementsByClassName("compo");
		var ordermin = 0;
		for (var j = 0; j < Divs.length; ++j)
		{				
			var divs_group = (Divs[j].id).split('_');
			
			//on cherche tous les objets du groupe
			if(divs_group[1] == group[1]){
				//si passage en arrière plan, le 1er a son index = 0 et les suivants = index++
				if(order == 'DESC') {
					document.getElementById(Divs[j].id).style.zIndex = ordermin;
					ordermin++;
				}
				//si passage en premier plan, le 1er a son index = max et les suivants = max++
				else
				{ 
					document.getElementById(Divs[j].id).style.zIndex = vgzorder;
					vgzorder++;
				}
			}
			//on mets tous les autres objetx dans un tableau
			else
				tab[tab.length] = Divs[j].id;
		}
	}
	//sinon
	else{
		var Divs = document.getElementsByClassName("compo");
		for(var j=0; j<Divs.length; j++)
		{
			//tous les autres objets sont mis dans un tableau
			if(Divs[j].id != itemsel)
				tab[tab.length] = Divs[j].id;
			//on trouve l'objet souhaité dans la liste
			else
			{
				//si passage en arrière plan, index = 0
				if(order == 'DESC') document.getElementById(Divs[j].id).style.zIndex = 0;
				//si passage en premier plan, index = max
				else document.getElementById(Divs[j].id).style.zIndex = vgzorder;
			}
		}
	}
	
	//si passage en arrière plan
	if(order=='DESC')
	{
		//on parcours le tableau remplit précédemment par les objets non bougés
		for(var t=0; t<tab.length; t++)
		{
			//on redéfinit leur index
			ordermin++;
			document.getElementById(tab[t]).style.zIndex = ordermin;
		}
		vgzorder = ordermin;
	}
	
	//on définit le z-index max
	document.getElementById("maxOrder").value = vgzorder;
	
	//on cache le menu contextuel
	document.getElementById('menuCont').style.display = 'none';
}


function zorder_reset()
{
		var Divs = document.getElementsByClassName("compo");
		for(var j=0; j<Divs.length; j++) document.getElementById(Divs[j].id).style.zIndex = 1;
}