//Gestor de ventanas

var Ventana = new Class({
 	initialize: function (id)
 	{
		this.id = id;
		if($(id))
		{
			var c = $(id).getCoordinates();
			this.top = c.top;
			this.left = c.left;
			this.ancho = c.width;
			this.alto = c.height;
		}
	},
    crea: function (paramval)
    {

		var id = this.id;
	 	sist.procesoActual("Creando ventana "+id);
	 	if($(id))
	 	{
			sist.error("Se intenta crear una id de ventana que actualmente est&aacute; operativa.");
			return false;
		}
		else
		{
		 	var paramkey = ['top','left','ancho','alto'] ;
		 	var param = paramval.associate(paramkey);
	
			if(!param['top'])
			{
				param['top'] = 40;
			}
			if(!param['left'])
			{
				param['left'] = 40;
			}
			if(!param['ancho'])
			{
				param['ancho'] = Window.getWidth() - 100;
			}
			if(!param['alto'])
			{
				param['alto'] = Window.getHeight().toInt() - 120;
			}
		
			var ventana = new Element('div');
			ventana.setProperty('id', id);
			ventana.addClass('ventana');
			ventana.setStyles({
			   position: 'absolute',
			   top: param['top'],
			   left: param['left'],
			   width: param['ancho'],
			   height: param['alto']
			});
			
			var controles = new Element('div');
			controles.addClass('controles');
			var minim = "<span onClick=\"$V('"+id+"').minimiza()\" class=\"minimizar\"></span> ";
			var maxim = "<span onClick=\"$V('"+id+"').maximiza()\" class=\"maximizar\"></span> ";
			if(procesos[id]) cerrar = "<span onClick=\"$P('"+id+"').cierra()\" class=\"cerrar\"></span>";
			else cerrar = "<span onClick=\"$V('"+id+"').cierra()\" class=\"cerrar\"></span>";
			controles.setHTML(minim+maxim+cerrar);
			controles.injectInside(ventana);
			
			var titulo = new Element('h2');
			titulo.setProperty('id',"t_"+id).injectInside(ventana);
			
			var contenido = new Element('div');
			contenido.addClass('Vcont').setProperty('id',"c_"+id).injectInside(ventana);
			
			var redim = new Element('div');
			redim.addClass('redim').setProperty('id',"r_"+id).setHTML('/').injectInside(ventana);	
			
			ventana.injectInside('contenido');
			if(opciones.efectos){ ventana.setOpacity(0).effect('opacity').custom(0,1); }
									
			ventana.makeResizable({handle: 'r_'+id});
			ventana.makeDraggable(this.drag(id,'t_'+id));
			
						
			titulo.addEvent('dblclick', function(){$V(id).maximiza()});
			ventana.addEvent('click',function(){$V(id).destaca();});
			
			creaNav(id,'Nueva Ventana');
			$V(id).destaca();
			
			sist.procesoActual("Ventana "+id+" creada.");
			var c = $(id).getCoordinates();
			this.top = c.top;
			this.left = c.left;
			this.ancho = c.width;
			this.alto = c.height;
			return this;
		}		
	},
	llena: function(c) // Substituye cualquier contenido por el nuevo parámetro
	{
	 	var id = 'c_'+this.id ;
		if(!$(id))
		{
			sist.error("ERROR: no existe el elemento "+id+".\n [ llenaVentana() ]");
			return false;
		}
		else
		{
			$(id).setHTML(c);
		}		
		 return this;
	},
	divide: function() // Divide la ventana en dos, una barra y el contenido principal
	{
		var id = this.id;
		var nid = 'n_'+id;
		var cid = 'c_'+id;
		
		if(!$(nid))
		{
			var nav = new Element('div');
			nav.setProperty('id',nid);
			nav.addClass('Vnav');
			nav.setStyles('width: 160px; float: left;');
			$(cid).setStyle('left','175px');
			
			nav.injectBefore(cid);
		}
		else
		{
			sist.error("No puede dividirse la ventana");
		}
		return this;
	},
	nav: function(c)
	{
	 	var id = 'n_'+this.id ;
		if(!$(id))
		{
			this.divide();
		}
		
		if(!$(id))
		{
			sist.error("ERROR: no se pudo dividir la ventana. [nav()]");
		}
		else
		{
			$(id).setHTML(c);
		}
		
		return this;
	},
	titulo: function(titulo)
	{
	 	var id = this.id;
	 	var tid = 't_'+id ;
		var navid = 'nav_'+id ;
		if(!$(tid))
		{
			sist.error("ERROR: no existe el elemento "+tid+".\n [ tituloVentana() ]");
		}
		else
		{
			$(tid).setHTML(titulo);
			if($(navid))
			{
				$(navid).setHTML(titulo);
			}
			else
			{
				creaNav(id,titulo);
			}
		}	
		
		return this;
	},
	mueve: function(p)
	{
	 	var id = this.id;
		if(!$(id))
		{
			sist.error("ERROR: no existe el elemento "+id+".\n [ mueveVentana() ]");
		}
		else
		{
			var pk = ['top','left','ancho','alto'] ;
	 		var pr = p.associate(pk);
			
			elpos = {
				'top': $pick(pr['top'],false),
				'left': $pick(pr['left'],false),
				'width': $pick(pr['ancho'],false),
				'height': $pick(pr['alto'],false) 
			}
			if(opciones.efectos)
			{
				var mueve = new Fx.Styles(id);
				mueve.start(elpos);				
			}
			else
			{
				$(id).setStyles(elpos);
			}
		}
		this.Gpos();
		return this;
	},
	cierra: function()
	{
	 	var id = this.id;
	 	sist.procesoActual("Cerrando ventana "+id);
	 	cierraJS(id);
	 	quitaNav(id);
	 	if(opciones.efectos)
	 	{
			$(id).effect('opacity').custom(.8,0);
			(function(){$(id).remove()}).delay(800);			
		}
		else
		{
			$(id).remove();
		}
	 	sist.procesoActual("Ventana "+id+" cerrada");			
	 	return false;
	},
	destaca: function()
	{
	 	var id = this.id;
	 	if(!$(id))
	 	{
			sist.error("No existe la ventana con id "+id);
			if($('nav_'+id))
			{
				quitaNav(id);
			}
		}
		else
		{
		 	if($(id).getStyle('display') == 'none')
		 	{
				$(id).setStyle('display','block');
				
				if(opciones.efectos) 
				{
					$(id).effect('opacity').custom(0,1);
				}
				else
				{
					$(id).setOpacity(1);
				}
				$V(id).mueve(this.Spos());	
			}
			$$('.ventana').setStyle('z-index', 1);
			$(id).setStyle('z-index', 2);
			$$('.Vactual').removeClass('Vactual');
			if($('nav_'+id))
			{
				$('nav_'+id).addClass('Vactual');
			}
		}
		
		return this;
	},
	minimiza: function()
	{
	 	this.nom = true;
	 	var id = this.id;
	 	this.Gpos();
		this.mueve([Window.getHeight().toInt(),10,600,50]);
		if(opciones.efectos)
		{
			$(id).effect('opacity').custom(1,0);
			(function(){$(id).setStyle('display','none')}).delay(800);
		}
		else
		{
			(function(){$(id).setOpacity(0).setStyle('display','none')}).delay(5);
		} 
		
		return this;
	},
	maximiza: function()
	{
	 	var id = this.id;
	 	ancho = Window.getWidth().toInt() - 100;
	 	alto = Window.getHeight().toInt() - 120;
	 	cdn = [40,40,ancho,alto];
	 	var c = $(id).getCoordinates();
	 	if(cdn == [c.top,c.left,c.width-2,c.height-2])
	 	{
			cdn = this.Spos;
		}
		$V(id).mueve(cdn);
		$V(id).destaca();
		return this;
	},
	Gpos: function()
	{
		var id = this.id;
		Cookie.set("param_top_"+id, this.top, 1);
	 	Cookie.set("param_left_"+id, this.left, 1);
	 	Cookie.set("param_ancho_"+id, this.ancho, 1);
	 	Cookie.set("param_alto_"+id, this.alto, 1);
	 	
	 	return this;
	},
	Spos: function()
	{
		var id = this.id; 
		return [Cookie.get("param_top_"+id),Cookie.get("param_left_"+id),Cookie.get("param_ancho_"+id),Cookie.get("param_alto_"+id)];
	},
	drag: function(el,ha)
	{
	 	if(!$(ha))
	 	{
			sist.error('Ups! no hay Handler para '+el);
		}
		var opcionesDrag = {
		 	handle: ha, 
		 	xMin: 1,
		 	yMin: 30,
			onStart:function()
			{
				$V(el).destaca();
			},
			onComplete:function()
			{
				$V(el).Gpos();
			}
		};	
		return opcionesDrag ;
	}
});
function $V(id)
{
	if(!id)
	{
		return $$('.ventana');
	}
	var ventana = new Ventana(id);
	return ventana;
}
//Barra de navegacion
function creaNav(id,titulo) 
{
 	navid = 'nav_'+id ;
 	if($(navid))
 	{
		sist.error("No se puede duplicar una id en el Navegador. \n[creaNav()] ");
	}
	else
	{
		var nav = new Element('li');
		nav.setProperty('id', navid);
		nav.setHTML(titulo);
		nav.injectInside('activos');
		nav.addEvent('click', function(){$V(id).destaca()});
	}
}
function quitaNav(id)
{
 	navid = 'nav_'+id ;
 	if(!$(navid))
 	{
		sist.error("No existe el elemento de navegacion "+navid+". \n[quitaNav()] ");
	}
	else
	{
	$(navid).remove();
	}	
}