﻿ ///<reference path="jquery-vsdoc.js" />

//validazione.js 
//revisionato da GA il 19/01/2010

//Controllo se ho jQuery
if (typeof (jQuery) == "undefined") {
    alert("jQuery non trovato!!");
}

//variabili globali utilizzate da tutte le funzioni
var _errore = true;
var _html = '';

// Funzione di verifica del form presente nella pagina
function CheckForm(_param1 ,_param2 ,_param3) {
        ///	<summary>
        ///	    Funzione JavaScript per la validazione di form.
        ///	</summary>
        ///	<param name="_param1" type="String">
        ///		div nel quale visualizzare l'errore
        ///	</param>
        ///	<param name="_param2" type="String">
        ///		tag dove scrivere l'errore 
        ///	</param>
        ///	<param name="_param3" type="String">
        ///		div contenente i controlli da validare
        ///	</param>
        ///	<returns type="boolean" />

        var _divErrore = '';
        var _msgErrore = '';
        var _divDaValidare = '';
        var _element;
        // param 1: div nel quale visualizzare l'errore (quello al quale viene applicata la classe 'errore')
        // param 2: tag dove scrivere l'errore (una label oppure lo stesso valore di param 1) 
        // param 3: div da validare (each di ogni div con id passato a parametro)  
        if (_param1 != null || _param2 != null || _param3 != null) {
            _divErrore = _param1;
            _msgErrore = _param2;
            _divDaValidare = _param3;
            _errore = true;
            _html = '';

            jQuery('#' + _divDaValidare + ' [errore]').each(function() {
                // Verifico il tipo di oggetto
                _element = this;
                switch (this.tagName) {
                    case "INPUT": case "SELECT": case "TEXTAREA":
                        // asp:TextBox -> textbox
                        // input type="text" -> textbox
                        // input type="password" -> textbox
                        // asp:DropDownList -> combobox
                        // select -> combobox
                        
                        // effettuo il controllo sull'obbligatorieta del campo corrente
                        // imposto gia la variabili di errore con il risultato del controllo
                        _element = checkObbligatorieta(_element);
                        
                        // controllo anche se il campo corrente necessita di un controllo
                        // piu specifico tramite regEx 
                        // anche imposto gia la variabili di errore con il risultato del controllo               
                        _element = checkRegularExpression(_element);

                        break;

                    case "TABLE": case "DIV":
                        // asp:RadioButtonList -> radio button
                        // input type="radio" -> radio button
                        // input type="checkbox" -> checkbox
                        // asp:CheckBoxList -> checkbox
                        if (jQuery('input:radio, input:checkbox', jQuery(_element)).length > 0) {
                             _element = checkObbligatorietaRadioCheckbox(_element);
                        // infragistics -> webDataChooser
                        } else if (jQuery('input:text', jQuery(_element)).length > 0) {
                             _element = checkObbligatorietaDateChooser(_element);
                        }
                        break;

                    default:
                        //alert(_element.tagName);
                        break;
                }
            });
            
           
            // Se ci sono errori visualizzo gli errori
            if (_errore == false) {
               jQuery("#" + _divErrore).show();
               jQuery("#" + _msgErrore).html(_html);
                       }
            else {
               jQuery("#" + _divErrore).hide();
            }

            return _errore;
        }
        else {
         //ritorno false se i parametri passati alla funzione mancano o non sono corretti
           return false
        }
    }

function checkObbligatorieta(element){
   //Controllo se il campo e' obbligatorio
   if (jQuery(element).hasClass('obbligatorio')) {
       // Verifico che il value dell'oggetto sia valorizzato, in caso contrario gli applico l'attributo "errore"

       if (element.tagName == 'INPUT' || element.tagName == 'TEXTAREA' || element.tagName == 'SELECT') {
           if (jQuery.trim(jQuery(element).val()) == '') {
               if (_html != '') {
                   _html = _html + '<br />';
               }
               _html = _html + jQuery(element).attr('errore');
               jQuery(element).addClass('errore');
               _errore = false;
           }
           else {
               jQuery(element).removeClass('errore');
           }
       } 
   }
   else {
       jQuery(element).removeClass('errore');
   }
  return element;
}

function checkObbligatorietaRadioCheckbox(element){
    //controllo l'obbligatorieta di campi radioButton e checkbox
    _checked = false;

    //effettuo il controllo solo sui campi obbligatori
    if (jQuery(element).hasClass('obbligatorio')) {
        jQuery('input:radio, input:checkbox', jQuery(element)).each(function() {
        
            // Verifico che ci sia almeno una checkbox a true, in caso contrario restituisco il tag "errore"
            if (jQuery(this).attr('checked') == true) {
                 _checked = true;
                }
        });
    } else {
        // se non e' un campo obbligatorio lo rendo valido
        _checked = true;
    }

    if (_checked == false) {
        if (_html != '') {
            _html = _html + '<br />';
        }
        _html = _html + jQuery(element).attr('errore');
        jQuery(element).addClass('errore');
        _errore = false;
    }
    else {
        jQuery(element).removeClass('errore');
    }
    return element;
}

function checkObbligatorietaDateChooser(element){
    //controllo l'obbligatorieta di campi infragistic.webDateChooser
    if (jQuery(element).hasClass('obbligatorio')) {
        if (jQuery.trim(jQuery(jQuery(element).find('input')).val()) == '') {
            if (_html != '') {
                _html = _html + '<br />';
            }
            _html = _html + jQuery(element).attr('errore');
            jQuery(jQuery(element).find('input')).addClass('errore');
            _errore = false;
        } else {
            jQuery(jQuery(element).find('input')).removeClass('errore');
        }
    }
    return element;
}


function checkRegularExpression(element){
  //Controllo che il campo non abbia gia dato errore e non sia vuoto (cioe' o è un campo obbligatorio compilato o non e' obbligatorio ma e' comunque stato compilato) 
  if ((!jQuery(element).hasClass('errore')) && (jQuery(element).val() != '')) {
      if (jQuery(element).attr('TipoCampo') != '') {
          var regEx = '';
          var err = '';
          //controllo il tipo di campo se e' specificato, per utilizzare la regEx giusta
          switch (jQuery(element).attr('TipoCampo')) {
            case "email":
               //email
               regEx = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
               err = "Indirizzo e-mail non valido";
               break;
            case "codiceFiscale":
               //codice fiscale
               regEx = /^[a-zA-Z]{6}\d{2}[a-zA-Z]\d{2}[a-zA-Z]\d{3}[a-zA-Z]$/;
               err = "Codice fiscale non valido";
               break;
            case "partitaIva":
               //partita IVA
               regEx = /^[\d]{11}$/;
               err = "Partita IVA non valida";
               break;
            case "numero":
               //numeri senza decimali
               regEx = /^[-]?\d+$/; // /^[0-9\ ]+$/;
               err = "Numero non valido";
               break;
           case "numeroDecimale":
               //numeri con decimali
               regEx = /^[-]?\d+(\,\d+)?$/; // /^\d+(\,\d{1,2})?$/;
               err = "Numero decimale non valido";
               break;
            case "numeroSenzaSegno":
               //numeri senza decimali e senza segno
               regEx = /^\d+$/;
               err = "Numero senza segno non valido";
               break;
           case "numeroDecimaleSenzaSegno":
               //numeri con decimali e senza segno
               regEx = /^\d+(\,\d+)?$/;
               err = "Numero decimale senza segno non valido";
               break;
           case "lettere":
               //lettere
               regEx = /^[a-zA-Z]?$/;
               err = "Valore non valido, è possibile inserire solo lettere";
               break;
           case "lettere":
               //lettere
               regEx = /^[a-zA-Z]?$/;
               err = "Valore non valido, è possibile inserire solo lettere";
               break;
           case "lettereSpazi":
               //lettere
               regEx = /^[a-zA-Z\s]+$/;
               err = "Valore non valido, è possibile inserire solo lettere e spazi";
               break;
           case "lettereNumeriSpazi":
               //lettere
               regEx = /^[a-zA-Z\s0-9]+$/;
               err = "Valore non valido, è possibile inserire solo lettere, numeri e spazi";
               break;
           case "casellaMail":
               //lettere
               regEx = /^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]$/;
               err = "Casella e-mail non valida";
               break;
		   case "dominioMail":
               //testo solo il dominio di un'email
               regEx = /^@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/;
               err = "Dominio e-mail non valido";
               break;
            case "sitoWeb":
               //testo il sito web
               regEx = /^((http|https|ftp):\/\/)?(((www\.)?[^ ]+\.[com|org|net|edu|gov|us|it])|([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+))([^ ]+)?$/;
               err = "Sito web non valido";
               break;
            case "codATECO":
               //testo il codice ATECO
               regEx = /^\d{2}\.\d{2}\.\d{2}$/;
               err = "Codice ATECO non valido";
               break;
            case "campoData":
               // testo la data
               // dd/MM/yyyy with leap years 100% integrated Valid years : from 1900 to 9999.
               // Matches  	    29/02/2000 | 30/04/2003 | 01/01/2003
               // Non(-Matches)    29/02/2001 | 30-04-2003 | 1/1/1899
               // Aggiunta da MP in data 02/11/2009 

               regEx = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((1[6-9]|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;
               err = "Formato data (gg/mm/aaaa) non valido";
               break;
            default :
            
               break;
          }   

           //Prossimamente   AMEX, Visa e Mastercard ----> ^((4\d{3})|(5[1-5]\d{2}))(-?|\040?)(\d{4}(-?|\040?)){3}|^(3[4,7]\d{2})(-?|\040?)\d{6}(-?|\040?)\d{5}
          
           //controllo se esiste un messaggio di errore personalizzato,
           //altrimenti ne ho gia impostato uno standard nella select della regEx
           if (jQuery(element).attr('validita') != null) {
                  err = jQuery(element).attr('validita');
              } else if (!jQuery(element).hasClass('obbligatorio')) {
                  err = jQuery(element).attr('errore');
              }
          
           if (regEx != '') {
              if (!regEx.test(jQuery(element).val())) {
                  if (_html != '') {
                      _html = _html + '<br />';
                  }
                  _html = _html + err;
                  jQuery(element).addClass('errore');
                  _errore = false;
              }
           }
           else {
              jQuery(element).removeClass('errore');
           }
      }
  }  
  return element;
}


