UserAuthorization = function(
  callbackAuthorizationSuccess, callbackAuthorizationError, callbackLogoutSuccess,
  callbackLogoutError
)
{
  if( typeof( callbackAuthorizationSuccess ) == 'undefined' )
  {
    callbackAuthorizationSuccess = function() { };
  }
  
  if( typeof( callbackAuthorizationError ) == 'undefined' )
  {
    callbackAuthorizationError = function() { };
  }

  if( typeof( callbackLogoutSuccess ) == 'undefined' )
  {
    callbackLogoutSuccess = function() { };
  }
  
  if( typeof( callbackLogoutError ) == 'undefined' )
  {
    callbackLogoutError = function() { };
  }


  this.callbackAuthorizationSuccess = callbackAuthorizationSuccess;
  this.callbackAuthorizationError = callbackAuthorizationError;
  this.callbackLogoutSuccess = callbackLogoutSuccess;
  this.callbackLogoutError = callbackLogoutError;

  this.initiateAuthorizationLink( 'authorization-link' );
  this.initiateLogoutLink( 'logout-link' );
}


UserAuthorization.prototype.initiateAuthorizationLink = function( linkClass )
{
  var UserAuthorizationInstance = this;

  $( '.' + linkClass ).click(
    function()
    {
      UserAuthorizationInstance.showAuthorizationForm();
      return false;
    }
  )
}


UserAuthorization.prototype.showAuthorizationForm = function(  )
{
  add = '';
  if ( $( 'span.header.head' ).html() == 'Подтверждение заказа' )
  {
    add = '<p><a onclick=" $.fancybox.close(); idf( \'Order.registrationStepTwo\' ); return false; " href="">\n\
               Продолжить без авторизации\n\
               </a>\n';
  }
  $.fancybox(
    '<div class="authorization">\n\
      <h1>Авторизация</h1>\n\
      <form action="" method="post" class="authorization-form">\n\
        <div>\n\
          <label for="authorization-email">Email</label><br />\n\
          <input type="text" id="authorization-email" />\n\
        </div>\n\
        <div>\n\
          <label for="authorization-password">Пароль</label><br />\n\
          <input type="password" id="authorization-password" />\n\
        </div>\n\
        <div>\n\
          <p><input type="submit" value="Авторизироваться" />\n\
          <p><a href="/password-recovery/">Восстановить пароль</a>\n\
          <p><a href="/registration/">Регистрация</a>\n\
          ' + add + '\
        </div>\n\
      </form>\n\
    </div>\n\
    '
  );

  this.initiateAuthorizationForm();
}


UserAuthorization.prototype.initiateAuthorizationForm = function(  )
{
  var UserAuthorizationInstance = this;
  $( '.authorization-form' ).submit(
    function()
    {
      UserAuthorizationInstance.submitAuthorizationForm();
      return false;
    }
  );
}


UserAuthorization.prototype.hideAuthorizationForm = function()
{
  $.fancybox.close();
}


UserAuthorization.prototype.initiateAuthorizationForm = function(  )
{
  var UserAuthorizationInstance = this;
  $( '.authorization-form' ).submit(
    function()
    {
      UserAuthorizationInstance.submitAuthorizationForm();
      return false;
    }
  );
}


UserAuthorization.prototype.submitAuthorizationForm = function()
{
  var email, password;
  email = $( '#authorization-email' ).val();
  password = $( '#authorization-password' ).val();

  this.authorizate(
    email, password, this.callbackAuthorizationSuccess,
    this.callbackAuthorizationError, this.authorizationSuccess,
    this.authorizationError
  );
}

UserAuthorization.prototype.authorizate = function(
  email, password, callbackAuthorizationSuccess, callbackAuthorizationError,
  callbackSuccess, callbackError
)
{
  var data = {};
  data.email = email;
  data.password = password;
  idf( 'RPC.call.UserAuthorizationController.authorizateAjax', data,
    authorizationSuccess );
 /* var UserAuthorizationInstance = this;
  $.ajax(
    {
      url: '/~/authorization/',
      type: 'POST',
      dataType: 'json',
      cache: 0,
      data: {email: email, password: password},
      success:
        function( data )
        {
          callbackSuccess( 
            UserAuthorizationInstance, data,
            callbackAuthorizationSuccess, callbackAuthorizationError
          );
        },
      error: 
        function( response ) 
        {
          callbackError( UserAuthorizationInstance, callbackAuthorizationError, response );
        }
    }
  );*/

}

  authorizationSuccess = function( result )
  {
    if ( result )
    {
      $.fancybox.close();
      $( 'div.menu').html( result.authorizationBlockHtml );
      if ( $( 'span.header.head' ).html() == 'Подтверждение заказа' )
      {
        idf( 'Order.registrationStepTwo' );
      }
    }
  }

/*UserAuthorization.prototype.authorizationSuccess = function(
  UserAuthorizationInstance, data, callbackAuthorizationSuccess, callbackAuthorizationError
)
{
  alert(1);
  if( typeof( data.success ) == 'undefined' || data.success == 0 )
  {
    if( typeof( data.message ) == 'undefined' || !data.message )
    {
      UserAuthorizationInstance.showError(
        'В процессе авторизации произошла ошибка; обратитесь к ' +
        'администрации при повторении этой ошибки'
      );
    }
    else
    {
      UserAuthorizationInstance.showError( data.message );
    }

    callbackAuthorizationError();

    return false;
  }
  
  UserAuthorizationInstance.showMessage( 'Вы успешно авторизированы' );
  callbackAuthorizationSuccess( data );

  return true;
}*/


UserAuthorization.prototype.authorizationError = function( 
  UserAuthorizationInstance, callbackAuthorizationError, response
)
{
  alert('error');
  callbackAuthorizationError();

  UserAuthorizationInstance.showError(
    'В процессе авторизации произошла ошибка; обратитесь к ' +
    'администрации при повторении этой ошибки'
  );
//  alert( response.responseText );
}


UserAuthorization.prototype.initiateLogoutLink = function( linkClass )
{
  var UserAuthorizationInstance = this;
  $( '.' + linkClass ).click(
    function()
    {
      UserAuthorizationInstance.logout(
        UserAuthorizationInstance.callbackLogoutSuccess, 
        UserAuthorizationInstance.callbackLogoutError,
        UserAuthorizationInstance.logoutSuccess,
        UserAuthorizationInstance.logoutError
      );
      return false;
    }
  );
}


UserAuthorization.prototype.logout = function(
  callbackLogoutSuccess, callbackLogoutError, callbackSuccess, callbackError
)
{
  var UserAuthorizationInstance = this;
  $.ajax(
    {
      url: '/~/logout/',
      type: 'GET',
      dataType: 'json',
      cache: 0,
      success:
        function( data )
        {
          callbackSuccess(
            UserAuthorizationInstance, data,
            callbackLogoutSuccess, callbackLogoutError
          );
        },
      error:
        function( response )
        {
          callbackError( UserAuthorizationInstance, callbackLogoutError, response );
        }
    }
  );
}


UserAuthorization.prototype.logoutSuccess = function( 
  UserAuthorizationInstance, data, callbackLogoutSuccess, callbackLogoutError
)
{
  if( typeof( data.success ) == 'undefined' || data.success == 0 )
  {
    if( typeof( data.message ) == 'undefined' || !data.message )
    {
      UserAuthorizationInstance.showError(
        'В процессе выхода произошла ошибка; обратитесь к ' +
        'администрации при повторении этой ошибки'
      );
    }
    else
    {
      UserAuthorizationInstance.showError( data.message );
    }

    callbackLogoutError();

    return false;
  }
  
  UserAuthorizationInstance.showMessage( 'Вы вышли из системы. До свидания!' );
  callbackLogoutSuccess( data );

  return true;
}


UserAuthorization.prototype.logoutError = function(
  UserAuthorizationInstance, callbackLogoutError, response
)
{
  callbackLogoutError( response );

  UserAuthorizationInstance.showError(
    'В процессе авторизации произошла ошибка; обратитесь к ' +
    'администрации при повторении этой ошибки'
  );

//  alert( response.responseText )
}


UserAuthorization.prototype.showError = function( text )
{
  idf( 'Message.error', text );
}


UserAuthorization.prototype.showMessage = function( text )
{
  idf( 'Message.notice', text );
}


UserAuthorization.prototype.getCurrentUser = function( callbackSuccess, callbackError )
{
  this.getCurrentUserAjax( callbackSuccess, callbackError );
}


UserAuthorization.prototype.getCurrentUserAjax = function( callbackSuccess, callbackError )
{
  var UserAuthorizationInstance = this;
  $.ajax(
    {
      url: '/~/user-get-current/',
      type: 'GET',
      dataType: 'json',
      cache: 0,
      success:
        function( data )
        {
          callbackSuccess( UserAuthorizationInstance, data );
        },
      error:
        function( response )
        {
          callbackError( UserAuthorizationInstance, response );
        }
    }
  );
}
