//registro del ultimo familiar para evitar que con los movimientos de familiares 
//se acoplen los nombres de los input.
var familiares=0;
function parser_js_json(json){
	//_error("voy a parsear_js: "+json.template);
	//si hay un validador para el template lo usamos
	var aux="if(typeof parser_js_"+json.template+" == 'function'){ parser_js_"+json.template+"(json); }else{ recurse_parser_js(json); };";
	eval(aux);
	event_validar(json);
}

function recurse_parser_js (json){
	for (var id in json.templates) {
			 parser_js_json(json.templates[id]);
	}
}

function parser_js_formulario (json){
	//funciones del formulario.
	js_formulario();
	for (var id in json.pestanas){
		parser_js_json(json.pestanas[id]);
	}
	carga_familiares();
	//especial para la fila del postulante en la tabla de ingresos
	parser_tabla_ingresos($("#ingresos"));
	actualizar_ingresos_totales();
	//activa los seleccionables
	parser_select();
	parser_select_min();
	parser_select_familiar();
	parser_select_cod_area();
	parser_ayuda();
	parser_nombre();
	parser_apellido_materno();
	parser_apellido_paterno();
	parser_edad();
	parser_dominio();
	parser_eliminar();

}

/*function parser_js_pestana (json){
	//sólo para pasar sobre las pestañas
	for (var id in json.templates){
		parser_js_json(json.templates[id]);
	}
}*/

function parser_js_form_registro (json){
	parser_select();
	recurse_parser_js(json);
}

function parser_js_select_lineal (json){
	parser_js_select(json);
}

function parser_js_select_cod_area (json){
	parser_js_select(json);
}

function parser_js_bloquetabla (json){
	recurse_parser_js(json);
}

//function parser_js_inscripcion_checkbox_list(json){ }

function parser_js_tabla_ingresos (json){
	$(".hoverIngreso").hover(
		function(){
			var t = $(this);
			var tp = t.position();
			var to = t.offset();
			var prev = t.parent();
			var prevo = prev.offset();
			var arriba = prevo.top+prev.height();
			var izquierda = prevo.left;
			//_error("entro: "+to.top+"+"+prevo.top+"+"+prev.height());
			//_error("entro: "+tp.top+","+tp.left);
			//_error("entro: "+arriba+","+izquierda);
			var desplegable=$(".infoingresos");
			desplegable.hide();
			//Condicion rara cuando no encuentra el t.text()
			_error(t.text());
			var html=ayuda_tabla_ingresos[t.text()];
			desplegable.html(html);
			desplegable.css("top",arriba);
			desplegable.css("left",izquierda);
			desplegable.css("z-index",1000);
			desplegable.show();
		},
		function(){
			//_error("salgo");
			var desplegable=$(".infoingresos");
			desplegable.hide();
		}
	);
}

function parser_eliminar(){
	$(".eliminar").live("click",function(){
		//recogemos el ID
		var id=$(this).attr("id");
		//eliminamos el parent.
		$(this).parent().parent().remove();
		//ahora eliminamos de los ingresos.
		$(".tr_"+id).remove();
		//y por ultimo bajamos los valores del select.
		//obtenemos el valor de los familiares.
		var fam=$(":input",$(".seleccione_familiar").parent()).val();
		$(":input",$(".seleccione_familiar").parent()).val(fam-1);
		$("span",$(".seleccione_familiar").parent()).html(fam-1);
		});
}

function parser_not_null(){
	$(".not_null").blur(function(){
		marcador_not_null($(this));
		});
}

function parser_nombre(){
	$(".nombre").blur(function(){
		marcador_nombre($(this));
		});
}
function parser_apellido_paterno(){
	$(".apellido_paterno").blur(function(){
		marcador_apellido_paterno($(this));
		});
}
function parser_apellido_materno(){
	$(".apellido_materno").blur(function(){
		marcador_apellido_materno($(this));
		});
}

function parser_direccion(){
	$(".direccion").blur(function(){
		marcador_direccion($(this));
		});
}

function parser_departamento(){
	$(".departamento").blur(function(){
		marcador_departamento($(this));
		});
}

function parser_poblacion(){
	$(".poblacion").blur(function(){
		marcador_poblacion($(this));
		});
}

function parser_edad(){
	$(".edad").blur(function(){
		marcador_edad($(this));
		});
}

function parser_cuenta_ahorro(){
	$(".cuenta_ahorro").blur(function(){
		marcador_radio($(this));
		});
}

function parser_radio(){
	$(".radio").click(function(){
		marcador_radio($(this));
		});
}

function parser_telefonos(){
	if(contador_alan == 0){
	//_error("parser_telefonos"+contador_alan);
	contador_alan++;
	$(".telefonos").blur(function(){
		//metadata, campos: ['cod_area','telefono','telefono_celular']
		//marcador_telefonos($(this));
		marcador_telefonos($("#telefono"));
	});
	}
}

function parser_dominio(){
	$(".dominio").change(function(){
		marcador_dominio($(this));
		});
}

function parser_tabla_familiares(){
	//el :input no es necesario ?
	/*
	$(".nombre_familiar :input",$("#familiares")).blur(function(){
		marcador_nombre($(this));
	});
	*/
}

function parser_nota(){
	$(".nota").blur(function(){
		marcador_nota($(this));
		});
}

function parser_fecha(){
	$(".fecha").blur(function(){
		marcador_fecha($(this));
		});
}

//para los datepicker
function parser_fecha_dma(){
	$(".fecha_dma").change(function(){
		marcador_fecha_dma($(this));
		});
}

function parser_igual(){
	$(".igual").blur(function(){
		marcador_igual($(this));
		});
}

function parser_correo_igual(){
	$(".correo_igual").blur(function(){
		marcador_correo_igual($(this));
		});
}

function parser_rut_alumno(){
	$(".rut_alumno").blur(function(){
		//se asume que hay un solo input de rut_alumno y rut_alumno_dv
		marcador_rut_alumno($(this));
		});
	$(".rut_alumno_dv").blur(function(){
		marcador_rut_alumno($(".rut_alumno",$(this).parent()));
		});
}

function parser_rut_inscripcion(){
	//++contador_alan;
	//alert("contador_alan: "+contador_alan);
	$(".rut_inscripcion").blur(function(){
		//se asume que hay un solo input de rut_alumno y rut_alumno_dv
		marcador_rut_inscripcion($(this));
		});
	$(".rut_inscripcion_dv").blur(function(){
		marcador_rut_inscripcion($(".rut_inscripcion",$(this).parent()));
		});
}

function parser_rut_familiar(numero){
	$("input[name='familiares["+numero+"][rut_familiar]']").blur(function(){
		marcador_rut_familiar($("input[name='familiares["+numero+"][rut_familiar]']"));
	});
}
function parser_rut_familiar_dv(numero){
	$("input[name='familiares["+numero+"][rut_familiar_dv]']").blur(function(){
		marcador_rut_familiar($("input[name='familiares["+numero+"][rut_familiar]']"));
	});
}

function parser_edad_familiar(tr){
	$(".edad_familiar",tr).blur(function(){
		marcador_edad($(this));
	});
}

function parser_password(){
	$(".password").blur(function(){
		//FORM
		//$(this).parent().parent().toggleClass("error", ! valido );
		marcador_password($(this));
		});
}

function parser_correo_electronico(json){
	$(".usuario_correo").blur(function(){
		marcador_correo_electronico($(this));
		});
	$(".dominio_correo").blur(function(){
		marcador_correo_electronico($(this));
		});
}

function parser_nombre_familiar(tr){
	$(".nombre_familiar",tr).blur(function(){
		marcador_nombre($(this));
		actualizar_nombre_ingreso($(this));
	});
}
function parser_apellido_paterno_familiar(tr){
	$(".apellido_paterno_familiar",tr).blur(function(){
		marcador_nombre($(this));
		actualizar_nombre_ingreso($(this));
	});
}
function parser_apellido_materno_familiar(tr){
	$(".apellido_materno_familiar",tr).blur(function(){
		marcador_nombre($(this));
		actualizar_nombre_ingreso($(this));
	});
}

function parser_igual(json){
	$(".igual").blur(function(){
		marcador_igual($(this));
		});
}

function parser_select(){
	//no funciona
	//$(":input[name='comuna']").onchange=function(){ alert("hola");};
	//prueba de onchange
	//$("#nem").onchange=function(){ alert("nem");};

	$(".seleccione").click(function(){
		var prev= $(this).parent();
		var seleccione=$(this);
		var metadata = seleccione.metadata();
		var input=$(":input", prev);
	        var nombre=input.attr("name");
		_error("click: "+nombre);
		var pos=prev.position();
		var offset=prev.offset();
		var tope_derecho = $(window).width();
		var campo='';
		var desplegable=$(".desplegable");
		var parametro_aux;
		//si encadenamos a un sub selector entonces gatillamos el evento change del input
		var metacadena=metadata['subcadena'];
		while(metacadena){
			//alert('me cambiaron');
			input2= $(":input[name='"+metacadena+"']");
			//alert(input2.val());
			input2.val('');
			prev2=input2.parent();
			seleccione2= $('.seleccione',prev2);
			bloque=$('.bloqueTexto',prev2);
			seleccione2.text('Seleccione');
			bloque.text('');
			metacadena=seleccione2.metadata()['subcadena'];
			if(typeof(metacadena)==undefined){ metacadena=false; }
		}
		/*
		if(metadata['subcadena']){
			//alert('me cambiaron');
			input2= $(":input[name='"+metadata['subcadena']+"']");
			//alert(input2.val());
			input2.val('');
			prev2=input2.parent();
			seleccione2= $('.seleccione',prev2);
			bloque=$('.bloqueTexto',prev2);
			seleccione2.text('Seleccione');
			bloque.text('');
		}
		*/
		if(metadata['subcadena_texto']){
			input3= $(":input[name='"+metadata['subcadena_texto']+"']");
			input3.val('');
			input3.change();
		}
		//ya tenemos el parámetro, ahora cargamos los datos.
		//lo primero es ocultar el desplegable.
		desplegable.jScrollPaneRemove();
		desplegable.hide();
		var html="<ul>";

		//soporte para null
		if(metadata['nulo']){
			//parametro_aux[]=metadata['nulo'];
			//parametro_aux['nulo']=metadata['nulo'];
			html+="<li id='nulo'> "+metadata['nulo']+"</li>\n";
		}

		if(metadata['parametro']){
			if(metadata['cadena']){//hay q sacar los datos de otro campo
				campo=$(":input[name='"+metadata['cadena']+"']").val();
				parametro_aux=eval(metadata['parametro']+"['"+campo+"']");
			}else{
				parametro_aux=eval(metadata['parametro']);
			}
		}else if(metadata['except']){
			//no mostramos el campo indicado en este input
			//id del campo
			campo=$(":input[name='"+metadata['except']+"']").val();
			parametro_aux=parametro[nombre];
		}else{
			parametro_aux=parametro[nombre];
		}
		for (var id in parametro_aux){
			if(id != campo){
				html+="<li id='li_"+id+"'> "+parametro_aux[id]+"</li>\n";
			}
		}
		html+="</ul>\n";
		desplegable.html(html);
		//para calcular la altura tomamos el offset del div le agregamos la altura 
		//del div y le restamos la altura del div con el valor del seleccionable
		var altura_div=prev.height(); // el valor es en "px" por eso el tratamiento especial
		var altura_div_info=$(".bloqueTexto", prev).height();
		var arriba=offset.top+altura_div-altura_div_info;;
		var izquierda=offset.left;

		var ancho_div=desplegable.width();
		if( (izquierda+ancho_div) > tope_derecho ){
			izquierda = izquierda - ancho_div + seleccione.width();
		}

		//desplegable.css("top",arriba);
		//desplegable.css("left",izquierda);
		
		desplegable.show();
		//$("div",desplegable.parent()).show();
		desplegable.jScrollPane();
		//desplegable.parent().show();
		desplegable.parent().css("top",arriba);
		desplegable.parent().css("left",izquierda);
		desplegable.parent().css("z-index",1000);
		$('div',desplegable.parent()).css("z-index",1000);
		//ahora obtenemos el texto
		$(".desplegable li").click(function(){
				//_error("click viejo");
			desplegable.jScrollPaneRemove();
			desplegable.hide();
			//obtenemos el ID del li.
			var aux=$(this).attr("id").split("_");
			var id=aux[1];
			//alert(id);
			var bloque= $(".bloqueTexto",prev);
			var nulo = ( $(this).attr("id")=='nulo' );
			//vemos en la metadata si hay que poner el texto o el id.
			if(nulo){
				seleccione.text(metadata['nulo']);
			}else if(metadata['show']=='text'){
				seleccione.text(parametro_aux[id]);
			}else if(metadata['show']=='full'){
				seleccione.text(id+". "+parametro_aux[id]);
			}else{ 
				seleccione.text(id);
			}
			//seteamos el valor del input
			if(nulo){
				input.val(metadata['nulo']);
			}else if(metadata['val']=='text'){
				input.val(parametro_aux[id]);
			}else if(metadata['val']=='full'){
				input.val(id+". "+parametro_aux[id]);
			}else{ 
				input.val(id);
			}
			//vemos en la metadata si hay que poner footer
			if(nulo){
				bloque.text("");
			}else if(metadata['footer']=='text'){
				bloque.text(parametro_aux[id]);
			}else if(metadata['footer']=='none'){
				bloque.text("");
			}else if(metadata['footer']=='id'){ 
				bloque.text(id);
			}else {
				bloque.text(id+". "+parametro_aux[id]);
			}
			//se revisa que información va en el input
			//ahora cambiamos el valor del td en la tabla de familiares.
			var name=input.attr("name");
			$("#familiar_"+name).html(id);
			//gatillo el chequeo del select
			marcador_dominio(input);
			//asignar
			if(metadata['asignar']){
				//var inputval = nulo?
				//$(":input[name='"+metadata['asignar']+"']").val(input.val());
				$(":input[name='"+metadata['asignar']+"']").val(seleccione.text());
				$(":input[name='"+metadata['asignar']+"']").change();
			}

		});
		//hover para explorer 6
		//OJO
		//TODO cambiar los colores cuando se cambien en el css
		$(".desplegable li").hover(
			function(){
				//$(this).addClass("hover_ie6");
				$(this).css({'background-color' : '#999999'});
			},
			function(){
				//$(this).removeClass("hover_ie6");
				$(this).css({'background-color' : '#F6F6F6'});
			}
		);
	}
	);

	//si el seleccionable es de código de área, se hace la validación.
	/*
	$(".seleccione").click(function(){
		var prev= $(this).parent();
		var input=$(":input", prev);
	        var nombre=input.attr("name");

		if( nombre == 'cod_area' ){
	       		li_cod_area=true;
		}
	}
	);
	*/

}

function parser_select_cod_area(){
	//no funciona
	//$(":input[name='comuna']").onchange=function(){ alert("hola");};
	//prueba de onchange
	//$("#nem").onchange=function(){ alert("nem");};

	$(".seleccione").click(function(){
		var prev= $(this).parent();
		var seleccione=$(this);
		var metadata = seleccione.metadata();
		var input=$(":input", prev);
	        var nombre=input.attr("name");
		var pos=prev.position();
		var offset=prev.offset();
		var tope_derecho = $(window).width();
		var campo='';

		var desplegable=$(".desplegable");
		var parametro_aux;
		//si encadenamos a un sub selector entonces gatillamos el evento change del input
		if(metadata['subcadena']){
			//alert('me cambiaron');
			input2= $(":input[name='"+metadata['subcadena']+"']");
			//alert(input2.val());
			input2.val('');
			prev2=input2.parent();
			seleccione2= $('.seleccione',prev2);
			bloque=$('.bloqueTexto',prev2);
			seleccione2.text('Seleccione');
			bloque.text('');
		}
		//ya tenemos el parámetro, ahora cargamos los datos.
		//lo primero es ocultar el desplegable.
		desplegable.jScrollPaneRemove();
		desplegable.hide();
		var html="<ul>";
		if(metadata['parametro']){
			if(metadata['cadena']){//hay q sacar los datos de otro campo
				campo=$(":input[name='"+metadata['cadena']+"']").val();
				parametro_aux=eval(metadata['parametro']+"['"+campo+"']");
			}else{
				parametro_aux=eval(metadata['parametro']);
			}
		}else if(metadata['except']){
			//no mostramos el campo indicado en este input
			//id del campo
			campo=$(":input[name='"+metadata['except']+"']").val();
			parametro_aux=parametro[nombre];
		}else{
			parametro_aux=parametro[nombre];
		}
		for (var id in parametro_aux){
			if(id != campo){
				html+="<li id='li_"+id+"'> "+parametro_aux[id]+"</li>\n";
			}
		}
		html+="</ul>\n";
		desplegable.html(html);
		//para calcular la altura tomamos el offset del div le agregamos la altura 
		//del div y le restamos la altura del div con el valor del seleccionable
		var altura_div=prev.height(); // el valor es en "px" por eso el tratamiento especial
		var altura_div_info=$(".bloqueTexto", prev).height();
		var arriba=offset.top+altura_div-altura_div_info;;
		var izquierda=offset.left;

		var ancho_div=desplegable.width();
		if( (izquierda+ancho_div) > tope_derecho ){
			izquierda = izquierda - ancho_div + seleccione.width();
		}

		//desplegable.css("top",arriba);
		//desplegable.css("left",izquierda);
		
		desplegable.show();
		//$("div",desplegable.parent()).show();
		desplegable.jScrollPane();
		//desplegable.parent().show();
		desplegable.parent().css("top",arriba);
		desplegable.parent().css("left",izquierda);
		desplegable.parent().css("z-index",1000);
		$('div',desplegable.parent()).css("z-index",1000);
		//ahora obtenemos el texto
		$(".desplegable li").click(function(){
			desplegable.jScrollPaneRemove();
			desplegable.hide();
			//obtenemos el ID del li.
			var aux=$(this).attr("id").split("_");
			var id=aux[1];
			//alert(id);
			var bloque= $(".bloqueTexto",prev);
			//vemos en la metadata si hay que poner el texto o el id.
			if(metadata['show']=='text'){
				seleccione.text(parametro_aux[id]);
			}else if(metadata['show']=='full'){
				seleccione.text(id+". "+parametro_aux[id]);
			}else{ 
				seleccione.text(id);
			}
			if(metadata['val']=='text'){
				input.val(parametro_aux[id]);
			}else if(metadata['val']=='full'){
				input.val(id+". "+parametro_aux[id]);
			}else{ 
				input.val(id);
			}
			//vemos en la metadata si hay que poner footer
			if(metadata['footer']=='text'){
				bloque.text(parametro_aux[id]);
			}else if(metadata['footer']=='none'){
				bloque.text("");
			}else if(metadata['footer']=='id'){ 
				bloque.text(id);
			}else {
				bloque.text(id+". "+parametro_aux[id]);
			}
			//se revisa que información va en el input
			//ahora cambiamos el valor del td en la tabla de familiares.
			var name=input.attr("name");
			$("#familiar_"+name).html(id);
			//gatillo el chequeo del select
			marcador_dominio(input);
			//evento especial para validación cruzada de teléfono contra código de área.
			validador_telefonos($("#telefono"));
			//_error("live click en desplegable li");
		});
		//hover para explorer 6
		//OJO
		//TODO cambiar los colores cuando se cambien en el css
		$(".desplegable li").hover(
			function(){
				//$(this).addClass("hover_ie6");
				$(this).css({'background-color' : '#999999'});
			},
			function(){
				//$(this).removeClass("hover_ie6");
				$(this).css({'background-color' : '#F6F6F6'});
			}
		);
	}
	);

}

function parser_js_select(json){

	if(!(datos_sistema['campo_oculto'].join().indexOf(json['nombre'])>=0)){
		//primero capturamos el selector
		var nombre=json.nombre;
		//alert(nombre);
		var input=$("input[name='"+nombre+"']");
		//el numero
		var id = input.val();
		//var prev= $(this).parent();
		var prev= input.parent();
		var seleccione = $(".seleccione", prev);
		var metadata = seleccione.metadata();
		var bloque= $(".bloqueTexto",prev);
		var parametro_aux=parametro[nombre];
	 

		if( seleccione.text() == 'Seleccione' || metadata['nulo'] ){
			return;
		}

		//lo primero es ocultar el desplegable.
		//??

		//sacamos los parametros
		if(metadata['parametro']){
			if(metadata['cadena']){//hay q sacar los datos de otro campo
				campo=$(":input[name='"+metadata['cadena']+"']").val();
				//_error("campo de: "+metadata['parametro']+"."+campo);
				parametro_aux=eval(metadata['parametro']+"['"+campo+"']");
			}else
				parametro_aux=eval(metadata['parametro']);
		}else{
			parametro_aux=parametro[nombre];
		}

		//cargamos el valor en el seleccionable
		//input.val(id);

		//cargamos el valor en el footer del seleccionable

		//vemos en la metadata lo que va en el footer
		if(metadata['footer']=='text'){
			bloque.html(parametro_aux[id]);
		}else if(metadata['footer']=='none'){
			bloque.html("");
		}else if(metadata['footer']=='id'){ 
			bloque.html(id);
		}else if(metadata['footer']=='full'){ 
			bloque.html(id+". "+parametro_aux[id]);
		}else {//default full
			bloque.html(id+". "+parametro_aux[id]);
		}
		//vemos en la metadata si hay que poner el texto o el id.
		if(metadata['show']=='text'){
			//alert('voy a poner el text');
			seleccione.text(parametro_aux[id]);
		}else if(metadata['show']=='none'){
			seleccione.text("");
		}else if(metadata['show']=='id'){
			seleccione.text(id);
		}else if(metadata['show']=='full'){
			seleccione.text(id+". "+parametro_aux[id]);
		}else{//default id
			seleccione.text(id);
		}
	}
}

function parser_ayuda(){
	$(".ayuda").click(function(){
		var prev= $(this).parent();
		var prev= prev.parent();
		var input=$(":input", prev);
	        var nombre=input.attr("name");
		var pos=prev.position();
		//var offset=prev.offset();
		var offset=$(this).offset();
		var desplegable=$(".ayudas");
		//ya tenemos el parámetro, ahora cargamos los datos.
		//lo primero es ocultar el desplegable.
		desplegable.hide();

		//el <p></p> para inyectar el texto de ayuda
		var p = $("p",desplegable);

		var html=ayuda[nombre];

		p.html(html);

		//para calcular la altura tomamos el offset del div
		//y le agregamos la altura de la ayuda
		var altura_div=desplegable.height();
		var arriba=offset.top-altura_div;
		var izquierda=offset.left;
		desplegable.css("top",arriba);
		desplegable.css("left",izquierda);

		desplegable.show("slow");
	}
	);
}

function parser_select_familiar(){
	$(".seleccione_familiar").click(function(){
		var prev= $(this).parent();
		var seleccione=$(this);
		var input=$(":input", prev);
	        var inicio=input.val()*1;
		var termino=15;
		var pos=prev.position();
		var offset=prev.offset();
		var desplegable=$(".desplegable");
		//ya tenemos el parámetro, ahora cargamos los datos.
		//lo primero es ocultar el desplegable.
		desplegable.jScrollPaneRemove();
		desplegable.hide();
		var html="<ul>";
		for (var i=inicio;i<=termino;i++){
			html+="<li id='li_"+i+"'> "+i+"</li>\n";
		}
		html+="</ul>\n";
		desplegable.html(html);
		//para calcular la altura tomamos el offset del div le agregamos la altura 
		//del div y le restamos la altura del div con el valor del seleccionable
		var altura_div=prev.height(); // el valor es en "px" por eso el tratamiento especial
		var altura_div_info=$(".bloqueTexto", prev).height();
		var arriba=offset.top+altura_div-altura_div_info;;
		var izquierda=offset.left;
		//desplegable.css("top",arriba);
		//desplegable.css("left",izquierda);
		
		desplegable.show();
		//$("div",desplegable.parent()).show();
		desplegable.jScrollPane();
		//desplegable.parent().show();
		desplegable.parent().css("top",arriba);
		desplegable.parent().css("left",izquierda);
		desplegable.parent().css("z-index",1000);
		$('div',desplegable.parent()).css("z-index",1000);
		//ahora obtenemos el texto
		$(".desplegable li").click(function(){
			desplegable.jScrollPaneRemove();
			desplegable.hide();
			//obtenemos el ID del li.
			var aux=$(this).attr("id").split("_");
			var id=aux[1];
			input.val(id);
			seleccione.text(id);
			//ahora agregamos los familiares que faltan
			for (var i=0;i<(id-inicio);i++){
				//_error('parser_select_familiar: familiares:'+familiares);
				agrega_familiar(familiares);
				var context_ingreso=agrega_ingreso_familiar(familiares);
				//cargamos los eventos de las nuevas filas
				//no funca si pido los tr...
				var my_context = $("."+context_ingreso.attr("class"),context_ingreso.parent());
				parser_tabla_ingresos(my_context);
				familiares++;
			}
			//gatillo el chequeo de la tabla de familiares
			//eliminado para no estresar al postulante
			//marcador_tabla_familiares();
		});
		//hover para explorer 6
		//OJO
		//TODO cambiar los colores cuando se cambien en el css
		$(".desplegable li").hover(
			function(){
				//$(this).addClass("hover_ie6");
				$(this).css({'background-color' : '#999999'});
			},
			function(){
				//$(this).removeClass("hover_ie6");
				$(this).css({'background-color' : '#F6F6F6'});
			}
		);
	}
	);
}

function parser_select_min(){
	$(".seleccione_min").live("click",function(){
		var prev= $(this).parent();
		var seleccione=$(this);
		var input=$(":input", prev);
		//ahora obtenemos el nombre del parametro de la metadata...
	        var nombre=input.metadata().parametro;
		var pos=prev.position();
		var offset=prev.offset();
		var tope_derecho = $(window).width();
		var desplegable=$(".desplegable");
		//ya tenemos el parámetro, ahora cargamos los datos.
		//lo primero es ocultar el desplegable.
		desplegable.jScrollPaneRemove();
		desplegable.hide();
		var html="<ul>";
		for (var id in parametro[nombre]){
			html+="<li id='li_"+id+"'> "+parametro[nombre][id]+"</li>\n";
		}
		html+="</ul>\n";
		desplegable.html(html);
		//para calcular la altura tomamos el offset del div le agregamos la altura 
		//del div y le restamos la altura del div con el valor del seleccionable
		var altura_div=prev.height(); // el valor es en "px" por eso el tratamiento especial
		var altura_div_info=$(".bloqueTexto", prev).height();
		var arriba=offset.top+altura_div-altura_div_info;;
		var izquierda=offset.left;
		//ahora obtenemos el texto
		//desplegable.css("top",arriba);
		//desplegable.css("left",izquierda);

		var ancho_div=desplegable.width();
		if( (izquierda+ancho_div) > tope_derecho ){
			izquierda = izquierda - ancho_div + seleccione.width();
		}
		
		desplegable.show();
		//$("div",desplegable.parent()).show();
		desplegable.jScrollPane();
		//desplegable.parent().show();
		desplegable.parent().css("top",arriba);
		desplegable.parent().css("left",izquierda);
		desplegable.parent().css("z-index",1000);
		$('div',desplegable.parent()).css("z-index",1000);
		$(".desplegable li").click(function(){
			desplegable.jScrollPaneRemove();
			desplegable.hide();
			//obtenemos el ID del li.
			var aux=$(this).attr("id").split("_");
			var id=aux[1];
			input.val(id);
			seleccione.html(id);
			_error("plop");
			//gatillo el chequeo de la tabla de familiares
			marcador_dominio(input);
		});
		//hover para explorer 6
		//OJO
		//TODO cambiar los colores cuando se cambien en el css
		$(".desplegable li").hover(
			function(){
				//$(this).addClass("hover_ie6");
				$(this).css({'background-color' : '#999999'});
			},
			function(){
				//$(this).removeClass("hover_ie6");
				$(this).css({'background-color' : '#F6F6F6'});
			}
		);
	});
}

function carga_familiares(){
	//tomamos los datos de usuario y recogemos los familiares.
	//alert(datos_usuario.familiares.length);
	//_error('var familiares: '+familiares);
	//_error('familiares datos_usuario: '+datos_usuario.familiares.length);
	if(datos_usuario['familiares']){
		for (var i in datos_usuario.familiares){
			var familiar=datos_usuario.familiares[i];
			//_error('creando familiar: '+familiar.nombre_familiar);
			var context=agrega_familiar(i);//ingresa el template a la tabla familiares y retorna el tr
			var context_ingreso=agrega_ingreso_familiar(i);//ingresa el template a la tabla familiares y retorna el tr
			for(var j in familiar){
				//alert(j+": "+familiar[j]);
				$("."+j, context).val(familiar[j]);
			}
			var nombre=familiar.nombre_familiar+' '+familiar.apellido_paterno_familiar+' '+familiar.apellido_materno_familiar;
			$("td[rowspan='2']",context_ingreso).html(nombre);
			//ahora ingresamos los ingresos...
			for (var j in familiar.ingresos){
				var total=0;
				for(var h in familiar.ingresos[j]){
					//_error("voy a cargar el familiar: input[name=\"familiares["+i+"][ingresos]["+j+"]["+h+"]\"] con:"+familiar.ingresos[j][h]);
					$("input[name=\"familiares["+i+"][ingresos]["+j+"]["+h+"]\"]").val(familiar.ingresos[j][h]);
					//calculamos el total.
					//forzamos base 10 por si vienen 0's al principio
					total+= parseInt(familiar.ingresos[j][h],10);
				}
				$("#total_"+i+"_"+j).html(total);
				//alert(total);
			}
			//cargamos los eventos de las nuevas filas
			//no funca si pido los tr...
			var my_context = $("."+context_ingreso.attr("class"),context_ingreso.parent());
			parser_tabla_ingresos(my_context);

			//ahora asignamos los valores existentes a los select_min.
			$(".caja_selecciona_min",context).each(function(){
					//buscamos el input y sacamos el valor.
					var input=$(":input",$(this));
					var val=input.val();
					//ahora buscamos el span y lo asignamos
					$("span",$(this)).html((val!='')?val:"Sel");
					});

		}
		//ahora asignamos el numero de familiares al select.
		familiares=datos_usuario.familiares.length;
	}else{
		familiares=0;
	}
	//_error('familiares: '+familiares);
	//actualizamos el seleccionable
	$(":input",$(".seleccione_familiar").parent()).val(familiares+1);
	$("span",$(".seleccione_familiar").parent()).html(familiares+1);
}

function agrega_familiar(id){
	var tr=$("<tr></tr>");
	var html='<td>\n\
<span><input name="familiares['+id+'][nombre_familiar]" class="nombre_familiar {titulo: \'Nombres\'}" size="10" maxlength="200" type="text"/></span>\n\
 </td>\n\
 <td>\n\
<span><input name="familiares['+id+'][apellido_paterno_familiar]" class="apellido_paterno_familiar {titulo: \'Apellido paterno\'}" size="10" maxlength="200" type="text"/></span>\n\
</td>\n\
 <td>\n\
<span><input name="familiares['+id+'][apellido_materno_familiar]" class="apellido_materno_familiar {titulo: \'Apellido materno\'}" size="10" maxlength="200" type="text"/></span>\n\
</td>\n\
 <td>\n\
<span><input name="familiares['+id+'][rut_familiar]" class="rut_familiar {titulo: \'RUT\'}" size="10" maxlength="10" type="text"/> - <input name="familiares['+id+'][rut_familiar_dv]" class="rut_familiar_dv {titulo: \'DV\'}" size="1" maxlength="1" type="text"/></span>\n\
</td>\n\
 <td>\n\
<span><input name="familiares['+id+'][edad_familiar]" class="edad_familiar {titulo: \'Edad\'}" size="2" type="text"/></span>\n\
</td>\n\
 <td>\n\
 <div class="caja_selecciona_min">\n\
 <span class="seleccione_min">\n\
Sel</span>\n\
 <input type="hidden" name="familiares['+id+'][estadocivil]" class="estadocivil {parametro: \'estadocivil\', titulo: \'Estado Civil\'}"/>\n\
 </div>\n\
 </td>\n\
 <td>\n\
 <div class="caja_selecciona_min">\n\
 <span class="seleccione_min">\n\
Sel</span>\n\
 <input type="hidden" name="familiares['+id+'][parentesco]" class="parentesco {parametro: \'parentesco\' ,titulo: \'Parentesco\'}"/>\n\
 </div>\n\
 </td>\n\
 <td>\n\
 <div class="caja_selecciona_min">\n\
 <span class="seleccione_min">\n\
Sel</span>\n\
 <input type="hidden" name="familiares['+id+'][previsionsocial]" class=" previsionsocial {parametro: \'previsionsocial\', titulo: \'Previsión social\'}"/>\n\
 </div>\n\
 </td>\n\
 <td>\n\
 <div class="caja_selecciona_min">\n\
 <span class="seleccione_min">\n\
Sel</span>\n\
 <input type="hidden" name="familiares['+id+'][previsionsalud]" class="previsionsalud {parametro: \'previsionsalud\', titulo: \'Previsión salud\'}"/>\n\
 </div>\n\
 </td>\n\
 <td>\n\
 <div class="caja_selecciona_min">\n\
 <span class="seleccione_min">\n\
Sel</span>\n\
 <input type="hidden" name="familiares['+id+'][actividad]" class="actividad {parametro: \'actividad\', titulo: \'Actividad\'}"/>\n\
 </div>\n\
 </td>\n\
 <td>\n\
 <div class="caja_selecciona_min">\n\
 <span class="seleccione_min">\n\
Sel</span>\n\
 <input type="hidden" name="familiares['+id+'][estudios]" class="estudios {parametro: \'estudios\', titulo: \'Nivel de estudios\'}"/>\n\
 </div>\n\
 </td>\n\
 <td>\n\
<span id="'+id+'"class="eliminar vinculo">\n\
eliminar</span>\n\
</td>\n\
\n\
';
	tr.html(html);

	//_error(html);
	tr.appendTo($("#familiares"));
	/*
	 * carga los blur aca
	 * pero no soporta contexto
	 * lo que sobrecargaria el blur de los otros campos
	 */
	parser_nombre_familiar(tr);
	parser_apellido_paterno_familiar(tr);
	parser_apellido_materno_familiar(tr);
	parser_rut_familiar(id);
	parser_rut_familiar_dv(id);
	parser_edad_familiar(tr);
	//agregamos el evento para validacion
	$(".caja_selecciona_min :input",tr).blur(function(){
		marcador_dominio($(this));
	});

	return tr;
}

function agrega_ingreso_familiar(id){
	var html='<td rowspan="2" class="columna_nombre_ingresos_familiares"></td>\n';
 	//se cargan los datos de los ingresos.
	var class_agno="ingreso_anterior";
	var class_ingreso="";
	var agno=2008;
	var total=0;
	var retorno;
	for(var i=0;i<2;i++){
		var tr=$("<tr class='tr_"+id+"'></tr>");
		html+='<td class="celda_agnos"><span class="'+class_agno+'">'+agno+'</span></td>\n';
		//TODO recordar hacer variable los años...
		for(var j=0;j<8;j++){
			html+='<td '+class_ingreso+'><input type="text" name="familiares['+id+'][ingresos]['+i+']['+j+']" size="9" maxlength="9" value="0" class="{titulo: \'Ingreso de familiar\'}" /></td>\n';
		}
		html+='<td class="el_total"><span id="total_'+id+'_'+i+'">'+total+'</span></td>\n';
		tr.html(html);
		tr.appendTo("#ingresos");
		html='';
		agno=2009;
		total=0;
		class_agno="ingreso_actual";
		class_ingreso='class="fondo_ingresoActual"';
		if(i==0){ retorno=tr;}
	}
	return retorno;
}

/*
function parser_tabla_ingresos(context){
	//cargamos los eventos
	$(":input",context).focus(function(){
			_error("focus");
			if( primer_input ){
				jQuery.facebox('<H1>RU63-Alerta Ingresos Mensuales : Se debe alertar al postulante cuando se sitúe por primera vez en  cualquier input de datos de la pestaña correspondiente a "ingresos del grupo familiar", que los valores ingresados deben ser mensuales, se le tira un facebox.</H1><img src="images/volver.jpg" alt="volver" class="close" />');
				primer_input = false;
			}
			focus_input_tabla_ingresos($(this));
			$(this).select();
	});
	$(":input",context).blur(function(){
			if(marcador_ingreso($(this))){
				clean_format_input($(this));
				actualizar_total_fila($(this));
				actualizar_ingresos_totales();
			}
	});
	//aprovechamos de formatear
	$(":input",context).each(function(){
			clean_format_input($(this));
	});
	actualizar_ingresos_totales();
}

*/

function parser_tabla_ingresos(context){
	//cargamos los eventos
	$(":input",context).focus(helper_focus_tabla_ingresos);
	$(":input",context).blur(helper_blur_tabla_ingresos);
	//aprovechamos de formatear
	$(":input",context).each(function(){
			clean_format_input($(this));
	});
	actualizar_ingresos_totales();
}

function helper_focus_tabla_ingresos(){
	//OJO con esto
	var input = $(this);
	if( typeof(primer_input) != undefined ){
		if( primer_input ){
			jQuery.facebox('<div class="alertas"><H1>Recuerda:</H1><p>Lo que debes declarar es el PROMEDIO MENSUAL  de los ingresos obtenidos durante el año (es decir, dividir el ingreso anual por 12 en 2008 y por 10 en 2009)</p><img src="images/volver.jpg" alt="volver" class="close" /></div>');
			primer_input = false;
		}
	}
	focus_input_tabla_ingresos(input);
	input.select();
}

function helper_blur_tabla_ingresos(){
	//OJO con esto
	var input = $(this);
	if(marcador_ingreso(input)){
		clean_format_input(input);
		actualizar_total_fila(input);
		actualizar_ingresos_totales();
	}
}

function focus_input_tabla_ingresos(input){
	//tomar el valor
	var valor = input.val();
	//pasarlo a int
	valor = clean_ingreso(valor);
	//actualizar el input
	input.val(valor);
}

function clean_format_input(input){
	//se asume que está validado
	var tmp = clean_ingreso(input.val());
	input.val(format_ingreso(tmp));
}

function actualizar_nombre_ingreso(input){
	//contexto
	var my_context = input.parent().parent().parent();
	//le saco el name
	var name = input.attr("name");
	//le saco el id
	var filter=/^familiares\[(\d+)\]\[(.*)\]$/;
	var my_id = filter.exec(name)[1];
	var nombre_1 = $(".nombre_familiar",my_context).val();
	var nombre_2 = $(".apellido_paterno_familiar",my_context).val();
	var nombre_3 = $(".apellido_materno_familiar",my_context).val();
	var nombre = nombre_1+' '+nombre_2+' '+nombre_3 ;

	//actualizamos en la tabla de ingresos
	$("#ingresos .tr_"+my_id+" .columna_nombre_ingresos_familiares").html(nombre);

}

function actualizar_total_fila(input){
	//actualizo el total
	var total = 0;
	var tr = input.parent().parent();
	$(":input",tr).each(function(i){
			//_error("campo: "+i+" val: "+$(this).val());
			var tmp = $(this).val().replace(/[^\d]/g,"");
			//forzamos base 10 por si vienen 0's al principio
			total+=parseInt(tmp,10);
	});
	//formatear total
	total = format_ingreso(total);
	$(".el_total span",tr).html(total);
	return total;
}

function actualizar_ingresos_totales(){
	var minimo_anual = 5000;
	var tabla_ingresos = $("#ingresos");
	//aprovechamos de formatear los totales
	var tmp = "";
	$(".el_total span",tabla_ingresos).each(function(){
			tmp = clean_ingreso($(this).html());
			$(this).html(format_ingreso(tmp));
	});
	
	var total = [0,0];
	var year = [2008,2009];
	var id = "";
	$(".el_total span",tabla_ingresos).each(function(){
			id = $(this).attr("id");
			//ej: total_2_0
			id = id.split('_')[2];
			total[id]+=clean_ingreso($(this).html());
	});
	$(".total_ingreso_"+year[0]+"_0").html(format_ingreso(total[0]));
	$(".total_ingreso_"+year[1]+"_1").html(format_ingreso(total[1]));
	//validamos que sean mayores que 0.
	$(".total_ingreso_"+year[0]+"_0").parent().toggleClass("error", total[0] < minimo_anual );
	$(".total_ingreso_"+year[1]+"_1").parent().toggleClass("error", total[1] < minimo_anual );
}

