// Applicazione Ajax prenotazioni: Stefano Bargioni, 2008-01-16
// richiede sarissa.js
// in alcuni casi fa uso di XML per comunicare con il db, in altri solo di testo html

var oldage = "Sat, 1 Jan 2000 00:00:00 GMT";
var scriptHome = '/cgi-bin/prenotazioni/'; // forse alcuni broser non accettano che sia un indirizzo assoluto

function gebid(id) {
	return document.getElementById(id);
}

function getElementsByClassName(oElm, strTagName, strClassName) {
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++) {
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)) {
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}

// return the value of the radio button that is checked
// return an empty string if none are checked, or there are no radio buttons
function getCheckedValue(radioObj) {
	if (!radioObj)
		return "";
	var radioLength = radioObj.length;
	if (radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for (var i = 0; i < radioLength; i++) {
		if (radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if (!radioObj)
		return;
	var radioLength = radioObj.length;
	if (radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for (var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if (radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

function xhr(url) { // estrae dati testo
	var xmlHttp = new XMLHttpRequest();
	if (xmlHttp.overrideMimeType) { xmlHttp.overrideMimeType('text/html; charset=iso-8859-1') }
	xmlHttp.open('GET', url, false); // sincrona
	if (url.search(/html/) == -1 || gebid('debugger').checked) { // ricarica qualunque documento che non sia html statico, o anche quelli se debug attivo
		xmlHttp.setRequestHeader("If-Modified-Since", oldage); // assicura provenienza dal server e non dalla cache
	}
	xmlHttp.send(null);
	if (xmlHttp.status != 200) { alert('xhr: an error occurred while loading '+url) }
	if (gebid('debugger').checked) {
		gebid('debug').innerHTML+='<br/>'+url;
		gebid('debugger').checked=true;
	}
	return xmlHttp;
}

function xhr2(url) { // estrae dati xml
	var xmlHttp = new XMLHttpRequest();
	if (xmlHttp.overrideMimeType) { xmlHttp.overrideMimeType('text/xml; charset=iso-8859-1') }
	xmlHttp.open('GET', url, false); // sincrona
	xmlHttp.setRequestHeader("If-Modified-Since", oldage); // assicura provenienza dal server e non dalla cache
	xmlHttp.send(null);
	if (xmlHttp.status != 200) { alert('xhr2: an error occurred while loading '+url) }
	// console.log(xmlHttp);
	// alert(xmlHttp.responseXML.getElementsByTagName('long_desc')[0].firstChild.nodeValue);
	if (gebid('debugger').checked) {
		Sarissa.updateContentFromURI(url,gebid('debug'),null,null,true);
		gebid('debugger').checked=true; // stranamente si disattiva
	}
	return xmlHttp;
}

/*
function oggetto(domNode, sXpath) { // genera oggetto Javascript da documento XML
	var o = new Object;
	var objNodeList = domNode.selectNodes(sXpath);
	// alert(objNodeList[0].childNodes.length); // test
	for (i=0; i<objNodeList[0].childNodes.length; i++) {
		if (objNodeList[0].childNodes[i].nodeType==1) {
			if (objNodeList[0].childNodes[i].childNodes[0]) {
				o[objNodeList[0].childNodes[i].tagName] = objNodeList[0].childNodes[i].childNodes[0].nodeValue;
			}
			else {
				o[objNodeList[0].childNodes[i].tagName] = null;
			}
		}
	}
	return o;
}
*/

function incr_counter() {
	gebid('counter').innerHTML='?';
	gebid('counter').innerHTML = xhr(scriptHome+'servizi.pl?action=incr_counter').responseText;
}

function display_counter() {
 	gebid('counter').innerHTML = xhr(scriptHome+'servizi.pl?action=display_counter').responseText;
}

function valid_ip(ip) {
	if (ip == '10.10.42.237') { return true }; // sb
	return false;
}

function elenco_servizi() { // farlo con xsl? forse attualmente è troppo per un browser qualunque
	var id_servizio;
	var url = scriptHome+'servizi.pl?action=list';
	var servizi = xhr2(url);
	// crea tabella dentro la div servizi
	var tb = document.createElement("table");
	tb.setAttribute('id','tbservizi');
	tb.setAttribute('border','1');

	var dom = servizi.responseXML;
	var s = dom.selectNodes('//servizio');
	// per ogni servizio s
	for (i=0;i<s.length;i++) {
		var tr = document.createElement("tr");
		tb.appendChild(tr);
		var p = s[i].selectNodes('*');
		//	per ogni proprietà p del servizio
		for (j=0;j<p.length;j++) {
			var td = document.createElement("td");
			td.setAttribute('class',p[j].tagName);
			td.setAttribute('title',p[j].tagName);
			td.setAttribute('id',p[j].tagName+'_'+i);

			// bottone modifica, se utente qualificato in base a ip
			if (p[j].tagName == 'id_servizio') {
				if (valid_ip(dom.selectNodes('//servizi/ip')[0].firstChild.nodeValue)) {
					var mod = document.createElement("td");
					var img = document.createElement("img");
					img.setAttribute('src','/librirep/img/modify.gif');
					img.setAttribute('alt','[modifica]');
					img.setAttribute('title','modifica');
					img.setAttribute('border','0');
		
					var newLink = document.createElement('a');
					newLink.setAttribute('href','javascript:update_servizio('+p[j].textContent+')');
					newLink.appendChild(img);
					mod.appendChild(newLink);
					td.appendChild(mod);
					id_servizio = p[j].textContent;
				}
			}
			else {
				td.innerHTML=p[j].textContent;
			}
			tr.appendChild(td);
		} // fine-per ogni proprietà
		// bottone per accesso al servizio
		td = document.createElement('td');
		td.innerHTML='<a title="accedi al servizio" href="servizi.pl?action=home;id='+id_servizio+'">A</a>';
		tr.appendChild(td);
	} // fine-per ogni servizio

	gebid('servizi').appendChild(tb); // aggancia tabella alla pagina web nella div servizi
	// dom.selectNodes('//servizi/count')[0].firstChild.nodeValue
	if (dom.selectNodes('//servizi/count')[0].firstChild.nodeValue == 0) {
		gebid('servizi').innerHTML='Nessun servizio definito.';
	}
}

function elenco_utenti() {
	var url = scriptHome+'utenti.pl?action=list';
	var utenti = xhr2(url);
	// crea tabella dentro la div utenti
	var tb = document.createElement("table");
	tb.setAttribute('id','tbutenti');
	tb.setAttribute('border','1');

	var dom = utenti.responseXML;
	var s = dom.selectNodes('//utente');
	// per ogni utente s
	for (i=0;i<s.length;i++) {
		var tr = document.createElement("tr");
		tb.appendChild(tr);
		var p = s[i].selectNodes('*');
		//	per ogni proprietà p dell'utente
		for (j=0;j<p.length;j++) {
			var td = document.createElement("td");
			td.setAttribute('class',p[j].tagName);
			td.setAttribute('title',p[j].tagName);
			td.setAttribute('id',p[j].tagName+'_'+i);

			// bottone modifica, se utente qualificato in base a ip
			if (p[j].tagName == 'id_utente') {
				if (valid_ip(dom.selectNodes('//utenti/ip')[0].firstChild.nodeValue)) {
					var mod = document.createElement("td");
					var img = document.createElement("img");
					img.setAttribute('src','/librirep/img/modify.gif');
					img.setAttribute('alt','[modifica]');
					img.setAttribute('title','modifica');
					img.setAttribute('border','0');
		
					var newLink = document.createElement('a');
					newLink.setAttribute('href','javascript:update_utente('+p[j].textContent+')');
					newLink.appendChild(img);
					mod.appendChild(newLink);
					td.appendChild(mod);
				}
			}
			else {
				td.innerHTML=p[j].textContent;
			}
			tr.appendChild(td);
		} // fine-per ogni proprietà
	} // fine-per ogni utente
	gebid('utenti').appendChild(tb); // aggancia tabella alla pagina web nella div utenti

	// dom.selectNodes('//utenti/count')[0].firstChild.nodeValue
	if (dom.selectNodes('//utenti/count')[0].firstChild.nodeValue == 0) {
		gebid('utenti').innerHTML='Nessun utente definito.';
	}
}

function lista_utenti() { // costruisce la select tipi utente
	var url = scriptHome+'utenti.pl?action=list';
	var utenti = xhr2(url);
	var sel = gebid('sel_tipi_utente');
	var dom = utenti.responseXML;
	var s = dom.selectNodes('//utente');
	sel.options[0] = new Option('*indicare il proprio tipo*','0');
	for (i=0;i<s.length;i++) { // per ogni utente s
		var v,n; // valore e stringa: id_utente e nome_lungo
		v = s[i].selectNodes('id_utente')[0].textContent;
		n = s[i].selectNodes('nome_lungo')[0].textContent;
		sel.options[i+1] = new Option(n,v);
	} // fine-per ogni utente
}

function save_personal_data() {
	if (gebid('flag_cookie').checked) {
		var cr;
		cr= gebid('richiedente_nome').value+';'+ 
			gebid('richiedente_cognome').value+';'+ 
			gebid('richiedente_tessera_pusc').value+';';
			try {cr += gebid('richiedente_email').value} catch(e){} cr += ';';
			try {cr += gebid('richiedente_telefono').value} catch(e){} cr += ';';
			try {cr += gebid('richiedente_indirizzo').value} catch(e){}
		setCookie('PUSCprenotazioniDP',cr);
	}
	else {
		setCookie('PUSCprenotazioniDP','',new Date()); // svuota e fa scadere il cookie a adesso
	}
}

function get_personal_data() {
	var cr = getCookie('PUSCprenotazioniDP');
	if (cr) {
		var v = cr.split(';');
		gebid('richiedente_nome').value = v[0];
		gebid('richiedente_cognome').value = v[1];
		gebid('richiedente_tessera_pusc').value = v[2]; // può essere anche la tessera issra
		try {gebid('richiedente_email').value = v[3];} catch(e){} // non ovunque usato email
		try {gebid('richiedente_telefono').value = v[4];} catch(e){} // non ovunque usato telefono
		try {gebid('richiedente_indirizzo').value = v[5];} catch(e){} // non ovunque usato indirizzo postale
		
		if (!gebid('flag_cookie').checked) {gebid('flag_cookie').click();}
	}
}

function update_servizio(id) {
	alert('Non attivo (id='+id+')');
	// scriptHome+'servizi.pl?action=mod;id='+id
}

function update_utente(id) {
	alert('Non attivo (id='+id+')');
}

/*
function displayFile(f,t) {
 	var corpo = gebid('body');
 	corpo.innerHTML = xhr(f).responseText;
	if (t) {
		// assicura neri tutti i bottoni della bottoniera
		var b = getElementsByClassName(document,'a','button');
		for (i=0;i<b.length;i++) {
			b[i].style.color='black';
		}
		// in verde il bottone corrente
		t.style.color='green';
	}
}

function utente() {
	// var ncu = xhr('/cgi-bin/chiavi/utente.pl').responseText.split(';'); // pessimo separatore
	// var u = gebid('utente');
	// u.innerHTML = ncu[0]+' '+ncu[1]+' - Ufficio '+ncu[2];
	// return ncu;

	// rifacimento con xml, Stefano Bargioni, 2007-11-26
	var xmlHttp = xhr2('/cgi-bin/chiavi/utente.pl');
	var utente = oggetto(xmlHttp.responseXML,'//utente');
	xmlHttp = xhr2('/cgi-bin/chiavi/ufficio.pl?action=xml');
	var ufficio = oggetto(xmlHttp.responseXML,'//ufficio');
	var u = gebid('utente');
	u.innerHTML = utente['nome']+' '+utente['cognome']+' - Ufficio '+ufficio['long_desc'];
	utente['ufficio'] = ufficio;
	return utente;
}
*/

function setTitle(s) {
	document.title = 'Prenotazioni - '+s;
	gebid('titolo').innerHTML = 'PUSC - Prenotazioni - '+s;
}

/*
function elenco_portachiavi(uff,elenco) {
 	var url = '/cgi-bin/chiavi/ufficio.pl?action=pklist';
 	url += ';ufficio='+uff;
// 	var valori = xhr(url).responseText.split(';;');
// 	elenco.options.length = 1; // svuota menu, tranne la prima voce
// 	elenco.options[0].selected=true;
// 	if (uff != -1) {
// 		for (i=0;i<valori.length;i++) {
// 			var a = valori[i].split('==');
// 			elenco.options[i+1] = new Option(a[0],a[1]);
// 		}
// 	}

	// rifacimento con XML, Stefano Bargioni, 2007-11-26
	url += ';mode=xml';
	var xmlHttp = xhr2(url);
	var o = xmlHttp.responseXML.selectNodes('/portachiavi/portachiave');
	// in o ci sono coppie di valori <short_desc> <id>
 	elenco.options.length = 1; // svuota menu, tranne la prima voce
 	elenco.options[0].selected = true; // la attiva
 	if (uff != -1) {
		for (var i=0; i<o.length; i++) {
			elenco.options[i+1] = new Option(o[i].childNodes[0].firstChild.nodeValue,(o[i].childNodes[1].firstChild.nodeValue));
		}
 	}
}

function test() { // prove su domdoc, richiamare esplicitamente
	var xmlHttp = xhr2('/cgi-bin/chiavi/ufficio.pl?action=pklist;ufficio=0;mode=xml');
	var o = xmlHttp.responseXML.selectNodes('/portachiavi/portachiave');
	// coppie di valori
	for (var i=0;i<o.length;i++) {
		alert(o[i].childNodes[0].firstChild.nodeValue+' '+(o[i].childNodes[1].firstChild.nodeValue));
	}
	// lista di valori
	o = xmlHttp.responseXML.selectNodes('/portachiavi/portachiave/short_desc');
	for (var i=0;i<o.length;i++) {
		alert(o[i].firstChild.nodeValue);
	}
}

function ricerca() {
	var r = gebid('ricerca');
	var url = '/cgi-bin/chiavi/chiave.pl?action=find';
	url += ';ufficio='+escape(r.ufficio.value);
	url += ';pkid='+escape(r.pkid.value);
	url += ';etichetta='+escape(r.etichetta.value);
	url += ';numero='+escape(r.numero.value);
	url += ';descrizione='+r.descrizione.value;
	if (getCheckedValue(r.riserva) != -1) {
		url += ';riserva='+getCheckedValue(r.riserva);
	}
	url += ';note='+r.note.value;
	var risposta = gebid('risultato_ricerca');
	risposta.innerHTML = xhr(url).responseText;
	if (gebid('mpkid')) elenco_portachiavi(ncu[4],gebid('mpkid'));
	return false;
}

function apri(pkid,short_desc) { // mostra contenuto di un portachiavi
	var url = '/cgi-bin/chiavi/chiave.pl';
	url += '?action=find;pkid='+pkid;
	var risposta = gebid('body');
	risposta.innerHTML = '<h2>Portachiavi '+short_desc+'</h2>';
	risposta.innerHTML += xhr(url).responseText;
	elenco_portachiavi(ncu[4],gebid('mpkid'));
}

function elenco_uffici(d) { // d è l'id dell'ufficio dell'utente
	if (!d) { d=0 }
	var r = gebid('ricerca');
	var elenco = r.ufficio;
	var url = '/cgi-bin/chiavi/ufficio.pl?action=list';
	var valori = xhr(url).responseText.split(';');
	elenco.options.length=1; // svuota menu
	elenco.options[0].selected=true;
	for (i=0;i<valori.length;i++) {
		var a = valori[i].split('=');
		elenco.options[i+1]=new Option(a[0],a[1]);
		if (d==a[1]) { elenco.options[i+1].selected=true; }
	}
}

function nuovo_portachiavi() {
	var url = '/cgi-bin/chiavi/portachiave.pl?action=new';
	var r = gebid('fnpk');
	url += ';sigla='+escape(r.sigla.value);
	url += ';short_desc='+escape(r.short_desc.value);
	url += ';long_desc='+r.long_desc.value;
 	gebid('msg').innerHTML = xhr(url).responseText;
}

function edit_chiave(pkid,sd) { // form per nuova chiave in portachiavi pkid
	displayFile('chiave.html','');
	gebid('tit_pkid').innerHTML=sd;
	gebid('fnk').pkid.value=pkid;
	// preimposta numero
	var url = '/cgi-bin/chiavi/portachiave.pl?action=count';
	var r = gebid('fnpk');
	url += ';pkid='+pkid;
	var n = parseInt(xhr(url).responseText);
	if (isNaN(n)) n=0;
 	gebid('numero').value = n+1;
}

function nuova_chiave() {
	var url = '/cgi-bin/chiavi/chiave.pl?action=new';
	var r = gebid('fnk');
	url += ';pkid='+escape(r.pkid.value);
	url += ';numero='+escape(r.numero.value);
	if (!r.numero.value) {alert('Indicare il numero');return false;}
	if (!r.etichetta.value) {alert('Indicare l\'etichetta');return false;}
	url += ';etichetta='+escape(r.etichetta.value);
	url += ';riserva='+getCheckedValue(r.riserva);
	url += ';descrizione='+escape(r.descrizione.value);
	url += ';note='+escape(r.note.value);
	// alert(url); // test
 	gebid('msg').innerHTML = xhr(url).responseText;
}

function cancella_portachiavi(pkid) {
	if (confirm('Confermi la cancellazione del portachiavi '+pkid+'?')) {
		var url = '/cgi-bin/chiavi/portachiave.pl?action=del;pkid='+pkid;
 		var r = xhr(url).responseText.split(';');
		if (r[0]==1) {
			gebid('pk'+pkid).style.display='none'; // sarebbe meglio cancellare la riga!
			// deleteRow('pk'+pkid);
			var cpk = gebid('contatore_portachiavi');
			cpk.innerHTML--;
		}
		alert(r[1]);
	}
}

function modifica_portachiavi(pkid) {
	displayFile('modifica_portachiave.html','');
	var url = '/cgi-bin/chiavi/portachiave.pl?action=get_by_id;pkid='+pkid;
 	var r = xhr(url).responseText.split(';');
	gebid('tit_pkid').innerHTML=pkid;
	var f = gebid('fmpk');
	f.pkid.value=pkid;
	f.sigla.value=r[1];
	f.short_desc.value=r[2];
	f.long_desc.value=r[3];
}

function salva_modifiche_portachiavi() {
	var url = '/cgi-bin/chiavi/portachiave.pl?action=mod';
	var r = gebid('fmpk');
	url += ';pkid='+escape(r.pkid.value);
	url += ';sigla='+escape(r.sigla.value);
	url += ';short_desc='+escape(r.short_desc.value);
	url += ';long_desc='+escape(r.long_desc.value);
	gebid('msg').innerHTML = xhr(url).responseText;
}

function modifica_chiave(id) {
	displayFile('modifica_chiave.html','');
	var url = '/cgi-bin/chiavi/chiave.pl?action=get_by_id;id='+id;
	var r = xhr(url).responseText.split(';');
	gebid('tit_id').innerHTML=id;
	gebid('pkid').value=r[1];
	gebid('tit_pk').innerHTML=r[9];
	var f = gebid('fmk');
	f.id.value=id;
	f.numero.value=r[2];
	f.etichetta.value=r[3];
	setCheckedValue(f.riserva,r[4]||'0');
	f.descrizione.value=r[5];
	f.note.value=r[6];
}

function salva_modifiche_chiave() {
	var url = '/cgi-bin/chiavi/chiave.pl?action=mod';
	var r = gebid('fmk');
	url += ';id='+escape(r.id.value);
	url += ';numero='+escape(r.numero.value);
	url += ';etichetta='+escape(r.etichetta.value);
	url += ';riserva='+getCheckedValue(r.riserva)||'0';
	url += ';descrizione='+escape(r.descrizione.value);
	url += ';note='+escape(r.note.value);
 	gebid('msg').innerHTML = xhr(url).responseText;
}

function cancella_chiave(id,conf) {
	if (conf) {
		var ok = confirm('Confermi la cancellazione della chiave '+id+'?');
		if (!ok) return;
	}
	var url = '/cgi-bin/chiavi/chiave.pl?action=del;id='+id;
 	var r = xhr(url).responseText.split(';');
	if (r[0]==1) {
		var riga = gebid('c'+id);
		riga.parentNode.deleteRow('c'+id);
		var cc = gebid('contatore_chiavi');
		cc.innerHTML--;
		conta_selezionati('input','q');
	}
	if (conf) { alert(r[1]); }
}

function conta_selezionati(tag,cl) {
	var objs = getElementsByClassName(document,tag,cl);
	var n = 0;
	for (i=0;i<objs.length;i++) {
		if (objs[i].checked) { n++; }
	}
	gebid('selection_count').innerHTML = 'Selezionate '+n+'.';
	return n;
}

function de_seleziona_tutte(qflag) {
	var qs = getElementsByClassName(document,'input','q');
	for (i=0;i<qs.length;i++) {
		qs[i].checked = qflag;
	}
	conta_selezionati('input','q');
}

function sposta_selezionate(q) {
	// chiave.pl?action=move;id=;id=;id=;pkid=
}

function elimina_chiavi_selezionate() { // cancella gruppo di chiavi
	var nc = conta_selezionati('input','q');
	if (nc == 0 ) {
		alert('Nessuna chiave selezionata');
		return;
	}
	if (confirm('Confermi la cancellazione di tutte le '+nc+' chiavi selezionate?')) {
		var qs = getElementsByClassName(document,'input','q');
		var da_cancellare = new Array();
		var n=0;
		for (var i=0;i<qs.length;i++) {
			if (qs[i].checked) {
				da_cancellare[n]=qs[i].value;
				// alert(qs[i].value); // test
				n++;
			}
		}
		// alert(da_cancellare.length); // test
		for (var i=0;i<da_cancellare.length;i++) {
			cancella_chiave(da_cancellare[i],false);
		}
		conta_selezionati('input','q'); // fa zero per forza
		alert('Cancellate '+n+' chiavi');
	}
}

function tot_chiavi() {
	var ncs = getElementsByClassName(document,'td','numero_chiavi');
	var tot = 0;
	for (var i=0;i<ncs.length;i++) {
		tot += ncs[i].innerHTML/1;
	}
	gebid('tot_chiavi').innerHTML=tot;
}
*/