/*	-	funciones de validacion	*/
/**
 * implementacion para replaceAll en el objeto String
 * @param {String} variable
 */
String.prototype.replaceAll = function (pcFrom, pcTo) {
    var i = this.indexOf(pcFrom);
	var c = this;
	
    while (i > -1){
        c = c.replace(pcFrom, pcTo); 
        i = c.indexOf(pcFrom);
    }
    return c;
}

/*	+	isDefined
 * 		sirve para saber si una variable esta definida
 * 		IMPORTANTE: entre comillas, el nombre de la variable
 * 		uso: if(!isDefined('i18n_ejemplo')){...}
 */
function isDefined(variable){
	return (typeof(window[variable]) == 'undefined')? false : true;
}

/*	+	limitarTexto(poCampo, piMaxlength)
		funcion de control para la longitud de un texto
		necesita de un elemento secundario con el id terminado en '-hint'
		con respecto del campo a validar	*/
//	OJO:	estas variables se quedan modifican en el jsp por sus valores de i18n
//			tienen que estar definidas en la cabecera de la pagina
if (!isDefined('i18n_quedan')){var i18n_quedan = 'quedan';}
if (!isDefined('i18n_quedancar')){var i18n_quedancar = 'caracteres';}
if (!isDefined('i18n_vaya')) {var i18n_vaya = 'vaya, no se puede escribir m&aacute;s';}
function limitarTexto(poCampo, piMaxlength){
	if (poCampo.value.length >= piMaxlength){
		poCampo.value = poCampo.value.slice(0, piMaxlength);
		
		if ($(poCampo.id + '-hint')){
			$(poCampo.id + '-hint').innerHTML = i18n_vaya;
			Element.addClassName($(poCampo.id + '-hint'), 'red');
		} else {
			alert(i18n_vaya);
		}
	} else {
		if ($(poCampo.id + '-hint')){
			Element.removeClassName($(poCampo.id + '-hint'), 'red');
			$(poCampo.id + '-hint').innerHTML = i18n_quedan + ' ' + (piMaxlength - poCampo.value.length) + ' ' + i18n_quedancar;
		} else {
			alert(i18n_quedan + ' ' + (piMaxlength - poCampo.value.length) + ' ' + i18n_quedancar);
		}
	}
}

/*	+	goKeyCodes
		objeto global que comprende las teclas mas importantes,
		para poder usarlas en validaciones de una forma consistente	*/
		
var goKeyCodes = {
	BACK_SPACE: 8,
	TAB: 9,
	RETURN: 13,
	ESC: 27,
	SPACER: 32,
	END: 35,
	START: 36,
	LEFT: 37,
	UP: 38,
	RIGHT: 39,
	DOWN: 40,
	DELETE: 46,
	ie: {
		COMMA: 188,
		DOT: 190,
		numKbd: {
				DOT: 110
			}
	},
	ff: {
		COMMA: 44,
		DOT: 46,
		numKbd: {
				DOT: 46
			}
	}
};

/*	+	soloNumeros(e, piMaxLength)
		funcion de validacion preventiva para campos numericos	*/
function soloNumeros(e, piMaxLength, pbPermitirComa, pbPermitirPunto){
	var oCampo = e.srcElement || e.target;
	var cTecla = e.keyCode || e.which;
	var bModifKey = e.altKey || e.shiftKey || e.ctrlKey;
	var bReturnValue = true;
	
	if (pbPermitirComa 
		&& ((e.keyCode && cTecla == goKeyCodes.ie.COMMA) || (e.which && cTecla == goKeyCodes.ff.COMMA))
		&& oCampo.value.indexOf(',') < 0){
		//	excepcion permitida, solo una coma (para decimales)
		bReturnValue = true;
	} else if (pbPermitirComa 
		&& ((e.keyCode && cTecla == goKeyCodes.ie.COMMA) || (e.which && cTecla == goKeyCodes.ff.COMMA))
		&& oCampo.value.indexOf(',') >= 0){
		//	excepcion permitida, solo una coma (para decimales)
		bReturnValue = false;
	} else if (!pbPermitirComa 
		&& ((e.keyCode && cTecla == goKeyCodes.ie.COMMA) || (e.which && cTecla == goKeyCodes.ff.COMMA))){
		//	excepcion no permitida, sin comas
		bReturnValue = false;
	} else if (pbPermitirPunto 
		&& ((e.keyCode && (cTecla == goKeyCodes.ie.DOT || cTecla == goKeyCodes.ie.numKbd.DOT)) 
			|| (e.which && (cTecla == goKeyCodes.ff.DOT || cTecla == goKeyCodes.ff.numKbd.DOT)))){
		//	excepcion permitida
		bReturnValue = true;
	} else if (!pbPermitirPunto 
		&& ((e.keyCode && (cTecla == goKeyCodes.ie.DOT || cTecla == goKeyCodes.ie.numKbd.DOT)) 
			|| (e.which && (cTecla == goKeyCodes.ff.DOT || cTecla == goKeyCodes.ff.numKbd.DOT)))){
		//	excepcion permitida
		bReturnValue = false;
	} else {
		if ((cTecla < 8) || (cTecla > 9 && cTecla < 13) || (cTecla > 13 && cTecla < 16) 
			|| (cTecla > 18 && cTecla < 20) || (cTecla > 20 && cTecla < 33)
			|| (cTecla > 40 && cTecla < 44) || (cTecla > 46 && cTecla < 48) 
			|| (e.keyCode && ((cTecla > 57 && cTecla < 96) || (cTecla > 105)))
			|| (e.which && cTecla > 57)){
			bReturnValue = false;
		}
	}
	
	if ((bModifKey)
		|| ((piMaxLength) && (oCampo.value.length >= piMaxLength)
			&& ((cTecla < 8) || (cTecla > 9 && cTecla < 13) || (cTecla > 13 && cTecla < 16) 
			|| (cTecla > 18 && cTecla < 20) || (cTecla > 20 && cTecla < 33)
			|| (cTecla > 40 && cTecla < 45) || (cTecla > 46)))){
		bReturnValue = false;
	}
	
	return bReturnValue;
}



function isNumber(evt,withAlert){
	var nav4 = window.Event ? true : false;
		
	// NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57	
	var key = nav4 ? evt.which : evt.keyCode;	
	var isNum = eval(key <= 13 || (key >= 48 && key <= 57));

	if(!isNum){
						
		window.event.keyCode=0
		
		if(withAlert){
			alert('Por favor inserte s?lo n?meros. ');
		}
	}
	
	return evt;
}


//	para saber que tecla se ha pulsado, usar String.fromCharCode(keyCode);
var goTECLAS = {
	BACK_SPACE: {eventkeyCode: 8, ewhich: 8, ekeyCode: 8},
	TAB: {eventkeyCode: 9, ewhich: 0, ekeyCode: 9},
	RETURN: {eventkeyCode: 13, ewhich: 13, ekeyCode: 13},
	ESC: {eventkeyCode: 27, ewhich: 0, ekeyCode: 27},
	RE_PAG: {eventkeyCode: 33, ewhich: 0, ekeyCode: 33},
	AV_PAG: {eventkeyCode: 34, ewhich: 0, ekeyCode: 34},
	FIN: {eventkeyCode: 35, ewhich: 0, ekeyCode: 35},
	INICIO: {eventkeyCode: 36, ewhich: 0, ekeyCode: 36},
	LEFT: {eventkeyCode: 37, ewhich: 0, ekeyCode: 37},
	UP: {eventkeyCode: 38, ewhich: 0, ekeyCode: 38},
	RIGHT: {eventkeyCode: 39, ewhich: 0, ekeyCode: 39},
	DOWN: {eventkeyCode: 40, ewhich: 0, ekeyCode: 40},
	INSERT: {eventkeyCode: 45, ewhich: 0, ekeyCode: 45},
	SUPR: {eventkeyCode: 46, ewhich: 0, ekeyCode: 46},
	F1: {eventkeyCode: 112, ewhich: 0, ekeyCode: 112},
	F2: {eventkeyCode: 113, ewhich: 0, ekeyCode: 113},
	F3: {eventkeyCode: 114, ewhich: 0, ekeyCode: 114},
	F4: {eventkeyCode: 115, ewhich: 0, ekeyCode: 115},
	F5: {eventkeyCode: 116, ewhich: 0, ekeyCode: 116},
	F6: {eventkeyCode: 117, ewhich: 0, ekeyCode: 117},
	F7: {eventkeyCode: 118, ewhich: 0, ekeyCode: 118},
	F8: {eventkeyCode: 119, ewhich: 0, ekeyCode: 119},
	F9: {eventkeyCode: 120, ewhich: 0, ekeyCode: 120},
	F10: {eventkeyCode: 121, ewhich: 0, ekeyCode: 121},
	F11: {eventkeyCode: 122, ewhich: 0, ekeyCode: 122},
	F12: {eventkeyCode: 123, ewhich: 0, ekeyCode: 123},
	ESPACIO: {eventkeyCode: 32, ewhich: 32, ekeyCode: 0},
	PUNTO: {eventkeyCode: 190, ewhich: 46, ekeyCode: 0},
	DOS_PUNTOS: {eventkeyCode: 58, ewhich: 58, ekeyCode: 0},
	COMA: {eventkeyCode: 188, ewhich: 44, ekeyCode: 0},
	PUNTO_Y_COMA: {eventkeyCode: 59, ewhich: 59, ekeyCode: 0},
	GUION: {eventkeyCode: 189, ewhich: 45, ekeyCode: 0},
	GUION_BAJO: {eventkeyCode: 189, ewhich: 95, ekeyCode: 0},
	ARROBA: {eventkeyCode: 64, ewhich: 0, ekeyCode: 64},
	COMILLA_DOBLE: {eventkeyCode: 34, ewhich: 34, ekeyCode: 0},
	ABRE_PARENTESIS: {eventkeyCode: 40, ewhich: 40, ekeyCode: 0},
	CIERRA_PARENTESIS: {eventkeyCode: 41, ewhich: 41, ekeyCode: 0},
	COMILLA_SIMPLE: {eventkeyCode: 39, ewhich: 39, ekeyCode: 0},
	_0: {eventkeyCode: 48, ewhich: 48, ekeyCode: 0},
	_1: {eventkeyCode: 49, ewhich: 49, ekeyCode: 0},
	_2: {eventkeyCode: 50, ewhich: 50, ekeyCode: 0},
	_3: {eventkeyCode: 51, ewhich: 51, ekeyCode: 0},
	_4: {eventkeyCode: 52, ewhich: 52, ekeyCode: 0},
	_5: {eventkeyCode: 53, ewhich: 53, ekeyCode: 0},
	_6: {eventkeyCode: 54, ewhich: 54, ekeyCode: 0},
	_7: {eventkeyCode: 55, ewhich: 55, ekeyCode: 0},
	_8: {eventkeyCode: 56, ewhich: 56, ekeyCode: 0},
	_9: {eventkeyCode: 57, ewhich: 57, ekeyCode: 0},
	_a: {eventkeyCode: 65, ewhich: 97, ekeyCode: 0},
	_z: {eventkeyCode: 90, ewhich: 122, ekeyCode: 0},
	_A: {eventkeyCode: 65, ewhich: 65, ekeyCode: 0},
	_Z: {eventkeyCode: 90, ewhich: 90, ekeyCode: 0},
	_enye: {eventkeyCode: 192, ewhich: 241, ekeyCode: 0},
	_ENYE: {eventkeyCode: 192, ewhich: 209, ekeyCode: 0}
};

/*	+	validarTecla(piTecla, cTipo, poTecla, e, pcCondicion)
 * 		comprueba que la tecla pulsada corresponde con la definida en goTECLAS
 * 		segun el navegador, usa el valor correspondiente 
 */
function validarTecla(piTecla, cTipo, poTECLA, e, pcCondicion){
	var bReturnValue = false;
	var bCondicion = (e) ? eval('e' + pcCondicion) : true;
	
	if (eval('poTECLA.' + cTipo) != null && eval('poTECLA.' + cTipo) == piTecla
		&& bCondicion){
		bReturnValue = true;
	}
	
	return bReturnValue;
}

/*	+	mayorQueTecla(piTecla, cTipo, poTecla, e, pcCondicion)
 * 		comprueba que la tecla pulsada es mayor o igual que la definida en goTECLAS
 * 		segun el navegador, usa el valor correspondiente
 * 		los parametros e y pcCondicion son opcionales
 */
function mayorQueTecla(piTecla, cTipo, poTECLA, e, pcCondicion){
	var bReturnValue = false;
	var bCondicion = (e) ? eval('e' + pcCondicion) : true;
	
	if (eval('poTECLA.' + cTipo) != null && eval('poTECLA.' + cTipo) != 0 && eval('poTECLA.' + cTipo) <= piTecla
		&& bCondicion){
		bReturnValue = true;
	}
	
	return bReturnValue;
}
/*	+	menorQueTecla(piTecla, cTipo, poTecla, e, pcCondicion)
 * 		comprueba que la tecla pulsada es menor o igual que la definida en goTECLAS
 * 		segun el navegador, usa el valor correspondiente
 * 		los parametros e y pcCondicion son opcionales 
 */
function menorQueTecla(piTecla, cTipo, poTECLA, e, pcCondicion){
	var bReturnValue = false;
	var bCondicion = (e) ? eval('e' + pcCondicion) : true;
	
	if (eval('poTECLA.' + cTipo) != null && eval('poTECLA.' + cTipo) != 0 && eval('poTECLA.' + cTipo) >= piTecla
		&& bCondicion){
		bReturnValue = true;
	}
	
	return bReturnValue;
}
  
/*	+	soloAlfanumericos(e)
 * 		funcion de validacion preventiva para campos alfanumericos
 * 		ejemplo de uso:
 * 		Event.observe($('ti-campo'), 'keypress', function(e){
			var cTecla = e.keyCode || e.which;
			if (!soloAlfanumericos(e)){Event.stop(e);}
		}, false);
 */
function soloAlfanumericos(e){
	var cTecla = null;
	var cTipo = '';
	if (document.all){
		cTecla = event.keyCode;
		cTipo = 'eventkeyCode';
	} else {
		if (e.keyCode && e.keyCode != 0){
			cTecla = e.keyCode;
			cTipo = 'ekeyCode';
		} else {
			cTecla = e.which;
			cTipo = 'ewhich';
		}
	}
	
	var bReturnValue = true;
	
	if (validarTecla(cTecla, cTipo, goTECLAS.BACK_SPACE)
		|| validarTecla(cTecla, cTipo, goTECLAS.AV_PAG)
		|| validarTecla(cTecla, cTipo, goTECLAS.BACK_SPACE)
		|| validarTecla(cTecla, cTipo, goTECLAS.ESC)
		|| validarTecla(cTecla, cTipo, goTECLAS.ESPACIO)
		|| validarTecla(cTecla, cTipo, goTECLAS.F1)
		|| validarTecla(cTecla, cTipo, goTECLAS.F2)
		|| validarTecla(cTecla, cTipo, goTECLAS.F3)
		|| validarTecla(cTecla, cTipo, goTECLAS.F4)
		|| validarTecla(cTecla, cTipo, goTECLAS.F5)
		|| validarTecla(cTecla, cTipo, goTECLAS.F6)
		|| validarTecla(cTecla, cTipo, goTECLAS.F7)
		|| validarTecla(cTecla, cTipo, goTECLAS.F8)
		|| validarTecla(cTecla, cTipo, goTECLAS.F9)
		|| validarTecla(cTecla, cTipo, goTECLAS.F10)
		|| validarTecla(cTecla, cTipo, goTECLAS.F11)
		|| validarTecla(cTecla, cTipo, goTECLAS.F12)
		|| validarTecla(cTecla, cTipo, goTECLAS.FIN)
		|| validarTecla(cTecla, cTipo, goTECLAS.INICIO)
		|| validarTecla(cTecla, cTipo, goTECLAS.INSERT)
		|| validarTecla(cTecla, cTipo, goTECLAS.RE_PAG)
		|| validarTecla(cTecla, cTipo, goTECLAS.RETURN)
		|| validarTecla(cTecla, cTipo, goTECLAS.SUPR)
		|| validarTecla(cTecla, cTipo, goTECLAS.TAB)
		|| validarTecla(cTecla, cTipo, goTECLAS.UP)
		|| validarTecla(cTecla, cTipo, goTECLAS.DOWN)
		|| validarTecla(cTecla, cTipo, goTECLAS.LEFT)
		|| validarTecla(cTecla, cTipo, goTECLAS.RIGHT)
		|| validarTecla(cTecla, cTipo, goTECLAS._enye)
		|| validarTecla(cTecla, cTipo, goTECLAS._ENYE)
		|| validarTecla(cTecla, cTipo, goTECLAS.COMA, e, '.shiftKey == false')
		|| validarTecla(cTecla, cTipo, goTECLAS.PUNTO, e, '.shiftKey == false')
		|| validarTecla(cTecla, cTipo, goTECLAS.GUION)
		|| validarTecla(cTecla, cTipo, goTECLAS.GUION_BAJO)
		|| (mayorQueTecla(cTecla, cTipo, goTECLAS._0, e, '.shiftKey == false')
			&& menorQueTecla(cTecla, cTipo, goTECLAS._9, e, '.shiftKey == false'))
		|| (mayorQueTecla(cTecla, cTipo, goTECLAS._a)
			&& menorQueTecla(cTecla, cTipo, goTECLAS._z))
		|| (mayorQueTecla(cTecla, cTipo, goTECLAS._A)
			&& menorQueTecla(cTecla, cTipo, goTECLAS._Z))){
		bReturnValue = true;
	} else {
		bReturnValue = false;
	}
	
	if (document.all && event.keyCode == null){
		// caso especial: es un caracter de control para IE
		bReturnValue = true;
	}
	
	return bReturnValue;
}


function soloAlfanumericos_Arroba_Corchetes(e){
	var cTecla = null;
	var cTipo = '';
	if (document.all){
		cTecla = event.keyCode;
		cTipo = 'eventkeyCode';
	} else {
		if (e.keyCode && e.keyCode != 0){
			cTecla = e.keyCode;
			cTipo = 'ekeyCode';
		} else {
			cTecla = e.which;
			cTipo = 'ewhich';
		}
	}
	
	var bReturnValue = true;
	
	if (validarTecla(cTecla, cTipo, goTECLAS.BACK_SPACE)
		|| validarTecla(cTecla, cTipo, goTECLAS.AV_PAG)
		|| validarTecla(cTecla, cTipo, goTECLAS.BACK_SPACE)
		|| validarTecla(cTecla, cTipo, goTECLAS.ESC)
		|| validarTecla(cTecla, cTipo, goTECLAS.ESPACIO)
		|| validarTecla(cTecla, cTipo, goTECLAS.F1)
		|| validarTecla(cTecla, cTipo, goTECLAS.F2)
		|| validarTecla(cTecla, cTipo, goTECLAS.F3)
		|| validarTecla(cTecla, cTipo, goTECLAS.F4)
		|| validarTecla(cTecla, cTipo, goTECLAS.F5)
		|| validarTecla(cTecla, cTipo, goTECLAS.F6)
		|| validarTecla(cTecla, cTipo, goTECLAS.F7)
		|| validarTecla(cTecla, cTipo, goTECLAS.F8)
		|| validarTecla(cTecla, cTipo, goTECLAS.F9)
		|| validarTecla(cTecla, cTipo, goTECLAS.F10)
		|| validarTecla(cTecla, cTipo, goTECLAS.F11)
		|| validarTecla(cTecla, cTipo, goTECLAS.F12)
		|| validarTecla(cTecla, cTipo, goTECLAS.FIN)
		|| validarTecla(cTecla, cTipo, goTECLAS.INICIO)
		|| validarTecla(cTecla, cTipo, goTECLAS.INSERT)
		|| validarTecla(cTecla, cTipo, goTECLAS.RE_PAG)
		|| validarTecla(cTecla, cTipo, goTECLAS.RETURN)
		|| validarTecla(cTecla, cTipo, goTECLAS.SUPR)
		|| validarTecla(cTecla, cTipo, goTECLAS.TAB)
		|| validarTecla(cTecla, cTipo, goTECLAS.UP)
		|| validarTecla(cTecla, cTipo, goTECLAS.DOWN)
		|| validarTecla(cTecla, cTipo, goTECLAS.LEFT)
		|| validarTecla(cTecla, cTipo, goTECLAS.RIGHT)
		|| validarTecla(cTecla, cTipo, goTECLAS._enye)
		|| validarTecla(cTecla, cTipo, goTECLAS._ENYE)
		|| validarTecla(cTecla, cTipo, goTECLAS.ARROBA)
		|| validarTecla(cTecla, cTipo, goTECLAS.COMA, e, '.shiftKey == false')
		|| validarTecla(cTecla, cTipo, goTECLAS.PUNTO, e, '.shiftKey == false')
		|| validarTecla(cTecla, cTipo, goTECLAS.GUION)
		|| validarTecla(cTecla, cTipo, goTECLAS.GUION_BAJO)
		|| (mayorQueTecla(cTecla, cTipo, goTECLAS._0, e, '.shiftKey == false')
			&& menorQueTecla(cTecla, cTipo, goTECLAS._9, e, '.shiftKey == false'))
		|| (mayorQueTecla(cTecla, cTipo, goTECLAS._a)
			&& menorQueTecla(cTecla, cTipo, goTECLAS._z))
		|| (mayorQueTecla(cTecla, cTipo, goTECLAS._A)
			&& menorQueTecla(cTecla, cTipo, goTECLAS._Z))){
		bReturnValue = true;
	} else {
		bReturnValue = false;
	}
	
	if (document.all && event.keyCode == null){
		// caso especial: es un caracter de control para IE
		bReturnValue = true;
	}
	
	return bReturnValue;
}

function validarCIF(cif){
	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;
	
	texto = cif.toUpperCase();
	var regular = new RegExp(/^[ABCDEFGHJNPQRSUVW]\d\d\d\d\d\d\d[0-9,A-J]$/g);
	if (!regular.exec(texto)) return false;
	ultima = texto.substr(8,1);
	for (var cont = 1; cont < 7; cont ++) {
		xxx = (2 * parseInt(texto.substr(cont++,1))).toString() + "0";
		impares += parseInt(xxx.substr(0,1)) + parseInt(xxx.substr(1,1));
		pares += parseInt(texto.substr(cont,1));
	}
	xxx = (2 * parseInt(texto.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;
	if ((ultima == unumero) || (ultima == uletra[unumero]))
		return true;
	else
		return false;
}

function validarNIF(dni){
	var bReturnValue = true;
	
	// se rellena con ceros por delante
	if (dni.length > 0 && dni.length < 10){
		var iCeros = 9 - dni.length;
		
		for (i = 0; i < iCeros; i++){
			dni = '0' + dni;
		}
	}
	
	if (dni.length == 9){
		numero = dni.substr(0, dni.length-1);
		let = dni.substr(dni.length-1, 1).toUpperCase();
		numero = numero % 23;
		letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
		letra = letra.substring(numero, numero+1);
		
		if (letra != let){
			bReturnValue = false;
		}
	}else{
		bReturnValue = false;
	}
	
	return bReturnValue;
}

function validarNIE(nie){
	var bReturnValue = true;
	
	if (nie.length== 9){
		var expreg = new RegExp ("^(X|x)[0-9]{7}[a-zA-Z]$");
		
		if (!(expreg.test(nie))){
			bReturnValue = false;
		}
	}else{
		bReturnValue = false;
	}
	
	return bReturnValue;
}

/*	+	validarEmail(pcTexto)
		funcion de validacion para campos de tipo email	*/
function validarEmail(pcTexto){
	return (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/.test(pcTexto));
}

/*	+	correoA(pcDireccion, poEnlace)
		asigna una direccion de email a un enlace por medio del onClick	*/
function correoA(pcDireccion, poEnlace, pcSubject){
	var cSubject = (pcSubject && pcSubject != '') ? '?subject=' + pcSubject : '';
	poEnlace.href = 'mailto:' + pcDireccion + '@idealista.com' + cSubject;
}

// addressScrambler.js version 0.2.2
// copyright 2001, 2002, Josiah Q. Hamilton
// This software is provided under the Artistic license of the Open 
//  Source Initiative, as it exists on 2001-12-19, including the optional
//  provision regarding aggregation with a commercial distribution.
// This notice must be included with any distribution.
var scrambleString = "j4Klo3m5c7 8 Aw8 7 inqwjh R62q";
function _scramble(inText,inverse) {
	var outText = "";
	var scrambleLen = scrambleString.length;
	for (var i = 0; i < inText.length; ++i) {
		var currentCode = inText.charCodeAt(i);
		var offset = scrambleString.charCodeAt(i % scrambleLen);
		if (inverse) {
			offset = 10 * 26 - offset;
		}
		var newCode = currentCode;
		if (currentCode == 46) {
			newCode = 64;  // replace '.' by '@'
		} else if (currentCode == 64) {
			newCode = 46;  // replace '@' by '.'
		} else if (65 <= currentCode && currentCode <= 90) {
			newCode = (currentCode - 65 + offset) % 26 + 65;
		} else if (97 <= currentCode && currentCode <= 122) {
			newCode = (currentCode - 97 + offset) % 26 + 97;
		}
		outText += String.fromCharCode(newCode);
	}
	return outText;
}
function descrambleText(inText) {
	var outText = _scramble(inText,true);
	return outText;
}
function writeMailToWithScrambledDisplayText(scrambledAddress, scrambledText, cssClass) {
	document.open();
	document.write("<a href=\"mailto:" + descrambleText(scrambledAddress) + "\"");
		if (cssClass != null && cssClass != "") {
		  document.write(" class=\"" + cssClass + "\" ");
		}
		document.write(">" + descrambleText(scrambledText) + "</a>");
	document.close();
}
function writeMailTo(scrambledAddress) {
	writeMailToWithScrambledDisplayText(scrambledAddress, scrambledAddress);
}

/*
 * ejemplos de direcciones (terminadas en @idealista.com)
 * editor.boletin(arroba)idealista.com
 * gdfxvq@cjokxoa.mjhgmobic@iso
 * visitas.virtuales(arroba)idealista.com
 * xipmazx@qlxxanaiy.oekjaksze@axo
 * fencinar(arroba)idealista.com
 * hekgpmfs.ljigyxwzd@duv
 * bdelcoso(arroba)idealista.com
 * ddbpjnxp.ljigyxwzd@duv
 * contactar(arroba)idealista.com
 * eokxhbybm.ohknamywg@ixb
 * webmaster(arroba)idealista.com?subject=error en la web nueva
 * yeyqhryfm.ohknamywg@ixb?saflclv=bvynw zq pg lih tvkep
 * feedback_hipotecas(arroba)idealista.com
 * hebhizhl_kotugtggv.jjnpniyxc@lqm
 * vallasdeobra(arroba)idealista.com
 * xaiphrifjexe.vsigootzj@eos
 * publicidad(arroba)idealista.com
 * ruyppbnevg.mjrppovzb@ldo
 * publicidad(arroba)idealista.com?subject=solicitud de informaci&oacute;n de espacios publicidad
 * ruyppbnevg.mjrppovzb@ldo?yydhnet=wvknddwah qt oqlpxvpei&scadve;r cj zvveivdw sacrrrkdgh
 */