/*

/ versione 2.1 dell' 27 ottobre 2006
CheckForm()						Controlla i campi obbligatori e i vincoli di una form  (DefaultFormInput)
getAge(sData)						Restituisce l'etā da una data di nascita
ShowProv()							Apre un finestra con le provincie
ShowProvAndGet(obj)					apre una finestra con le province  ele fa selezionare riportando il valore nell'oggetto obj
CheckCodiceFiscale(MyCod,MyCaption)		Controlla il codice fiscale
CheckOnlyNumber(data)					Controlla se una stringač composta da soli numeri
CheckOnlyAlpha(data)					Controlla se una stringa č alfanumerica
ShowHelp(Mode)						Apre la finestra dell'help
checkPassword()field1,filed2)				Controlla due campi se son ouguali
DeleteRec(sUrl)						Richiede conferma cancellazione record
frmCheckNeed(myFrm)					Controlla i campi obbligatori
								Needed
								Numeric
								Data
								SizeMin
								Mail
checkObbligatorio(obj)					controlla se il campo text o select p obbligatorio
checkEMail(obj)						controlla se una mail valida
CheckNumber(obj)					controlla se un numero
CheckCurr(obj)						controlla se č una cifra
CheckData(data)						controlla se č una data
ShowCalendario(Obj)					mostra caledario
ShowLjb(Query,Obj,myCri,Msg)			mostra LJB
ShowFile(Obj)						mostra finestra di upload

*/

var MyProN = new Array(105);
var MyProV = new Array(105);
var timerID;
var TimerMsTime=60000;  //' un minuto
var NextPage=""
var DefaultForm=0;			//' form elenco
var DefaultFormInput=0;		//' form base default=0
var nc      = !!(document.captureEvents && !document.documentElement);
var ie      = !!document.all;
var ie4     = !!(!document.documentElement && document.all);
var dom     = !!document.documentElement;
var nc6     = !!(dom && (!document.all));
var mac     = !!(navigator.userAgent.indexOf("Mac")!=-1);
var neufenster = "";
var neuLJB = "";
var neuFILE = "";
var checkflag = "false";

MyProN[1]='AGRIGENTO';		MyProN[2]='ALESSANDRIA';		MyProN[3]='ANCONA';		MyProN[4]='AOSTA';  		MyProN[5]='AREZZO';    		    MyProN[6]='ASCOLI PICENO';		MyProN[7]='ASTI';		MyProN[8]='AVELLINO';		MyProN[9]='BARI';		MyProN[10]='BELLUNO';		MyProN[11]='BENEVENTO';		MyProN[12]='BERGAMO';		MyProN[13]='BIELLA';		MyProN[14]='BOLOGNA';		MyProN[15]='BOLZANO';		MyProN[16]='BRESCIA';		MyProN[17]='BRINDISI';		MyProN[18]='CAGLIARI';		MyProN[19]='CALTANISSETTA';		MyProN[20]='CAMPOBASSO';		MyProN[21]='CASERTA';		MyProN[22]='CATANIA';		MyProN[23]='CATANZARO';		MyProN[24]='CHIETI';		MyProN[25]='COMO';		MyProN[26]='COSENZA';		MyProN[27]='CREMONA';		MyProN[28]='CROTONE';		MyProN[29]='CUNEO';		MyProN[30]='ENNA';		MyProN[31]='ESTERO';		MyProN[32]='FERRARA';		MyProN[33]='FIRENZE';		MyProN[34]='FOGGIA';		MyProN[35]='FORLI';		MyProN[36]='FROSINONE';		MyProN[37]='GENOVA';		MyProN[38]='GORIZIA';		MyProN[39]='GROSSETO';		MyProN[40]='IMPERIA';		MyProN[41]='ISERNIA';		MyProN[42]='LA SPEZIA';		MyProN[43]='AQUILA';		MyProN[44]='LATINA';		MyProN[45]='LECCE';		MyProN[46]='LECCO';		MyProN[47]='LIVORNO';		MyProN[48]='LODI';		MyProN[49]='LUCCA';		MyProN[50]='MACERATA';		MyProN[51]='MANTOVA';		MyProN[52]='MASSA';		MyProN[53]='MATERA';		MyProN[54]='MESSINA';		MyProN[55]='MILANO';		MyProN[56]='MODENA';		MyProN[57]='NAPOLI';		MyProN[58]='NOVARA';		MyProN[59]='NUORO';		MyProN[60]='ORISTANO';		MyProN[61]='PADOVA';		MyProN[62]='PALERMO';		MyProN[63]='PARMA';		MyProN[64]='PAVIA';		MyProN[65]='PERUGIA';		MyProN[66]='PESARO';		MyProN[67]='PESCARA';		MyProN[68]='PIACENZA';		MyProN[69]='PISA';		MyProN[70]='PISTOIA';		MyProN[71]='PORDENONE';		MyProN[72]='POTENZA';		MyProN[73]='PRATO';		MyProN[74]='RAGUSA';		MyProN[75]='RAVENNA';		MyProN[76]='REGGIO CALABRIA';		MyProN[77]='REGGIO EMILIA';		MyProN[78]='RIETI';		MyProN[79]='RIMINI';		MyProN[80]='ROMA';		MyProN[81]='ROVIGO';		MyProN[82]='SALERNO';		MyProN[83]='SASSARI';		MyProN[84]='SAVONA';		MyProN[85]='SIENA';		MyProN[86]='SIRACUSA';		MyProN[87]='SONDRIO';		MyProN[88]='TARANTO';		MyProN[89]='TERAMO';		MyProN[90]='TERNI';		MyProN[91]='TORINO';		MyProN[92]='TRAPANI';		MyProN[93]='TRENTO';		MyProN[94]='TREVISO';		MyProN[95]='TRIESTE';		MyProN[96]='UDINE';		MyProN[97]='VARESE';		MyProN[98]='VENEZIA';		MyProN[99]='VERBANIA';		MyProN[100]='VERCELLI';		MyProN[101]='VERONA';		MyProN[102]='VIBO VALENTIA';		MyProN[103]='VICENZA';		MyProN[104]='VITERBO';
MyProV[1]='AG';		MyProV[2]='AL';		MyProV[3]='AN';		MyProV[4]='AO';		MyProV[5]='AR';		MyProV[6]='AP';		MyProV[7]='AT';		MyProV[8]='AV';		MyProV[9]='BA';		MyProV[10]='BL';		MyProV[11]='BN';		MyProV[12]='BG';		MyProV[13]='BI';		MyProV[14]='BO';		MyProV[15]='BZ';		MyProV[16]='BS';		MyProV[17]='BR';		MyProV[18]='CA';		MyProV[19]='CL';		MyProV[20]='CB';		MyProV[21]='CE';		MyProV[22]='CT';		MyProV[23]='CZ';		MyProV[24]='CH';		MyProV[25]='CO';		MyProV[26]='CS';		MyProV[27]='CR';		MyProV[28]='KR';		MyProV[29]='CN';		MyProV[30]='EN';		MyProV[31]='EE';		MyProV[32]='FE';		MyProV[33]='FI';		MyProV[34]='FG';		MyProV[35]='FO';		MyProV[36]='FR';		MyProV[37]='GE';		MyProV[38]='GO';		MyProV[39]='GR';		MyProV[40]='IM';		MyProV[41]='IS';		MyProV[42]='SP';		MyProV[43]='AQ';		MyProV[44]='LT';		MyProV[45]='LE';		MyProV[46]='LC';		MyProV[47]='LI';		MyProV[48]='LO';		MyProV[49]='LU';		MyProV[50]='MC';		MyProV[51]='MN';		MyProV[52]='MS';		MyProV[53]='MT';		MyProV[54]='ME';		MyProV[55]='MI';		MyProV[56]='MO';		MyProV[57]='NA';		MyProV[58]='NO';		MyProV[59]='NU';		MyProV[60]='OR';		MyProV[61]='PD';		MyProV[62]='PA';		MyProV[63]='PR';		MyProV[64]='PV';		MyProV[65]='PG';		MyProV[66]='PS';		MyProV[67]='PE';		MyProV[68]='PC';		MyProV[69]='PI';		MyProV[70]='PT';		MyProV[71]='PN';		MyProV[72]='PZ';		MyProV[73]='PO';		MyProV[74]='RG';		MyProV[75]='RA';		MyProV[76]='RC';		MyProV[77]='RE';		MyProV[78]='RI';		MyProV[79]='RN';		MyProV[80]='RM';		MyProV[81]='RO';		MyProV[82]='SA';		MyProV[83]='SS';		MyProV[84]='SV';		MyProV[85]='SI';		MyProV[86]='SR';		MyProV[87]='SO';		MyProV[88]='TA';		MyProV[89]='TE';		MyProV[90]='TR';		MyProV[91]='TO';		MyProV[92]='TP';		MyProV[93]='TN';		MyProV[94]='TV';		MyProV[95]='TS';		MyProV[96]='UD';		MyProV[97]='VA';		MyProV[98]='VE';		MyProV[99]='VB';		MyProV[100]='VC';		MyProV[101]='VR';		MyProV[102]='VV';		MyProV[103]='VI';		MyProV[104]='VT';		MyProV[105]='';

	function check(field) 
		{
			if (checkflag == "false") {
			for (i = 0; i < field.length; i++) {
			field[i].checked = true;}
			checkflag = "true";
			return "Uncheck all"; }
				else {
						for (i = 0; i < field.length; i++) {
						field[i].checked = false; }
						checkflag = "false";
						return "Check all"; }
		}

	function getAge(sData)
		{	
			var an = parseInt(sData.substring(6,10));
			var mn = parseInt(sData.substring(3,5));
			var gn = parseInt(sData.substring(0,2));
			var today=new Date();
			var ac = today.getFullYear();
			var mc = today.getMonth() + 1;
			var gc = today.getDate();
			var eta = ac - an;
			if (mn > mc) {
				eta--;
			} else if (mn == mc) {
				if (gn > gc) {
					eta--;
				}
			}
			return eta;	
		} 
	
		function ShowProv(){
			var HelpWindows = "";
			HelpWindows = window.open("","Help","Width=300,Height=520,Top=80,Left=200,scrollbars=yes");
			HelpWindows.document.write("<font face=tahoma size=2>");
			for (var i=1;i < 105; i++) {
				HelpWindows.document.write (MyProV[i] + ' = ' + MyProN[i] + '<br>');
			}
			HelpWindows.document.write("</font>");
			HelpWindows.focus();
		}
		function ShowProvAndGet(obj){
			var HelpWindows = "";
			HelpWindows = window.open("","Help","Width=300,Height=520,Top=80,Left=200,scrollbars=yes");
			HelpWindows.document.write("<font face=tahoma size=2>");
			for (var i=1;i < 105; i++) {
				HelpWindows.document.write ('<a href="#" onclick="javascript:window.opener.forms[' + DefaultFormInput + '].' + obj + '.value="' + MyProV[i] + '";>' + MyProV[i] + ' = ' + MyProN[i] + '</a><br>');
			}
			HelpWindows.document.write("</font>");
			HelpWindows.focus();
		}

		
		function CheckCodiceFiscale(MyCod,MyCaption)
		{
			if (MyCod.length!=16){alert ("Il campo " + MyCaption + " deve essere di 16 caratteri. Inserire l'informazione richiesta!");return false;}
			//if (CheckOnlyAlpha(MyCod.substring(0,6))==false){alert ("I primi 6 caratteri del " + MyCaption + " devono essere lettere. Inserire l'informazione richiesta!");return false;}
			//if (CheckOnlyAlpha(MyCod.substring(8,9))==false){alert ("Il carattere numero 9 del " + MyCaption + " deve essere una lettera. Inserire l'informazione richiesta!");return false;}
			//if (CheckOnlyAlpha(MyCod.substring(11,12))==false){alert ("Il carattere numero 12 del " + MyCaption + " deve essere una lettera. Inserire l'informazione richiesta!");return false;}
			//if (CheckOnlyAlpha(MyCod.substring(15,16))==false){alert ("Il carattere numero 16 del " + MyCaption + " deve essere una lettera. Inserire l'informazione richiesta!");return false;}
			//if (CheckOnlyNumber(MyCod.substring(6,8))==false){alert ("Il carattere numero 7 e 8 del " + MyCaption + " devono essere un numero. Inserire l'informazione richiesta!");return false;}
			//if (CheckOnlyNumber(MyCod.substring(9,11))==false){alert ("Il carattere numero 10 e 11 del " + MyCaption + " devono essere un numero. Inserire l'informazione richiesta!");return false;}
			return true;
		}
		
		function CheckOnlyNumber(data){
			var nS="0123456789";
			var tC;
			var counter=0;
			for (var i=0;i < data.length; i++) {
				tC = data.substring(i, i+1);
				if (nS.indexOf(tC) != -1)
					counter ++;
			}
			if (counter != data.length) {return false;}
		}
		
		function CheckOnlyAlpha(data){
			var nS="0123456789";
			var tC;
			var counter=0;
			for (var i=0;i < data.length; i++) {
				tC = data.substring(i, i+1);
				if (nS.indexOf(tC) != -1)
					counter ++;
			}
			if (counter != 0) {return false;}
		}

		function CheckForm() {
			// controllo gli obbligatori
			if (frmCheckNeed(document.forms[DefaultFormInput])==false){return false;}
			document.forms[DefaultFormInput].submit();  
		}

		function ShowHelp(Mode) {
				var HelpWindows = "";
				HelpWindows = window.open("_stuff/help_20.asp?MO=" + Mode,"Help","Width=500,Height=220,Top=80,Left=200,scrollbars=yes");
				wnHelpOpen=true;
		}

		function ShowHelpSession() {
				var HelpWindows = "";
				HelpWindows = window.open("_stuff/help_20.asp","Help","Width=330,Height=420,Top=80,Left=200,scrollbars=yes");
				wnHelpOpen=true;
		}	
		

		function checkPassword(field1, field2)
		{
			if (field1.value != field2.value)
			{
				field2.focus();
				alert ("La verifica della password \u00E8 fallita. Reinserire o correggere i dati.");
				return false;
			}
			return true;
		}

		function DeleteRec(sUrl){
			if (confirm('Vuoi cancellare la voce selezionata?')){
				location.assign(sUrl);
			}
			return false;
		}

		function frmCheckNeed(myFrm){
			var mCaption="";
			var mSize="";
			for (var i=0;i < myFrm.elements.length; i++) {
				mCaption=myFrm.elements[i].getAttribute("Caption");
				mSize=myFrm.elements[i].getAttribute("SizeMin");
				if (myFrm.elements[i].getAttribute("Needed")=='1'){if (checkObbligatorio(myFrm.elements[i])==false){return false;}}
				if (myFrm.elements[i].getAttribute("Numeric")=='1'){if (CheckNumber(myFrm.elements[i])==false){return false;}}
				if (myFrm.elements[i].getAttribute("Data")=='1'){if (CheckData(myFrm.elements[i])==false){return false;}}
				if (myFrm.elements[i].getAttribute("Mail")=='1'){if (checkEMail(myFrm.elements[i])==false){return false;}}
				if (myFrm.elements[i].getAttribute("SizeMin") > 0 ){if (myFrm.elements[i].value.length < myFrm.elements[i].SizeMin & myFrm.elements[i].value.length>0){
						alert ("il campo " + mCaption + " deve essere lungo almeno " + mSize + " caratteri. Inserire l'informazione richiesta!");
						return false;
					}
				}
			}
			return true;
		}
		function checkObbligatorio(obj)
		{
		  if (((obj.type == "text" || obj.type == "textarea" ) && (obj.value == "")))
		  {
		    obj.focus();
			alert ("il campo " + obj.getAttribute("Caption") + " č obbligatorio. Inserire l'informazione richiesta!")
		    return false;
		  }
		  else if (((obj.type.substr(0,6) == "select") && (obj.value == "")))
		  {
		    obj.focus();
			alert ("il campo " + obj.getAttribute("Caption") + " č obbligatorio. Scegliere un valore dall'elenco!")
		    return false;
		  }
		  return true;
		}
		
		function checkEMail(obj)
		{
		  if (obj.value.length > 0) 
			{if ((obj.value.indexOf("@") == -1) || (obj.value.indexOf(".") == -1)){obj.focus();alert ("L'indirizzo e-mail non \u00E8 corretto.");return false;}}
		  return true;
		}	

		function CheckNumber(obj){
		var nS="0123456789,";
		var tC;
		var counter=0;
		data=obj.value;
		for (var i=0;i < data.length; i++) {
			tC = data.substring(i, i+1);
			if (nS.indexOf(tC) != -1)
				counter ++;
			}
			if (counter != data.length) {obj.focus();alert ("Attenzione! Nel " + obj.getAttribute("Caption") + " campo vanno inseriti solo caratteri numerici.");return false;}
		}
		
		function CheckCurr(obj){
			var nS="0123456789,";
			var tC;
			var counter=0;
			data=obj.value;
			for (var i=0;i < data.length; i++) {
				tC = data.substring(i, i+1);
				if (nS.indexOf(tC) != -1)
					counter ++;
			}
			if (counter != data.length) {
					alert ("Attenzione! In questo campo vanno inseriti solo caratteri numerici, il seprataore decimale č la virgola.");
					obj.value="0";
					obj.focus();
					return false;
			}
		}

	function CheckData(data){
		//controllo il formato della data
		var allOk = true;
		if (data.value.length > 0)
		{
			var mesi = "312831303130313130313031";
			var giorno = data.value.substr(0,2);
			var mese = data.value.substr(3,2);
			var anno = data.value.substr(6,4);

			if (data.value.length != 10)
				allOk = false;
			if (allOk == true)
				if (checkChars(giorno+mese+anno, "0123456789") == false)
					allOk = false;			
			if (allOk == true)
				if ((data.value.substr(2,1) != '/') || (data.value.substr(5,1) != '/'))
					allOk = false;		

			if (allOk == true)
				if ((mese < 1) || (mese > 12))
					allOk = false;

			if (allOk == true) 
			{ // Bisestile
				if (mese == 2)				
					if ((anno % 4) == 0)
						mesi = "312931303130313130313031";
				if ( (giorno < 1) || (giorno > mesi.substr((mese-1)*2,2)) )
					allOk = false;
			}
		  if (allOk == false)	{
				data.focus();
				alert ("La data specificata nel campo " + data.getAttribute("Caption") +  " \u00E8 errata. Inserire valori corretti nel formato gg/mm/aaaa.");
		  }
		}
		return allOk;
	}

function CheckTime(data){
		//controllo il formato della data
		var allOk = true;
		if (data.value.length > 0)
		{
			
			var ore = data.value.substr(0,2);
			var minuti = data.value.substr(3,2);
			
			if (data.value.length != 5)
				allOk = false;
			if (allOk == true)
				if (checkChars(ore+minuti, "0123456789") == false)
					allOk = false;			
			if (allOk == true)
				if ((data.value.substr(2,1) != ':'))
					allOk = false;		

			if (allOk == true)
				if ((ore < 0) || (ore > 23))
					allOk = false;
			if (allOk == true)
				if ((minuti < 0) || (minuti > 59))
					allOk = false;
		    if (allOk == false)	{
				data.focus();
				alert ("L \'orario nel campo " + data.getAttribute("Caption") +  " \u00E8 errato.\r Inserire valori corretti nel formato hh:mm.");
		  }
		}
		return allOk;
	}

	function CheckTimeQuarter(data){
		//controllo il formato della data
		var allOk = true;
		if (data.value.length > 0)
		{
			
			var ore = data.value.substr(0,2);
			var minuti = data.value.substr(3,2);
			
			if (data.value.length != 5)
				allOk = false;
			if (allOk == true)
				if (checkChars(ore+minuti, "0123456789") == false)
					allOk = false;			
			if (allOk == true)
				if ((data.value.substr(2,1) != ':'))
					allOk = false;		

			if (allOk == true)
				if ((ore < 0) || (ore > 23))
					allOk = false;
			if (allOk == true)
				if ((minuti != 0) && (minuti != 15) && (minuti != 30) && (minuti != 45))
					allOk = false;
		    if (allOk == false)	{
				data.focus();
				alert ("L\'orario nel campo " + data.getAttribute("Caption") +  " \u00E8 errato.\rInserire valori corretti nel formato hh:mm\rImmettere l\'orario arrotondando al quarto d'\'ora (00,15,30,45). ");
		  }
		}
		return allOk;
	}

	function ShowFile(Obj) { 
		newFile('_stuff/upload.asp?Obj=' + Obj,500,230,'no'); 
		return false;
	}

	function ShowCalendario(Obj) { 
		neuWin('_stuff/calendario.htm?fmName=FRM&amp;elName=' + Obj,180,220,'no'); 
		return false;
	}

	function ShowLjb(Query,Obj,myCri,Msg) { 
		var MyS="";
		MyS="Q=" + Query + "&amp;O=" + Obj + "&amp;C=" + myCri + "&amp;M=" + Msg;
		newLJB('_stuff/listJoinBox_20.asp?' + MyS,440,520,'no'); 
		return false;
		
	}
	function newFile(page,br,ho)
	{

		var scr     = (typeof arguments[3] != "undefined")? arguments[3]  : "yes";
		var ext     = (typeof arguments[4] != "undefined")? true : false;				// externer Inhalt?
	    var breit   = screen.availWidth;
	    var hoch    = screen.availHeight;
	    var winPosX = (breit/2) - br/2;
	    var winPosY = (hoch/2) - ho/2;

	    if(!ie4 && neuFILE && ! neuFILE.closed)neuFILE.location.href = page;
		else neuFILE = window.open(page,"","resizable=yes,scrollbars=yes,status=yes,width=" + br + ",height=" + ho + ",top=" + winPosY + ",left=" + winPosX);

	    if(!ext)neuFILE.moveTo(winPosX,winPosY);
	    if(!ext)neuFILE.resizeTo(br,ho);
	    neuFILE.focus();
	    
	}
	function newLJB(page,br,ho)
	{

		var scr     = (typeof arguments[3] != "undefined")? arguments[3]  : "yes";
		var ext     = (typeof arguments[4] != "undefined")? true : false;				// externer Inhalt?
	    var breit   = screen.availWidth;
	    var hoch    = screen.availHeight;
	    var winPosX = (breit/2) - br/2;
	    var winPosY = (hoch/2) - ho/2;

	    if(!ie4 && neuLJB && !neuLJB.closed)neuLJB.location.href = page;
		else neuLJB = window.open(page,"","resizable=yes,scrollbars=yes,status=yes,width=" + br + ",height=" + ho + ",top=" + winPosY + ",left=" + winPosX);

	    if(!ext)neuLJB.moveTo(winPosX,winPosY);
	    if(!ext)neuLJB.resizeTo(br,ho);
	    neuLJB.focus();
	    
	}
	function refreshPeriodic(Mode) { 
	 // Reload the page every 120 seconds (2 minuti) 
		if (document.forms[DefaultForm].chkAuto.checked==false){
				clearTimeout(timerID);
				NextPage="";
				return;	 
			} 
		if (Mode=="F"){timerID = setTimeout("AutoSubmit()",TimerMsTime);}else{NextPage=Mode;timerID = setTimeout("AutoRefresh()",TimerMsTime);}
		 
	} 
	function AutoRefresh() { 
	 // Reload the page every 120 seconds (2 minuti) 
		
		location.assign ('Default.asp?' + NextPage);
		//location.reload();
	}
	function AutoSubmit() { 
		document.forms[DefaultForm].submit(); 
	}
	

	function neuWin(page,br,ho) 
	{

	    var scr     = (typeof arguments[3] != "undefined")? arguments[3]  : "yes";
		var ext     = (typeof arguments[4] != "undefined")? true : false;				// externer Inhalt?
	    var breit   = screen.availWidth;
	    var hoch    = screen.availHeight;
	    var winPosX = (breit/2) - br/2;
	    var winPosY = (hoch/2) - ho/2;

	    if(!ie4 && neufenster && !neufenster.closed)neufenster.location.href    = page;
	    //else neufenster = window.open(page,"","resizable=yes,scrollbars=" + scr + ",width=" + br + ",height=" + ho);
		else neufenster = window.open(page,"","resizable=yes,scrollbars=" + scr + ",width=" + br + ",height=" + ho + ",top=" + winPosY + ",left=" + winPosX);

	    if(!ext)neufenster.moveTo(winPosX,winPosY);
	    if(!ext)neufenster.resizeTo(br,ho);
	    neufenster.focus();
	}
	function ShowInfoForm(sMode){
		// Mode
		//	RQ= Required
		//      DA=Data
		//      NU=Numeric
		//      SM=SizeMin
		//      MA=Mail 
		//     LS=lista
		var MyFrm=document.forms[0];
		if (sMode=='RQ'){
			for (var i=0;i < MyFrm.elements.length; i++) {
				if (MyFrm.elements[i].Needed=='1'){ MyFrm.elements[i].value="#RQ# " + MyFrm.elements[i].Caption } else {MyFrm.elements[i].value=''}}
		}
		if (sMode=='DA'){
			for (var i=0;i < MyFrm.elements.length; i++) {
				if (MyFrm.elements[i].Data=='1'){ MyFrm.elements[i].value="#DT# " + MyFrm.elements[i].Caption ;} else { MyFrm.elements[i].value=''}}
		}
		if (sMode=='MA'){
			for (var i=0;i < MyFrm.elements.length; i++) {
				if (MyFrm.elements[i].Mail=='1'){ MyFrm.elements[i].value="#MA# " + MyFrm.elements[i].Caption ;} else { MyFrm.elements[i].value=''}}
		}
		if (sMode=='YS'){
			for (var i=0;i < MyFrm.elements.length; i++) {
				if (MyFrm.elements[i].IsYear=='1'){ MyFrm.elements[i].value="#YR# " + MyFrm.elements[i].Caption ;} else { MyFrm.elements[i].value=''}}
		}
		if (sMode=='SM'){
			for (var i=0;i < MyFrm.elements.length; i++) {
				if (MyFrm.elements[i].SizeMin>0){ MyFrm.elements[i].value="#SIZ# " + MyFrm.elements[i].SizeMin ;} else { MyFrm.elements[i].value=''}}
		}
		if (sMode=='NU'){
			for (var i=0;i < MyFrm.elements.length; i++) {
				if (MyFrm.elements[i].Numeric=='1'){ MyFrm.elements[i].value="#Numero#"} else { MyFrm.elements[i].value='';}}
		}
		if (sMode=='LS'){
				var InfoWindows = "";
				var Needed="";
				var Data="";
				var sNumeric="";
				var sEmail="";
				var sYear="";
				var sCaption="";
				InfoWindows= window.open("","Help","Width=600,Height=520,Top=80,Left=200,scrollbars=yes");
				InfoWindows.document.write('<table width=100% border=1 style="FONT-FAMILY: tahoma; FONT-SIZE: 0.28cm;">');
				InfoWindows.document.write ('<tr><td>NOME</td><td>TIPO</td><td>SIZE</td><td>MAX</td><td>CAPTION</td><td>OBBL</td><td>NUM</td><td>DATA</td><td>EMAIL</td></tr>');
				for (var i=0;i < MyFrm.elements.length; i++) {
					Data="NO"
					Needed="NO";
					sNumeric="NO";
					sEmail="NO";
					sCaption=MyFrm.elements[i].Caption;
					if (MyFrm.elements[i].Needed=='1'){ Needed="<b>SI</b>";} 
					if (MyFrm.elements[i].Data=='1'){ Data="<b>SI</b>";} 
					if (MyFrm.elements[i].Numeric=='1'){ sNumeric="<b>SI</b>";} 
					if (MyFrm.elements[i].Mail=='1'){ sNumeric="<b>SI</b>";} 
					if (sCaption==null){ sCaption="-";} 
					InfoWindows.document.write ('<tr><td>' + MyFrm.elements[i].name + '</td><td>' + MyFrm.elements[i].type + '</td><td>' + MyFrm.elements[i].size + '</td><td>' + MyFrm.elements[i].maxLength + '</td><td>' + sCaption + '</td><td>' + Needed + '</td><td>' + sNumeric + '</td><td>' + Data + '</td></tr>');
				}
				InfoWindows.document.write("</table>");
				InfoWindows.focus();
		}
	}
	function checkChars(checkStr, string)
	{
	  var checkOK = string;
	  var allValid = true;
	  var allNum = "";
	  for (i = 0;  i < checkStr.length;  i++) {
	    ch = checkStr.charAt(i);
	    for (j = 0;  j < checkOK.length;  j++)
	      if (ch == checkOK.charAt(j))
	        break;
	    if (j == checkOK.length) {
	      allValid = false;
	      break;
	    }
	    allNum += ch;
	  }
	  return (allValid);
	}
	
	function isDate(p_Expression){
	return !isNaN(new Date(p_Expression));		// <<--- this needs checking
	}
	
	function FormatData(sData){
		return sData.substring(6,10) + "/" + sData.substring(3,5) + "/" + sData.substring(0,2);
	}

// REQUIRES: isDate()
function dateAdd(p_Interval, p_Number, p_Date){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	if(isNaN(p_Number)){return "invalid number: '" + p_Number + "'";}	

	p_Number = new Number(p_Number);
	var dt = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": {// year
			dt.setFullYear(dt.getFullYear() + p_Number);
			break;
		}
		case "q": {		// quarter
			dt.setMonth(dt.getMonth() + (p_Number*3));
			break;
		}
		case "m": {		// month
			dt.setMonth(dt.getMonth() + p_Number);
			break;
		}
		case "y":		// day of year
		case "d":		// day
		case "w": {		// weekday
			dt.setDate(dt.getDate() + p_Number);
			break;
		}
		case "ww": {	// week of year
			dt.setDate(dt.getDate() + (p_Number*7));
			break;
		}
		case "h": {		// hour
			dt.setHours(dt.getHours() + p_Number);
			break;
		}
		case "n": {		// minute
			dt.setMinutes(dt.getMinutes() + p_Number);
			break;
		}
		case "s": {		// second
			dt.setSeconds(dt.getSeconds() + p_Number);
			break;
		}
		case "ms": {		// second
			dt.setMilliseconds(dt.getMilliseconds() + p_Number);
			break;
		}
		default: {
			return "invalid interval: '" + p_Interval + "'";
		}
	}
	return dt;
}



// REQUIRES: isDate()
// NOT SUPPORTED: firstdayofweek and firstweekofyear (defaults for both)
function dateDiff(p_Interval, p_Date1, p_Date2, p_firstdayofweek, p_firstweekofyear){
	if(!isDate(p_Date1)){return "invalid date: '" + p_Date1 + "'";}
	if(!isDate(p_Date2)){return "invalid date: '" + p_Date2 + "'";}
	var dt1 = new Date(p_Date1);
	var dt2 = new Date(p_Date2);

	// get ms between dates (UTC) and make into "difference" date
	var iDiffMS = dt2.valueOf() - dt1.valueOf();
	var dtDiff = new Date(iDiffMS);

	// calc various diffs
	var nYears  = dt2.getUTCFullYear() - dt1.getUTCFullYear();
	var nMonths = dt2.getUTCMonth() - dt1.getUTCMonth() + (nYears!=0 ? nYears*12 : 0);
	var nQuarters = parseInt(nMonths/3);	//<<-- different than VBScript, which watches rollover not completion
	
	var nMilliseconds = iDiffMS;
	var nSeconds = parseInt(iDiffMS/1000);
	var nMinutes = parseInt(nSeconds/60);
	var nHours = parseInt(nMinutes/60);
	var nDays  = parseInt(nHours/24);
	var nWeeks = parseInt(nDays/7);


	// return requested difference
	var iDiff = 0;		
	switch(p_Interval.toLowerCase()){
		case "yyyy": return nYears;
		case "q": return nQuarters;
		case "m": return nMonths;
		case "y": 		// day of year
		case "d": return nDays;
		case "w": return nDays;
		case "ww":return nWeeks;		// week of year	// <-- inaccurate, WW should count calendar weeks (# of sundays) between
		case "h": return nHours;
		case "n": return nMinutes;
		case "s": return nSeconds;
		case "ms":return nMilliseconds;	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}



// REQUIRES: isDate(), dateDiff()
// NOT SUPPORTED: firstdayofweek and firstweekofyear (does system default for both)
function datePart(p_Interval, p_Date, p_firstdayofweek, p_firstweekofyear){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}

	var dtPart = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": return dtPart.getFullYear();
		case "q": return parseInt(dtPart.getMonth()/3)+1;
		case "m": return dtPart.getMonth()+1;
		case "y": return dateDiff("y", "1/1/" + dtPart.getFullYear(), dtPart);			// day of year
		case "d": return dtPart.getDate();
		case "w": return dtPart.getDay();	// weekday
		case "ww":return dateDiff("ww", "1/1/" + dtPart.getFullYear(), dtPart);		// week of year
		case "h": return dtPart.getHours();
		case "n": return dtPart.getMinutes();
		case "s": return dtPart.getSeconds();
		case "ms":return dtPart.getMilliseconds();	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}


// REQUIRES: isDate()
// NOT SUPPORTED: firstdayofweek (does system default)
function weekdayName(p_Date, p_abbreviate){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	var dt = new Date(p_Date);
	var retVal = dt.toString().split(' ')[0];
	var retVal = Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[dt.getDay()];
	if(p_abbreviate==true){retVal = retVal.substring(0, 3)}	// abbr to 1st 3 chars
	return retVal;
}
// REQUIRES: isDate()
function monthName(p_Date, p_abbreviate){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	var dt = new Date(p_Date);	
	var retVal = Array('January','February','March','April','May','June','July','August','September','October','November','December')[dt.getMonth()];
	if(p_abbreviate==true){retVal = retVal.substring(0, 3)}	// abbr to 1st 3 chars
	return retVal;
}









// ====================================

// bootstrap different capitalizations
function IsDate(p_Expression){
	return isDate(p_Expression);
}
function DateAdd(p_Interval, p_Number, p_Date){
	return dateAdd(p_Interval, p_Number, p_Date);
}
function DateDiff(p_interval, p_date1, p_date2, p_firstdayofweek, p_firstweekofyear){
	return dateDiff(p_interval, p_date1, p_date2, p_firstdayofweek, p_firstweekofyear);
}
function DatePart(p_Interval, p_Date, p_firstdayofweek, p_firstweekofyear){
	return datePart(p_Interval, p_Date, p_firstdayofweek, p_firstweekofyear);
}
function WeekdayName(p_Date){
	return weekdayName(p_Date);
}
function MonthName(p_Date){
	return monthName(p_Date);
}