var procesos = new Array();
var errores = new Array();
var sist = 
{ 
	version: '0.3',
	nombre: 'PreUni',
	teclado: function (e)
	{
		var ev = new Event(e);
	    if(ev.control  && ev.key == 'm') { programa('goear');}
	    if(ev.control  && ev.key == 'y') { programa('youtube');}
	    if(ev.alt  && ev.key == 'r') { cierraJS('recoloca'); programa('recoloca');}
	    if(ev.alt  && ev.key == 'c') { programa('consola');}
	},
	error: function(mensaje)
	{
	 	//errores[] = mensaje;
	 	if(!$('error'))
	 	{
			alert(mensaje);
		}
		else
		{
		 	$('error').setOpacity(0).setHTML(mensaje);
			$('error').setStyle('display','block').effect('opacity').custom(0,.75);
			var errorTiempo = (function(){sist.quitaerror()}).delay(5000);			
		}
	} ,
	quitaerror: function()
	{
		if($('error'))
		{
			$('error').effect('opacity').custom(.6,0);
			(function(){$('error').setStyle('display','none')}).delay(800);
		}
		else
		{
			sist.error('No hay un mensaje de error que eliminar.');
		}
	},
	procesoActual: function(mens)
	{
	 	var pa = $('ProcesoActual');
	 	if(!pa)
	 	{
			sist.error("No hay ventana de procesos.");
		}
		else
		{
			pa.setHTML(mens);
			(function() {sist.procesoActualQuita(mens)}).delay(5000);		
		}	
		
	},
	procesoActualQuita: function(mens)
	{
	 	var pa = $('ProcesoActual');
	 	var ac = pa.innerHTML;
		if(ac == mens)
		{
			pa.setHTML('');
		}
		else
		{
			(function() {sist.procesoActualQuita(ac)}).delay(5000);	
		}
	},
	aviso: function(mensaje)
	{
	 	var av = $('aviso');
	 	if(!av)
	 	{
			sist.error('No hay elemento de aviso.');
		}
		else
		{
		 	av.addEvent('proceso',sist.quitaaviso);
		 	av.setOpacity(0).setHTML(mensaje);
			av.setStyle('display','block').effect('opacity').custom(0,.75);
		}
	},
	quitaaviso: function()
	{
		if($('aviso'))
		{
			$('aviso').effect('opacity').custom(.6,0);
			(function(){$('aviso').setStyle('display','none')}).delay(800);
			
		}
	},
	multimedia: function(c)
	{
	 	var m = $('multimedia');
	 	var cerr = '<p><strong style="color: red; cursor: pointer;" onClick="sist.multimedia(\'cierra\')">Cerrar</strong></p>';
		if(!m)
		{
			var m = new Element('div');
			m.setProperty('id','multimedia').setStyles('background-color: #FFF; border: 1px solid #000; padding: 6px; position: absolute; top: 30px; right: 2px; z-index: 90;').setHTML(c+cerr).injectAfter('contenido');
			sist.error("Recuerda que los archivos Multimedia ralentizan el sistema.");
		}
		else
		{
			if(c == 'cierra')
			{
				m.remove();
			}
			else
			{
				m.setHTML(c+cerr);
			}
		}
	},
	maya: function(q)
	{
	 	var m = $('maya');
	 	if(!m)
	 	{
			sist.error('No hay elemento de maya.');
		}
		else
		{
			av.setOpacity(0).setStyle('display','block').effect('opacity').custom(0,.6);
		}
	}
}

var Proceso = new Class({
 	initialize: function (id,ini,mata,re,dep) //id: identificativo; ini: funcion de arranque; mata: funcion que cierra el programa;re: funcion en caso de repetir proceso; dep: array programas dependencia
 	{
 	 	this.id = id;
 	 	
 	 	if(!procesos[id])
 	 	{
			procesos[id] = {'id':id.capitalize(),'time':$time(),'activo':false,'ini':ini,'mata':mata,'re':re,'dep':dep};
		}
		$('aviso').fireEvent('proceso');
 	},
 	arranca: function(args)
 	{
 	 	var proc = procesos[this.id];
		if( proc && $type(proc.ini)=='function')
		{
		 	proc.activo = true;
		 	$('contenedor').fireEvent('proceso',this.id);
			(proc.ini).attempt(args);
		}
	},
	re: function(args)
	{
 	 	var proc = procesos[this.id];
		if( proc && $type(proc.ini)=='function')
		{
		 	proc.activo = true;
		 	$('contenedor').fireEvent('proceso',this.id);
			(proc.re).attempt(args);
		}
		else
		{
			sist.error("Error, no puede repetirse el proceso "+this.id);
		}
	}
	,
	cierra: function(args)
	{
 	 	var proc = procesos[this.id];
		if( proc && $type(proc.mata)=='function')
		{
		 	proc.activo = false;
		 	$('contenedor').fireEvent('xproceso',this.id);
			(proc.mata).attempt(args);
		}
		else
		{
			sist.error("Error, no puede cerrarse el proceso "+this.id);
		}
	}
});

function $P(id,ini,mata,re,dep)
{
 	if(!id)
 	{
		$each(procesos,function(value,key){alert(value.id)});
	}
	var proceso = new Proceso(id,ini,mata,re,dep);
	return proceso;
}