/*
	'======================'
	'===  Funzioni 3.1  ==='
	'======================'
*/

function Trim(Stringa) {
	re = /\s+$|^\s+/g;
	return Stringa.replace(re, '');
}

function TrimAll(Stringa) {
	re = /\s/g;
	return Stringa.replace(re, '');
}

function Truncate(Stringa, N) {
	Result = '';
	if (Stringa.length <= N) {
		Result = Stringa;
	} else {
		Result = Stringa.substr(0, (N - 3)) + '...';
	}
	
	return Result;
}

function Capitalize(Stringa) {
	Result = '';
	Array_Capitalize = Stringa.split(' ');
	if (Array_Capitalize.length > 1) {
		for (i = 0; i < Array_Capitalize.length; i++) {
			Array_Capitalize[i] = Array_Capitalize[i].toLowerCase();
			Array_Capitalize[i] = (Array_Capitalize[i].charAt(0).toUpperCase()) + Array_Capitalize[i].substr(1, Array_Capitalize[i].length);
			Result = Result + ' ' + Array_Capitalize[i];
		}
	} else {
		Result = Stringa.toLowerCase();
		Result = (Result.charAt(0).toUpperCase()) + Result.substr(1, Result.length);
	}

	return Result;
}

// Estrae il valore di una una voce da una variabile stringa tipo QueyString
function CollectData(Stringa, PARAMETRO, SEPARATORE) {
	PARAMETRO = PARAMETRO + '=';
	if (Stringa.indexOf(PARAMETRO) > -1) {
		ArrayStringa = Stringa.split(SEPARATORE);
		Loop: {
			for (i = 0; i < ArrayStringa.length; i++ ) {
				if (ArrayStringa[i].indexOf(PARAMETRO) == 0) {
					return ArrayStringa[i].substr(ArrayStringa[i].indexOf(PARAMETRO) + PARAMETRO.length);
					break Loop;
				}
			}
		}
	} else {
		return '';
	}
}

// Modifica una voce da una variabile stringa tipo QueyString
function AlterData(Stringa, PARAMETRO, VALORE, SEPARATORE) {
	if (Stringa.indexOf(PARAMETRO) > -1) {
		ArrayStringa = Stringa.split(SEPARATORE);
		Loop: {
			for (i = 0; i < ArrayStringa.length; i++ ) {
				if (ArrayStringa[i].indexOf(PARAMETRO) == 0) {
					eval('re =/' + ArrayStringa[i] + '/gi');
					return Stringa.replace(re, PARAMETRO + '=' + VALORE);
					break Loop;
				}
			}
		}
	} else {
		return Stringa + SEPARATORE + PARAMETRO + '=' + VALORE;
	}
}

// Rimuove una voce da una variabile stringa tipo QueyString
function RemoveData(Stringa, PARAMETRO, SEPARATORE) {
	if (Stringa.indexOf(PARAMETRO) > -1) {
		ArrayStringa = Stringa.split(SEPARATORE);
		Loop: {
			for (i = 0; i < ArrayStringa.length; i++) {
				if (ArrayStringa[i].indexOf(PARAMETRO) == 0) {
					Item = ArrayStringa[i];
					Item = Item.replace(/\*/g, '\\\*');
					eval('re =/' + Item + '/gi');
					Stringa = Stringa.replace(re, '');
					if (Stringa.indexOf(SEPARATORE + SEPARATORE) > -1) {
						eval('re = /' + SEPARATORE + SEPARATORE + '/gi');
						Stringa = Stringa.replace(re, '&');
					
					}
					if (Stringa.charAt(0) == SEPARATORE) {
						Stringa = Stringa.substring(1, Stringa.length);
					}
					if (Stringa.charAt(Stringa.length - 1) == SEPARATORE) {
						Stringa = Stringa.substring(0, Stringa.length - 1);
					}
					return Stringa;
					break Loop;
				}
			}
		}
	} else {
		return Stringa;
	}
}

// Aggiunge N caratteri (X) a sinistra di una Stringa se pił corta di N
function LFill(Stringa, N, X) {
	Result = Stringa.replace(/\s+$|^\s+/g, '');
	if (!(Result.length >= N)) {
		for (i = Result.length; i < N; i++) {
			Result = X + Result 
		}
	}
	return Result;
}

// Aggiunge N caratteri (X) a destra di una Stringa se pił corta di N
function RFill(Stringa, N, X) {
	Result = Stringa.replace(/\s+$|^\s+/g, '');
	if (!(Result.length >= N)) {
		for (i = Result.length; i < N; i++) {
			Result =  Result + X;
		}
	}
	return Result;
}

// Ripete una Stringa N volte
function Repeat(Stringa, N) {
	Result = '';
	N = parseInt(N);
	if ((Stringa != '') && (N > 0)) {
		for (i = 1; i <= N; i++) {
			Result = Result + Stringa;
		}
	}
	return Result;
}

// Converte una Stringa in una Stringa puntata
function Dots(Stringa) {
	CifraPuntata = '';
	if (Trim(Stringa) != '') {
		if (Stringa.lastIndexOf(',') == -1) {
			for (i = 0; i < Stringa.length; i++) {
				if (((i % 3) == 0) && (i != 0)) {
					CifraPuntata = '.' + CifraPuntata;
				}
				CifraPuntata = Stringa.substr(Stringa.length - (i + 1), 1) + CifraPuntata;
			}
		} else {
			ParteIntera = Stringa.substr(0, Stringa.indexOf(','));
			ParteDecimale = Stringa.substr(Stringa.indexOf(',') + 1, Stringa.length);
			for (i = 0; i < ParteIntera.length; i++) {
				if (((i % 3) == 0) && (i != 0)) {
					CifraPuntata = '.' + CifraPuntata;
				}
				CifraPuntata = ParteIntera.substr(ParteIntera.length - (i + 1), 1) + CifraPuntata;
			}
			CifraPuntata = CifraPuntata + ',' + ParteDecimale
		}
	}
	return CifraPuntata
}

// Formatta in Euro (x,xx)
function FormattaEuro(Stringa) {
	Stringa = Stringa.toString();
	Stringa = Stringa.replace(/[,]/g, '.');
	if (!(isNaN(Stringa))) {
		if (Stringa.indexOf('.') != -1) {
			ParteIntera = Stringa.substring(0, Stringa.indexOf('.'));
			ParteDecimale = RFill(Stringa.substr(Stringa.indexOf('.') + 1, 2), 2, '0');
			return ParteIntera + ',' + ParteDecimale;
		} else {
			return Stringa + ',00';
		}
	} else {
		return '0,00';
	}
}

// Example: onKeyPress="return MaxLength(event, this, 3);"
function MaxLength(e, Obj, Max) {
	if (navigator.appName == 'Microsoft Internet Explorer') {
		if ((event.srcElement.type == 'text') || (event.srcElement.type == 'textarea')) {
			if (Obj.value.length >= Max) {
				event.keyCode = null;
			}
		}
	}
	
	if (navigator.appName == 'Netscape') {
		if ((e.target.type == 'text') || (e.target.type == 'textarea')) {
			if (Obj.value.length >= Max) {
				e.keyCode = null;
			}
		}
	}
}

function StatusBarMessage(Message) {
  window.status = Message;
  document.ReturnValue = true;
}

function ControllaEmail(Stringa) {  
	if (Trim(Stringa) == '') {
		//  E-Mail vuota
		return false;
	} else {
		//Controllo  della '@' e del '.'
		if ((Stringa.indexOf('@') != -1) && (Stringa.indexOf('.') != -1) && (Stringa.lastIndexOf('.') > Stringa.indexOf('@'))) {
			// Se ci sono pił '@'
			if ((Stringa.indexOf('@')) == (Stringa.lastIndexOf('@'))) {
				// Per tutta la lunghezza della stringa
				for (var i = 0; i < Stringa.length; i++) {
					if ((i == 0) || (i == Stringa.length -1)) {
						if (Stringa.substr(i, 1) == '@') {
							// alert('Primo o ultimo \'@\'');
							return false;
						} 
						if (Stringa.substr(i, 1) == '.') {
							// alert('Primo o ultimo \'.\'');
							return false;
						} 
					}
					if ((Stringa.substr(i, 1) == '.') && (Stringa.substr(i + 1, 1) == '.'))  {
						// alert('\'.\' vicini');
						return false;
					}
					if ((Stringa.substr(i, 1) == '.') && (Stringa.substr(i + 1, 1) == '@'))  {
						// alert('\'.\' e \'@\' vicini');
						return false;
					}
					if ((Stringa.substr(i, 1) == '@') && (Stringa.substr(i + 1, 1) == '.'))  {
						// alert('\'@\' e \'.\' vicini');
						return false;
					}
					// Caratteri ammessi
					if ('qwertyuiopasdfghjklzxcvbnm1234567890_@.-'.indexOf(Stringa.substr(i, 1).toLowerCase()) < 0 )	{
						// alert('Carattere ' + Stringa.substr(i,1).toLowerCase() + ' non ammesso.');
						return false;
					}
				}
			} else {
				// alert('2 o pił \'@\'');
				return false;
			}
		} else {
			// alert('\'@\' e/o \'.\' non presente');
			return false;
		}
	}
	return true;
}

function ControllaCodiceFiscale(Stringa) {
	var Somma = 0;
	var Resto = 0;
	var CarattereControllo = '';
	var LeftPari = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	var LeftDispari = 'BAKPLCQDREVOSFTGUHMINJWZYX';
	var Dispari = '10   2 3 4   5 6 7 8 9';
	
	if (Stringa.length != 16) {
		// alert('- 1 -');
		return false;
	} else {
		Stringa = Stringa.toUpperCase();
		for (i = 1; i <= 16; i++) {
			if (((Stringa.substring(i - 1, i)).match(/\[A-Z]/)) || ((Stringa.substring(i - 1, i)).match(/\[0-9]/))) {
				// alert('- 2 -');
				return false;
			}
			if ((i <= 6) || (i == 9) || (i == 12) || (i == 16)) {
				if (Stringa.substring(i - 1, i).match(/\[0-9]/)) {
					// alert('- 3 -');
					return false;
				}					
			}
		}
		
		for (i = 1; i <= 15; i++) {
			if ((i % 2) == 0 ) {
				if (isNaN(Stringa.substring(i - 1, i))) {
					Somma = Somma + LeftPari.search(Stringa.substring(i - 1, i));
				} else {
					Somma = Somma + ((Stringa.substring(i - 1, i)) / 1);
				}
			} else {
				if (isNaN(Stringa.substring(i - 1, i))) {
					Somma = Somma + LeftDispari.search(Stringa.substring(i - 1, i));
				} else {
					Somma = Somma + Dispari.search(Stringa.substring(i - 1, i));
				}
			}
		}
		
		Resto = Somma % 26;
		CarattereControllo = LeftPari.substring(Resto, Resto + 1);
		if (CarattereControllo != Stringa.substring(15, 16)) {
			// alert('Il carattere di controllo non corretto...');
			// alert('- 4 -');
			return false;
		}
		return true;
	}
}

function ControllaPartitaIva(Stringa) {
	var Somma = 0;
	var SommaPari = 0;
	var ValorePari = 0;
	var SommaDispari = 0;
	var Resto = 0;
	var Appoggio = '';
	var CarattereControllo = '';
	
	if (Stringa.length != 11) {
		// alert('- 1 -');
		return false;
	} else {
		for (i = 1; i <= 11; i++) {
			if ((Stringa.substring(i - 1, i)).match(/\[0-9]/)) {
				// alert('- 2 -');
				return false;
			}
		}
		
		for (i = 1; i <= 10; i++) {
			if ((i % 2) == 0 ) {
				ValorePari = (((Stringa.substring(i - 1, i)) / 1) * 2);
				if (ValorePari > 9) {
					ValorePari = parseInt((ValorePari.toString()).substring(0, 1)) + parseInt((ValorePari.toString()).substring(1, 2));
				}
				SommaPari = SommaPari + ValorePari;
			} else {
				SommaDispari = SommaDispari + parseInt((Stringa.substring(i - 1, i)));
			}
		}
		
		Somma = SommaPari + SommaDispari;
		Appoggio = (Somma.toString()).length;
		Resto = 10 - parseInt((Somma.toString()).substring(Appoggio - 1, Appoggio));
		Appoggio = (Resto.toString()).length;
		CarattereControllo = (Resto.toString()).substring(Appoggio- 1, Appoggio);
		if ((Stringa.toString()).substring(10, 11) != CarattereControllo) {
			// alert('- 3 -');
			return false;
		}
		return true;
	}
}

// Example: onKeyPress="return InputChars(event, 'Allowed', '0123456789' + String.fromCharCode(8) + String.fromCharCode(34) + String.fromCharCode(92) + String.fromCharCode(127))"
function InputChars(e) {
	if (navigator.appName == 'Microsoft Internet Explorer') {
		var KeyCode = event.keyCode;
	}
	
	if (navigator.appName == 'Netscape') {
		var KeyCode = e.which;
	}
	
	if (KeyCode != 0) {
		// Denied
		if (InputChars.arguments[1] == 'Denied') {
			var Chars = InputChars.arguments[2];
			for (var i = 0; i < Chars.length; i++) {
				var KeyChar = String.fromCharCode(KeyCode);
				if (KeyChar == Chars.charAt(i)) {
					return false;
				}
			}
		}
		
		// Allowed
		if (InputChars.arguments[1] == 'Allowed') {
			var Found = false;
			var Chars = InputChars.arguments[2];
			for (var i = 0; i < Chars.length; i++) {
				var KeyChar = String.fromCharCode(KeyCode);
				if (KeyChar == Chars.charAt(i)) {
					Found = true;
				}
			}
			if (Found == false) {
				return false;
			}
		}
	}
}

// Example: Execute(event, 'INVIO', 'alert()');
function Execute(e, Tasto, Azione) {
	if (navigator.appName == 'Microsoft Internet Explorer') {
		var KeyCode = event.keyCode;
	}
	
	if (navigator.appName == 'Netscape') {
		var KeyCode = e.keyCode;
	}
	
	switch(Tasto.toUpperCase()) {
		case 'INVIO': {
			if (KeyCode == 13) {
				eval(Azione);
				return false;
				break;
			}
		}
		case 'BACKSPACE': {
			if (KeyCode == 8) {
				eval(Azione);
				return false;
				break;
			}
		}
		case 'TAB': {
			if (KeyCode == 9) {
				eval(Azione);
				return false;
				break;
			}
		}
	}
}

// Example: Obj = FindObj("image1");
function FindObj(TheObj, TheDoc) {
	var p, i, FoundObj;
	if (!TheDoc) {
		TheDoc = document;
	}
	if ((p = TheObj.indexOf("?")) > 0 && parent.frames.length) {
		TheDoc = parent.frames[TheObj.substring(p + 1)].document;
		TheObj = TheObj.substring(0,p);
	}
	if (!(FoundObj = TheDoc[TheObj]) && TheDoc.all) {
		FoundObj = TheDoc.all[TheObj];
	}
	for (i = 0; !FoundObj && i < TheDoc.forms.length; i++) {
		FoundObj = TheDoc.forms[i][TheObj];
	}
	for (i = 0; !FoundObj && TheDoc.layers && i < TheDoc.layers.length; i++) {
		FoundObj = FindObj(TheObj,TheDoc.layers[i].document);
	}
	if (!FoundObj && document.getElementById) {
		FoundObj = document.getElementById(TheObj);
	}
	return FoundObj;
}

// Example: ShowHideId('ID1', 'SHOW', 'ID2', 'HIDE', 'ID3', SHOW/HIDE, 'ID4', 'DISPLAY', 'ID5', 'NONE', 'ID6', 'DISPLAY/NONE');
function ShowHideId() {
var i, Obj, Args = ShowHideId.arguments;
	for (i = 0; i < Args.length - 1; i += 2) {
		if ((Obj = FindObj(Args[i])) != null) {
			if (Obj.style) {
				switch (Args[i + 1].toUpperCase()) {
					case 'SHOW' : {
						Obj.style.visibility = 'visible';
						break;
					}
					case 'HIDE' : {
						Obj.style.visibility = 'hidden';
						break;
					}
					case 'SHOW/HIDE' : {
						if (Obj.style.visibility == 'visible') {
							Obj.style.visibility = 'hidden';
							break;
						} else {
							Obj.style.visibility = 'visible';
							break;
						}
					}
					case 'DISPLAY' : {
						Obj.style.display = 'block';
						break;
					}
					case 'NONE' : {
						Obj.style.display = 'none';
						break;
					}
					case 'DISPLAY/NONE' : {
						if (Obj.style.display == 'none') {
							Obj.style.display = 'block';
							break;
						} else {
							Obj.style.display = 'none';
							break;
						}
					}
				}
			}
		}
	}
}

function ExtractFileName(FILE) {
	if (FILE.lastIndexOf('/') != -1) {
		if (FILE.lastIndexOf('.') != -1) {
			return FILE.substring(FILE.lastIndexOf('/') + 1, FILE.lastIndexOf('.'));
		} else {
			return FILE.substring(FILE.lastIndexOf('/') + 1);
		}
	} else {
		if (FILE.lastIndexOf('.') != -1) {
			return FILE.substring(FILE.lastIndexOf('\\') + 1, FILE.lastIndexOf('.'));
		} else {
			return FILE.substring(FILE.lastIndexOf('\\') + 1);
		}
	}
}

function ExtractFileExt(FILE) {
	if (FILE.lastIndexOf('.') != -1) {
		return FILE.substring(FILE.lastIndexOf('.') + 1);
	} else {
		return '';
	}
}

function ExtractFileNameExt(FILE) {
	if (FILE.lastIndexOf('.') != -1) {
		return ExtractFileName(FILE) + '.' + ExtractFileExt(FILE);
	} else {
		return ExtractFileName(FILE);
	}
}

function ExtractFileDir(FILE) {
	if (FILE.lastIndexOf('/') != -1) {
		return FILE.substring(0, FILE.lastIndexOf('/'));
	} else {
		return FILE.substring(0, FILE.lastIndexOf('\\'));
	}
}

function FindObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=FindObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function PreloadImages() {
  var d=document; if(d.images){ if(!d.Preload) d.Preload=new Array();
    var i,j=d.Preload.length,a=PreloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.Preload[j]=new Image; d.Preload[j++].src=a[i];}}
}

function SwapImage() {
  var i,j=0,x,a=SwapImage.arguments; document.Sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=FindObj(a[i]))!=null){document.Sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function SwapImageRestore() {
  var i,x,a=document.Sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

// Example: alert('BrowserDetect.browser: ' + BrowserDetect.browser + '\n' + 'BrowserDetect.version: ' + BrowserDetect.version + '\n' + 'BrowserDetect.OS: ' + BrowserDetect.OS);
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera",
			versionSearch: "Version"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]
};
BrowserDetect.init();
