	/*
	Funzione usata da getFormatNumber
	*/
	function reverseIt(str) 
	{
		if (!str) return; // nothing to change
		var rstr = '';
		for (i=str.length-1;i>=0;i--) rstr += str.charAt(i);
		return rstr;
	}
	
	/*
	Restituisce un numero formattato con 2 decimali ed i
	separatori di migliaia
	Es. di parametri:
	- FormName	: Nome della Form contenente il controllo
	- CtrlName: Campo TextBox contenente il numero 	(contiene es. 1234,5)
	- ThousandSep = '.';
	- DecimalSep = ',';	
	Restituisco il valore : 1.234,50
	Autore	: Gianluca Faini
	Data	: 26/10/2004
	*/	
	function setFormatNumber(FormName, CtrlName, ThousandSep, DecimalSep, IsDeciaml)
	{
		//var strEval = new String(InputTextBox);
		//var strInputData = eval('strInputData =' + strEval);
		var strInputData = document.forms[FormName][CtrlName].value;
		//Elimino il separatore migliaia
		strInputData = strInputData.replace(ThousandSep, '');
		var strData = strInputData ;
		
		if (strData.length == 0)
		{
			strData = '0' + DecimalSep + '00';		
			return strData;
		}
		
		//Se l'ultimo carattere è "," lo tolgo
		if (strData.charAt(strData.length -1) == DecimalSep)
		{
			strData = strData.replace(DecimalSep, "");
		}
		//Rimuovo '.'
		strData = strData.replace(ThousandSep, "");

		//Rilevo esistenza decimali
		var strDecimal = "";
		var splitString = strData.split(DecimalSep);
		//alert(splitString.length);
		
		if (splitString.length > 1)
			strDecimal = splitString[1];
		else
			strDecimal = "00";
		
		if (strDecimal.length == 1)
			strDecimal = strDecimal + "0";
		strDecimal = "," + strDecimal;

		var saveStr = "" + splitString[0];
		if (IsDeciaml == 0)
			strDecimal = ''; //--> resetto il valore se non decimal
			
		if (saveStr.length < 4) 
		{
			//Setto il valore
			//return saveStr + strDecimal;
			//eval(strEval + '=' + saveStr + strDecimal + ';');
			document.forms[FormName][CtrlName].value = saveStr + strDecimal;
		}
		else
		{
			var revStr = reverseIt(saveStr);
			var newStr = '';
			for (var i=0;i<revStr.length;i++) {
				if (i>0 && (i%3)==0) newStr += ThousandSep;
					newStr += revStr.charAt(i);
			}
			//Setto il valore
			//return reverseIt(newStr) + strDecimal;	
			//debugger;	
			//eval(strEval + '=' + reverseIt(newStr) + strDecimal + ';');			
			document.forms[FormName][CtrlName].value = reverseIt(newStr) + strDecimal;
		}
	}
	
	/*
	Se è un numero, riceve in input le caratteristiche, se decimale
	intero, positivo, negativo...
	e resetta i tasti non possibili.
	Vediamo di seguito i parametri:
	- FormName	: Nome della Form contenente il controllo
	- CtrlName: Campo TextBox contenente il numero 
	- IsPositive: solo positivo, non accetta il carattere negativo
	- DecimalSep: separatore decimale che viene accettato solo 1 volta
	*/
	function resetKeyUpForNumber(FormName, CtrlName, IsPositive, DecimalSep)
	{
		//Carattere immesso
		var strSingleChar = String.fromCharCode(event.keyCode)
		var strInputData = document.forms[FormName][CtrlName].value;
		var validNumber		= '1234567890';

		if (strInputData.indexOf(DecimalSep) == -1)
		{
			//\\Non ancora inserito DecimalSep
			validNumber = validNumber + DecimalSep;
		}
		
		//Gestione numero positivo/negativo
		var blnAddSign = true;
		if (IsPositive != true)
		{
			if (strSingleChar == "-")
			{
				//Controllo se il carattere è già stato digitato
				if (strInputData.indexOf("-") != -1)
				{
					blnAddSign = false; 
				}
				//Se la lenght della stringa è 0, allora sono sul primo carattere
				//Se il carattere inserito è "-" allora posso farlo
				if (blnAddSign == true)
				{
					if (strInputData.length != 0)
					{
						blnAddSign = false;
					}
				}				
			}
		}
		else
		{
			blnAddSign = false;
		}

		
		if (blnAddSign == true)
		{
			validNumber = validNumber + "-";
		}
		
		if (validNumber.indexOf(strSingleChar) == -1)
		{
			//\\Selezionato carattere non valido.
			//Devo resettarlo
			event.keyCode = 0;
		}
	}
	
	/*
	Funzione che controlla se la data è in un formato italiano valido
	Funzione che passataci da Furino Paolo di Woolwich.
	E' cablato per gestire date italiane (gg/mm/aaaa) e gestisce i bisestili.
	*/	
	function checkValidDate(source, arguments) {
		// arguments.Value must be of format dd/mm/yyyy with either slashes
		// or dashes separating the parts. Some minor changes would have
		// to be made to use another format.

		var slash1 = arguments.Value.indexOf("/");
		if (slash1 == -1) { slash1 = arguments.Value.indexOf("-"); }
		// if no slashes or dashes, invalid date
		if (slash1 == -1) { arguments.IsValid = false; return; }
		var dateDay = arguments.Value.substring(0, slash1)
		var dateMonthAndYear = arguments.Value.substring(slash1+1, arguments.Value.length);
		var slash2 = dateMonthAndYear.indexOf("/");
		if (slash2 == -1) { slash2 = dateMonthAndYear.indexOf("-"); }
		// if not a second slash or dash, invalid date
		if (slash2 == -1) { arguments.IsValid =  false; return; }
		var dateMonth = dateMonthAndYear.substring(0, slash2);
		var dateYear = dateMonthAndYear.substring(slash2+1, dateMonthAndYear.length);
		if ( (dateMonth == "") || (dateDay == "") || (dateYear == "") ) { arguments.IsValid =  false; return; }
		
		
		// if any non-digits in the month, invalid date
		for (var x=0; x < dateMonth.length; x++) {
			var digit = dateMonth.substring(x, x+1);
			if ((digit < "0") || (digit > "9")) { arguments.IsValid =  false; return; }
		}
		// convert the text month to a number
		var numMonth = 0;
		for (var x=0; x < dateMonth.length; x++) {
			digit = dateMonth.substring(x, x+1);
			numMonth *= 10;
			numMonth += parseInt(digit);
		}
		if ((numMonth <= 0) || (numMonth > 12)) { arguments.IsValid =  false; return; }
		// if any non-digits in the day, invalid date
		for (var x=0; x < dateDay.length; x++) {
			digit = dateDay.substring(x, x+1);
			if ((digit < "0") || (digit > "9")) { arguments.IsValid =  false; return; }
		}
		// convert the text day to a number
		var numDay = 0;
		for (var x=0; x < dateDay.length; x++) {
			digit = dateDay.substring(x, x+1);
			numDay *= 10;
			numDay += parseInt(digit);
		}
		if ((numDay <= 0) || (numDay > 31)) { arguments.IsValid =  false; return; }
		// February can't be greater than 29 (leap year calculation comes later)
		if ((numMonth == 2) && (numDay > 29)) { arguments.IsValid =  false; return; }
		// check for months with only 30 days
		if ((numMonth == 4) || (numMonth == 6) || (numMonth == 9) || (numMonth == 11)) {
			if (numDay > 30) { arguments.IsValid =  false; return; }
		}
		// if any non-digits in the year, invalid date
		for (var x=0; x < dateYear.length; x++) {
			digit = dateYear.substring(x, x+1);
			if ((digit < "0") || (digit > "9")) { arguments.IsValid =  false; return; }
		}
		// convert the text year to a number
		var numYear = 0;
		for (var x=0; x < dateYear.length; x++) {
			digit = dateYear.substring(x, x+1);
			numYear *= 10;
			numYear += parseInt(digit);
		}
		// Year must be a 2-digit year or a 4-digit year
		if ( (dateYear.length != 2) && (dateYear.length != 4) ) { arguments.IsValid =  false; return; }
		// if 2-digit year, use 50 as a pivot date
		if ( (numYear < 50) && (dateYear.length == 2) ) { numYear += 2000; }
		if ( (numYear < 100) && (dateYear.length == 2) ) { numYear += 1900; }
		if ((numYear <= 0) || (numYear > 9999)) { arguments.IsValid =  false; return; }
		// check for leap year if the month and day is Feb 29
		if ((numMonth == 2) && (numDay == 29)) {
			var div4 = numYear % 4;
			var div100 = numYear % 100;
			var div400 = numYear % 400;
			// if not divisible by 4, then not a leap year so Feb 29 is invalid
			if (div4 != 0) { arguments.IsValid =  false; return; }
			// at this point, year is divisible by 4. So if year is divisible by
			// 100 and not 400, then it's not a leap year so Feb 29 is invalid
			if ((div100 == 0) && (div400 != 0)) { arguments.IsValid =  false; return; }
		}
		// date is valid
		arguments.IsValid =  true;
	}

	/*
	Funzione che forza l'inserimento con il MaskEdit __/__/____ per le date
	Da agganciare all'evento javascript:onkeyup()
	function MaskInputDate(objCtl){ 
		var len = objCtl.value.length; 
		var soutput = objCtl.value 
		if (len == 2){ 
			soutput = soutput + '/'; 
		}
		if (len == 5){ 
			soutput = soutput + '/';
		}
		objCtl.value = soutput 
		objCtl.focus(); 
	}
	*/
	function MaskInputDate(objCtl)
	{ 
	
		//alert(event.keyCode);
		var soutput = '';
		var validDateTimeChars		= '1234567890';
		var blnValid = true;
		var posCharInizio = objCtl.value.length -1;
		var singleChar = objCtl.value.substring(posCharInizio, posCharInizio +1);
		//alert(singleChar);
		///Controllo se il carattere digitato è in validDateTimeChars
		if (validDateTimeChars.indexOf( singleChar ) == -1)
			blnValid = false;
		
		if (objCtl.value.length > 'xx/xx/xxxx'.length)
			blnValid = false;
			
		
		if (blnValid == true)
		{
			var len = objCtl.value.length; 
			if (len == 3 || len == 6)
			{
				if (event.keyCode == 37 )
				{
					///Premuto back con tasto Backspace oppure freccina
					soutput = '';
				}
			}
			else
			{
				//alert('ok');
				
				soutput = objCtl.value ;
				if (len == 2 || len == 5)
				{
					if (event.keyCode == 8 )
						soutput = '';
					else
						soutput = soutput + '/';
				}
			}
			objCtl.value = soutput 
			objCtl.focus(); 	
		}
		else
		{
			//alert('reset');
			//event.keyCode = 0; --> usabile solo in onkeypress
			///La pressione della "/" char(55) è controllata dal presente js
			if (event.keyCode != 55)
			{
				var len = objCtl.value.length -1; 
				soutput = objCtl.value.substring(0, len);
				objCtl.value = soutput ;
				objCtl.focus();
			}
		}
	}		
	
	function MaskInputDateOnKp(objCtl)
	{ 

	
		//alert(event.keyCode);
		//alert(String.fromCharCode(event.keyCode));
		var soutput = '';
		var validDateTimeChars		= '1234567890';
		var blnValid = true;
		var singleChar = String.fromCharCode(event.keyCode);

		if (blnValid == true)
		{
			///Se premo "/"(47) resetto
			if (event.keyCode == 47)
				blnValid = false;
		}

		if (blnValid == true)
		{
			///Controllo se il carattere digitato è in validDateTimeChars
			if (validDateTimeChars.indexOf( singleChar ) == -1)
				blnValid = false;
		}
		
		if (blnValid == true)
		{		
			if (objCtl.value.length + 1 > 'xx/xx/xxxx'.length)
				blnValid = false;
		}

		if (blnValid == true)
		{
			var len = objCtl.value.length ; 
			if (len == 3 || len == 6)
			{
				if (event.keyCode == 37 )
				{
					///Premuto back con tasto Backspace oppure freccina
					soutput = '';
				}
			}
			else
			{
				//alert('ok');
				
				soutput = objCtl.value ;
				if (len == 2 || len == 5)
				{
					if (event.keyCode == 8 )
						soutput = '';
					else
						soutput = soutput + '/';
				}
			}
			objCtl.value = soutput 
			objCtl.focus(); 	
		}
		else
		{
			event.keyCode = 0;
		}
	}			
	