Validation.add('validate-fitxerSel', '', function(v) {
    return  ((v != '') && (v != 0));
});

Validation.add('requiredFile', '', function(v, elm) {
    return  ((v != '') || ($(elm.name + '_antf').value != ''));
});

Validation.add('required-one-checked', '', function(v, elm){
    var clase = elm.className;
    clase = clase.sub('required-one-checked', '');
    clase = clase.sub('validation-failed', '');
    clase = clase.sub('validation-passed', '');
    clase = clase.strip();
    elem = $$('input.'+clase);
    alguno = false;
    
    for(cont = 0; cont < elem.length; cont++){
        alguno = alguno || elem[cont].checked;
    }
    return alguno;
});

Validation.add('validate-complete', '', function(value, element) {
	if(value != ''){
		return (value.length == element.getAttribute('maxlength'));
	}
	return true;
});

Validation.add('validate-dni', '', function(value, element){
	var regExpDni = /^[0-9]{8}[a-zA-Z]{1}$/;
	var regExpNIE = /^[a-zA-Z]{1}[0-9]{7}[a-zA-Z]{1}$/;
	return regExpDni.test(value) || regExpNIE.test(value);
});

Validation.add('validate-cif', '', function(v, elm){
	var pares = 0;
	var impares = 0;
	var suma;
	var ultima;
	var unumero;
	var uletra = new Array("J", "A", "B", "C", "D", "E", "F", "G", "H", "I");
	var xxx;
        
	v = v.toUpperCase();
        
	var regular = new RegExp(/^[ABCDEFGHKLMNPQS]\d\d\d\d\d\d\d[0-9,A-J]$/g);
	if (!regular.exec(v)) return false;
             
    ultima = v.substr(8,1);

    for (var cont = 1 ; cont < 7 ; cont ++){
		xxx = (2 * parseInt(v.substr(cont++,1))).toString() + "0";
        impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
        pares += parseInt(v.substr(cont,1));
    }
    xxx = (2 * parseInt(v.substr(cont,1))).toString() + "0";
    impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
         
    suma = (pares + impares).toString();
    unumero = parseInt(suma.substr(suma.length - 1, 1));
    unumero = (10 - unumero).toString();
    if(unumero == 10) unumero = 0;
         
    return ((ultima == unumero) || (ultima == uletra[unumero]))
});

Validation.add('validate-letters', '', function (v, elm) {
	return Validation.get('IsEmpty').test(v) ||  /^[a-zA-ZñÑçÇáéíóúàèìòùäëïöüÁÉÍÓÚÀÈÌÒÙÄËÏÖÜ ]+$/.test(v)
});

Validation.add('validate-age', '', function(v, elm){
	return true;
	/*if(v == ""){
		return true;
	}
	dataNaixement = v.split('/');
	diaNaixement = dataNaixement[0];
	mesNaixement= dataNaixement[1];
	anyNaixement = dataNaixement[2];

	var edad;
	var now = new Date();
	var diaActual = now.getDate();
	var mesActual = now.getMonth() + 1;
	var anyActual = now.getYear() + 1900;
		
	edad = (anyActual - anyNaixement) - 1;
	if(mesActual > mesNaixement) edad++;
	if((mesActual == mesNaixement) && (diaActual >= diaNaixement))	edad++;
	
	return edad > elm.getAttribute("edadMin");*/
});

Validation.add("validate-nif-cif-nie", "", function(a, elm) {
    //Retorna: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF error, -2 = CIF error, -3 = NIE error, 0 = ??? error
    var temp = a.toUpperCase();
    var cadenadni = "TRWAGMYFPDXBNJZSQVHLCKE";

    if (temp !== '') {
        //si no tiene un formato valido devuelve error
        if ((!/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(temp) && !/^[T]{1}[A-Z0-9]{8}$/.test(temp)) && !/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
            return false;
        }

        //comprobacion de NIFs estandar
        if (/^[0-9]{8}[A-Z]{1}$/.test(temp)) {
            posicion = a.substring(8, 0) % 23;
            letra = cadenadni.charAt(posicion);
            var letradni = temp.charAt(8);
            return (letra == letradni);
        }

        //algoritmo para comprobacion de codigos tipo CIF
        suma = parseInt(a[2]) + parseInt(a[4]) + parseInt(a[6]);
        for (i = 1; i < 8; i += 2) {
            temp1 = 2 * parseInt(a[i]);
            temp1 += '';
            temp1 = temp1.substring(0, 1);
            temp2 = 2 * parseInt(a[i]);
            temp2 += '';
            temp2 = temp2.substring(1, 2);
            if (temp2 == '') {
                temp2 = '0';
            }

            suma += (parseInt(temp1) + parseInt(temp2));
        }
        suma += '';
        n = 10 - parseInt(suma.substring(suma.length - 1, suma.length));

        //comprobacion de NIFs especiales (se calculan como CIFs)
        if (/^[KLM]{1}/.test(temp)) {
            return (a[8] == String.fromCharCode(64 + n));
        }

        //comprobacion de CIFs
        if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(temp)) {
            temp = n + '';
            return (a[8] == String.fromCharCode(64 + n) || a[8] == parseInt(temp.substring(temp.length - 1, temp.length)));
        }

        //comprobacion de NIEs
        //T
        if (/^[T]{1}/.test(temp)) {
            return (a[8] == /^[T]{1}[A-Z0-9]{8}$/.test(temp));
        }

        //XYZ
        if (/^[XYZ]{1}/.test(temp)) {
            pos = str_replace(['X', 'Y', 'Z'], ['0', '1', '2'], temp).substring(0, 8) % 23;
            return (a[8] == cadenadni.substring(pos, pos + 1));
        }
    }

    return false;
});

function str_replace(search, replace, subject) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'

    var f = search, r = replace, s = subject;
    var ra = r instanceof Array, sa = s instanceof Array, f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;

    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f) { };
        }
    };

    return sa ? s : s[0];
}
