var iluminar = {

	componentes 					: null,
	componentesWorkspace 			: null,
	zonasDropeables 				: null,
	tipoComponenteSeleccionado 		: null,

	init : function() {
		
		iluminar.componentes = {
			bloques 		: libreria.getElementsByClass('listadoComponentesBloques')[0].childNodes,
			contenedores 	: libreria.getElementsByClass('listadoComponentesContenedores')[0].childNodes,
			elementos 		: libreria.getElementsByClass('listadoComponentesElementos')[0].childNodes
		};
		
		var temp = new Array();
		
		var i = 0;
		for (i = 0; i < iluminar.componentes.bloques.length; i++) {
			var elemento = iluminar.componentes.bloques[i];
			temp.push(elemento);
		}
		
		var i = 0;
		for (i = 0; i < libreria.getElementsByClass('almacen')[1].childNodes.length; i++) {
			var elemento = libreria.getElementsByClass('almacen')[1].childNodes[i];
			temp.push(elemento);
		}
		
		iluminar.attacheaEventosTipoComponente(temp, 'B');
		iluminar.attacheaEventosTipoComponente(iluminar.componentes.contenedores, 'C');
		iluminar.attacheaEventosTipoComponente(iluminar.componentes.elementos, 'E');
		
		iluminar.inicializaZonasDropeables();
		
		libreria.addEvent(document.getElementsByTagName('body')[0], 'mouseup', function() {
			iluminar.oscureceZonasDropeables();
			iluminar.tipoComponenteSeleccionado = null;
		});
	},
	
	attacheaEventosWorkspace : function() {
		iluminar.componentesWorkspace = {
			bloques 		: libreria.getElementsByClass('bloque',document.getElementById('formDesigner:listadoBloques'),'div'),
			contenedores 	: libreria.getElementsByClass('contenedor',document.getElementById('formDesigner:listadoBloques'),'div'),
			elementos 		: libreria.getElementsByClass('elemento',document.getElementById('formDesigner:listadoBloques'),'div')
		};
	
		iluminar.attacheaEventosArray(iluminar.componentesWorkspace.bloques, 'B');
		iluminar.attacheaEventosArray(iluminar.componentesWorkspace.contenedores, 'C');
		iluminar.attacheaEventosArray(iluminar.componentesWorkspace.elementos, 'E');
	},
	
	inicializaZonasDropeables : function() {
		iluminar.attacheaEventosWorkspace();
		
		iluminar.zonasDropeables = {
			bloques 		: libreria.getElementsByClass('dropBloque',document.getElementById('formDesigner:listadoBloques'),'div'),
			contenedores 	: libreria.getElementsByClass('dropContenedor',document.getElementById('formDesigner:listadoBloques'),'div'),
			elementos 		: libreria.getElementsByClass('dropElemento',document.getElementById('formDesigner:listadoBloques'),'div')
		};
		
		iluminar.attacheaEventosZonasDropeables(iluminar.zonasDropeables.bloques, 'B');
		iluminar.attacheaEventosZonasDropeables(iluminar.zonasDropeables.contenedores, 'C');
		iluminar.attacheaEventosZonasDropeables(iluminar.zonasDropeables.elementos, 'E');
	},
	
	attacheaEventosZonasDropeables : function(componentes, tipo) {
		var i, j;
		
		for (i = 0; i < componentes.length; i++) {
			libreria.addEvent(componentes[i], 'mouseover', function() {
				if (iluminar.tipoComponenteSeleccionado == tipo) {
					libreria.addClass(this, 'dropElementoHovereado');	
				}
			});
			
			libreria.addEvent(componentes[i], 'mouseout', function() {
				libreria.removeClass(this, 'dropElementoHovereado');	
			});
		}
	},
	
	attacheaEventosTipoComponente : function(componentes, tipo) {
		var i, j, x, y;
		
		for (i = 0; i < componentes.length; i++) {
			var li = componentes[i];
			
			if (typeof li == 'undefined')
				break;
			
			if(li.nodeType != 3){
				for (j = 0; j < li.childNodes.length; j++) {
					var hijoDivArrastrable = li.childNodes[j];
					
					if (hijoDivArrastrable.nodeType != 3) {
						libreria.addEvent(hijoDivArrastrable, 'mousedown', function() {
							iluminar.tipoComponenteSeleccionado = tipo;
							iluminar.cambiaEstiloZonaDropeable(tipo, 'dropElementoIluminado', true);
						});
						
						break;
					}
				}
			}
		}
	},
	
	attacheaEventosArray : function(componentes, tipo) {
		var i;
		
		for (i = 0; i < componentes.length; i++) {
			var divArrastrable = componentes[i];
			
			libreria.addEvent(divArrastrable, 'mousedown', function() {
				iluminar.tipoComponenteSeleccionado = tipo;
				iluminar.cambiaEstiloZonaDropeable(tipo, 'dropElementoIluminado', true);
			});
		}
	},
	
	oscureceZonasDropeables : function() {
		iluminar.cambiaEstiloZonaDropeable(iluminar.tipoComponenteSeleccionado, 'dropElementoIluminado', false);
	},
	
	cambiaEstiloZonaDropeable : function(tipo, estilo, anyadirEstilo) {
		var i,zonas=null;

		if(tipo == 'B')
			zonas = iluminar.zonasDropeables.bloques;
		else if(tipo == 'C')
			zonas = iluminar.zonasDropeables.contenedores;
		else if(tipo == 'E')
			zonas = iluminar.zonasDropeables.elementos;
		
		if(zonas != null) {
			for(i=0; i < zonas.length; i++) {
				if(anyadirEstilo)
					libreria.addClass(zonas[i], estilo);
				else
					libreria.removeClass(zonas[i], estilo);
			}
		}
	}

};

libreria.addEvent(window, 'load', iluminar.init);
