
/*	File library.js - Versione del 14/05/2008			*/

/*	DIRECTORY LIBRARY / MASTER - Versione con commenti	*/

/*	--------------------------------------------------	*/

/*	12-02-08: nuova funzione str_numeri_more()					*/
/*	07-03-08: nuova funzione str_numero_telefonico()				*/
/*	03-05-08: migliorato i test su un nmero telefonico				*/
/*	14-05-08: nuova funzione gup()							*/
/*	14-05-08: funzione str_data(): aggiunto il parametro 10 a parseInt()	*/

/*	---------------------------------------------------------------------	*/

var tipo_browser;		/* "ie", "n4", "mz", "op", "xx" */

var dim_schermo;		/* "low", "high", "large", "xl", "vl" */
var dim_screen;		/* "800", "1024", "1280", "1400", "1600" */

var dim_finestra;		/* "low", "high", "large", "xl", "vl" */

var dim_window;		/* "800", "1024", "1280", "1400", "1600" */

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

	tipo_browser = get_browser();	
	dim_schermo = get_screen();
	dim_screen 	= get_dim_screen(dim_schermo);

	dim_finestra = get_dim_finestra();
	dim_window   = get_dim_screen(dim_finestra);

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	+++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_browser() - Versione del 10/8/2007		*/

/*	In output: il tipo di browser					*/
/*			Può valere: "ie", "n4", "mz", "op", "xx"	*/
/*			"xx" significa: non riconosciuto		*/

function get_browser ()  {
	var result;
	var isamac = false;

	if (document.layers) result = "n4"
	else
		if (document.all)
		{	if (navigator.appName == "Microsoft Internet Explorer") result = "ie"
			else
			if (navigator.appName == "Opera") result = "op"
			else result = "xx"
		}
		else
		{	if (!document.all && document.getElementById)
				result = "mz";
			else
				result = "xx";
		}
				
	if (navigator.platform.indexOf("Mac")>=0){ isamac = true; }

	return result;
}

/*	+++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_screen() - Versione del 24/10/2007		*/

/*	In output: "low", "high", "large", "xl", "vl"		*/

/*	low = 560x192, 640x480, 800 x 600	*/
/*	high = 1024 x 768, 1152x870		*/
/*	large = 1280 x 800			*/
/*	xl = 1400 x 1050, 1440 x ????		*/
/*	vl = 1600 x 1280, 1680 x ????		*/

function get_screen ()  {
	var result;
	if (window.screen.width <= 801) result = "low";
	else 
	if (window.screen.width <= 1025) result = "high";
	else 
	if (window.screen.width <= 1155) result = "high";
	else
	if (window.screen.width <= 1281) result = "large";
	else
	if (window.screen.width <= 1441) result = "xl";		/* 24-10-07: 1401 --> 1441 */
	else result = "vl";
	
	return result;
}

/*	+++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_dim_finestra() - Versione del 24/10/2007	*/

/*	In output: "low", "high", "large", "xl", "vl"		*/

/*	low = 560x192, 640x480, 800 x 600	*/
/*	high = 1024 x 768, 1152x870		*/
/*	large = 1280 x 800			*/
/*	xl = 1400 x 1050, 1440 x ????		*/
/*	vl = 1600 x 1280, 1680 x ????		*/

function get_dim_finestra ()  {
	var result;
	var larghezza = get_window_w();
	
	if (larghezza <= 801) result = "low";
	else 
	if (larghezza <= 1025) result = "high";
	else
	if (larghezza <= 1155) result = "high";
	else
	if (larghezza <= 1281) result = "large";
	else
	if (larghezza <= 1441) result = "xl";
	else result = "vl";
	
	return result;
}

/*	+++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_dim_screen() - Versione del 20/8/2007	*/

/*	In input: "low", "high", "large", "xl", "vl"		*/

/* 	In output: "800", "1024", "1280", "1400", "1600"	*/

/*	Trasforma una string del tipo "low", "high", ecc. in	*/
/*	una stringa di tipo "800", "1024", ecc.			*/

function get_dim_screen (dim)  {
	var result;

	if (dim == "low") result = "800";
	else 
	if (dim == "high") result = "1024";
	else
	if (dim == "large") result = "1280";
	else
	if (dim == "xl") result = "1400";
	else
	if (dim == "vl") result = "1600";
	else { alert("Errore funzione get_dim_screen() - Input invalido: " + dim); return "0"; }
	
	return result;
}

/*	+++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_window_w() - Versione del 31/8/2007	*/

/*	In output: la larghezza della finestra, in pixel	*/

/*	NB: Nel caso di Firefox, viene sostratto la larghezza della scroll bar verticale,	*/
/*	perché viene sempre inserita tramite il CSS library_firefox.css				*/

function get_window_w() {
	var retour;
	var myWidth = 0;
	var ff_scroll_verticale = 16;	/* In Firefox, 16 pixel	da togliere a window.innerWidth */
	
	retour = get_window_browser();
	
	if(retour == "non-ie") 
	{	if (tipo_browser == "mz") myWidth = window.innerWidth - ff_scroll_verticale;
	  	else
	  	if (tipo_browser == "op") myWidth = window.innerWidth;  	
	}
	else if(retour == "ie-6+") myWidth = document.documentElement.clientWidth;
	else if(retour == "ie-4")  myWidth = document.body.clientWidth;

/*	Broser sconosciutto: in questo caso la larghezza della finestra = larghezza del monitor	*/

	else myWidth = window.screen.width;

	return myWidth;
}

/*	+++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_window_h() - Versione del 31/8/2007	*/

/*	In output: l'altezza della finestra, in pixel		*/

function get_window_h() {
	var retour;
	var myHeight = 0;

	retour = get_window_browser();
	
	if(retour == "non-ie") myHeight = window.innerHeight;
	else if(retour == "ie-6+") myHeight = document.documentElement.clientHeight;
	else if(retour == "ie-4")  myHeight = document.body.clientHeight;
	
/*	Broser sconosciutto: in questo caso l'altezza della finestra = l'altezza del monitor	*/

	else myHeight = window.screen.height;	

	return myHeight;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione get_window_browser() - Versione del 31/8/2007	*/

/*	return = "non-ie" oppure "ie-6+" oppure "ie-4" oppure "??"	*/

function get_window_browser() {

	if(typeof(window.innerWidth) == "number") return "non-ie";	/* Non Internet Explorer */

/*	IE 6+ in 'standards compliant mode'	*/
    
	if(document.documentElement &&	 
		(document.documentElement.clientWidth || document.documentElement.clientHeight)) return "ie-6+"; 
 
 /*	IE 4 compatible	*/
 
	if(document.body && (document.body.clientWidth || document.body.clientHeight)) return "ie-4";
	
	return "??";
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_vuota() - Versione del 27/9/2007			*/

/*	La funzione testa se una stringa è "vuota".			*/
/*	Una stringa è "vuota" se è di diemsione 0 oppure		*/
/*	se contiene soltanto spazi o carratteri speciali:		*/
/*	\n, \r, \t, \f, \b							*/

/*	" " (ASCII 32 (0x20)), spazio. 					*/
/*	"\n" (ASCII 10 (0x0A)), il new line (line feed). 		*/
/*	"\t" (ASCII 9 (0x09)), il carattere tab. 				*/
/*	"\f"										*/
/*	"\r" (ASCII 13 (0x0D)), il carriage return. 			*/
/*	"\x0B" (ASCII 11 (0x0B)), il tab verticale.			*/

/*	In output: true se la stringa è vuota				*/

function str_vuota (stringa) {
	var i, dim, car;

	dim = stringa.length;
	if (dim <= 0) return true;
	for (i= 0; i<dim; i++)
	{	car = stringa.charAt(i);
		if (car == " ") continue;
		if (car == "\n" || car == "\r" || car == "\t" || car == "\f" || car == "\b") continue;
		return false;
	}
	return true;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_e_mail() - Versione del 07/03/2008			*/

/*	In output: true se la stringa	è una e-mail valida		*/

function str_e_mail (stringa) {
	var dim;

	dim = stringa.length;

	if (dim <= 0) return false;
	
	l1 = stringa.indexOf("@");
	l2 = stringa.lastIndexOf("@");
	if (l1 != l2) return false;
	
	if ((stringa.indexOf("@") == -1) | (stringa.indexOf(".") == -1) | (dim < 6)) return false;
	return true;
}


/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_numeri() - Versione del 25/9/2007			*/

/*	In output: true se la stringa contiene soltanto numeri	*/
/*	NB: i caratteri: , . + - non sono accettati			*/

function str_numeri (stringa) {
	var i, dim, count;
	
	dim = stringa.length;
	
	count = 0;
	for (i=0; i<dim; i++)  {
		car = stringa.charAt(i);
		if (car == '0' || car == '1' || car == '2' || car == '3' || car == '4' || car == '5' || car == '6' || car == '7' || car == '8' || car == '9') count++;
	}
	
	if (count != dim) return false;
	return true;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_numeri_more() - Versione del 12/02/2008		*/

/*	In output: true se la stringa contiene soltanto numeri	*/
/*	NB: oltre ai numeri la funzione acceta i caratteri:		*/
/*		, . + - [spazio]							*/

function str_numeri_more (stringa) {
	var i, dim, count;
	
	dim = stringa.length;
	
	count = 0;
	for (i=0; i<dim; i++)  {
		car = stringa.charAt(i);
		if (car == '0' || car == '1' || car == '2' || car == '3' || car == '4' || car == '5' || car == '6' || car == '7' || car == '8' || car == '9' || car == '.' || car == ',' || car == '+' || car == '-' || car == ' ') count++;
	}
	
	if (count != dim) return false;
	return true;
}

/*	+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_numero_telefonico () - Versione del 03/05/2008	*/

/*	In output: true se la stringa contiene un numero telefonico	*/
/*	NB: oltre ai numeri la funzione acceta i caratteri:		*/
/*		( ) + [spazio], ma uno solo di ciascuno			*/
/*	Inoltre se esiste un '(' deve esistere un ')' e vice versa	*/

function str_numero_telefonico (stringa) {
	var i, dim, count, count_plus, count_par_open, count_par_close;
	
	dim = stringa.length;
	
	count = 0;
	count_plus = 0;
	count_par_open = 0;
	count_par_close = 0;
	
	for (i=0; i<dim; i++)  {
		car = stringa.charAt(i);
		if (car == '0' || car == '1' || car == '2' || car == '3' || car == '4' || car == '5' || car == '6' || car == '7' || car == '8' || car == '9' || car == '(' || car == ')' || car == '+' || car == ' ') count++;
		if (car == '+') count_plus++;
		if (car == '(') count_par_open++;
		if (car == ')') count_par_close++;
	}
	
	if (count != dim) return false;
	if (count_plus > 1) return false;
	if (count_par_open > 1) return false;
	if (count_par_close > 1) return false;
	if (count_par_open != count_par_close) return false;
	
	return true;
}


/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_data() - Versione del 14/05/2008			*/

/*	Lo scopo della funzione è testare se una stringa è del	*/
/*	tipo gg/mm/aaaa								*/

/*	In output:									*/
/*		= 0 : stringa corretta						*/
/*		= 1 : Data invalida. Lunghezza diversa da 10		*/
/*		= 2 :	Data invalida. Manca il primo slash			*/
/*		= 3 :	Data invalida. Manca il secondo slash		*/
/*		= 4 :	Data invalida. Giorno non numerico			*/
/*		= 5 :	Data invalida. Giorno invalido			*/
/*		= 6 :	Data invalida. Mese non numerico			*/
/*		= 7 :	Data invalida. Mese invalido				*/
/*		= 8 :	Data invalida. Anno non numerico			*/
/*		= 9 :	Data invalida. Anno invalido, inferiore a 1900	*/
/*		=10 : Data incoerente (es. "31/02/1900")			*/

function str_data (stringa) {
	var i, dim, giorno, mese, anno;
	
	dim = stringa.length;
	
	if (dim != 10) return 1;
		
	if (stringa.charAt(2) != "/") return 2;
	if (stringa.charAt(5) != "/") return 3;

	giorno = stringa.substr(0,2);
	if (str_numeri(giorno) != true) return 4;
	if (parseInt(giorno,10) > 31)  return 5;

	mese   = stringa.substr(3,2);
	if (str_numeri(mese) != true) return 6;
	if (parseInt(mese,10) > 12) return 7;

	anno   = stringa.substr(6,4);		
	if (str_numeri(anno) != true) return 8;
	if (parseInt(anno,10) < 1900) return 9;

	data = new Date(anno,mese-1,giorno);
	daa = data.getFullYear().toString();
	dmm = (data.getMonth()+1).toString();
	dmm = dmm.length == 1 ? "0" + dmm : dmm;
	dgg = data.getDate().toString();
	dgg = dgg.length == 1 ? "0" + dgg : dgg;
	data_calcolata = dgg + "/" + dmm + "/" + daa;

	if (data_calcolata != stringa) return 10;
      
	return 0;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_replace() - Versione del 27/9/2007			*/

/*	La funzione sostituisce un carattere in una stringa		*/
/*	In input:									*/
/*		- stringa_in							*/
/*		- car (deve essere una stringa di un carattere)		*/
/*		- pos (un intero che indica la posizione del		*/
/*				carattere da sostituire				*/
/*	In output:									*/
/*		- stringa_out							*/


function str_replace (stringa_in, car, pos) {
	var dim;
	var stringa_out = "";
	
	dim = car.length;
	if (dim != 1) { alert("Funz. str_replace() - errore car:" + car); return stringa_out; }
	
	dim = stringa_in.length;
	if (dim <= 0) return " ";
	if (pos < 0 || pos >= dim) { alert("Funz. str_replace() - pos out of range - pos = " + pos); return stringa_out; }
	
	if (pos == 0) stringa_out = car + stringa_in.substring(1,dim);
	else
	if (pos == dim-1) stringa_out = stringa_in.substring(0,pos) + car;
	else stringa_out = stringa_in.substring(0,pos) + car + stringa_in.substring(pos+1,dim);
	
	return stringa_out;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_pulire() - Versione del 27/9/2007			*/

/*	La funzione toglie gli eventuali spazi all'inizio e alla	*/
/*	fine della stringa in input. Se la stringa in input		*/
/*	contiene soltanto spazi, viene restituita una stringa 	*/
/*	vuota.									*/

/*	In output: la stringa pulita						*/

function str_pulire (stringa_in) {

	var i, dim, first, last;;
	var stringa_inter = "";
	var stringa_out = "";
	
/*	Eliminazione spazi a sinistra	*/
	
	dim = stringa_in.length;
	if (dim == 0) return stringa_out;
	last = dim - 1;	
	
	first = -1;
	
	for (i=0; i<dim; i++)  
	{	car = stringa_in.charAt(i);
		if (car != " ") { first = i; break; }
	}
	
	if (first == -1) { return stringa_out; } /* stringa_in fatta da soli spazi	*/
	
	stringa_inter = stringa_in.substring(first,last+1);
	dim = stringa_inter.length;	

/*	Eliminazione spazi a sinistra	*/

	first = -1;
	last = dim - 1;
	
	for (i=last; i>=0; i--)
	{	car = stringa_inter.charAt(i);
		if (car != " ") { first = i; break; }
	}
	
	if (first == -1) stringa_out = stringa_inter;
	else stringa_out = stringa_inter.substring(0,first+1);
	
	return stringa_out;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione str_pulire_data() - Versione del 27/9/2007		*/

/*	Lo scopo della funzione è di normalizzare una data		*/
/*	Esempio: 27.09.2007 diventa 27/09/2007				*/
/*	Oppure 27-09-2007 diventa 27/09/2007				*/

/*	In input una stringa di tipo data (lunghezza 10)		*/

/*	Se questa stringa contiene il carattere "." oppure 		*/
/*	il carattere "-" nella posizioni 2 e 5, 				*/
/*	allora la funzione sostituisce questi caratteri			*/
/*	con il carattere "/"							*/

/*	In output: la stringa eventualmente modificata			*/

function str_pulire_data (data_in) {
	var dim, car1, car2;
	var data_inter = "";
	var data_out = "";
	
	dim = data_in.length;
	if (dim != 10) return data_in;
	
	car1 = data_in.charAt(2);
	car2 = data_in.charAt(5);
	
	if (car1 == "." || car1 == "-") data_inter = str_replace(data_in, "/",2);
	else data_inter = data_in;

	if (car2 == "." || car2 == "-") data_out = str_replace(data_inter, "/",5);
	else data_out = data_inter;	
	
	return data_out;
}

/*	++++++++++++++++++++++++++++++++++++++++++++++++++++++	*/

/*	Funzione mclink() - Versione del 25/9/2007			*/

/*	La funzione inserisce un back-slash davanti ai caratteri:	*/
/*	(, ), [, ], ", $, ?, ^, |, !, \ 					*/

/*	In output: la stringa eventualmente modificata			*/

function mclink(stringa_in) {
	var i, lg_in;
	var stringa_out = "";
	lg_in = stringa_in.length;
	
	if (lg_in > 0) {
	
		for (i=0; i<lg_in; i++) {
			car = stringa_in.charAt(i);
		
			if (car == "("  || 
			    car == ")"  || 
			    car == "["  || 
			    car == "]"  ||
			    car == "\"" ||
			    car == "$"  ||
			    car == "?"  ||
			    car == "^"  ||
			    car == "|"  ||
			    car == "!"  ||
			    car == "\\") stringa_out = stringa_out.concat("\\");

			stringa_out = stringa_out.concat(stringa_in.charAt(i));
		}

		return stringa_out;
	}
	else return null;
}

/*	------------------------------------------------------------------	*/
/*	Funzione gup("param") - Versione del 13-05-08					*/
/*	From http://www.netlobo.com/url_query_string_javascript.html		*/
/*	------------------------------------------------------------------	*/

function gup (name) {
	var name, regexS, regex, results;
	
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	regexS = "[\\?&]"+name+"=([^&#]*)";
	regex = new RegExp(regexS);
	results = regex.exec(window.location.href);
	
	if (results == null) return "";
	else return results[1];
}
