// ************************************************************************************* 
//   --- INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO INIZIO
// ************************************************************************************* 
function fGetDateStamp()
{	// restituisce una stringa contenente data e ora aaaa/mm/gg hh:mm:ss
	var tOut="";
	var tFormat = "F";
	var argv = fGetDateStamp.arguments;
	var argc = fGetDateStamp.arguments.length;

	if (argc > 0) tFormat = argv[0];
	tFormat = Left(tFormat,1).toUpperCase();
	var dOggi= new Date();
	//alert("fGetDateStamp\n"+tFormat);
	tOut=fFmtDate(dOggi,tFormat)
	return(tOut);
}	
// ************************************************************************************* 
function fGiraData(tDataInp,tFormatInp,tFormatOut)
{	// riceve una stringa data/ora, una maschera che indica il formato di input ed una quello di output
	var tDataGirata = "";
	if (Trim(tDataInp)!="")
	{
		var loop1;
		var tempYear;
		var arrData;
		var arrFmrt;
		var tY = "0000";
		var tM = "00";
		var tD = "00";
		var tH = "00";
		var tN = "00";
		var tS = "00";
		var dlm = "|";
		var delim = new Array("/","-","."," ","T",":");
		
		var xDlm = "";
		tDataInp = Trim(tDataInp);
		tDataInp = tDataInp.replace(/[^0-9]/g,"|");
		arrData = tDataInp.split(dlm);
		tFormatInp = Trim(tFormatInp).toUpperCase();
		tFormatInp = tFormatInp.replace(/[^YMDHNS]/g,"|");
		arrFmrt = tFormatInp.split(dlm);
		for (loop1 = 0; loop1 < arrFmrt.length; loop1++) 
		{
			if (loop1<arrData.length)
			{
				if (Mid(arrFmrt[loop1],1,1).toUpperCase()=="Y") 
				{
					tempYear = parseInt(arrData[loop1],10);
					if ((tempYear>=50) && (tempYear<100)) tempYear +=1900;
					else if ((tempYear>=100) && (tempYear<1000)) tempYear +=1000;
					else if (tempYear<50) tempYear +=2000;
					tY="0000"+tempYear.toString();
					tY=Mid(tY,tY.length-arrFmrt[loop1].length,arrFmrt[loop1].length);
				}
				if (Mid(arrFmrt[loop1],1,1).toUpperCase()=="M") {tM="00"+arrData[loop1].toString();tM=Mid(tM,tM.length-arrFmrt[loop1].length,arrFmrt[loop1].length);}
				if (Mid(arrFmrt[loop1],1,1).toUpperCase()=="D") {tD="00"+arrData[loop1].toString();tD=Mid(tD,tD.length-arrFmrt[loop1].length,arrFmrt[loop1].length);}
				if (Mid(arrFmrt[loop1],1,1).toUpperCase()=="H") {tH="00"+arrData[loop1].toString();tH=Mid(tH,tH.length-arrFmrt[loop1].length,arrFmrt[loop1].length);}
				if (Mid(arrFmrt[loop1],1,1).toUpperCase()=="N") {tN="00"+arrData[loop1].toString();tN=Mid(tN,tN.length-arrFmrt[loop1].length,arrFmrt[loop1].length);}
				if (Mid(arrFmrt[loop1],1,1).toUpperCase()=="S") {tS="00"+arrData[loop1].toString();tS=Mid(tS,tS.length-arrFmrt[loop1].length,arrFmrt[loop1].length);}
			}
		}
		switch(tFormatOut.toUpperCase())       
		{
			case "DD/MM/YYYY":					tDataGirata = tD +"/"+ tM +"/"+ tY;break;
			case "YYYY-MM-DD":					tDataGirata = tY +"-"+ tM +"-"+ tD;break;
			case "YYYYMMDD":						tDataGirata = tY     + tM     + tD;break;
			case "YYYY/MM/DD":					tDataGirata = tY +"/"+ tM +"/"+ tD;break;
			case "DD/MM/YYYY HH:NN":		tDataGirata = tD +"/"+ tM +"/"+ tY +" "+ tH +":"+ tN;break;
			case "DD/MM/YYYY HH:NN:SS":	tDataGirata = tD +"/"+ tM +"/"+ tY +" "+ tH +":"+ tN +":"+ tS;break;
			default:										tDataGirata = tY +"-"+ tM +"-"+ tD +"T"+ tH +":"+ tN +":"+ tS;break;      
		}
	}
	return(tDataGirata);
}	
// ************************************************************************************* 
function fFmtDate(dDateTime,tMod)
// *************************************************************************************
// Nome        : fFmtDate
// Descrizione : Formatta una data/ora
// Parametri   : data in input (aaaa/mm/gg)
//             : tipo di formattazione:
//             :     G -> gg/mm/aaaa hh:mm
//             :     F -> aaaa/mm/gg hh:mm:ss
//             :     I -> gg/mm/aaaa
//             :     A -> gg/mm/aa
//             :     D -> aaaa/mm/gg
//             :     S -> aaaammgghhmmss
//             :     T -> hh:mm:ss
// Ret.Code    : Stringa con data/ora formattata
// *************************************************************************************
{
	var dWork = new Date(dDateTime);
	var lMSec;
	var lMSecPerIntvl;
	var lAnno;
	var lMese;
	var lGiorno;
	var lOre;
	var lMinuti;
	var lSecondi;
	var lMilSec;
	var lNum;
	var tOut;
	var tDlmD;
	var tDlmT;
	//dWork=dDateTime;
	lAnno=dWork.getFullYear();
	lMese=dWork.getMonth()+1;
	lGiorno=dWork.getDate();
	lOre=dWork.getHours();
	lMinuti=dWork.getMinutes();
	lSecondi=dWork.getSeconds();
	if (lMese<10) lMese="0"+lMese;
	if (lGiorno<10) lGiorno="0"+lGiorno;
	if (lOre<10) lOre="0"+lOre;
	if (lMinuti<10) lMinuti="0"+lMinuti;
	if (lSecondi<10) lSecondi="0"+lSecondi;
	tOut="";
	tDlmD="/";
	tDlmT=":";
	if (tMod=="S")
		{
		tDlmD="";
		tDlmT="";
		}
	if (tMod=="G" || tMod=="I" || tMod=="A")
		{
			tOut=tOut + lGiorno  + tDlmD;
			tOut=tOut + lMese  + tDlmD;
			if (tMod=="A") lAnno=Mid(lAnno,2,2);
			tOut=tOut + lAnno;
		}
	if (tMod=="G" )
		{
			tOut=tOut + " ";
			tOut=tOut + lOre  + tDlmT;
			tOut=tOut + lMinuti;
		}
	if (tMod=="F" || tMod=="D" || tMod=="S")
		{
			tOut=tOut + lAnno  + tDlmD;
			tOut=tOut + lMese  + tDlmD;
			tOut=tOut + lGiorno;
		}
	  if (tMod!="S") tOut=tOut + " "
	if (tMod=="F" || tMod=="T" || tMod=="S")
		{
			tOut=tOut + lOre  + tDlmT;
			tOut=tOut + lMinuti  + tDlmT;
			tOut=tOut + lSecondi;
		}
	tOut=Trim(tOut);	
	return (tOut);
}
// *************************************************************************************
function Date2MSec(dDateTime)
  // *********************************************************************************
  // Nome        : Date2MSec
  // Description : Trasforma una date/time nel corrispondente valore di Millisecondi
  // Parameters  : dDateTime           - data
  // Return Code : Millisec            - millisecondi
  // *********************************************************************************
{
	var dWork = new Date();
	var lMSec;
	dWork=dDateTime;
	lMSec=Date.parse(dWork);
	return(lMSec);
}
// *************************************************************************************
function MSec2Date(dDateMSec)
  // *********************************************************************************
  // Nome        : MSec2Date
  // Description : Trasforma un valore di Millisecondi nella corrispondente date/time
  // Parameters  : dDateMSec         - Numero di millisecondi
  // Return Code : data              - Data
  // *********************************************************************************
{
	var dWork = new Date(dDateMSec);
	return(dWork);
}
  // *********************************************************************************
function DateAdd(tIntvl,nQuanto,dDateTime) {
  // *********************************************************************************
  // Nome        : DateAdd
  // Description : Come analoga in VB
  // Parameters  : tIntvl		sigla che identifica intervallo:, minuscola
  //							- y=anni,m=mesi,d=giorni,h=ore,n=minuti,s=secondi,t=millisecondi,w=settimane
  //             : nQuanto		numero intero positivo o negativo da sommare nelle unità definite da tIntvl
  //             : dDateTime	data di partenza da cui calcolare
  // Return Code :				nuova data ottenuta
  //             :
  // *********************************************************************************
	var lAnno = dDateTime.getFullYear();
	var lMese = dDateTime.getMonth();
	var lGiorno = dDateTime.getDate();
	var lOre = dDateTime.getHours();
	var lMinuti = dDateTime.getMinutes();
	var lSecondi = dDateTime.getSeconds();
	var lMillisec = dDateTime.getMilliseconds();
	if (tIntvl=="y")										// anni
		lAnno=lAnno+nQuanto;	
	if (tIntvl=="m")										// mesi
		lMese=lMese+nQuanto;	
	if (tIntvl=="w")										// settimane
		lGiorno=lGiorno+(nQuanto*7);	
	if (tIntvl=="d")										// giorni
		lGiorno=lGiorno+nQuanto;	
	if (tIntvl=="h")										// ore
		lOre=lOre+nQuanto;	
	if (tIntvl=="n")										// minuti
		lMinuti=lMinuti+nQuanto;	
	if (tIntvl=="s")										// secondi
		lSecondi=lSecondi+nQuanto;	
	if (tIntvl=="t")										// secondi
		lMillisec=lMillisec+nQuanto;	
	var dWork = new Date(lAnno,lMese,lGiorno,lOre,lMinuti,lSecondi,lMillisec);

	return(dWork);
}
  // *********************************************************************************
function fGet4DigitYear(nInpYear) 
	{
		if (isNaN(nInpYear))
			var nYear=0;
		else
			var nYear=parseInt(nInpYear,10);
		if ((nYear>=50) && (nYear<100))		nYear = 1900 + nYear;
		if ((nYear>100) && (nYear<1000))	nYear = 1000 + nYear;
		if (nYear<50)						nYear = 2000 + nYear;							
		return(nYear);
	}
  // *********************************************************************************
function fChkData(ctlMe,msgText) {
	var frmName = ctlMe.form.name;
	var ctlName = ctlMe.name;
	var fldNameDay = ctlMe.text;
	var inpText = ctlMe.value;
	var bResp = fVerifyDateExt(frmName,ctlName,msgText,fldNameDay,4);
	var outText = ChkData(inpText,'I');
	if (!!bResp)
		{ctlMe.value=outText;}
	else ctlMe.focus();
	return(bResp);
  }
  // *********************************************************************************
function fChkTime(ctlMe,msgText) {
	// accetta SOLO numeri e delimiter(':',' ','-')
	var reNumeric = /^(([0-1]{0,1}[0-9]{1})|([2]{1}[0-3]{1}))(:[0-5]{0,1}[0-9]{1}){0,2}$/
	var reDelims = /-\x20/gi
	var bRetCode;
	bRetCode = false;
	
	var frmName = ctlMe.form.name;
	var ctlName = ctlMe.name;
	var fldNameDay = ctlMe.text;
	var inpText = ctlMe.value;
	inpText = inpText.replace(" ",":");
	inpText = inpText.replace("-",":");
	bRetCode = reNumeric.test(inpText);
	if (!bRetCode)
	{
		alert(msgText);
		ctlMe.focus();
	}
	else
	{
		var outText;
		var arrTime = inpText.split(":");
		outText = "";
		for (i = 0; i < arrTime.length; i++)
		{
			outText +=":";
			outText +=Right("00"+arrTime[i],2);
		}
		outText = Mid(outText,1,outText.length-1);
		ctlMe.value = outText;
	}
	return(bRetCode);
  }
// *************************************************************************************
function fVerifyDateExt(frmName,ctlName,fldName,fldNameDay,yearDigits)
  // *********************************************************************************
  // Nome        : fVerifyDate
  // Description : Verifica la validità di una data
  // Parameters  : frmName           - Nome del FORM contenitore
  //             : ctlName           - Nome dell'INPUT TEXT con la data
  //             : fldName           - Nome visibile del campo
  //             : fldNameDay        - Nome del controllo per giorno settimana
  // Return Code : true + (ctlName)  - Data nel formato in italiano corretta
  //             : false             - Data non corretta
  // *********************************************************************************

	{
		//alert("fVerifyDateExt\nFM"+frmName+"\ncN"+ctlName+"\nfN"+fldName+"\nnD"+fldNameDay+"\nyD"+yearDigits);
		// reNumeric contiene la regular expression per accettare solo cifre, barra(/), spazio e meno(-)
		 	var reNumeric = /[^0-9\/ -]/		 	 	
			var bRetCode;
			var tYearMask="K";
			if ((yearDigits==4) || (Left(ctlName,9)=="hidGiorno"))
				tYearMask="I";
			if (frmName == "*")
				var oFrm=document.forms[0];
			else
				var oFrm=document.forms(frmName);
			tGio = oFrm.item(ctlName).value;
			if (tGio == "undefined") tGio="";
			tGio=Trim(tGio);
			if (tGio == "")
				{
					oFrm.item(ctlName).value="";
					if (fldNameDay!="") 
						oFrm.item(fldNameDay).value="";
					return ( true );
				}
			if ((ChkData(tGio,tYearMask)==null) || (reNumeric.test(tGio)))
				{
					alert("ATTENZIONE: il campo '"+fldName+"' non e' una data (gg/mm/aa) o <1900") ;
					oFrm.item(ctlName).select();
					if (fldNameDay!="") 
						oFrm.item(fldNameDay).value="";
					return ( false );
				}
			else
				{
					oFrm.item(ctlName).value=ChkData(tGio,tYearMask);
					if (fldNameDay!="") 
						oFrm.item(fldNameDay).value=Left(ChkData(tGio,"L"),3);
					return( true );
				}
	}
  // *********************************************************************************
 function ChkData(strDateInp,OutType)
  // *********************************************************************************
  // Nome        : ChkData
  // Description : Verifica una data in italiano (gg/mm/aaaa), con delimiter uno tra '/','-',' '
  // Parameters  : strDate    - Data nel formato in italiano
  //             : OutType    - SE =I o L o K risultato gg/mm/aaaa
  //                          - SE =E o D o M risultato aaaa/mm/gg
  //                          - SE =L o D viene prefisso il giorno della settimana di 3 lettere
  //                          - SE =K o M l'anno è di due sole cifre e senza sigla
  // Return Code : strNewDate - Data nel formato in italiano corretta
  //             : null       - Data non corretta
  // *********************************************************************************
  {
		var bError;
		var tMsg;
		var giorno;
		var mese;
		var anno;
		var strDate;
		var bSigla;
		var flgOut;
		bSigla="N";
		bCifre=4;
		bError = 0;
		dOggi = new Date();
		strNewDate="";
		strDate=Trim(strDateInp);
		flgOut=OutType;
		if ((flgOut=="L") || (flgOut=="K"))
			{
				bSigla="S";
				if (flgOut=="K")
					{
						bSigla="N";
						bCifre=2;
					}
				flgOut="I";
			}
		if ((flgOut=="D") || (flgOut=="M"))
			{
				bSigla="S";
				if (flgOut=="M")
					{
						bSigla="N";
						bCifre=2;
					}
				flgOut="E";
			}
		if (strDate!="")
		{		
			// Cerco il giorno (primo token tra '/' o ' ')
			for (i = 0;  i < strDate.length;  i++)
				{
					ch = strDate.charAt(i);
					if ((ch == "/") || (ch == " ") || (ch == "-")) 								break;							
				}
			giorno = strDate.substring(0, i);
				
			// Cerco il mese (secondo token tra '/' o ' ')
			for (j = i + 1;  j < strDate.length;  j++)
				{
					ch = strDate.charAt(j);
					if ((ch == "/") || (ch == " ") || (ch == "-")) 								break;
				}
			mese = strDate.substring(i + 1, j);
			if (mese.length==0)		 mese=dOggi.getMonth()+1;
				
			// Cerco l'anno (terzo token tra '/' o ' ')
			for (k = j + 1;  k < strDate.length;  k++)
				{
					ch = strDate.charAt(k);
					if ((ch == "/") || (ch == " ") || (ch == "-")) break;
				}
			anno = strDate.substring(j + 1, k);
			if (anno.length==0)		 anno=dOggi.getYear();
			if (anno.length < 4)
				{
					annonum = new Number(anno);
					if ((annonum>=50) && (annonum<100))		annonum = 1900 + annonum;
					if ((annonum>100) && (annonum<1000))	annonum = 1000 + annonum;
					if (annonum<50)							annonum = 2000 + annonum;							
					anno = annonum.toString();
				}

			if (giorno < 1 || giorno > 31)         bError = 1;
			if (mese < 1 || mese > 12)          bError = 2;
			if (anno.length  > 4) bError = 3;
			if (mese == 4 || mese == 6 || mese == 9 || mese == 11)
				{
					if (giorno > 30 )							bError = 4;
				}
			if (mese == 2)
				{
					var g = parseInt((anno / 4),10);
					if (isNaN(g))             bError = 1;
					if (giorno > 29) 			bError = 1;
					if (giorno == 29 && ((anno / 4)!= parseInt((anno / 4),10)))            bError = 5;
				}
			if (anno<1900)	bError = 6;
			strNewDate="";
			if (bSigla=="S")
				{
					if (flgOut=="I")
						{
							var gWk = new Array("dom","lun","mar","mer","gio","ven","sab");
						}
					else
						{
							var gWk = new Array("sun","mon","tue","wed","thu","fri","sat");
						}
					dData=new Date(anno,mese-1,giorno);
					strNewDate = gWk[dData.getDay()]+" ";
					anno=Right("0"+Trim(""+anno),2);
				}
			if (bCifre==2) anno=Right("0"+Trim(""+anno),2);
			giorno=Right("0"+Trim(""+giorno),2);
			mese=Right("0"+Trim(""+mese),2);				
			if (flgOut=="I")
				{
					strNewDate = strNewDate + giorno + "/" + mese + "/" + anno;
				}
			else
				{
					strNewDate = strNewDate + anno + "/" + mese + "/" + giorno;
				}
		}
		if (bError != 0)
			{
				strNewDate = null;
			}
		//newAlert(strNewDate+" "+flgOut+" E:"+bError);
    return (strNewDate);
  }
// ************************************************************************************* 
function fHourMin2Minute(nHourMinute) 
	{
		var nHour= "";
		var nMin = "";
		var nOut = "";
		if ((Trim(nHourMinute)=="") || (nHourMinute==0))
			nOut=0;
		else
			{
				nHour = Mid(nHourMinute,0,nHourMinute.indexOf(":"));
				nMin = Mid(nHourMinute,nHourMinute.indexOf(":")+1,2);
				nOut = (parseInt(nHour,10) * 60) + parseInt(nMin,10);
			}
		//alert("fHourMin2Minute: "+nHourMinute+" "+nOut);
		return(nOut);			
	}
// ************************************************************************************* 
function fMinute2HourMin(nMinute) 
	{
		var nHour= 0;
		var nMin = parseInt(nMinute,10);
		var tOut = "";
		var tSegno="";
		if (nMin<0)
			{
			nMin=0-nMin;
			tSegno="-";
			}
		while (nMin >= 60)
			{
				nHour++;
				nMin = nMin - 60;
			}
		tOut = tSegno + nHour + ":" + Right("00" + nMin,2);
		//alert("fMinute2HourMin: "+nMinute+" "+tOut);
		return(tOut);			
	}
// ************************************************************************************* 
function fCheckData(tFormName,txtName)
	{
		var tOut;
		alert("fCheckData 1:\n"+tFormName+"\n"+txtName);
		if (tFormName == "*")
			tFormName = document.forms[0].name;
		alert("fCheckData 2:\n"+tFormName+"\n"+txtName);
		strDateInp = document.forms(tFormName).item(txtName).value;
		alert("fCheckData 3:\n"+tFormName+"\n"+txtName+"\n"+strDateInp);
		tOut = ChkData(strDateInp,"I")
		if (tOut == null)
		{
			alert("fCheckData NO:\n"+tFormName+"\n"+txtName+"\n"+strDateInp);
			return(false);
		}
		else
		{
			alert("fCheckData OK:\n"+tFormName+"\n"+txtName+"\n"+strDateInp+"\n"+tOut);
			document.forms(tFormName).item(txtName).value = tOut;
			return(true);
		}
	}
// ************************************************************************************* 
function fCheckDate(tFormName,txtName,altName,txtNameLong,hidName)
	{
		var ret;
		
		ret = fVerifyDateExt(tFormName,txtName,altName,txtNameLong,4);
		if (ret==true)
			{
			var tInpDate=document.forms(tFormName).item(txtName).value;
			var tArrDate=tInpDate.split("/");
			var p_year = parseInt(tArrDate[2],10);
			if (p_year<100) 
				if (p_year<50)
					tArrDate[2]=2000 + p_year;
				else
					tArrDate[2]=1900 + p_year;
			else
				;
			// la data viene memorizzata nel campo nascosto SEMPRE in formato YYYY/MM/DD
			tInpDate=tArrDate[2];
			tArrDate[2]=tArrDate[0];
			tArrDate[0]=tInpDate;
			tInpDate=tArrDate.join("/");
			document.forms(tFormName).item(hidName).value=tInpDate;
			}
//			if ((document.all.MENULEVL03.value=="AG") && (document.all.CRITERI_OK.value=="OK"))
//				{
//					if (document.forms(tFormName).item("hidGiornoA").value=="")
//						document.all.msgDataFine.style.visibility = "visible";
//					else
//						document.all.msgDataFine.style.visibility = "hidden";
//				}
		
		return(ret);
	}
// ************************************************************************************* 

// FINE FINE FINE FINE FINE FINE FINE FINE FINE FINE FINE FINE FINE FINE
