/*
** Clase creada para los formularios de edición de registro
** del panel de control
*/

//<![CDATA[
var ajaxForm = Class.create({

	/*
	** Variables
	*/
	form_id : null//Id del formulario
	,info_id : 'result'//Id de la capa donde se mostrara la info de la respuesta
	,reg_id : null//Campo oculto que debe de rellenarse con el ID nuevo en caso de ser un nuevo registro
	
	/*
	** Inicializala clase
	*/
	,initialize: function(form_id, info_id,reg_id) {
		this.form_id  = form_id;
		this.info_id  = info_id;
		this.reg_id  = reg_id;
	}

	/*
	** Coloca la info del resultado en la capa indicada,
	** obtenida del objeto json --> recibe el conjunto de Mensajes que ha de mostrar
	*/
	,putInfo: function(info_id) {
		
		var class_ok = "info_sis_ok"//Clase para la capa cuando todo va bien
		var class_error = "info_sis_error"//Clase para la capa cuando algo falla

		//Escribemos en la capa
		$(info_id).innerHTML = object_json.msg_result;
		
		//cambiamos el estilo de la capa
		//--> 0 sin errores
		//--> 1 con errores
		
		//primero quito cualquier clase que la capa posea
		$(info_id).removeClassName(class_ok);
		$(info_id).removeClassName(class_error);
		
		//ahora se la añado segun el resultado obtenido
		if(object_json.error_result == 0)
			$(info_id).addClassName(class_ok);
		else{
			$(info_id).addClassName(class_error);
		}
			
		//mostramos la capa
		$(info_id).appear();
		
		//Oculto la capa pasado unos segundos
		$(info_id).fade({ duration: 8.0, from: 1, to: 0 });
		
	}
	
	/*
	** Cambia la clase a los campos que son obligatorios (marcandolos)
	*/
	/*,markField: function(error) {
		// Look for all req fields and put them in an array
		requiredFields = document.getElementsByClassName('require');
		
		//Cambiamos la clase
		if(error == 1){
			// Loop the array and place observers on the req fields
			for(i=0; i<requiredFields.length;i++){
// 				$(requiredFields[i]).removeClassName('require');
				$(requiredFields[i]).addClassName('error_form');
			}
		}else{
			// Loop the array and place observers on the req fields
			for(i=0; i<requiredFields.length;i++){
// 				$(requiredFields[i]).removeClassName('error_form');
				$(requiredFields[i]).addClassName('require');
			}
		}
	}*/

	/*
	** Coloca el id del identificador del registro
	** en el campo oculto
	*/
	,putIdReg: function(reg_id) {
		if($(reg_id).value == "" && object_json.id_reg != "" && object_json.id_reg != undefined ){
			$(reg_id).value = object_json.id_reg;
		}
	}


	/*
	** Envia peticiones asincronas del formulario indicado,
	** devolviendo los valores en formato JSON
	*/
	,saveJson: function(redirect) {
		var info_id = this.info_id;
		var reg_id = this.reg_id;
		var putInfo = this.putInfo;
		var putIdReg = this.putIdReg;
		//var markField = this.markField;
		
		//Evento Submit del Formulario
		$(this.form_id).observe('submit',function (e){
			
			//Para el proceso del submit
			//la pagina no se recarga
			e.stop();
			
			//Peticion AJAX
			new Ajax.Request(this.action,
							{ method:this.method
							 ,parameters:this.serialize()
							 ,onSuccess: function(transport){
											//alert("Todo OK");
											//ARRAY(hash) --> JSON
											var data_json =  transport.responseText.toJSON().evalJSON();
											//alert(data_json);
											//JSON --> OBJECT
											eval("object_json = " + data_json);
											//Coloca la informacion en la capa
											//Al ser llamado desde dentro de un nuevo objeto (ajax)
											//la nomenclatura this. ya no se referira a la clase inicial(ajaxform)
											//sino al objeto ajax en si.
											if(redirect && object_json.error_result == 0){//Redirecciono
												window.location = object_json.url;
											}else{//Muestro mensajes
												putInfo(info_id);
												//markField(object_json.error_result);
												//Escribo en el id oculto del registro
												if(reg_id != null)
													putIdReg(reg_id);
											}
										}
							//,onFailure: function(){
							//				alert("Algo fallo");
							//			}
							}
			);
		});
	}
	
	/*
	** Lanza una peticion cada N segundos
	** salvanguardando los datos 
	*/
	,periodicalSave: function(seconds) {
		var form_id = this.form_id;
		var reg_id = this.reg_id;
		var putInfo = this.putInfo;
		var putIdReg = this.putIdReg;
		//var markField = this.markField;

		//Lanzamos la peticion periodica
		new PeriodicalExecuter(function (pe){
			new Ajax.Request($(form_id).action,
							{ method:$(form_id).method
							,parameters:$(form_id).serialize()
							,onSuccess: function(transport){
										//ARRAY(hash) --> JSON
										var data_json =  transport.responseText.toJSON().evalJSON();
										//JSON --> OBJECT
										eval("object_json = " + data_json);
										//Coloca la informacion en la capa
										//Al ser llamado desde dentro de un nuevo objeto (ajax)
										//la nomenclatura this. ya no se referira a la clase inicial(ajaxform)
										//sino al objeto ajax en si.
										putInfo(info_id);
										//markField(object_json.error_result);
										//Escribo en el id oculto del registro
										if(reg_id != null)
											putIdReg(reg_id);

									}
							}
			)
		},seconds);
	}	
	  
});
//]]>

