YAHOO.widgets.RegisterAccount = function(elIds) 
{
  this.elIds = elIds;
};

YAHOO.widgets.RegisterAccount.prototype =
{
  validate: function()
  {
    var callback = 
    {
      success: function(o)
      {
        var responseData = eval( '(' + o.responseText + ')' );

        var errors = responseData.errors;
        
        var isError = false;
        
        this.clearErrors();
        
        /* helper ajax script to do validations we can't do in js */
        for (var i in errors) {
          isError = true;
          if (i == 'birthday') {
            YUD.addClass(['birth_month','birth_day','birth_year'], 'error');
          }
          else {
            YUD.addClass(i, 'error');
          }
          YUD.get(i+'_error').innerHTML = '<span>!</span>'+errors[i];
        }
        
        /* check for missing email */
        if (YUD.get('email').value.replace(/^\s*|\s*$/g,"") == '') {
          isError = true;
          YUD.addClass('email', 'error');
          YUD.get('email_error').innerHTML = '<span>!</span>'+JS_MSG.translate('Please enter a valid email address.');
        }
        
        /* check for missing username */
        if (YUD.get('username').value.replace(/^\s*|\s*$/g,"") == '') {
          isError = true;
          YUD.addClass('username', 'error');
          YUD.get('username_error').innerHTML = '<span>!</span>'+JS_MSG.translate('Please enter a username between 3 and 10 characters long.');
        }        
        
        /* check for missing password */
        var password = YUD.get('password').value.replace(/^\s*|\s*$/g,"");
        var confirm_password = YUD.get('confirm_password').value.replace(/^\s*|\s*$/g,"");
        if (password.length < 5 || password.length > 45) {
          isError = true;
          YUD.addClass('password', 'error');
          YUD.addClass('confirm_password', 'error');
          YUD.get('password_error').innerHTML = '<span>!</span>'+JS_MSG.translate('Please enter a password between 5 and 45 characters long.');
        }
        /* check for mismatched password */
        else if (password != confirm_password) {
          isError = true;
          YUD.addClass('password', 'error');
          YUD.addClass('confirm_password', 'error');
          YUD.get('password_error').innerHTML = '<span>!</span>'+JS_MSG.translate('Password and confirm password values do not match.');
        }
        
        /* Terms of service checkbox must be checked */
        if (!YUD.get('tos_pp').checked) {
          isError = true;
          YUD.get('tos_pp_error').innerHTML = '<span>!</span>'+JS_MSG.translate('You must agree to the Terms of Use and Privacy Notice to use midomi.');
        }
        
        /* check birthday */
        if (YUD.get('birth_month').selectedIndex == 0 || YUD.get('birth_day').selectedIndex == 0 || YUD.get('birth_year').selectedIndex == 0) {
          isError = true;
          if (YUD.get('birth_month').selectedIndex == 0) {
            YUD.addClass('birth_month', 'error');
          }
          if (YUD.get('birth_day').selectedIndex == 0) {
            YUD.addClass('birth_day', 'error');
          }
          if (YUD.get('birth_year').selectedIndex == 0) {
            YUD.addClass('birth_year', 'error');
          }                    
          YUD.get('birthday_error').innerHTML = '<span>!</span>'+JS_MSG.translate('Please enter your birthday.');
        }
        
        /* if no validation errors, then submit for real */
        if (!isError) {
          var callback2 =
          {
            success: function(o)
            {
              /* redirect to add_fanclubs page */
              var result = eval( '(' + o.responseText + ')' );
              if (result.status == 'PASS') {
                var post_login_url = result['post_login_url'];
                if (post_login_url === null || post_login_url == '') {
                  window.location = 'index.php';
                  return;
                }
                window.location = post_login_url;
              }
              else {
                window.location = 'index.php?action=main.register_account';
              }
            },
            failure: function(){},
            scope: this
          }
          
          var rsa = new RSAKey();
          rsa.setPublic(YUD.get('rsa_modulus').value, YUD.get('rsa_exponent').value);
          YUD.get('password_enc').value = hex2b64(rsa.encrypt(YUD.get('password').value));
          YUD.get('confirm_password_enc').value = hex2b64(rsa.encrypt(YUD.get('confirm_password').value));       
          
          YUC.resetFormState();
          YAHOO.util.Connect.setForm(YUD.get('register_form'));
          YUC.asyncRequest('POST', 'index.php?action=main.register_account_submit', callback2);
          YUC.resetFormState(); 
        }
        else {
          YUD.removeClass('submitLink', 'hidden');
          YUD.addClass('loadingMessage', 'hidden');
        }
      },
      failure: function(){},
      scope: this
    };
    
    YUC.resetFormState();
    YAHOO.util.Connect.setForm(YUD.get('register_form'));
    YUC.asyncRequest('POST', 'index.php?action=main.register_account_validate', callback);
    YUC.resetFormState();  
  },
  
  clearErrors: function()
  {
    YUD.removeClass(['email','username','password','confirm_password','birth_month','birth_day','birth_year'], 'error');
    YUD.get('email_error').innerHTML = '';
    YUD.get('username_error').innerHTML = '';
    YUD.get('password_error').innerHTML = '';
    YUD.get('birthday_error').innerHTML = '';
    YUD.get('tos_pp_error').innerHTML = '';
  },
  
  submitRegistration: function()
  {
    YUD.addClass('submitLink', 'hidden');
    YUD.removeClass('loadingMessage', 'hidden');
    this.validate();
  }
};