/**
 * Objeto realizacion.
 */
var Criterio = Class.create({
    /**
     * Iniciar el objeto.
     */
    initialize: function(h, checked, Buscador){
        this._fields = h;
        this._checked = checked;
        this.buscador = Buscador;
    },
    
    /**
     * Recoger los datos de un campo
     * @param {String} fieldname
     */
    getField: function(fieldname){
        return this._fields.get(fieldname);
    },
    
    /**
     * Dibujar el html de critera
     */
    drawHTML: function(id_cualificacion, id_unidad, id_realizacion, prefix){
		if (!prefix) {
			prefix = '';
		} else {
			//Dibjuar el html de cualificacion que contiene
			this.drawHTML(id_cualificacion, id_unidad, id_realizacion);			
		}
	
		//Coger el id
		var class_id = this.getField('id');
		var id = id_cualificacion + '_' + id_unidad + '_' + id_realizacion + '_' + class_id;
		
		var checked_string = '';
		if (this._checked) {
			var checked_string = 'checked="checked" ';
		}
		
		var html_string = '<div class="criteriotr txt2a container"><div class="line"><div class="left criterio_toggle">&nbsp;</div><div class="left checkbox"><input type="checkbox" onclick="var criterio = window.oBuscador.getCriterio(' + class_id + ');if(criterio) {criterio.onclickCheck(\'' + id + '\',\'' + prefix + '\')}"' + checked_string + '" class="checkbox_criterio_' + class_id + '" id="' + prefix + 'checkbox_criterio.' + id + '" name="checkbox_criterio.' + id + '" value="' + id + '"></div><div class="left criterio_title">' + this.getField('criterio') + '</div></div></div>';
		var div = new Element('div');
		div.innerHTML  = html_string;
		$(prefix + 'layer_criterios.' + id_cualificacion + '_' + id_unidad + '_' + id_realizacion).appendChild(div);
		
		
        //Crear el elemento
        /*var div = new Element('div', {'class': 'criteriotr txt2a container'});
        var div_line = new Element('div', {'class': 'line'});
        var div_toggle = new Element('div', {'class': 'left criterio_toggle'}).update('&nbsp;');
        var div_checkbox = new Element('div', {'class': 'left checkbox'});
        var div_title = new Element('div', {'class': 'left criterio_title'}).update(this.getField('criterio'));
        var checkbox = new Element('input', {'type': 'checkbox', 'class': 'checkbox_criterio_' + class_id, 'id': prefix +  'checkbox_criterio.' + id,'name': 'checkbox_criterio.' + id,'value': id});
        
        //Juntar los elementos
        div.appendChild(div_line);
        div_line.appendChild(div_toggle);
        div_line.appendChild(div_checkbox);
        div_line.appendChild(div_title);
        div_checkbox.appendChild(checkbox);
		
        //Crear los handlers
        checkbox.observe('click', this._checkHandler.bindAsEventListener(this, id, prefix));
        
        //Añadir la capa a la lista de cualificaciones
        $(prefix + 'layer_criterios.' + id_cualificacion + '_' + id_unidad + '_' + id_realizacion).appendChild(div);
		
		//Poner el checkbox checked o no checked (segun el valor en this._checked) 
		checkbox.checked = this._checked;*/
    },
	
   /**
     * Dibujar el html de infopopup
     */
    drawInfoPopupHTML: function(id_cualificacion, id_unidad, id_realizacion){
		//Coger el id
		var class_id = this.getField('id');
		var id = id_cualificacion + '_' + id_unidad + '_' + id_realizacion + '_' + class_id;
		        
		var html_string = '<div class="criteriotr_infopopup txt2a container"><div class="line"><div class="left criterio_toggle">-</div><div class="left criterio_title_infopopup">' + this.getField('criterio') + '</div></div></div>'
		var div = new Element('div');
		div.innerHTML  = html_string;
		$('infopopup_layer_criterios.' + id_cualificacion + '_' + id_unidad + '_' + id_realizacion).appendChild(div);
		
        //Crear el elemento
        /*var div = new Element('div', {'class': 'criteriotr_infopopup txt2a container'});
        var div_line = new Element('div', {'class': 'line'});
        var div_toggle = new Element('div', {'class': 'left criterio_toggle'}).update('-');
        var div_title = new Element('div', {'class': 'left criterio_title_infopopup'}).update(this.getField('criterio'));
        
        //Juntar los elementos
        div.appendChild(div_line);
        div_line.appendChild(div_toggle);
        div_line.appendChild(div_title);
		
        //Añadir la capa a la lista de cualificaciones
        $('infopopup_layer_criterios.' + id_cualificacion + '_' + id_unidad + '_' + id_realizacion).appendChild(div);*/
    },
    
    /**
     * El handler cuando se hace click en el check
     * @param {Object} event
     */
    _checkHandler: function(event){
        var id = arguments[1];
		var prefix = arguments[2];
        var checkbox = $(prefix + 'checkbox_criterio.' + id);
        var checked = checkbox.checked;
		
        //Poner el objeto como selececcionado o no seleccionado
        this.setChecked(checked);
        
		//Actualizar el SNCP
		this.buscador.createCadenaSNCP();
    },

    /**
     * El handler cuando se hace click en el check
     * @param {Object} event
     */
    onclickCheck: function(id, prefix){
        var checkbox = $(prefix + 'checkbox_criterio.' + id);
        var checked = checkbox.checked;
		
        //Poner el objeto como selececcionado o no seleccionado
        this.setChecked(checked);
        
		//Actualizar el SNCP
		this.buscador.createCadenaSNCP();
    },
    
    /**
     * Seleccionar o deseleccionar el criterio
     * @param {Boolean} checked
     */
    setChecked: function(checked, preload){		
		
		//Poner el objeto como checked o no checked
		this._checked = checked;
		
		preload_option = 'up';
		if (arguments.length == 2) {
			preload_option = 'down';
		}
		
//console.debug('Criterio.setChecked(' + checked + ') id:' + this.getField('id') + ' direction:' + preload_option + ' - ' + arguments.length);
	
		//Buscar todos los checkes que refieren al mismo objeto y marcarlos/desmarcarlos
		var checkboxes = $$('input.checkbox_criterio_' + this.getField('id'));
		for (var i = 0, len = checkboxes.length; i < len; ++i) {
			var checkbox = checkboxes[i];
			checkbox.checked = checked;
			
			if (arguments.length == 2) {
				var id_array = checkbox.id.split('.')[1].split('_');
				var id_realizacion = parseInt(id_array[2]);
				var realizacion = this.buscador.getRealizacion(id_realizacion);
				if (realizacion) {
					realizacion.updateState(true, 'down');
				}
			}
		}
		
        return this;
    },
	
    /**
     * Seleccionar o deseleccionar el criterio
     * @param {Boolean} checked
     */
    inheritChecked: function(checked){
		var me = this;
		this.timer = setTimeout(function(){
			me.setChecked(checked);
			clearTimeout(this.timer);	
		},10);
        
        return this;
    },
	
    /**
     * Seleccionar o deseleccionar el criterio
     * @param {Boolean} checked
     */
    inheritCheckedResumen: function(checked){
		var me = this;
		this.timer = setTimeout(function(){
			me.setCheckedResumen(checked);
			clearTimeout(this.timer);	
		},10);
        
        return this;
    },

    /**
     * Seleccionar o deseleccionar el criterio
     * @param {Boolean} checked
     */
    setCheckedResumen: function(checked, preload){		
		
		//Poner el objeto como checked o no checked
		this._checked = checked;
		
		preload_option = 'up';
		if (arguments.length == 2) {
			preload_option = 'down';
		}
		
		//Buscar todos los checkes que refieren al mismo objeto y marcarlos/desmarcarlos
		var checkboxes = $$('input.checkbox_criterio_' + this.getField('id'));
		for (var i = 0, len = checkboxes.length; i < len; ++i) {
			var checkbox = checkboxes[i];
			checkbox.checked = checked;
			
			if (preload_option == 'up') {
				var id_array = checkbox.id.split('.')[1].split('_');
				var id_realizacion = parseInt(id_array[2]);
				var realizacion = this.buscador.getRealizacion(id_realizacion);
				if (realizacion) {
					realizacion.updateState(true, 'down');
				}
			}			
		}
		
        return this;
    },
    
    /**
     * Devolver si el criterio esta seleccionado
     */
    getChecked: function(){
        return this._checked;
    }
});

