//::::: validazione data ::::: INIZIO
function isValidDate(date){
   if(date.length!=10){
      return false;
   }
   day = date.substring(0,2);
   month = date.substring(3,5);
   year = date.substring(6,10);

   if(month < 1 || month > 12){
      return false;
   }
   if(day < 1 || day > 31){
      return false;
   }
   if((month == 4 || month == 6 || month == 9 || month == 11) && (day == 31)){
      return false;
   }
   if(month == 2){
      var leap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
      if(day>29 || (day == 29 && !leap)){
         return false;
      }
   }
   return true;
}
//::::: validazione data ::::: FINE

//::::: validazione tempo ::::: INIZIO
function isValidTime(time){
   if(time.length!=5){
      return false;
   }
   hour = parseInt(time.substring(0,2));
   minute = parseInt(time.substring(3,5));

   if(hour < 0 || hour > 23){
      return false;
   }
   if(minute < 0 || minute > 59){
      return false;
   }
   return true;
}
//::::: validazione tempo ::::: FINE

//::::: validazione mail ::::: INIZIO
function checkEmail(emailStr){
   if(emailStr.length == 0){
      return true;
   }
   var emailPat = /^(.+)@(.+)$/;
   var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars = "\[^\\s" + specialChars + "\]";
   var quotedUser = "(\"[^\"]*\")";
   var ipDomainPat = /^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom = validChars + '+';
   var word = "(" + atom + "|" + quotedUser + ")";
   var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat = new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray = emailStr.match(emailPat);
   if(matchArray == null){
      return false;
   }
   var user = matchArray[1];
   var domain = matchArray[2];
   if(user.match(userPat) == null){
      return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if(IPArray != null){
      for(var i = 1; i <= 4; i++){
         if(IPArray[i] > 255){
            return false;
         }
      }
      return true;
   }
   var domainArray = domain.match(domainPat);
   if(domainArray == null){
      return false;
   }
   var atomPat = new RegExp(atom,"g");
   var domArr = domain.match(atomPat);
   var len = domArr.length;
   if((domArr[domArr.length-1].length < 2) || (domArr[domArr.length-1].length > 3)){
      return false;
   }
   if(len < 2){
       return false;
   }
   return true;
}
//::::: validazione mail ::::: FINE

//::::: validazione file ::::: INIZIO
function checkFile(fileStr){
   if(fileStr.lastIndexOf('\\')>0 || fileStr.lenght==0){
      fileName = fileStr.substring(fileStr.lastIndexOf('\\')+1);
	if(fileName.indexOf(' ')>0 || fileName.indexOf('+')>0 || fileName.indexOf('&')>0 || fileName.indexOf('?')>0){
         return false;
	}
   }
   return true;
}
//::::: validazione file ::::: FINE

//::::: validazione directory ::::: INIZIO
function checkDir(dirStr){
   if(dirStr.indexOf(' ')>0 || dirStr.indexOf('+')>0 || dirStr.indexOf('&')>0 || dirStr.indexOf('?')>0){
      return false;
   }
   return true;
}
//::::: validazione directory ::::: FINE

//::::: redirect ::::: INIZIO
function redirect(URL){
   document.location.href = URL;
}
//::::: redirect ::::: FINE

//::::: indiceCampo ::::: INIZIO
function indiceCampo(nomeForm,nomeCampo){
   objForm = document.forms[nomeForm];
   for(i=0;i<objForm.length;i++){
      if(objForm.elements[i].name == nomeCampo){
         return i;
      }
   }
}
//::::: indiceCampo ::::: FINE

//::::: messaggioConferma ::::: INIZIO
function messaggioConferma(messaggio){
   if(!confirm(messaggio)){
      return false;
   }
}
//::::: messaggioConferma ::::: FINE

//::::: verificaFormGenerico ::::: INIZIO
function verificaFormGenerico(nomeForm,campi,valori,messaggi){

   objForm = document.forms[nomeForm];

   arrayCampi = campi.split("|");
   arrayValori = valori.split("|");
   arrayMessaggi = messaggi.split("|");

   numCampi = arrayCampi.length;

   for(i=0;i<numCampi;i++){
      campoCorrente = objForm.elements[arrayCampi[i]];
      if(arrayValori[i]=="none" && campoCorrente.value.length==0){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
      else if(arrayValori[i]=="select" && campoCorrente.options[campoCorrente.selectedIndex].value.length==0){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
      else if(arrayValori[i]=="mail" && !checkEmail(campoCorrente.value)){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
      else if(arrayValori[i]=="num" && isNaN(campoCorrente.value)){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
      else if(arrayValori[i]=="check"){
         indiceCampoAppoggio = indiceCampo(nomeForm,arrayCampi[i])+1;
         if(campoCorrente.value.length==0 && objForm.elements[indiceCampoAppoggio].checked){
            alert(arrayMessaggi[i]);
            campoCorrente.focus();
            return false;
         }
      }
      else if(arrayValori[i]=="file" && !checkFile(campoCorrente.value)){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
      else if(arrayValori[i]=="dir" && !checkDir(campoCorrente.value)){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
      else if(arrayValori[i]=="val" && campoCorrente.value.length>0){
         numSep = 0;
         numChar = campoCorrente.value.length;
         check = true;
         for(j=0;j<numChar;j++){
            if(isNaN(parseInt(campoCorrente.value.substr(j,1))) && campoCorrente.value!=','){
               check = false;
            }
            if(campoCorrente.value==','){
               numSep++;
            }
         }
         if(check && numSep<2){
            campoValuta = document.forms[nomeForm].elements[arrayCampi[i]];
            indiceCampoAppoggioValuta = indiceCampo(nomeForm,arrayCampi[i])+1;
            objForm.elements[indiceCampoAppoggioValuta].value = campoValuta.value.replace(',','.');
         }
         else{
            alert(arrayMessaggi[i]);
            campoCorrente.focus();
            return false;	
         }
      }
      else if(arrayValori[i]=="data" && campoCorrente.value.length>0){
	     if(!isValidDate(campoCorrente.value)){
            alert(arrayMessaggi[i]);
            campoCorrente.focus();
            return false;
         }
      }
      else if(arrayValori[i]=="datatime" && campoCorrente.value.length>0){
	     datatime = campoCorrente.value;
	     data = datatime.substring(0,10);
		 time = datatime.substring(11);
	     if(!(isValidDate(data) && isValidTime(time))){
            alert(arrayMessaggi[i]);
            campoCorrente.focus();
            return false;
         }
      }
      else if(campoCorrente.value==arrayValori[i]){
         alert(arrayMessaggi[i]);
         campoCorrente.focus();
         return false;
      }
   }
   return true;
}
//::::: verificaFormGenerico ::::: FINE

//::::: addNewEvent ::::: INIZIO
function addNewEvent(elm, evType, fn)
{
   if (elm.addEventListener){
     elm.addEventListener(evType, fn);
     return true;
   }
   else if (elm.attachEvent){
      var r = elm.attachEvent("on"+evType, fn);
      return r;
   }
   else {
      alert("Handler could not be removed");
   }
}
//::::: addNewEvent ::::: FINE

//::::: Verifica caratteri tastiera ::::: INIZIO
function getKeyNat(e){
   var whichCode = (window.Event) ? e.which : e.keyCode;
   if((whichCode==8) || (whichCode==9) || (whichCode==13) || (whichCode>=48 && whichCode<=57)){
      return true;
   }
   else{
      return false;
   }
}
function getKeyVal(e){
   var whichCode = (window.Event) ? e.which : e.keyCode;
   if((whichCode==8) || (whichCode==9) || (whichCode==13) || (whichCode==44) || (whichCode>=48 && whichCode<=57) || (whichCode==188)){
      return true;
   }
   else{
      return false;
   }
}
function getKeyChar(e){
   var whichCode = (window.Event) ? e.which : e.keyCode;
   if(whichCode==34){
      return false;
   }
   else{
      return true;
   }
}
//::::: Verifica caratteri tastiera ::::: FINE

//::::: MM_function ::::: INIZIO
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  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=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}
//::::: MM_function ::::: FINE
