/*
 * Gestiona las propiedades ARIA de los elementos de la pagina.
 */
jQuery(function($) {

//	//Checkboxes con estilos
//	$("input[type='checkbox']").each(function(){
//		$(this).after("<label for='"+$(this).attr('id')+"' class='checkbox-label'></label>");
//		$(this).css({"position":"absolute","left":"-9999px"});
//	});
//	//Radios con estilos
//	$("input[type='radio']").each(function(){
//		$(this).after("<label for='"+$(this).attr('id')+"' class='radio-label'></label>");
//		$(this).css({"position":"absolute","left":"-9999px"});
//	});
//    
	// Subsecciones que pueden contraerse/expandirse
	$("fieldset[aria-seccion-toggle='true']:not([aria-seccion-toggle-created='true'])").each(function(){
		$(this).attr('aria-seccion-toggle-created',true);
		$(this).addClass('clsSeccionPlegable-container');
		$(this).append("<div class='clsSeccionPlegable'></div>");
		$(this).children().not("legend").not(".clsSeccionPlegable").appendTo($(this).children(".clsSeccionPlegable"));
		$(this).children("legend").bind("click",function(e){
			//quitar puntos (si hay)
			$(this).parent().find("span.clsSeccionOculta").remove();
			$(this).siblings('.clsSeccionPlegable').slideToggle(200,"swing",function(){
				if(!$(this).is(":visible")){
					//poner puntos
					$(this).after("<span class='clsSeccionOculta'>...</span>");
				}
			});
			e.stopPropagation();
		});
		if($(this).attr('aria-seccion-toggle-hidden') == 'true'){
			$(this).children("legend").click();
		}
	});

	// Propiedad que habilita maxlength en los textareas
	$("textarea[aria-maxlength]").keyup(function() {
	    // Store the maxlength and value of the field.
	    var maxlength = $(this).attr('aria-maxlength');
	    var val = $(this).val();
	    // Trim the field if it has content over the maxlength.
	    if (val.length > maxlength) {
	        $(this).val(val.slice(0, maxlength));
	    }
	});

	// Propiedad que impide poner saltos de linea en un textarea
	$("textarea[aria-preventEnter='true']").on("keyup blur", function(event) {
		// Reemplaza los saltos de linea por si ha pegado un texto
		$(this).val($(this).val().replace(/(?:\r\n|\r|\n)/g, ' '));
	});

	// Reemplaza las comillas dobles por comillas simples
	$("textarea[aria-escapeDoubleQuotes]").on("blur", function(event) {
		// Reemplaza las comillas dobles por comillas simples
		$(this).val($(this).val().replace(/["']/g, "\'"));
	});

	// Propiedad que asocia uan funcion de conversion a mayúsculas
	$("[aria-upperCase='true']").bind("blur", function(event){
		event.target.value = event.target.value.toUpperCase();
	});

	// Propiedad que solo permite numeros (sin decimales)
	$("[aria-soloNumeros='true']").each(function () {
		$(this).numeric(false);
	});

	// Propiedad que solo permite numeros (con decimales)
	$("[aria-soloDecimales='true']").each(function () {
		$(this).numeric(",");
	});
//    //Clase que solo permite numeros (con decimales)
//    $("[aria-soloDecimales='true']:not([aria-soloDecimales-created='true'])").each(function () {
//		$(this).attr('aria-soloDecimales-created',true);
//		$(this).numeric(",");
//		
//		$(this).rup_tooltip({
//			content:{
//				title:$.rup.i18n.app.formato.title,
//				text:$.rup.i18n.app.formato.campo["num2decimales"]
//			}
//		});
//	  	$(this).on("focusout",function(){
//	  		//Valida contra expresion regular
//	  		if($(this).val()!='' && !REGEXP_NUM_2_DECIMALES.test($(this).val())){
//	  			var valor = $(this).val();
//	  			$(this).val('');
//	  			$(this).focus();
//	  			$.rup_messages("msgAlert", {
//	  				minWidth:WIDTH_DIALOG,
//						title : $.rup.i18n.app.formato.error["numero"],
//	  				message : jQuery.rup.i18nTemplate($.rup.i18n.app,"formato.error.mensaje_ini",$.rup.i18n.app.formato.campo["num2decimales"])
//					});
//	  			$(this).val(valor);
//	  		}
//	  	});
//	});
//    
//	// Expresion regular que valida numeros con dos decimales:
//    var REGEXP_NUM_2_DECIMALES = /^(\d+|\d+,\d{1,2})$/;
    
//    $("[aria-fecha='true']:not([aria-fecha-created='true'])").each(function(){
//		$(this).attr('aria-fecha-created',true);
//    	$(this).rup_date ({
//    		onClose:function(dateText){
//    			if (dateText != "" && !$.rup_validate.checkDate($.rup.i18n.base.rup_validate.format.date, dateText)) {
//    				$.rup_messages("msgError", {
//        				minWidth: WIDTH_DIALOG,
//    					title : $.rup.i18n.app.formato.error["fecha"],
//    					message : jQuery.rup.i18nTemplate($.rup.i18n.app,"formato.error.mensaje_ini",$.rup.i18n.app.formato.campo["fecha"])
//    				});
//    			}
//    			
//    		}
//    	});
//    	$(this).rup_tooltip({
//    		content:{
//    			title:$.rup.i18n.app.formato.title,
//    			text:$.rup.i18n.app.formato.campo["fecha"]
//    		}
//    	});
//    });
    
    // Expresion regular que valida importes (numeros con dos decimales):
    var REGEXP_IMPORTE = /^([\d\.]*\d+(,\d{1,2})?)$/;
    var WIDTH_DIALOG_IMPORTE = 450;
    // Campos de tipo 'importe' monetario
    $("[aria-importe='true']:not([aria-importe-created='true'])").each(function() {
		$(this).attr('aria-importe-created', true);
		$(this).wrap('<div style="position:relative;display:inline-block"></div>');
		// FIX. Necesario crear una label oculta al mismo nivel del input, para la validacion javascript de formularios.
		var label_input = $("label[for="+$(this).attr('id')+"]").clone();
		label_input.css("display", "none");
		$(this).before(label_input);
    	var css = "";
    	if($(this).css("color")) {
    		css="color:"+$(this).css("color");
    	}
    	$(this).after("<span class='monedaInputImporte' style='"+css+"'>&euro;</span>");

    	// Funcion de formateo:
    	var format_importe = function($input, simboloMiles, simboloDecimales){
			// Formateo del importe si no es vacio:
    		var val = $input.val();
    		if(val != '' && REGEXP_IMPORTE.test(val)){
    			// Tratar puntos y comas
    			val = val.replace(new RegExp("\\"+simboloMiles, 'g'),'');
    			var partes = val.split(simboloDecimales);
				partes[1] = (partes.length>1)?parseFloat("0."+partes[1]).toFixed(2).toString().substr(2):"00";
    			if(partes[0].length > 3){
    				//Miles, millones,...
    				var num_miles = parseInt(partes[0].length / 3);
    				var miles_pos = partes[0].length % 3;
    				var aux="";
    				if(miles_pos>0){
    					aux = partes[0].substr(0, miles_pos);
    				}else{
    					num_miles--;
    					miles_pos += 3;
    					aux = partes[0].substr(0, 3);
    				}
    				for(i=0;i<num_miles;i++){
    					aux += simboloMiles + partes[0].substr(miles_pos, 3);
    					miles_pos += 3;
    				}
    				partes[0] = aux;
    			}
    			$input.val(partes[0] + simboloDecimales + partes[1]); 
    		}
    	};
    	
    	$(this).on("focusout",function(){
    		//Valida contra expresion regular
    		if($(this).val()!='' && !REGEXP_IMPORTE.test($(this).val())){
    			$(this).val('');
    			$(this).focus();
    			$.rup_messages("msgError", {
    				minWidth: WIDTH_DIALOG_IMPORTE,
					title : $.rup.i18n.app.formato.error["importe"],
    				message : jQuery.rup.i18nTemplate($.rup.i18n.app,"formato.error.mensaje_ini",$.rup.i18n.app.formato.campo["importe"])
				});
    		}else{
    			// Formateo del importe:
    			format_importe($(this),".",",");
    		}
    	});
    	$(this).on("change",function(){
			// Formateo del importe:
			format_importe($(this),".",",");
    	});
    	$(this).trigger('change');
    });
});