//*****  Script by StefanoRoncari & AndreaSeghizzi & PaoloCanali  *****//
almeno1=0
radio1=0
radio=false
radioName=""
sel="vuoto"
check1=0
checkbox=false
checkName=""
var reservedField = new Array(
                new Array("required_","Campo obbligatorio"),
                new Array("check_","Campo checkato"),
                new Array("valid_","Campo da validare"),
                new Array("numeric_","Campo numerico"),
                new Array("address_","Campo email"),
                new Array("select_","Campo select impostato"),
                new Array("oneselect_","almeno un campo select impostato"),
                new Array("ndnum_","Campo numerico o \"nd\""),
                new Array("string_","campo stringa"),
                new Array("radio_", "Campo radio button"),
                new Array("checkbox_", "Campo checkbox"),
                new Array("nddec_", "Campo decimale o \"nd\""),
                new Array("textarea_", "Campo text area")
);


//** questo array è temporaneo e può essere    **//
//** spostato all'interno delle singole pagine **//

/*var FieldName = new Array(
                new Array("nome","Nome"),
                new Array("cognome","Cognome"),
                new Array("associato","Associato"),
                new Array("ufficio","Ufficio"),
                new Array("telefono","Telefono"),
                new Array("fax","Fax"),
                new Array("email","E-mail"),
                new Array("argomento","Argomento"),
                new Array("richiesta1","Richiesta dettagliata 1"),
                new Array("richiesta2","Richiesta dettagliata 2"),
                new Array("datiPersonali","Richiesta dati personali"),
                new Array("email","e-mail")
);*/

//***************************************************************//
//***** associazione tra il nome del campo e la sua         *****//
//***** descrizione, per gestire eventuali altre lingue     *****//
//***************************************************************//

function findName(key){
     var stringaTemp = "";
     var ecc = "";
     for(i=0;i<key.length;i++){    //*** elimina gli eventuali suffissi - vedi array reservedField

          stringaTemp = stringaTemp + key.charAt(i);
          for(x=0;x<reservedField.length;x++){
               if(stringaTemp == reservedField[x][0]){
                    stringaTemp = "";
               }
          }
     }

     for(i=0;i<FieldName.length;i++){
          if(FieldName[i][0]==stringaTemp){
               return FieldName[i][1];
               break;
          }
     }
     return false;
}

//***************************************************************//
//***** ciclo principale per controllare i campi della form *****//
//***** se rientrano nei casi:                              *****//
//***** - "required_"         -> il campo è obbligatorio    *****//
//***** - "select_"           -> controllo della selezione  *****//
//***** - "valid_"            -> controllo del contenuto    *****//
//***************************************************************//

function checkForm(objForm){
var ok;
     for (i=0; i<objForm.elements.length; i++){

          var tempobj=objForm.elements[i];
              //  alert(i + " " + tempobj.name + " " + objForm.elements[i].type);
          if ((tempobj.type.indexOf("hidden") != -1)||
               (tempobj.type.indexOf("button") != -1)||
               (tempobj.type.indexOf("submit") != -1)||
               (tempobj.type.indexOf("reset") != -1)||
               (tempobj.type.indexOf("image") != -1))
               continue;

		  if ((tempobj.name.indexOf(reservedField[12][0]) != -1) && (!checkLengthTextArea(tempobj))) {  // textarea
		  		return false;
		  		break;
		   }

          if (tempobj.name.indexOf(reservedField[0][0]) != -1){ // required
                if((tempobj.name.indexOf(reservedField[1][0]) != -1) && (!checkChecked(tempobj))){
                    return false;
                    break;
               }        
               if((tempobj.name.indexOf(reservedField[5][0]) != -1) && (!checkSelected(tempobj))){
                    return false;
                    break;
               }
               if ((tempobj.name.indexOf(reservedField[4][0]) != -1) && (!checkEMail(tempobj))){
               		return false;
               		break;
               	}
               if(tempobj.name.indexOf(reservedField[9][0]) != -1) {
					radio = true;
					ok= checkRadio(tempobj);
					continue;
               }
               if(tempobj.name.indexOf(reservedField[10][0]) != -1) {
               		checkbox = true;
               		ok = checkCheckbox(tempobj);
               		continue;
               }
               if(!checkNotEmpty(tempobj)){
                      return false;
                      break;
               }              
          }
         
          if((tempobj.name.indexOf(reservedField[6][0])!= -1)){
                  checkSelect(i,objForm);
                    continue;
               }
          if ((tempobj.name.indexOf(reservedField[2][0]) != -1) && (!checkValid(tempobj))){
               return false;
               break;
          }
          continue;
     }
     if(almeno1==0 && sel=="ko"){
         alert("selezionare almeno un campo opzione");
         return false;
       }
     if(radio==true && radio1==0){
        radioName = findName(radioName);
     	alert("selezionare una risposta per "+ radioName);
     	return false;
     }
     if(checkbox==true && check1==0){
     	checkName = findName(checkName);
     	alert("selezionare almeno una risposta per " + checkName);
     	return false;
     }
     return true;
}

//***************************************************************//
//***** funzione di lancio per il controllo dei campi       *****//
//***************************************************************//

function checkValid(component){
     if(component.name.indexOf(reservedField[8][0]) != -1)
     	 return true;
     if(component.name.indexOf(reservedField[3][0]) != -1)
          return checkNumeric(component);
     if(component.name.indexOf(reservedField[7][0]) != -1) {
        ecc="nd"
          return checkNumeric(component); 
         ecc=""    
      }
     if(component.name.indexOf(reservedField[4][0]) != -1)
          return checkEMail(component);
     if(component.name.indexOf(reservedField[11][0]) != -1) {
       ecc="nd"
         return checkDecimal(component);
       ecc=""
      }
     return true;
}

//****************************************//
//***** controllo campo non vuoto    *****//
//****************************************//

function checkNotEmpty(component){

     if(component.value.length == 0){
          var cn = findName(component.name);
          if (cn == false)
            alert("Compilare il campo obbligatorio");
          else
            alert("Compilare il campo obbligatorio " + cn);
          component.focus();
          component.select();
          return false;
     }
     return true;
}

//****************************************//
//***** controllo campo numerico     *****//
//****************************************//

function checkNumeric(component){
     var string = component.value;
     if(string == "")
                return true;

     if(!checkNumericValue(string)){
     if (ecc=="nd"){
     alert("Il campo " + findName(component.name) + " deve essere numerico intero o \"nd\"");
     }
     else{
          alert("Il campo " + findName(component.name) + " deve essere numerico intero");}
          component.focus();
          component.select();
          return false;
     }
     return true;
}

function checkNumericValue(string){
     if ((string=="nd")&&(ecc=="nd")){
        return true;
     }

     var decimale = false;
     for(j=0; j<string.length;j++){
          s = string.charAt(j);
          if(isNaN(parseInt(s))){
               if ((s == ".")&&(decimale == false)){
                    decimale = true;
               }
               else if ((s == ",")&&(decimale == false)){
                    decimale = true;
               }
                     if ((s == ",")&&(ecc=="nd")){
                    return false;
                     break;
               }
               else{
                    return false;
                    break;
               }
          }
     }
     return true;
}

//****************************************//
//***** controllo campo decimale     *****//
//****************************************//

function checkDecimal(component){
     var string = component.value;
     if(string == "")
                return true;

     if(!checkDecimalValue(string)){
     if (ecc=="nd"){
     alert("Il campo " + findName(component.name) + " deve essere numerico o \"nd\"");
     }
     else{
          alert("Il campo " + findName(component.name) + " deve essere numerico");}
          component.focus();
          component.select();
          return false;
     }
     return true;
}

function checkDecimalValue(string){
     if ((string=="nd")&&(ecc=="nd")){
        return true;
     }

     var decimale = false;
     for(j=0; j<string.length;j++){
          s = string.charAt(j);
          if(isNaN(parseInt(s))){
               if ((s == ".")&&(decimale == false)){
                    decimale = true;
               }
               else if ((s == ",")&&(decimale == false)){
                    decimale = true;
               }
               else{
                    return false;
                    break;
               }
               if (decimale) 
                  return true;
          }
     }
     return true;
}


//****************************************//
//***** controllo data               *****//
//****************************************//

function checkDate(objectDay,objectMonth,objectYear){
     var day = objectDay.value.replace(/^\s*|\s*$/g,"");
     var month = objectMonth.value.replace(/^\s*|\s*$/g,"");
     var year = objectYear.value.replace(/^\s*|\s*$/g,"");

       if(day == "gg"){
                objectDay.value = "";
                day = "";
       }
       if(month == "mm"){
                objectMonth.value = "";
                month = "";
       }
       if(year == "aaaa"){
                objectYear.value = "";
                year = "";
       }
       if((day=="") && (month=="") && (year=="")){
                return true;
       }

       if(!checkNumericValue(day)){
          alert("Campo Giorno errato");
          objectDay.focus();
          objectDay.select();
          return false;
     }

     if(!checkNumericValue(month)){
          alert("Campo Mese errato");
          objectMonth.focus();
          objectMonth.select();
          return false;
     }

     if(!checkNumericValue(year)){
          alert("Campo Anno errato");
          objectYear.focus();
          objectYear.select();
          return false;
     }

   if ((month < 1) || (month > 12)) { // check month range
      alert("Il Mese deve essere compreso tra 1 e 12.");
      objectMonth.focus();
      objectMonth.select();

      return false;
   }
   if ((day < 1) || (day > 31)) {
      alert("Il Giorno deve essere compreso tra 1 e 31.");
      objectDay.focus();
      objectDay.select();
      return false;
   }
   if (((month==4) || (month==6) || (month==9) || (month==11)) && (day==31)) {
      alert("Il Mese "+month+" non può avere 31 giorni!")
      objectDay.focus();
      objectDay.select();
      return false
   }
   if (month == 2) { // check for february 29th
      var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
      if (day>29 || (day==29 && !isleap)) {
         alert("Febbraio " + year + " non ha " + day + " giorni!");
           objectMonth.focus();
           objectMonth.select();
         return false;
      }
   }
   if (year < 1000) {
     alert("Campo Anno errato.");
      objectYear.focus();
      objectYear.select();
     return false;
   }
   return true;  // date is valid
}

//****************************************//
//***** controllo campo ora          *****//
//****************************************//

function checkHour(objectHours,objectMinutes){
     var hours = objectHours.value.replace(/^\s*|\s*$/g,"");
     var minutes = objectMinutes.value.replace(/^\s*|\s*$/g,"");
     if((!checkNumericValue(hours))||((hours < 0 || hours > 23))){
          alert("Campo Ore errato");
          objectHours.focus();
          objectHours.select();
      return false;
     }
     if((!checkNumericValue(minutes))||((minutes < 0 || minutes > 59))){
          alert("Campo Minuti errato");
          objectMinutes.focus();
          objectMinutes.select();
      return false;
     }
     return true;
}

//****************************************//
//***** controllo campo Checked      *****//
//****************************************//

function checkChecked(component){
     if(!component.checked){
          alert("selezionare il campo obbligatorio: " + findName(component.name));
          component.focus();
          component.select();
          return false;
     }
     return true;
}

//****************************************//
//***** controllo campo Selected     *****//
//****************************************//

function checkSelected(component){
     if(component.value == ""){
          alert("selezionare un valore per il campo obbligatorio: " + findName(component.name));
          component.focus();
          return false;
     }
		 return true;
}

//****************************************//
//***** controllo campo email        *****//
//****************************************//

function checkEMail(component){
     if(component.value.length == 0){
         return true;
     }
     if(component.value.indexOf('@') == -1 ||
          component.value.indexOf('@') == 0 ||
          component.value.indexOf('@') == (component.value.length -1) ||
          component.value.indexOf('.') == -1 ||
          component.value.indexOf('.') == (component.value.length -1)){
          alert("Attenzione: l'indirizzo e-mail non è corretto");
          component.focus();
          component.select();
          return false;
     }
     return true;
}


function checkEMail2(component){
     var emailRequired = new Array("@",".","it","abi");
     for (x=0; x<emailRequired.length; x++)
     {
         if (component.value.indexOf(emailRequired[x]) == -1)
         {
              alert("Attenzione: l'indirizzo E-MAIL non è corretto.");
              x = emailRequired.length;
              component.select();
              component.focus();
              return false;
         }
     }
     return true;
}

//*******************************************************//
//***** controllo di riempimento di un campo almeno *****//
//*******************************************************//

function checkAtLeastOne(objForm){
     for (i=0; i<objForm.elements.length; i++){
          var tempobj=objForm.elements[i];

         if ((tempobj.type.indexOf("hidden") != -1)||
               (tempobj.type.indexOf("button") != -1)||
               (tempobj.type.indexOf("submit") != -1)||
               (tempobj.type.indexOf("reset") != -1)||
               (tempobj.type.indexOf("image") != -1))
               continue;

         if (objForm.elements[i].value == "")
                    continue;
               else{
                    return true;
                    break;
               }
          }
          alert("Compilare almeno uno dei campi");
          return false;
}

function textCounter(field, countfield, maxlimit) {
          if (field.value.length > maxlimit) // if too long...trim it!
               field.value = field.value.substring(0, maxlimit);
          else
               countfield.value = maxlimit - field.value.length;
}


//*******************************************************//
//*     seleziona/deseleziona un insieme di checkbox    *//
// funzioni usate nella pagina mailing di Organi Tecnici //
//*******************************************************//

function selezionaTutti(form) {
	var elem;
	for (var i = 0; i < form.elements.length; i++) {
		elem = form.elements[i];
		if (elem.name) {
			if (elem.name.match("user_") != null) {
				if (!elem.disabled) {
					elem.checked = true;
				}
			}
		}
	}
	return true;
}

function deselezionaTutti(form) {
	var elem;
	for (var i = 0; i < form.elements.length; i++) {
		elem = form.elements[i];
		if (elem.name) {
			if (elem.name.match("user_") != null) {
				if (!elem.disabled) {
					elem.checked = false;
				}
			}
		}
	}
	return true;
}

//*******************************************************//
//***** controllo delle oneselect                   *****//
//*******************************************************//
function checkSelect(i,objForm)
{
      if ((TheForm.elements[i].selectedIndex == 0))
      {
       sel="ko"
       return true;
      }
      else
      {
      almeno1=almeno1+1
       return true;
      }
}

function checkRadio(component) {
 	 if(component.checked == true) {
	    radio1 = radio1+1;
	    return true;
	    }
	 else {
	 	radioName = component.name;
	 		 return true;
	 }

}

function checkCheckbox(component) {
 	 if(component.checked == true) {
	    check1 = check1+1;
	    return true;
	    }
	 else {
	 	checkName = component.name;
	 	return true;
	 }

}

function checkLengthTextArea(component) {
	var string = component.value;
	lun = string.length;
	if (lun > 500) {
		alert("Il campo " + findName(component.name) + " non può superare i 500 caratteri");
		return false;
	}
	else 
		return true;
}

//*******************************************************//
//** Funzioni per gestione associazione utenti-gruppi  **//
//*******************************************************//

function moveItemFromTo(fromObj, toObj, hiddenSelected, isForAddGroup) {
 for (var selIndex = fromObj.length - 1; selIndex >= 0; selIndex--) {
    // Is this option selected e non e` la voce <Nessun gruppo>?
    if (fromObj.options[selIndex].selected && fromObj.options[selIndex].value != -1) {
       // Per rimuovere la voce <Nessun gruppo> 
       if (toObj.options[0].value == -1)
	 toObj[0] = null;
       // Get the text and value for this option.
       var newText  = fromObj.options[selIndex].text;
       var newValue = fromObj.options[selIndex].value;

       // Create a new option, and add to the other select box.
       var newOption = new Option(newText, newValue)
       toObj[toObj.length] = newOption;

       // Delete the option in the first select box.
       fromObj[selIndex] = null;
    }
 }
 // Per aggiungere la voce <Nessun gruppo>
 if (fromObj.length == 0) {
   var newOption = new Option("<Nessun gruppo>", -1)
   fromObj[fromObj.length] = newOption;
 }
 if (isForAddGroup)
   addValuesOfTo(toObj, hiddenSelected);
 else
   removeValuesOfFrom(toObj, hiddenSelected);
}

function addValuesOfTo(selectedItems, hiddenSelected) {
  hiddenSelected.value = "";
  for (var selIndex = selectedItems.length - 1; selIndex >= 0; selIndex--)
    hiddenSelected.value += ((hiddenSelected.value.length > 0) ? "," : "") + selectedItems.options[selIndex].value;
}

function removeValuesOfFrom(selectedItems, hiddenSelected) {
  if (hiddenSelected.value.length == 1) {
    hiddenSelected.value = "";
  } else {  
    for (var selIndex = selectedItems.length - 1; selIndex >= 0; selIndex--){
      var index = hiddenSelected.value.indexOf(selectedItems.options[selIndex].value);
      if (index != -1) { 
	if (index == 0){
	  var str3 = hiddenSelected.value.substring(index + 2);
	  hiddenSelected.value = str3;
	} else {
	  var str1 = hiddenSelected.value.substring(0, index - 1);
	  var str2 = hiddenSelected.value.substring(index + 1);
	  var str3 = str1.concat(str2);
	  hiddenSelected.value = str3;
	}
      }
    } 
  }
}


