function Form(form){
    this._msjs = {
                   'required':'Información requerida.',
                   'mail':'Formato incorrecto.',
                   'date':'Error: Verifique fecha ingresada y que tenga el formafo: '
                 };
    this._errClass = 'err';
    this._tagMsj   = 'strong';

    this.form = form;
    this._err = 0;
    // Validar mail
    this.isMail = function(str) {var filter=/^([\w\-\.]+)@((\[([0-9]{1,3}\.){3}[0-9]{1,3}\])|(([\w\-]+\.)+)([a-zA-Z]{2,4}))$/;return(filter.test(str));						}
    this._validMails = function(fields){
                         var f;
                         for(var i in fields){
                           f = fields[i];
                           if(f.val()!=''&&!this.isMail(f.val())){
                             this._err++;
                             this.ShowErr(f,this._msjs.mail);
                           }else if(f.val()!=''&&!f.hasClass('v_required')){
                             this.ClearErr(f);
                           }
                         }
                       }
    /* Validar fechas  */
    this._dateFormat = 'dd/mm/yyyy';
    this.isDate     = function(str){var format=this._dateFormat;var result=false,fD='(0?[1-9]|([1-2][0-9])|(3[0-1]))',fM='((0?[1-9])|(1[0-2]))',fY='[0-9]{4}';var regExp=format.replace('dd',fD);regExp = regExp.replace('mm',fM);regExp = regExp.replace('yyyy',fY);var filter = new RegExp('^'+regExp+'$');result = filter.test(str);if(result){var sep=format.replace(/[ a-z]/g,'');sep=sep.substring(0,1);var arrF = format.split(sep);var arrD = str.split(sep);var dd,mm,yyyy;for(var i=0;i<arrF.length;i++){switch(arrF[i]){case 'dd':dd = parseInt(arrD[i]);break;case 'mm':mm = parseInt(arrD[i]); break;case 'yyyy':yyyy = parseInt(arrD[i]);break;}}result=this._ckeckDate(mm,dd,yyyy);}return result;}
    this._ckeckDate  = function(mm,dd,yyyy){switch(mm){case 4:case 6:case 9:case 11:if(dd==31)return false;break;case 2:if(29<dd||(dd==29&&!this._Bisiesto(yyyy)))return false;break;}return true;}
    this._Bisiesto   = function (year){return(((year%4==0)&&(year%100!=0))||(year%400==0))?1:0;}
    this._validDate  = function(fields){
                         var f;
                         for(var i in fields){
                           f = fields[i];
                           if(f.val()!=''&&!this.isDate(f.val())){
                             this._err++;
                             this.ShowErr(f,this._msjs.date+this._dateFormat);
                           }else if(f.val()!=''&&!f.hasClass('v_required')){
                             this.ClearErr(f);
                           }
                         }
                       }

    this._validRequired = function(fields){
                         var f;
                         for(var i in fields){
                           f = fields[i];
                           if(f.val()==''){
                              this._err++;
                              this.ShowErr(f,this._msjs.required);
                           }else{
                             this.ClearErr(f);
                           }
                         }
                       }
    this.ShowErr = function(elem,msj){
                     var fC = elem.parent();
                     fC.addClass(this._errClass);
                     $(this._tagMsj,fC).remove();
                     var mC = $('<'+this._tagMsj+'></'+this._tagMsj+'>');
                     mC.hide();
                     mC.html(msj);
                     mC.appendTo(fC).fadeIn('slow').css({'display':'block'});
                   }
    this.ClearErr = function(elem){
                     var fC = elem.parent();
                     fC.removeClass(this._errClass);
                     $(this._tagMsj,fC).remove();
                   }
    this._validar = function(clase){
                       var fields = new Array();
                       var i = 0;
                       $('.'+clase,this.form).each(function(){
                         fields[i++] = $(this);
                       });
                       switch(clase){
                           case 'v_mail':
                                this._validMails(fields);
                                break;
                           case 'v_date':
                                this._validDate(fields);
                                break;
                           case 'v_required':
                                this._validRequired(fields);
                                break;
                       }
                    }
    this._validar('v_required');
    this._validar('v_mail');
    this._validar('v_date');

    if(this._err==0){
      this.form.unbind('submit');
      this.form.submit();
    }else{
      /*Si no valido posisiono la pagina en el primer campo que fallo*/
      var al=$('.'+this._errClass,this.form).eq(0).position();var d=$(document);var sE=parseInt(al.top);var sD=d.scrollTop();var wH=$(window).height();sE-=30;
      if(sE<=sD){var timerInter = setInterval(function(){sD = Math.floor((sD+sE)/2);d.scrollTop(sD);if(sD<=sE)clearInterval(timerInter);},100);}else if((sD+wH)<=sE){var timerInter=setInterval(function(){sD=Math.ceil((sD+sE)/2);d.scrollTop(sD);if(sE<=sD)clearInterval(timerInter);},100);}
    }
}