function jConfirm(mensaje, titulo, callback){
	var $dialog = $('<div></div>')
	.html(mensaje)
	.dialog({autoOpen: false,title: titulo, resizable: false, modal: true, width: 450,
		buttons:{
			Aceptar: function(){if( callback ) callback(1);$(this).dialog("close")},
			Cancelar: function(){if( callback ) callback(0);;$(this).dialog("close")}
		}
	})
	.dialog('open');
}
//*********forms***********//
function validarFin(campo,mensaje,destino){
	if(destino==null) {
		var cambiar=(campo.prev().is("br"))?campo.prev().prev():campo.prev();
		if(mensaje!=""){
			cambiar.html(mensaje).fadeIn("slow");
			return false;
		}else{
			cambiar.fadeOut("fast");
			return true;
		}
	}else{
		if(destino=="") return mensaje;//para cuando queremos sacar el error por otro sitio
		else{
			if(mensaje!=""){
				destino.html(mensaje).fadeIn("slow");
				return false;
			}else{
				destino.fadeOut("fast");
				return true;
			}				
		}
	}
}
function validarTexto(campo,obligatorio,minimo,maximo,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		if(campo.val().length<minimo) msg="Este campo debe tener al menos "+minimo+" caracteres.";
		if(campo.val().length>maximo) msg="Este campo no puede sobrepasar "+maximo+" caracteres (actualmente "+campo.val().length+").";
	}
	return validarFin(campo,msg,destino);
}
function validarTextoMemo(campo,obligatorio,minimo,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		if(campo.val().length<minimo) msg="Este campo debe tener al menos "+minimo+" caracteres.";
	}
	return validarFin(campo,msg,destino);
}
function validarMail(campo,obligatorio,maximo,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		if(campo.val().length>maximo) msg="Este campo no puede sobrepasar "+maximo+" caracteres (actualmente "+campo.val().length+").";
		else{
			var filter = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
			if(!filter.test(campo.val())) msg="El mail es incorrecto";
		}
	}
	return validarFin(campo,msg,destino);
}
function validarFecha(campo,obligatorio,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		var filter = /^(((0[1-9]|[12][0-9]|3[01])([/])(0[13578]|10|12)([/])(\d{4}))|(([0][1-9]|[12][0-9]|30)([/])(0[469]|11)([/])(\d{4}))|((0[1-9]|1[0-9]|2[0-8])([/])(02)([/])(\d{4}))|((29)(\.|-|\/)(02)([/])([02468][048]00))|((29)([/])(02)([/])([13579][26]00))|((29)([/])(02)([/])([0-9][0-9][0][48]))|((29)([/])(02)([/])([0-9][0-9][2468][048]))|((29)([/])(02)([/])([0-9][0-9][13579][26])))$/;
		if(!filter.test(campo.val())) msg="La fecha es incorrecta";
	}
	return validarFin(campo,msg,destino);
}

function validarCheck(cajonChecks,minimo,maximo,destino){
	var msg="";
	if($(cajonChecks+" input:checked").length<minimo) msg="Debe seleccionar al menos "+minimo+(minimo==1?" opci&oacute;n":" opciones")+".";
	else if($(cajonChecks+" input:checked").length>maximo) msg="No puede seleccionar mas de "+maximo+(maximo==1?" opci&oacute;n":" opciones")+".";
	return validarFin($(cajonChecks),msg,destino);
}
function validarAceptar(campo,campoerror,msg){
	if(campo.attr("checked")){
		campoerror.fadeOut("fast");
		return true;
	}else{
		campoerror.html(msg).fadeIn("slow");
		return false;
	}
}
function validarClaveNumMinMay(campo,obligatorio,minimo,maximo,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		var filter=new RegExp('^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{'+minimo+','+maximo+'}$');
		if(!filter.test(campo.val())) msg=(minimo==maximo)?maximo+" caracteres alfanum&eacute;ricos con al menos un n&uacute;mero, una letra en min&uacute;scula y otra may&uacute;sculas.":"Entre "+minimo+" y "+maximo+" caracteres alfanum&eacute;ricos con al menos un n&uacute;mero, una letra en min&uacute;scula y otra may&uacute;sculas.";
	}
	return validarFin(campo,msg,destino);
}
function validarClaveNumTxt(campo,obligatorio,minimo,maximo,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		var filter=new RegExp('^(?=.*\\d)(?=.*[a-zA-Z]).{'+minimo+','+maximo+'}$');
		if(!filter.test(campo.val())) msg=(minimo==maximo)?maximo+" caracteres alfanum&eacute;ricos con al menos un n&uacute;mero y una letra.":"Entre "+minimo+" y "+maximo+" caracteres alfanum&eacute;ricos con al menos un n&uacute;mero y una letra.";
	}
	return validarFin(campo,msg,destino);
}

function soloNum(campo,obligatorio,minimo,maximo,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		var filter=/^\d+$/;
		if (!filter.test(campo.val())) msg="Solo se permiten n&uacute;meros.";
		else{
			if(campo.val().length>maximo) msg="Este campo no puede sobrepasar "+maximo+" caracteres (actualmente "+campo.val().length+").";
			if(campo.val().length<minimo) msg="Este campo no puede sobrepasar "+maximo+" caracteres (actualmente "+campo.val().length+").";
		}
	}
	return validarFin(campo,msg,destino);
}

//mínimo y máximo si no los hay que tener en cuenta, poner -1
function validarEntero(campo,obligatorio,minimo,maximo,destino){
	var msg="";
	var aspirante;
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		aspirante=campo.val().replace(/\./g,'');//quitamos los puntos
		var filter=/^\d+\.?\d*$/;
		if (!filter.test(aspirante)) msg="No es un n&uacute;mero entero.";
		else{
			if((minimo!=-1)&&(parseInt(aspirante)<minimo)) msg="Es menor que el m&iacute;mo permitido ("+minimo+").";
			if((maximo!=-1)&&(parseInt(aspirante)>maximo)) msg="Es mayor que el m&aacute;ximo permitido ("+maximo+").";
			if(msg=="") campo.val(formatearNumero(aspirante));
		}
	}
	return validarFin(campo,msg,destino);
}
function validarDecimal(campo,obligatorio,minimo,maximo,decimales,destino){
	var msg="";
	var aspirante,partesnum;
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		aspirante=campo.val().replace(/^\s+|\s+$/g,'').replace(/\./g,'');
		var filter=new RegExp('^\\d+(\\,\\d{0,'+decimales+'})?$');
		if (!filter.test(aspirante)) msg="No es decimal permitido (m&aacute;x. decimales "+decimales+").";
		else{
			aspirante=aspirante.replace(/\,/g,'.');
			if((minimo!=-1)&&(parseFloat(aspirante)<minimo)) msg="Es menor que el m&iacute;mo permitido ("+minimo+").";
			if((maximo!=-1)&&(parseFloat(aspirante)>maximo)) msg="Es mayor que el m&aacute;ximo permitido ("+maximo+").";
			if(msg==""){
				aspirante=formatearNumero(aspirante.replace(/\./g,','));
				partesnum=aspirante.split(",");
				if(partesnum.length==2){
					while(partesnum[1].length<decimales) partesnum[1]+="0"
					aspirante=partesnum[0]+","+partesnum[1];
				}else{
					aspirante+=",";
					for(i=1;i<=decimales;i++) aspirante+="0";
				}
				campo.val(aspirante);
			}
		}
	}
	return validarFin(campo,msg,destino);
}
function formatearNumero(n){
	n=String(n);
	var RgX=/^(.*\s)?([-+\u00A3\u20AC]?\d+)(\d{3}\b)/;
	return n==(n=n.replace(RgX,"$1$2.$3"))?n:formatearNumero(n);
}
function formatearFechaMysqlEsp(f){
	if(f!=""){
		var a=f.split("-");
		return a[2]+"/"+a[1]+"/"+a[0];
	}else return "";
}

function cambialista(){
	if ($(this).attr("checked")) $(this).parent().addClass("act");
	else $(this).parent().removeClass("act");
}
function cambialistaDestino(obj, capa){
	var caja=document.getElementById(capa+obj.val());
	if (obj.attr("checked")) $(caja).addClass("act");
	else $(caja).removeClass("act");
}
function cambiaListaRadio(campo){
	campo.parent().parent().find(".act").removeClass("act");
	campo.parent().addClass("act");
}
// Validación de CIF de la nueva normativa de la Orden EHA/451/2008
function validarCif(campo,obligatorio,destino){
	campo.val(campo.val().replace(/^\s+|\s+$/g,'').toUpperCase());
	var cif=campo.val();
	var par=0;
	var non=0;
	var letras="ABCDEFGHJKLMNPRQSUVW";
	var caracterControlLetra="KPQS";
	var caracterControlNum="ABEH";
	var i,parcial,control;
	var controlLetra="JABCDEFGHIJ";
	var letraIni=cif.charAt(0);
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,''));
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		if(cif.length!=9) msg="El Cif no es v&aacute;lido";
		else{
			if(letras.indexOf(letraIni.toUpperCase())==-1) msg="El Cif no es v&aacute;lido";
			for (i=2;i<8;i+=2) par=par+parseInt(cif.charAt(i));
			for (i=1;i<9;i+=2){
				var nn=2*parseInt(cif.charAt(i));
				if (nn>9) nn=1+(nn-10);
				non=non+nn;
			}
			parcial=par+non;
			control=(10-(parcial%10));
			if(caracterControlLetra.indexOf(letraIni.toUpperCase())!=-1){
// El caracter de control deberá ser una letra
				if(controlLetra.charAt(control)!=cif.charAt(8).toUpperCase()) msg="El Cif no es v&aacute;lido";
			}
			if (caracterControlNum.indexOf(letraIni.toUpperCase())!=-1){
// El caracter de control deberá ser un número
				if(control==10) control=0;
				if (control!=cif.charAt(8)) msg="El Cif no es v&aacute;lido";
			}
			if ((caracterControlLetra.indexOf(letraIni.toUpperCase())==-1)&&(caracterControlNum.indexOf(letraIni.toUpperCase())==-1)){
// En este caso el carácter de control puede ser una letra o un número
				if (control==10) control=0;
				if ((controlLetra.charAt(control)!=cif.charAt(8).toUpperCase())&&(control!=cif.charAt(8))) msg="El Cif no es v&aacute;lido";
			}
		}
	}
	return validarFin(campo,msg,destino);
}
function validarNif(campo,obligatorio,destino){
	var msg="";
	campo.val(campo.val().replace(/^\s+|\s+$/g,'').toUpperCase());
	if(obligatorio&&(campo.val()=="")) msg="Este campo es obligatorio.";
	else if(obligatorio||(campo.val()!="")){
		if(campo.val().length!=9) msg="El Nif no es v&aacute;lido.";
		if(msg==""){
			var numero=campo.val().substr(0,campo.val().length-1);
			var let=campo.val().substr(campo.val().length-1,1);
			let=let.toUpperCase();
			numero=numero%23;
			var letra='TRWAGMYFPDXBNJZSQVHLCKET';
			letra=letra.substring(numero,numero+1);    
			if(letra!=let) msg="El NIF no es v&aacute;lido";
		}
	}
	return validarFin(campo,msg,destino);
}
function serializar(formulario){
var i,j
var cadena="";
	for (i=0;i<formulario.length;i++){
		if(formulario[i].type=="checkbox"){//checkbox
			if(formulario[i].length==undefined){
				if(formulario[i].checked) cadena+=formulario[i].name+"="+escape(formulario[i].value)+"&";
			}else{
				for(j=0;j<formulario[i].length;j++){
					if(formulario[i][j].checked) cadena+=formulario[i][j].name+"="+escape(formulario[i][j].value)+"&";
				}
			}
		}
		else if(formulario[i].type=="radio"){//radiobutton
			if(formulario[i].checked) cadena+=formulario[i].name+"="+escape(formulario[i].value)+"&";
		}
		else if(formulario[i].type=="select-multiple"){
			for(j=0; j<formulario[i].length;j++){
				if(formulario[i][j].selected) cadena+=formulario[i].name+"="+escape(formulario[i][j].value)+"&";
			}
		}
		else cadena+=formulario[i].name+"="+escape(formulario[i].value)+"&"//resto de tipos de campos
	}
	return(cadena.replace(/\+/g,"%2B"));
}
function buscarArr(elarray, valor, campo){
	var encontrado=-1;
	var i=0;
	while ((i<elarray.length) && (encontrado==-1)){
		if (eval("elarray[i]."+campo)==valor) encontrado=i;
		else i++;
	}
	return encontrado;
}
function formLimpiar(formulario){
	var items=formulario.elements;
	var tipo="";
	formulario.reset();
	for(i=0;i<items.length;i++){
		tipo=items[i].type.toLowerCase();
		switch(tipo){
		case "text":
		case "password":
		case "textarea":
		case "hidden":  
			items[i].value="";
			break;
		case "radio":
		case "checkbox":
			if(items[i].checked){
				items[i].checked = false;
			}
			break;
		case "select-one":
		case "select-multi":
			items[i].selectedIndex = -1;
			break;
		default:
			break;
		}
	}
}
//*********fin forms***********//
