function creaObjAjax() {
	if(window.XMLHttpRequest) {
		objAjax = new XMLHttpRequest();
	}
	else if(window.ActiveXObject) {
		objAjax = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return objAjax;
}

/****************************** FUNCIONS PER CAPÇALERA **************************/

/* ATENCIÓ!!! L'inicialitzador del calendari del formulari de cerca de professors està al final de l'arxiu utiles/calendario/js/i18n/jquery.ui.datepicker-es.js */

/* Obté llista de pobles segon el codi postal passat. idllistapobles és el combo a on s'han de carregar els pobles */

function carregaPobles(cp,idllistapobles) {
	if(cp.value.length<5) return;
	var llistapbl=document.getElementById(idllistapobles);
	var xmlhttp=creaObjAjax();
		xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState==1) {
			llistapbl.length=0;
			var opt = document.createElement("option");
			opt.text = "Cargando municipios...";
			opt.value = 0;
			llistapbl.options.add(opt);
		}
		if(xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				eval(xmlhttp.responseText);
				llistapbl.length=0;
				for(i=0;i<jsonPobles.poble.length;i++) {
					var opt = document.createElement("option");
					opt.text = jsonPobles.poble[i].nompoble;
					opt.value = jsonPobles.poble[i].nompoble; //opt.value = jsonPobles.poble[i].idpoble;
					llistapbl.options.add(opt);
				}
				if(llistapbl.length>1) {
					llistapbl.focus();
					llistapbl.style.backgroundColor="#ffdd8d";
				} else {
					cp.value="";
					llistapbl.style.backgroundColor="#fff";
				}
				llistapbl.selectedIndex=0;
			}
		}
	}
	xmlhttp.open('POST','peticiones-ajax.php',true);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	parametresPost="accio=1&cp="+cp.value;
	xmlhttp.send(parametresPost);
}

/*
* Envia formulari de filtre de la capçalera per buscar professors
* accio=0 activa o desactiva combos en funció del tipus de classe seleccionat. accio=1 envia formulari si tot és correcte
* accio=3 temporal. Dóna un avís si s'intenta seleccionar un idioma que no sigui anglès.
*/

function accionsFormulari(accio) {
	//filtre és el name del formulari
	var idioma=document.filtre.idioma;
	var tipoclasse=document.filtre.tipoclasse;
	var datasetmana=document.filtre.datasetmana;
	var horasetmana=document.filtre.horasetmana;
	var numsetmanes=document.filtre.numsetmanes;
	var municipio=document.filtre.municipio;
	var cp=document.filtre.cp;
	switch(accio) {
		case 0:
			datasetmana.disabled=horasetmana.disabled=numsetmanes.disabled=(tipoclasse.selectedIndex==1)?true:false;
			break;
		case 1:
 			if(cp.value=="" || municipio.selectedIndex==0 || idioma.selectedIndex==0 || tipoclasse.selectedIndex==0) {
				alert("Debes seleccionar el código postal, un municipio, un idioma y el tipo de clase");
				return;
			}
			if(tipoclasse.selectedIndex==2 && (datasetmana.value.match(/^\d{2}-\d{2}-\d{4}$/)==null || horasetmana.selectedIndex==0 || numsetmanes.selectedIndex==0)) {
				alert("Para clases semanales debes seleccionar un día para la primera semana, una hora y cuantas semanas quieres que dure el curso");
				return;
			}
			document.forms["filtre"].submit();
			break;
		case 3:
			if(idioma.selectedIndex!=1) {
				alert("Por el momento  en linguaclick.com sólo es posible reservar clases de inglés. En breve será posible contratar clases en otros idiomas.");
				idioma.selectedIndex=1;
			}
			break;
	}
}

/*
* Carrega les faq rotatòries cada interval de temps donat
*/

var idfaq=-1;

function actualitzaFaq() {
		//s'han deshabilitat les faq rotatòries comentant la línia 'actualitzaFaq()' de javascript de l'arxiu index.php perquè només sempre es mostri la mateixa faq
		var intervalFaq=10000; //retard en milisegons entre una faq i la següent
		var xmlhttp=creaObjAjax();
			xmlhttp.onreadystatechange=function() {
			if(xmlhttp.readyState == 4) {
				if(xmlhttp.status == 200) {
					eval(xmlhttp.responseText); //obté json
					idfaq=faq.idfaq;
					$("#faqs").fadeOut('slow',function(){ //quan acaba d'ocultar el div, carrega el text passat per ajax
						document.getElementById("faqs").innerHTML=faq.textFaq+" <a href=\"texto-menu-faq.php\">Leer más</a>";
						$("#faqs").fadeIn('slow',function(){setTimeout("actualitzaFaq()",intervalFaq);}); //quan acabar de mostrar el div, torna a activar temporitzador
					});
				}
			}
		}
		xmlhttp.open('POST','peticiones-ajax.php',true);
		xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		parametresPost="accio=5&idfaq="+idfaq;
		xmlhttp.send(parametresPost);
}

/*********************** FUNCIONS PER FOTOS ALEATÒRIES DE PROFESSORS DE LA PÀGINA D'INICI *************************/


var fotos=new Array(); //per precàrrega de les fotos dels profes
var rutesFotos=new Array(); //guarda les rutes de les fotos dels profes que s'han de mostrar
var numfotos=5; //número de fotos de professors que s'han de mostrar. Si hi ha menys fotos de les indicades aquí, javascript dóna error

function inicialitzaFotosProfe() {

	//ajax que retorna noms dels arxius de les fotos dels professors que no són baixa
	
	var xmlhttp=creaObjAjax();
	xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				eval(xmlhttp.responseText); //obté json (array id[x].foto)
				for(i=0;i<numfotos;i++) {
					fotos[i]=new Image();
					fotos[i].onload=precarregaFoto;
				}
				canviaFotosProfe(); //carrega fotos per primera vegada
			}
		}
	}
	xmlhttp.open('POST','peticiones-ajax.php',true);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	xmlhttp.send("accio=6");
}

//genera la ruta de les fotos dels professors aleatòriament i les guarda a l'array rutesFotos

function canviaFotosProfe() {
		var idstemp=ids.slice(0); //copia l'array per deixar l'original sense modificar
		for(var i=0;i<numfotos;i++) {
			var idrandom=Math.floor(Math.random()*idstemp.length);
			rutesFotos[i]="imatges/profesor/fotos/"+idstemp[idrandom].foto;
			idstemp.splice(idrandom,1); //elimina la foto de l'array perquè no torni a sortir
		}
		idstemp=null;
		precarregaFoto(); //invoca funció per precarragar la primera foto
}

var fotosCarregades=0; //controla quantes fotos s'han precarregat

//precarrega les fotos a l'array fotos i quan acaba amaga el div,
//carrega les fotos als img de l'html i torna a mostrar el div

function precarregaFoto() {
	if(fotosCarregades==numfotos) {
		$("#fotosprofes").fadeOut(500,function() {
			for(i=0;i<numfotos;i++) {
				document.getElementById("fotoprofe"+i).src=fotos[i].src;
			}
			fotosCarregades=0;
			$("#fotosprofes").fadeIn();
			setTimeout("canviaFotosProfe()",6000);
		});
	} else {
		fotosCarregades+=1;
		fotos[fotosCarregades-1].src="";
		fotos[fotosCarregades-1].src=rutesFotos[fotosCarregades-1];
	}
}

/*********************** FUNCIONS PER lista-profesores-disponibles.php *************************/

/* Envia formulari amb inputs ocults per canviar de pàgina de resultats */

function canviaPagina(pag) {
	document.getElementById("pagina").value=pag;
	document.forms["dadesFiltre"].submit();
}

/*********************** FUNCIONS PER ficha-profesor.php *************************/

/* Canvia format de la data passada de aaaa-mm-dd -> dd-mm-aaaa */

function dataFormatEU(data) {
	var formatUS=data.split('-');
	var formatEU=formatUS[2]+"-"+formatUS[1]+"-"+formatUS[0];
	return formatEU;
}

/* Canvia el mes */

function creaMes(idprofe,mes) {
	if(mes==-1) return; //retorna si s'ha arribat al mes límit tant per dalt com per baix
	var xmlhttp=creaObjAjax();
		xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				eval(xmlhttp.responseText); //obté json
				var taula=document.getElementById("taulames"); //id de la taula html
				for(i=0;i<6;i++) { //número de setmanes
					for(j=0;j<7;j++) { //número de dies per setmana
						var diames=calendari.dies[(i*7)+j];
						taula.rows[i+1].cells[j].innerHTML=diames.numdia;
						taula.rows[i+1].cells[j].id=diames.dia;
						taula.rows[i+1].cells[j].setAttribute('class',diames.classeCSS);
						taula.rows[i+1].cells[j].setAttribute('className',diames.classeCSS); //per ie6
						if(calendari.dies[(i*7)+j].disponible) { //si hi ha disponibilitat per aquest dia assigna la funció mostraHores a onclick de la casella de la taula
							taula.rows[i+1].cells[j].onclick=(function(dia,profe){ return function(){mostraHores(dia,profe);return false;};})(diames.dia,idprofe);
						} else {
							taula.rows[i+1].cells[j].onclick=null; //si no hi ha disponibilitat elimina onclick per si un altre mes l'havia assignat
						}
					}
				}
				document.getElementById("mesany").innerHTML=calendari.titolMesAny;
				document.getElementById("messeguent").onclick=function(){creaMes(idprofe,calendari.messeguent);}; //assigna funcions onclick en els botons per mes següent i mes anterior
				document.getElementById("mesanterior").onclick=function(){creaMes(idprofe,calendari.mesanterior);};
			}
		}
	}
	xmlhttp.open('POST','peticiones-ajax.php',true);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	parametresPost="accio=4&nummes="+mes+"&idprofe="+idprofe;
	xmlhttp.send(parametresPost);
}

/* Mostra les hores disponibles al costat del calendari per poder reservar-les */

function mostraHores(data,idprofe) {
	var xmlhttp=creaObjAjax();
		xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 1) document.getElementById("hores").innerHTML="<p>Recibiendo datos, espere por favor.</p>";
		if(xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				eval(xmlhttp.responseText);
				var innerhtml="<p>Haga clic en un dia en verde para ver la disponibilidad.</p>";
				if(resultat.hores!=null) {
					var hores=resultat.hores.split(','); //crea array a partir de la cadena d'hores separades per comes obtinguda de l'ajax
					innerhtml="<h2>"+dataFormatEU(data)+"</h2><ul>";
					for(i=0;i<hores.length;i++) {
						innerhtml+="<li>"+hores[i]+"<a href=\"#\" onclick=\"reservaHores('"+hores[i]+"','"+data+"',"+idprofe+",0)\"><img src=\"imatges/boto-reserva.png\" /></a></li>";
					}
					innerhtml+="</ul>";
				} else {
					document.getElementById(data).setAttribute('class','diames blanc');
					document.getElementById(data).setAttribute('className','diames blanc'); //per ie6
					document.getElementById(data).onclick=null;
				}
				document.getElementById("hores").innerHTML=innerhtml;
			}
		}
	}
	xmlhttp.open('POST','peticiones-ajax.php',true);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	parametresPost="accio=2&data="+data+"&idprofe="+idprofe;
	xmlhttp.send(parametresPost);
}

/*
* Reserva les hores seleccionades.
* Si es passa valor 1 a confirmaNouProfe, és que s'ha acceptat el missatge
* de que la reserva pel nou professor eliminarà les reserves fetes pel professor anterior
*/

function reservaHores(hora,data,idprofe,confirmaNouProfe) {
	var setmanes=data.indexOf(',')==-1?false:true; //si existeix alguna coma a data, és que hi ha més d'un dia i per tant és reserva per setmanes
	var msgHoraNoDisponible="Lo sentimos. Esta hora ya no está disponible"; //missatge per defecte per reserva hores individuals
	if(setmanes===true) { //missatge per reserva per setmanes
		msgHoraNoDisponible="Lo sentimos. Alguna de las horas solicitadas ya no se encuentra disponible. Por favor, intente con otro profesor.";
	}
	var textConfirmaReserva=""; //acumula els textos dels dies i les hores de les classes que s'intenten reservar per mostrar el diàleg de confirmació
	var dates=data.split(','); //crea array amb els dies que s'intenten reservar.
	for(i=0;i<dates.length;i++) {
		textConfirmaReserva+="\ndía "+dataFormatEU(dates[i])+" a las "+hora+"h.";
	}
	if(confirmaNouProfe==0 && !confirm("Seguro que desea reservar las clases siguientes?"+textConfirmaReserva)) return;
	var xmlhttp=creaObjAjax();
		xmlhttp.onreadystatechange=function() {
		if(xmlhttp.readyState == 1) {
			if(setmanes===false) { //si és reserva individual...
				document.getElementById("hores").innerHTML="<p>Recibiendo datos, espere por favor.</p>";
			} else { //si és reserva per setmanes
				document.getElementById("msgespera").style.display="block";
			}
		}
		if(xmlhttp.readyState == 4) {
			if(xmlhttp.status == 200) {
				eval(xmlhttp.responseText);
				switch(resultat.error) {
					case 0: //cap error
						alert("Su reserva se ha añadido a la cesta"); break;
					case 1: //hores ja no estan disponibles
						alert(msgHoraNoDisponible); break;
					case 2: //s'intenta reservar hores a un professor diferent
						if(confirm("Ha reservado horas con otro profesor.\nEsta acción eliminará todas las reservas anteriores.\nEstá seguro que desea continuar?")) {
							reservaHores(hora,data,idprofe,1);
						}
						break;
					case 3: //s'intenta reservar més de 8 classes
						alert("No puede reservar más de 8 clases en total"); break;
					case 4: //s'intenta reservar hores individuals a més de 2 mesos vista
						alert("Las horas sueltas solamente se pueden reservar a 2 meses vista"); break;
					case 5: //no s'han pogut bloquejar les taules
						alert("Hubo errores al procesar su solicitud. Inténtelo más tarde");break;
				}
				if(setmanes===false) {
					mostraHores(data,idprofe); //mostra hores disponibles restants si s'està en reserva de classes individuals
				} else {
					document.getElementById("msgespera").style.display="none"; //amaga missatge d'espera si és reserva per setmanes
				}
			}
		}
	}
	xmlhttp.open('POST','peticiones-ajax.php',true);
	xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	parametresPost="accio=3&hora="+hora+"&dies="+data+"&idprofe="+idprofe+"&confirmanouprofe="+confirmaNouProfe;
	xmlhttp.send(parametresPost);
}
