function gEBI(id_element) {
	var element;
	if(document.getElementById) {
		element=document.getElementById(id_element);
	} else {
		element=document.all[id_element];
	}
	return element;
}

function gEBT(nm_element) {
	return document.getElementsByTagName(nm_element); 
}  

function svlp(euser, slot, code){
	var dvlpid, dvlphtm, dvlcid, dvlcsrc, e; 
	e=euser.substring(0,1);	
	dvlphtm="<a href=\"/viewfoto.php?d="+code+"&euser="+euser+"\" onclick=\"pop('BSN » La_mia_foto_qualunque','"+code+"'); return false;\" target=_vlp><img src=\"http://img.bellisinasce.it/vlm/k"+e+"/k"+euser+"-"+slot+".jpg\"></a><br />";
	dvlcsrc='http://www.bellisinasce.it/schedan.php?op=ajx_scomm&euser='+euser+'&pos='+slot;   
	dvlpid=gEBI('vlp_pic');
	dvlpid.innerHTML=dvlphtm;	
	gTXT ('vlp_comm', '/ajx/scvlp.php?op=sc&euser='+euser+'&pos='+slot, '', true);
} 


// funzione per assegnare l'oggetto XMLHttpRequest
// compatibile con i browsers più recenti e diffusi
function cXHR() {
																						// lista delle variabili locali
	var XHR = null; 																	// variabile di ritorno, nulla di default
	var browserUtente = navigator.userAgent.toUpperCase(); 								// informazioni sul nome del browser
	if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object"){	// browser standard con supporto nativo (IE7, OPERA, FIREFOX) non importa il tipo di browser
		XHR = new XMLHttpRequest();
	} else if (window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) { 			// browser Internet Explorer è necessario filtrare la versione 4
	  if(browserUtente.indexOf("MSIE 5") < 0){	 										// la versione 6 di IE ha un nome differente per il tipo di oggetto ActiveX
	  	XHR = new ActiveXObject("Msxml2.XMLHTTP");
	  } else { 																			// le versioni 5 e 5.5 invece sfruttano lo stesso nome
	  	XHR = new ActiveXObject("Microsoft.XMLHTTP");
	  }
	}
	return XHR;
}


function gTXT(id_dest, url, vars, ad) {
	var actDesc=new Array('Caricamento in corso....', 'Invio in corso....', 'Richiesta in corso....', 'Cancellazione in corso....', 'Modifica in corso....', 'Aggiornamento in corso....', '');	// variabili di funzione
	var ajax=cXHR();																		// assegnazione oggetto XMLHttpRequest			
	var elemento=gEBI(id_dest);    															// assegnazione elemento del documento
    var usaLink=true;																		// Booleano di risposta
  	if(ajax) {																				// il link al file non deve essere usato
		ajax.open('get', url, true);														// impostazione richiesta asincrona in GET del file specificato
		ajax.setRequestHeader('connection', 'close');										// rimozione dell'header "connection" come "keep alive"
		ajax.onreadystatechange=function() {												// impostazione controllo e stato della richiesta
	      	if(ajax.readyState==4) {														// verifica dello stato
	        	if(statusText[ajax.status] === 'OK') {										// verifica della risposta da parte del server
	          		elemento.innerHTML = ajax.responseText;									// operazione avvenuta con successo
	        	} else { 																	// errore di caricamento
					elemento.innerHTML = 'Impossibile effettuare l\'operazione richiesta.<br />';
					elemento.innerHTML += 'Errore riscontrato: ' + statusText[ajax.status];
				}
			} else {
				elemento.innerHTML='<div class="ajx_req">'+actDesc[ad]+'</div>';
			}
		}
		ajax.send(null);// invio richiesta
		elemento.style.visibility='visible';				
		usaLink=false;																		// se l'oggetto XMLHttpRequest non è nullo	
	}
	return usaLink;
}

function gXML(id_dest, url, vars, showl) {
	var ajax=cXHR();
	var elemento=gEBI(id_dest);
	var usaLink=true;																	// variabili di controllo del tempo
	var dataChiamata=new Date();														// data di inizio interazione
	var inizioChiamata=dataChiamata.getTime();											// tempo in millisecondi dell'inizio
	var massimaAttesa=5;																// secondi di attesa prima di fermare l'interazione 
	var verificaTempoTrascorso;															// variabile cui assegnare la funzione di verifica
	if(ajax) {	 																		// !!! ATTENZIONE QUI VA CAMBIATO TUTTO LA ROUTINE USA "THIS"
		usaLink = false;
		if(!link.clicked) {																// parametro fittizio all'elemento link per evitare un doppio click se il parametro è risultato undefined o false entriamo e gli assegnamo true 
			link.clicked = true;														// NOTA. Qualora l'elemento dovesse essere parte di un form si potrebbe	 sfruttare il parametro "disabled", assegnandolo solo quando necessario.
			ajax.open("get", link.href, true);											// effettuiamo la chiamata sul parametro href
			ajax.setRequestHeader("connection", "close");
			ajax.onreadystatechange = function() {
				if(ajax.readyState==4) {  												// se la richiesta è già stata completata
					verificaTempoTrascorso = function(){};								// annulliamo la funzione di verifica tempo
					if(statusText[ajax.status] === "OK") {								// e continuiamo con i normali controlli
						if(ajax.responseXML) {
							elemento.innerHTML=pseXml(ajax.responseXML);
						} else {
							elemento.innerHTML = "L'XML restituito dalla richiesta non è valido.<br />" + ajax.responseText.split('<').join("&lt;").split('>').join("&gt;");
						}
					} else {
						elemento.innerHTML = "Impossibile effettuare l'operazione richiesta.<br />" + "Errore riscontrato: " + statusText[ajax.status];
					}
															// Se il link non dovesse esser sovrascritto, come invece accade in questo esempio, è importante ricordarsi di riabilitarlo reimpostando il parametro fittizio Esempio: link.clicked = false;
				} else if(massimaAttesa < 1000) {
															// Se la richiesta non è stata ancora ultimata è possibile sfruttare la variabile massimaAttesa per verificare se il controllo sul tempo trascorso sia stato creato o meno.
															// Essendo tale valore un intero rappresentante i secondi ma non essendo ancora stato riassegnato nel corrispettivo in millesimi, questo else if può garantire che il codice al suo interno verrà eseguito una sola volta
					massimaAttesa = massimaAttesa * 1000;	// conversione di massimaAttesa in millisecondi
															// il controllo sul tempo trascorso deve essere asincrono a questa funzione poichè non è detto che il cambio di stato della richiesta venga effettuato in tempi utili. Una funzione apposita per la verifica è la soluzione più indicata
					verificaTempoTrascorso = function() {
						dataChiamata = new Date(); 												// ogni chiamata asincrona a questa funzione dovrà verificare la durata dell'interazione. E' necessario quindi ridichiarare la variabile al fine di ottenere il nuovo oggetto Date
						if((dataChiamata.getTime()-inizioChiamata)>massimaAttesa) {				// Se il tempo trascorso è maggiore della massima attesa ... interrompiamo la richiesta ed informarmiamo l'utente di quanto avvenuto.
							ajax.onreadystatechange = function(){return;};						// Quindi riassegnamo onreadystatechange ad una funzione vuota, poichè quest'evento sarà sollevato chiamando il metodo abort()
							ajax.abort();														// è possibile a questo punto richiamare il metodo abort ed annullare le operazioni dell'oggetto XMLHttpRequest
																								// creiamo un elemento per avvertire l'utente del fallimento della richiesta da aggiungere  a quello predisposto per mostrare il risultato. 
																								// Usiamo il metodo createElement() del document e non innerHTML,che potrebbe riscrivere il link selezionato annullando l'assegnazione del parametro fittizio.
																								// Avendo annullato l'utilità dell'oggetto XMLHttpRequest è possibile anche riciclare la variabile 'ajax'.
								ajax=document.createElement("p");
								ajax.innerHTML="Spiacente, richiesta fallita.<br />" + "La prego di ritentare tra qualche istante.";
								elemento.appendChild(ajax);		   								// è possibile ripristinare il parametro fittizio del link su 'false' sia subito che con qualche istante di latenza, Infatti l'attuale situazione può essere generata dalla risposta lenta di un server sovraccarico e qualche attimo	di tranquillità in più non guasta.
								link.clicked=false; 											// Tuttavia per semplificare il codice ripristiniamo il link qui.
						} else { 																// se invece il tempo è inferiore al timeout si richiama questa stessa funzione, con un tempo che non dovrà essere ne alto ne troppo basso.
							setTimeout(verificaTempoTrascorso, 100);
						}
					}
					verificaTempoTrascorso();													// definita la funzione non resta che avviarla
				}
			}
			ajax.send(null);
		}
	}
	return usaLink;
} 	 
function gEPR(id_dest, url, id_form, ifrd, multi) {	// getElementByPostRequest
	//TOPPA
	var vars=gIQV(id_form, ifrd);	
	//alert (vars);
	var actDesc=new Array('Caricamento in corso....', 'Invio in corso....', 'Richiesta in corso....', 'Cancellazione in corso....', 'Modifica in corso....', 'Aggiornamento in corso....', '');	// variabili di funzione
	var ajax=cXHR();
	var usaLink=true;
	var elemento=gEBI(id_dest)
	if (multi!=1) {
		var ctype='application/x-www-form-urlencoded; charset=UTF-8;';
	} else {
		var ctype='multipart/form-data;';	// charset=UTF-8;
	}
	/*if (!http_request) {
		alert('Cannot create XMLHTTP instance');
		return false;
	} */
	if (ajax) {
		usaLink=false;
		if (ajax.overrideMimeType) {
			// set type accordingly to anticipated content type
			// http_request.overrideMimeType('text/xml');
			ajax.overrideMimeType('text/html');
		}
		ajax.onreadystatechange=function() {	
			if (ajax.readyState==4) {		
				if (statusText[ajax.status] === 'OK') {
					//alert (ajax.responseText);
					evaljavascript(ajax.responseText)
					elemento.innerHTML=ajax.responseText;            
				} else {
					elemento.innerHTML = 'Impossibile effettuare l\'operazione richiesta.<br />';
					elemento.innerHTML += 'Errore riscontrato: ' + statusText[ajax.status];
				}
			} else {
				elemento.innerHTML='<div class="ajx_req">'+actDesc[ifrd]+'</div>';
			}
		}
		ajax.open('POST', url, true);
		ajax.setRequestHeader('Content-type', ctype);
		ajax.setRequestHeader('Content-length', vars.length);
		ajax.setRequestHeader('Connection', 'close');
		ajax.send(vars);
	}
	return usaLink;
}

function urlenc (str) {
	str = (str+'').toString();
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+').replace(/~/g, '%7E');
}

function go2pg(s) {
	if((!ura)||(!id_dest)) {
		return false;
	} else {
		gTXT(id_dest, ura+'&s='+s, 0)
	}
}	
function alertContents(id_dest) {

} 

function gIQV(id_form, ifrd) {  // getInputQueryVars
	var id_form=gEBI(id_form);
	var elementi=id_form.elements;
	var pairs=new Array();
	var i; 
	for (i=0; i<elementi.length; i++) {
		if ((name=elementi[i].name) && (value=elementi[i].value)) {
			pairs.push(name + "=" + encodeURIComponent(value));
		}
	}
	// TOPPA XD	
	if (ifrd==0) {
		pairs.push("msgbody=" + encodeURIComponent(iFrameDoc.body.innerHTML));
	}
	return pairs.join("&");
}
function evaljavascript(content) { 
	// var content_bak = "THIS is text <script type=text/javascript>myAlert(); function myAlert(){alert('this is a string'); }</script>"; 
	var beginScript=content.search(/<script/i); 
	var endScript=content.search(/<\/script\s*>/i); 
	if ((beginScript>0)&&(endScript>0)) {
		ajaxScript=content.substring(beginScript,endScript+9); 
		ajaxScript=ajaxScript.replace(/<script language="javascript" type="text\/javascript">|<!--|\/\/-->|<\/script>/gi,''); // strips out script tags 
		
		if(ajaxScript.length > 0) {
			//alert (ajaxScript);
			eval(ajaxScript);
		} 
	}
	// var myScript = content.match(/<script[^>]*?>.*?<\/script\s*>/); 
	//alert(myScript); 
	//var regExScript = new RegExp('<script[^>]*?>.*?</script\s*>'); // Selects <script> tags and content 

}
function gotor(url) {
	window.location.replace(url); ;
}
function goton(url) {
	document.location.href = url; ;
}
/* This tooltip library was created by Mukul Kumar; http://codeeazy.com */
function stip(e,message){
	var x=0;
	var y=0;
	var m;
	var h;
	if(!e){
		var e=window.event;
	}
	if(e.pageX||e.pageY){
		x=e.pageX;y=e.pageY;
	} else if(e.clientX||e.clientY) {
		x=e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;
		y=e.clientY+document.body.scrollTop+document.documentElement.scrollTop;
	}
	m=document.getElementById('ptip');
	if((y>10)&&(y<4500)){
		m.style.top=y+24+"px";
	} else {
		m.style.top=y+24+"px";
	}
	var messageHeigth=(message.length/20)*10+25;
	if((e.clientY+messageHeigth)>510) {
		m.style.top=y-messageHeigth+"px";
	}
	if(x<8500){
		m.style.left=x+10+"px";
	} else {
		m.style.left=x-170+"px";
	}
	m.innerHTML=message;
	m.style.display="block";
	m.style.zIndex=203;
}

function htip(){
	var m;
	m=gEBI('ptip');
	m.style.display="none";
}


/*onload = function() {
 var ajax = cXHR();
  if(ajax) {
   // applicativo AJAX
 }
} /*/  


/** OGGETTI / VARIABILI / ARRAY */
	
var main_host = 'http://www.bellisinasce.it';
var stic_host = 'http://img.bellisinasce.it'; 

// oggetto di verifica stato
/*var readyState = {
	INATTIVO:	0,
	INIZIALIZZATO:	1,
	RICHIESTA:	2,
	RISPOSTA:	3,
	COMPLETATO:	4
};*/

// array descrittivo dei codici restituiti dal server
// [la scelta dell' array è per evitare problemi con vecchi browsers]
var statusText = new Array();
statusText[100] = "Continue";
statusText[101] = "Switching Protocols";
statusText[200] = "OK";
statusText[201] = "Created";
statusText[202] = "Accepted";
statusText[203] = "Non-Authoritative Information";
statusText[204] = "No Content";
statusText[205] = "Reset Content";
statusText[206] = "Partial Content";
statusText[300] = "Multiple Choices";
statusText[301] = "Moved Permanently";
statusText[302] = "Found";
statusText[303] = "See Other";
statusText[304] = "Not Modified";
statusText[305] = "Use Proxy";
statusText[306] = "(unused, but reserved)";
statusText[307] = "Temporary Redirect";
statusText[400] = "Bad Request";
statusText[401] = "Unauthorized";
statusText[402] = "Payment Required";
statusText[403] = "Forbidden";
statusText[404] = "Not Found";
statusText[405] = "Method Not Allowed";
statusText[406] = "Not Acceptable";
statusText[407] = "Proxy Authentication Required";
statusText[408] = "Request Timeout";
statusText[409] = "Conflict";
statusText[410] = "Gone";
statusText[411] = "Length Required";
statusText[412] = "Precondition Failed";
statusText[413] = "Request Entity Too Large";
statusText[414] = "Request-URI Too Long";
statusText[415] = "Unsupported Media Type";
statusText[416] = "Requested Range Not Satisfiable";
statusText[417] = "Expectation Failed";
statusText[500] = "Internal Server Error";
statusText[501] = "Not Implemented";
statusText[502] = "Bad Gateway";
statusText[503] = "Service Unavailable";
statusText[504] = "Gateway Timeout";
statusText[505] = "HTTP Version Not Supported";
statusText[509] = "Bandwidth Limit Exceeded";
		
		
// ###########   ALTRE FUNZIONI ##################		

function formatDate(date, ext) {
	if(lang == 'en') {

		if(date == '0000-00-00 00:00:00')
			return(document.write('not available'));
		
		mesi = ['january','february','march','april','may','june','july','august','september','october','november','december'];

		var s = /^(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)$/.exec(date);
		var p = new Date(s[1], s[2] - 1, s[3], s[4], s[5], s[6]);
		var d = parseInt((dates[0].getTime() - p.getTime()) / 1000); /* differenza in secondi dall ora attuale */
		
		if(ext) {
			if(d <= 0)									return(document.write('now'));
			else if(d < 60)								return(document.write(d + ' second' + (d == 1 ? '' : 's') + ' ago'));

			var m = parseInt(d / 60);

			if(m < 60)									return(document.write(m + ' minute' + (m == 1 ? '' : 's') + ' ago'));
			
			var h = parseInt(m / 60);
			var d = Math.ceil((dates[1].getTime() - p.getTime()) / 86400000);

			if(d == 0)									return(document.write(h + ' hour' + (h == 1 ? '' : 's') + ' ago'));
			else if(d == 1)								return(document.write('yesterday at ' + s[4] + '.' + s[5]));
			else if(d <= 10)							return(document.write(d + ' days ago at ' + s[4] + '.' + s[5]));
			
														document.write(mesi[s[2] - 1] + ' ' + s[3]);
			if(d > 180)									document.write(', ' + s[1]);
														document.write(' at ' + s[4] + '.' + s[5]);
		}
		else {
			if(d <= 0)									return(document.write('now'));
			else if(d < 60)								return(document.write(d + ' sec'));

			var m = parseInt(d / 60);

			if(m < 60)									return(document.write(m + ' min'));
			
			var h = parseInt(m / 60);
			var d = Math.ceil((dates[1].getTime() - p.getTime()) / 86400000);

			if(d == 0)									return(document.write(h + ' h'));
			else										return(document.write(s[2] + '/' + s[3] + ' ' + s[4] + '.' + s[5]));
		}

	} else {
		
		if(date=='0000-00-00 00:00:00') {
			return(document.write('non disponibile'));
		}
		mesi = ['gennaio','febbraio','marzo','aprile','maggio','giugno','luglio','agosto','settembre','ottobre','novembre','dicembre'];

		var s = /^(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)$/.exec(date);
		var p = new Date(s[1], s[2] - 1, s[3], s[4], s[5], s[6]);
		var d = parseInt((dates[0].getTime() - p.getTime()) / 1000); /* differenza in secondi dall ora attuale */
		
		if(ext) {
			if(d <= 0)									return(document.write('in questo istante'));
			else if(d < 60)								return(document.write(d + ' second' + (d == 1 ? 'o' : 'i') + ' fa'));

			var m = parseInt(d / 60);

			if(m < 60)									return(document.write(m + ' minut' + (m == 1 ? 'o' : 'i') + ' fa'));
			
			var h = parseInt(m / 60);
			var d = Math.ceil((dates[1].getTime() - p.getTime()) / 86400000);

			if(d == 0)									return(document.write(h + ' or' + (h == 1 ? 'a' : 'e') + ' fa'));
			else if(d == 1)								return(document.write('ieri alle ' + s[4] + '.' + s[5]));
			else if(d <= 10)							return(document.write(d + ' giorni fa alle ' + s[4] + '.' + s[5]));
			
			if(s[3] == 1 || s[3] == 8 || s[3] == 1)		document.write('l\'');
			else										document.write('il ');
														document.write(s[3] + ' ' + mesi[s[2] - 1]);
			if(d > 180)									document.write(' ' + s[1]);
														document.write(' alle ' + s[4] + '.' + s[5]);
		}
		else {
			if(d <= 0)									return(document.write('ora'));
			else if(d < 60)								return(document.write(d + ' sec'));

			var m = parseInt(d / 60);

			if(m < 60)									return(document.write(m + ' min'));
			
			var h = parseInt(m / 60);
			var d = Math.ceil((dates[1].getTime() - p.getTime()) / 86400000);

			if(d == 0)									return(document.write(h + ' h'));
			else										return(document.write(s[3] + '/' + s[2] + ' ' + s[4] + '.' + s[5]));
		}

	}
}  
