$(function(){
   var errores =  {
      email_invalido: 'El e-mail que has introducido no es válido.',
      email_norepetido: 'Debes volver a introducir el e-mail en el campo “Repetir el e-mail”',
      email_nocoincide: 'El e-mail que has introducido en el campo “Repetir el e-mail” no coincide con el primero. ¿Puedes revisarlo?',
      password_iguales: 'Las contraseñas deben coincidir y tener más de 6 caracteres.',
      nombre_falta: '¿Cómo te llamas?',
      nombre_incorrecto: 'Parece que el nombre que has introducido no es correcto. Debe tener entre 2 y 25 caracteres. ¿Puedes revisarlo?',
      apellido1_falta: 'Introduce tu 1r apellido.',
      apellido1_incorrecto: 'Parece que tu 1r apellido no es correcto. Debe tener entre 2 y 25 caracteres. ¿Puedes revisarlo?',
      apellido2_falta: 'Introduce tu 2º apellido.',
      apellido2_incorrecto: 'Parece que tu 2º apellido no es correcto. Debe tener entre 2 y 25 caracteres. ¿Puedes revisarlo?',
      sexo_falta: '¿Eres hombre o mujer?',
      provincia_falta: 'Debes seleccionar tu provincia.',
      localidad_falta: '¿Cuál es el nombre de tu localidad?',
      tipoVia_falta: 'Indícanos un tipo de vía, por favor.',
      direccion_falta: 'Indícanos el nombre de tu calle, por favor.',
      numeroVia_falta: '¿En qué número vives?',
      apodo_falta: '¿No tienes ningún apodo?',
      apodo_letra: 'Tu apodo ha de empezar por letra',
      codigoPostal_invalido: 'Revisa el código postal. No es válido.',
      codigoPostal_provincia: 'La provincia y el código postal que nos indicas no coinciden.',
      telefono_invalido: 'El número de teléfono no es correcto. ¿Puedes revisarlo?',
      movil_invalido: 'El teléfono móvil que has introducido es incorrecto. ¿Puedes revisarlo?',
      telefono_o_movil: 'Debes introducir como mínimo un teléfono de contacto. ¿Puedes revisarlo?',
      apodo_usado: 'El apodo que has elegido ya está registrado.',
      aceptaLegal_falta: 'Olvidas aceptar la Política de Privacidad.',
      consumidor_falta: 'Debes seleccionar el tipo de cerveza que consumes habitualmente.',
      sms_invalido: 'Si quieres que te mantengamos al día vía sms, debes indicarnos tu móvil.',
      email_terra: 'Te recomendamos que utilices otra dirección de correo electrónico. Estamos experimentando dificultades ajenas a nuestra plataforma en el registro de los usuarios de Terra y Telefónica.',
      email_usado: 'Lo sentimos, pero el e-mail que nos indicas ya está registrado en mahou.es. Indícanos otro, por favor.',
      nif_usado: 'Nos consta que ya existe un usuario registrado con este NIF. ¿Ya te habías registrado?',
      nif_invalido: 'Por favor, introduce un número de DNI válido.',
      fecha_incorrecta: 'La fecha debe ser válida y tienes que ser mayor de 18 años.',
      movil_usado: 'El teléfono móvil que nos indicas ya está registrado en mahou.es. Comprueba que esté bien escrito, por favor.'
   }
   
   $.validator.addMethod("either_phone_or_mobile", function() { 
      return $('#telefono').val()!='' || $('#movil').val()!='' 
   })

   $.validator.addMethod("needs_mobile", function(value, element) { 
      return !($(element).is(':checked') && $('#movil').val()=='')
   })

   $.validator.addMethod("local_phone", function(value, element) { 
      var v=value.replace(/ /g,'')
      if(v=='') return true
      return /^9[0-9]{8}$/.test(v)
   })

   $.validator.addMethod("mobile_phone", function(value, element) { 
      var v=value.replace(/ /g,'')
      if(v=='') return true
      return /^6[0-9]{8}$/.test(v)
   })

   $.validator.addMethod("needs_adult", function(value, element) { 
      var parse=function(id) { return parseInt($(id).val(),10) } 
      var d=parse('#bornday')
      var m=parse('#bornmonth')-1
      var y=parse('#bornyear')
      var f=new Date(y,m,d)
      if(f.getDate()!=d || f.getMonth()!=m || f.getFullYear()!=y) {
         log('incorrect parsing of date: '+f+' '+d+'/'+(m+1)+'/'+y)
         return false
      }
      var today=new Date()
      var limit=new Date(today.getFullYear()-18,today.getMonth(),today.getDate())
      if(limit.getTime()<f.getTime()) {
         log('not an adult: '+f)
         return false
      }
      log('really an adult: '+f)
      return true
   })

   $.validator.addMethod("select_not_negative", function(value, element) { 
      if(value=="-1" || value == "") return false
      return true
   })

   $.validator.addMethod("codigo_postal", function(value, element) { 
      return /^[0-9]{5}$/.test(value)
   })

   $.validator.addMethod("empieza_letra", function(value, element) { 
      return /^[a-zA-ZáéíóúàèìòùÁÉÍÓÚÀÈÌÒÙñÑçÇ]/.test(value)
   })

// faltan tratar lo siguiente: (el servidor mandará la información)
// apodo_usado: Apodo elegido
// email_usado: E-mail registrado en mahou.es
// nif_usado: El NIF ya existe
// movil_usado: El móvil ya existe
// codigoPostal_provincia: El código postal no corresponde a la provincia        
// email_terra: Error terra y telefónica

   $("#registro").validate({
      showErrors: function(errors) {
         $('.showerror').each(function() { $(this).removeClass('showerror') })
         for(var i in errors) {
            log('adding showerror class to '+i+': '+errors[i])
            $('[name='+i+']').addClass('showerror')
         }

         orden_campos=['email', 'email2', 'clave', 'repiteClave', 'sexo',
            'nombre', 'apellido1', 'apellido2', 'diaNacimiento', 'mesNacimiento',
            'anoNacimiento', 'nif', 'tipoVia', 'direccion', 'numeroVia', 
            'restoDireccion', 'codigoPostal', 'localidad', 'provincia', 
            'telefono', 'movil', 'apodo', 'consumidor', 'aceptaComunicacionesEmail', 
            'aceptaComunicacionesMovil', 'aceptaLegal']
         for(var i=0;i<orden_campos.length;i++) {
            if(errors[orden_campos[i]]!=undefined) {
               log('first error is: '+errors[orden_campos[i]])
               mensaje.simple(errors[orden_campos[i]])
               break
            }
         }
      },
      onfocusout: false, // prevents validation on blur
      onkeyup: false, //prevents validation on key 
      onclick: false, // prevents validation on clicking
      submitHandler: function(form) {
         $('#registro input.button').attr('src','/img/bt-enviando.png')
         var any_error=false
         var f=$(form)
         $.ajax({
            type: f.attr('method'),
            url: f.attr('action'),
            data: f.serialize(),
            success: function(a) {
               $('#registro input.button').attr('src','/img/bt-aceptar.png')
               if(any_error) return
               var errores=xml_to_errors(a)
               if(errores.length==0) {
                  if($('#registro').attr('action').indexOf('modificar') != -1) {
                     mensaje.by_id('#datosmodificados', function() {
                        document.location.href = $('.closeregister a').attr('href');
                     });
                  } else {
                     mensaje.by_id('#registrocorrecto', function() {
                        document.location.href = $('.closeregister a').attr('href');
                     });
                  }
               } else {
                  mensaje.simple(errores[0])
               }
            },
            //timeout: 5000,
            error: function(request,error) {
               any_error=true
               mensaje.by_id('#problemservidor')
               $('#registro input.button').attr('src','/img/bt-aceptar.png')
            }
         })
      },
      rules: {
         email: { required: true, email: true},
         email2: { required: true, equalTo: "#email" },
         clave: { required: true, minlength: 6 },
         repiteClave: { required: true, equalTo: "#password" },
         nombre: { required: true, rangelength: [2, 25] },
         apellido1: { required: true, rangelength: [2, 25] },
         sexo: { required: true },
         provincia: { select_not_negative: true },
         localidad: { required: true },
         tipoVia: { select_not_negative: true },
         direccion: { required: true },
         numeroVia: { required: true },
         telefono: { either_phone_or_mobile: true, local_phone: true },
         movil: { either_phone_or_mobile: true, mobile_phone: true },
         aceptaComunicacionesMovil: { needs_mobile: true },
         aceptaLegal: { required: true },
         consumidor: { select_not_negative: true }, // not -1, but just in case
         diaNacimiento: { needs_adult: true },
         mesNacimiento: { needs_adult: true },
         anoNacimiento: { needs_adult: true },
         nif: { required: true },
         codigoPostal: { codigo_postal: true }, 
         apodo: { required: true, empieza_letra: true }
      },
      messages: {
         email: errores.email_invalido,
         email2: {
            required: errores.email_norepetido,
            equalTo: errores.email_nocoincide
         },
         clave:  errores.password_iguales,
         repiteClave: errores.password_iguales,
         nombre: { 
            required: errores.nombre_falta, 
            rangelength: errores.nombre_incorrecto
         },
         apellido1: { 
            required: errores.apellido1_falta, 
            rangelength: errores.apellido1_incorrecto
         },
         apellido2: { 
            required: errores.apellido2_falta, 
            rangelength: errores.apellido2_incorrecto
         },
         sexo: errores.sexo_falta,
         provincia: errores.provincia_falta,
         localidad: errores.localidad_falta,
         tipoVia: errores.tipoVia_falta,
         direccion: errores.direccion_falta,
         numeroVia: errores.numeroVia_falta,
         telefono: { 
            either_phone_or_mobile: errores.telefono_o_movil,
            local_phone: errores.telefono_invalido 
         },
         movil: { 
            either_phone_or_mobile: errores.telefono_o_movil,
            mobile_phone: errores.movil_invalido 
         },
         aceptaComunicacionesMovil: errores.sms_invalido,
         aceptaLegal: errores.aceptaLegal_falta,
         consumidor: errores.consumidor_falta,
         diaNacimiento: errores.fecha_incorrecta,
         mesNacimiento: errores.fecha_incorrecta,
         anoNacimiento: errores.fecha_incorrecta,
         nif: errores.nif_invalido,
         codigoPostal: errores.codigoPostal_invalido,
         apodo: { 
            required: errores.apodo_falta,
            empieza_letra: errores.apodo_letra
         }
      }
   })

   $("#bornday").focus(function() { 
      var self=$(this)
      if(self.val()=='dd') self.val('')
   })
   $("#bornday").blur(function() { 
      var self=$(this)
      if(self.val()=='') self.val('dd')
   })
   $("#bornmonth").focus(function() { 
      var self=$(this)
      if(self.val()=='mm') self.val('')
   })
   $("#bornmonth").blur(function() { 
      var self=$(this)
      if(self.val()=='') self.val('mm')
   })
   $("#bornyear").focus(function() { 
      var self=$(this)
      if(self.val()=='aaaa') self.val('')
   })
   $("#bornyear").blur(function() { 
      var self=$(this)
      if(self.val()=='') self.val('aaaa')
   })
})

