/**
 * USAGE:
 * in ogni pagina, chiamare "netChecker(5000);" nella onload del body o in un tag js
 *
 * WTF IS DOING:
 * Questa minilib si occupa solo di determinare la presenza di una immagine
 * sul server locale. Se questa � presente, manda al localizzatore lo stato 1
 * Altrimenti al termine del timeout per il loading manda al localizzatore lo stato 0
 * Tutto il lavoro per la determinazione della posizione dell'utente viene fatto lato server
 * NOTA BENE: in caso di un utente connesso da due punti diversi (casa/bib) 
 * contemporaneamente, questo scritp funziona lo stesso, ma va cambiato il controller
 *
 * @author Samuele Manfrin
 * 
 */

// url locale di una immagine visibile solo localmente
var localImage = 'http://192.168.1.1/img/testimg.gif';
// var localImage = 'http://www.hyperborea.com/2009/immagini/freccia_blu.gif';

// da non toccare sotto questo punto
// -----------------------------------
var LOC_DEBUG=false;

// usato dall'algoritmo
var timeoutId = 0;
// nome del cookie (usato anche server-side)
// *NO* non funziona
// var cooNotFound="lnotfound";

// url del controller per la location sul server riferita alla appbase
// http://localhost:8081/divenireFrontOffice/locator.htm
// viene costruita a modo dentro netChecker
var locatorUrl = 'locator.htm';

// nome del param passsato nella locatorUrl
var locParam = "loc";

/**
 * Questa � la funzione di entry point gche deve essere chiamata in ogni pagina web.
 * @param delay millisecondi massimi per il caricamento dell'immagine
 * @param baseurl usare <crt:url value="/" /> 
 */
function netChecker(delay, baseurl) {	
	var wl = window.location;
	locatorUrl = wl.protocol+'//'+wl.host+baseurl+locatorUrl;
	if (LOC_DEBUG) alert(locatorUrl);
	timeoutId = testImmagine(delay);
}

/**
 * Chiama il nostro controller via Ajax per avvisarlo di cosa succede con l'utente corrente
 * @param data flag per il localizzatore:
 * <ul>
 * <li>Se data==0 => utente in rete adesso</li>
 * <li>Se data==1 => c'� stato un timeout</li>
 * </ul>
 * Tutto il resto viene gestito lato controller
 */
function localizzatore(data) {
	if (LOC_DEBUG) alert ("localizzatore");
	var fullUrl = locatorUrl+'?'+locParam+'='+data;
	
	var req = new XMLHttpRequest();  
	try {
		req.open('GET', fullUrl, true);  
		req.onreadystatechange = function (aEvt) {  
		if (req.readyState == 4) {  
			if(req.status == 200)  // TODO: qui faccio qualcosa, es. ricarico la pagina
				if (LOC_DEBUG) alert ("vai di 200");  
			else  
				if (LOC_DEBUG) alert ("usti errore nella pagina");  
			}  
		};  
		req.send(null);
	} catch (e) {
		alert("errore localizzatore\n"+e);
	}
}


/**
 * Funzione che parte al termine del timeout: si ha quando l'immagine NON viene trovata
 * e quindi presumibilmente non sono nella rete interna
 * @param delay per ora... non serve a nulla, ma casomai ci sta
 */
function imgTimedOut(delay) {
	if (LOC_DEBUG) alert("immagine non caricata");	
	localizzatore(1);
}

/**
 * Questa e' la funz che parte al caricamento dell'immagine (img trovata)
 * @param e Evento
 */
function imgFound(e) {
	if (LOC_DEBUG) alert("imgFound: caricata immagine\n"+e.target.src);
	// fermo il timeout;
	window.clearTimeout(timeoutId);
	// setCookie(cooNotFound,0,15);
	// ok l'immagine l'ho trovata: avviso il controller
	localizzatore(0);
	if (LOC_DEBUG) alert("IN RETE");
}

/**
 * Fa tutto il lavoro sporco
 * @param delay millisecondi di attesa per consentire il caricamento
 * @return un id di un timeOut
 */
function testImmagine(delay) {    
	var img = document.createElement('img');
	img.src = localImage;
	// al caricamento, chiama imgListener
	img.addEventListener('load', imgFound, false);	
	// faccio partire il timeout che dice puppa
	return window.setTimeout(imgTimedOut, delay);	
}




