// JavaScript Document
function cambiar(){
	$('capa_mitja').hide();
	$('capa_superior').hide();
}

function mostra_superior(width, height){
	/* el width i el height és l'amplada i l'altura del div on contindrà la informació */
	$('capa_mitja').show();	
	$('capa_superior').style.width = width;	
	$('capa_superior').style.height = height;
	$('capa_superior').style.marginLeft = (($('capa_superior').getWidth()*(-1))/2)+'px';
	$('capa_superior').style.marginTop = (($('capa_superior').getHeight()*(-1))/2)+'px';
	$('capa_superior').show();
	$('pagina').hide();
}

function descarrega_fitxer(id_fitxer, div_info){
	carregaURL('fitxers/descarrega_document_Ajax.php?id_fitxer='+id_fitxer, div_info);
}

function desconnecta() {
		document.location.href = 'includes/desconnectar.php';
	}

function veu_rellotge(div,idioma){
	var ahora = new Date() 
	if(idioma=='es'){var dies = new Array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sabado");}
	if(idioma=='ca'){var dies = new Array("Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte");}
	var dia, hora, minut, segon;
	
	dia   = dies[ahora.getDay()];
	hora  = ahora.getHours(); 		hora = hora.toString();
	minut = ahora.getMinutes();		minut = minut.toString();
	segon = ahora.getSeconds();		segon = segon.toString();

	if(hora.length  == 1){hora  = '0' + hora;}
	if(minut.length == 1){minut = '0' + minut;}
	if(segon.length == 1){segon = '0' + segon;}

	var str_info = dia + ' ' + hora + ':' + minut + ':' + segon;
	$(div).update(str_info);
}

/**
* funcion que comprueba si una cadena de texto está vacía. Se considera una cadena
* vacía la que únicamente contiene cualquier combinación de los siguientes
* caracteres ' ', '\t', '\n', '\r', '\f', '\v' ;
* @param texto : cadena a comprobar.
* @return bool TRUE si la cadena es considerada vacía, FALSE en otro caso.
*/
function textBuit(text){
	if ((text == null) || (text.length == 0))	return true;
	if (text.search(/\S+/) != -1) return false;
	return true;
}

/**
* funcion para eliminar los siguientes caracteres ' ', '\t', '\n', '\r', '\f', '\v' del
* principio y final de una cadena.
* @param str cadena a recortar.
* @return string retorna la cadena recortada
*/
function recorta(str){
	return str.replace(/^(\s*)((\s*\S+)*)(\s*)$/,"$2");
}

/**
* Comprueba si una cadena es un numero entero positivo (incluye el cero).
* @param string $str cadena a comprobar
* @return bool retorna TRUE si la cadena es entero positivo, FALSE en otro caso.
*/
function esEnteroPositivo(str){
	var re = /^([0-9]+)$/;
	if(re.test(str)){
		return true;
	}
	return false;
}


/** FUNCIONS AJAX **/

function carregaURL(url,id_div,asinc){ // Funció Ajax per tractar dades
	if(asinc == null){asinc = true;}
	new Ajax.Request(url, {
		  method: 'post',
		  asynchronous: asinc,
		  parameters:{},
		  onCreate: function(){
				$(id_div).innerHTML = "<center><img src='../img/loading.gif' /></center>";
		  },
		  onComplete: function(res) {
				$(id_div).innerHTML = res.responseText;
				setTimeout(function() {res.responseText.evalScripts()}, 1);
		}
	});
}

function carregaFormURL(url,id_div,f){ 
	var id_form = f.id;
	var params = Form.serialize($(id_form));	
	new Ajax.Request(url, {
		  method: 'post',
		  parameters: params,
		  asynchronous: true,
		  onCreate: function(){
				$(id_div).innerHTML = "<center><img src='../img/loading.gif' /></center>";
		  },
		  onComplete: function(res) {
				$(id_div).innerHTML = res.responseText;
				setTimeout(function() {res.responseText.evalScripts()}, 1);
		}
	});	
}

function carrega(url){ // Funció Ajax per tractar dades
	new Ajax.Request(url, {
		  method: 'post',
		  parameters:{},
		  onComplete: function(res) {					
				setTimeout(function() {res.responseText.evalScripts()}, 1);
		}
	});
}

function esChrome() {
	var es_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
	return es_chrome;
}

// Dado un objeto HTML DOM, obtiene su posición X relativa a la pantalla en pixels.
function findPosX(obj) {
	var curleft = 0;
	if (obj.offsetParent) {
		while (1) {
			curleft += obj.offsetLeft;
			if (!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		curleft += obj.x;
	}
	return curleft;
}

// Dado un objeto HTML DOM, obtiene su posición Y relativa a la pantalla en pixels.
function findPosY(obj) {
	var curtop = 0;
	if (obj.offsetParent) {
		while (1) {
			curtop += obj.offsetTop;
			if (!obj.offsetParent) break;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y) {
		curtop += obj.y;
	}
	return curtop;
}

/*
* Esta función clasifica y valida todos* los códigos fiscales que se usan en España.
* Analiza una variable de 9 carácteres alfanuméricos y devuelve un valor numérico para cada tipo de código
* analizado donde todos los valores positivos (mayores que cero) indican que el código fiscal es correcto.
*
* Los valores devueltos son:
*
* 	 1 = NIF válido
* 	-1 = NIF no válido
* 	 2 = CIF válido
* 	-2 = CIF no válido
* 	 3 = NIE válido
* 	-3 = NIE no válido
* 	 0 = código no válido
*
* La función cumple con todas las especificaciones de las leyes españolas:
*
* Decreto 2423/1975, de 25 de septiembre.
* Real Decreto 338/1990, de 9 de marzo.
* Real Decreto 1624/1992, de 29 de diciembre que modifica el 338/1990.
* Real Decreto 155/1996, de 2 de febrero.
* Orden de 3 de julio de 1998, por la que se modifica el Anexo del Decreto 2423/1975.
*
* Que es, actualmente, todo lo aprobado respecto con los Códigos de Identificación Fiscal,
* Número de Identificación Fiscal y Número de Identificación de Extranjeros.
*
* *Nota: dado que el algoritmo del dígito de control usado es secreto y jamás ha sido publicado
* en fuentes oficiales del Estado se ha usado un algoritmo obtenido por ingeniería inversa que ha
* logrado validar correctamente alrededor de un millón de CIFs, NIFs y NIEs en total.
* Con lo que, presumiblemente, se puede asumir que concuerda con el algoritmo de validación secreto original.
*/
function valida_nif_cif_nie(cf) {
	cf = cf.toUpperCase();
	var num = new Array(9);
	for (var i = 0; i < 9; i++){
		num[i] = cf.substr(i,1);
	}

	//si no tiene un formato valido devuelve error
	var re = /((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/;
	if(!re.test(cf)) return 0;

	//comprobacion de NIFs estandar
	re = /(^[0-9]{8}[A-Z]{1}$)/;
	if(re.test(cf)){
		var pat = 'TRWAGMYFPDXBNJZSQVHLCKE';
		if(num[8] == pat.substr(cf.substr(0,8) % 23, 1)) return 1;
		else return -1;
	}

	//algoritmo para comprobacion de codigos tipo CIF
	var suma = parseInt(num[2]) + parseInt(num[4]) + parseInt(num[6]);
	var tmp;

	for (var i = 1; i < 8; i += 2){
		tmp = 2 * num[i];
		suma += parseInt(String(tmp).substr(0,1));
		if(parseInt(String(tmp).substr(1,1))){
			suma += parseInt(String(tmp).substr(1,1));
		}
	}
	var n = 10 - parseInt(String(suma).substr(String(suma).length - 1, 1))

	//comprobacion de NIFs especiales (se calculan como CIFs)
	re = /^[KLM]{1}/;
	if(re.test(cf)){
		if(num[8] == String.fromCharCode(parseInt(64 + n))) return 1;
		else return -1;
	}

	//comprobacion de CIFs
	re = /^[ABCDEFGHNPQS]{1}/;
	if(re.test(cf)){
		if(num[8] == String.fromCharCode(parseInt(64 + n)) || num[8] == String(n).substr(String(n).length -1, 1) ) return 2;
		else return -2;
	}

	//comprobacion de NIEs
	re = /^[TXYZ]{1}/;
	var re2 = /^[T]{1}[A-Z0-9]{8}$/;
	var re3 = /X/;
	var re4 = /Y/;
	var re5 = /Z/;
	var strTmp = 'TRWAGMYFPDXBNJZSQVHLCKE';
	if(re.test(cf)){
		tmp = cf.replace(re3,'0');
		tmp = tmp.replace(re4,'1');
		tmp = tmp.replace(re5,'2');
		tmp = tmp.substr(0,8)%23;
		tmp = strTmp.substr(tmp,1);
		if(num[8] == tmp || re2.test(cf) ) return 3;
		else return -3;
	}

	//si todavia no se ha verificado devuelve error
	return 0;
}


