/**
 * Objeto resultado.
 */
var Result = Class.create({
    /**
     * Iniciar el objeto.
     */
    initialize: function(res, Buscador){
		this._result = res;
        this.buscador = Buscador;
		
		$('tbody_result_normal').update('');
		$('table_result_familia').update('<thead><tr class=txt2><th class="w60">Coincid.</th><th class="w400">Unidad de competencia</th><th class="w330">Formación asociada</th><th class="w60">Nivel</th><th class="w60">Horas</th><th class="w60">Elegir</th></tr></thead>');
		
        this.drawTableRows(['normal', 'familias']);
    },
	
	/**
	 * Dibujar las filas de resultados
	 */
	drawTableRows : function(a) {
		for (var i = 0, len = this._result.length; i < len; ++i) {
			var data = $H(this._result[i]);
			for (var j = 0, len2 = a.length; j < len2; ++j) {
				this._drawTableRow(a[j], data);
			}
		}
	},
	
	/**
	 * Dibujar y insertar una fila en las tablas de resultados
	 * (hay dos tablas, uno normal, otro organizado por familia
	 * @param {Object} data
	 */
	_drawTableRow : function(type, data) {		
		
		//Crear los elementos
		var tr = new Element('tr');
		var td_coincid = new Element('td').update(data.get('puntuacion'));
		var td_unidad = new Element('td', {'class': 'tleft'});
		var text_unidad = new Element('span', {'class': 'txt3 span_open_popup'}).update(data.get('unidad_titulo'));
		var td_formacion = new Element('td', {'class': 'tleft'});
		var text_formacion = new Element('span', {'class': 'txt3 span_open_popup'}).update(data.get('modulo_titulo'));
		var td_nivel = new Element('td').update(data.get('nivel'));
		var td_horas = new Element('td').update(data.get('duracion'));
		var td_eligir = new Element('td');
		var elegir_input = new Element('input', {'type': 'checkbox','class': 'result_checkbox_' + data.get('unidad_id'),'value': data.get('unidad_id'),'name': 'result_elegir'});
		
		//Crear los handlers
		//El handler de info de unidad
		text_unidad.observe('click', this._openInfoPopupUnidadHandler.bindAsEventListener(this, data.get('id_familia'), data.get('unidad_id')));
		
		//El handler de info de modulo
		text_formacion.observe('click', this._openInfoPopupModuloHandler.bindAsEventListener(this, data.get('modulo_id')));
		
		//El hander del check
		elegir_input.observe('change', this._selectElegirHandler.bindAsEventListener(this, data.get('id_familia'), data.get('unidad_id')));
		
		//Juntarlos
		tr.appendChild(td_coincid);
		tr.appendChild(td_unidad);
		td_unidad.appendChild(text_unidad);
		tr.appendChild(td_formacion);
		td_formacion.appendChild(text_formacion);
		tr.appendChild(td_nivel);
		tr.appendChild(td_horas);
		tr.appendChild(td_eligir);
		td_eligir.appendChild(elegir_input);
		
		//Insertarlos
		switch (type) {
			case 'normal':
				//Insertar la fila en la tabla normal
				$('tbody_result_normal').insert(tr);
				break;
			case 'familias':
				//Insertar la fila en la tabla organizado por familias.
				//Primero, comprobar si existe el tbody de familia. Si no es asi: crearlo.
				var id_familia = data.get('id_familia');
				var tbody_familia_id = 'tbody_result_familia.' + id_familia
				if (!$(tbody_familia_id)) {
					var oFamilia = this.buscador.getFamilia(id_familia);
					if (oFamilia) {
						//Crear el tbody y su primera fila
						var tbody_familia = new Element('tbody', {'id': tbody_familia_id});
						var tr_familia = new Element('tr', {'class': 'txt2b'});
						var td_familia = new Element('td', {'class': 'tablares_fam','colspan': '6'}).update(oFamilia.getName());
						
						//Juntar los objetos
						tr_familia.appendChild(td_familia);
						tbody_familia.insert(tr_familia);
						
						//Insertarlo en la tabla
						$('table_result_familia').insert(tbody_familia);
					}
				}
				
				if ($(tbody_familia_id)) {
					//Insertar la fila
					$(tbody_familia_id).insert(tr);
				}
				break;
		}	
	},
	
	/**
	 * Actualizar el info interno sobre si o no se va a adquisir la unidad y actualizar los checks con el mismo class.
	 * @param {Object} event
	 */
	_selectElegirHandler : function(event) {
		//Recoger los datos
		var checked = event.target.checked;
		var familia_id = arguments[1];
		var unidad_id = arguments[2];
		
		//Forzar la carga de cualificacion. Si ya esta cargado, no hace nada.
		this.buscador.loadCompetencia(familia_id, unidad_id);

		//Actualizar el estado de Adquisicion
		var oUnidad = this.buscador.getUnidad(unidad_id);
		oUnidad.setCheckedAdquisicion(checked);
		oUnidad.setCheckedAprender();
		
		//Recorrer los checks con el mismo class y actualizarlos en la vista
		var checks = $$('input.result_checkbox_' + unidad_id);
		for (var i = 0, len = checks.length; i < len; ++i) {
			checks[i].checked = checked;
		}
	},
	
	/**
	 * Abrir un popup con informacion del unidad
	 * @param {Object} event
	 */
	_openInfoPopupUnidadHandler: function(event){
		var familia_id = arguments[1];
		var unidad_id = arguments[2];

		//Forzar la carga de cualificacion. Si ya esta cargado, no hace nada.
		var cualificaciones = this.buscador.loadCompetencia(familia_id, unidad_id);

		//Coger el unidad
		if (cualificaciones.length > 0) {
			var oUnidad = this.buscador.getUnidad(unidad_id);
			oUnidad.showInfoPopup(cualificaciones[0]);
		}
	},

	/**
	 * Abrir el popup con informacion de modulo
	 * @param {Object} event
	 */
	_openInfoPopupModuloHandler : function(event) {
		var modulo_id = arguments[1];
		
		//Coger el modulo
		var oModulo = this.buscador.getModulo(modulo_id);
		if (!oModulo) {
			var oModulo = this.buscador.getModulo(modulo_id);
		}
		
		oModulo.showInfoPopup();
		
	}
})
