/**
QS_AccountController:
   Top level Object that wraps account related resources 
   and the operations against them.

author: dedmondson
date:   09/01/2009
*/

// Object Def
function  QS_AccountController(){

  // QS_AccountController: Public functions
  return{
    
    // Contructor
    init: function(){

      // ajax call to server to get user
      if(sessvars.bookaboo_user == null){
      
         $.ajax({
           url:'qs_jsonUserRegistrationDataBean',
           data:{
            'storeId':storeId,
            'catalogId':catalogId,
            'langId':langId,
            'errorViewName':'qs_jsonStatusError'
           },
           success:function(data){
             if(data.status == 'success'){    
               accountController.setUser(data.user);
               accountController.bind();
               accountController.render();
             }
             else{
            	 sessionController.showErrorOverlay(data.errorMessages);
             }
           }
         });    
      }
      else{
        this.bind();
        this.render();
      }
    },
    
    // Bind controller methods to page elements
    bind:function(){
      $('.QS_AccountController_logOut_button').bind('click',  function(event){
        sessionController.logOut();
      });
    }, 
    
    // Render dynamic page elements
    render:function(){
      if(this.getUser() == null || this.getUser().status !=  'loggedIn'){
        $('.loggedOut').show();
        $('.loggedIn').hide();
      }
      else{
        $('.QS_userFullName').html(this.getUser().firstName );
        $('.loggedIn').show();
        $('.loggedOut').hide();
      }
    },
    
    purge:function(){
     this.setUser(null);
     sessvars.$.flush();
    },

    getUser:function(){
      return  sessvars.bookaboo_user;
    },
    
    setUser:function(user){
      sessvars.bookaboo_user = user;
      sessvars.$.flush();
    },
    
    addAddress:function( addressFormName ){
       alert('todo');
    },
    
    updateAddress:function( addressId, addressFormName){
       alert('todo');
    },
    
    deleteAddress:function( addressId){
      alert('todo');
    },
    
    updateUser:function( userFormName ){
       alert('todo');
    },
    
    requestNewPassword:function(logonId, successCallback, errorCallback){
    	
    	$.ajax({
            url:'ResetPassword',
            data:{
             'storeId':storeId,
             'challengeAnswer':'-',
             'catalogId':catalogId,
             'langId':langId,
             'logonId': logonId,
             'errorViewName':'qs_jsonStatusError',
             'URL':'qs_jsonStatusSuccess'
            },
            success:function(data){
              if(data.status == 'success'){    
            	  successCallback(data);
              }
              else{
            	  errorCallback(data.errorMessages);
              }
            }
          });  
    	
    },
    
    reportAjaxErrors:function(errorMessages){
      // improve this handling
      alert(errorMessages);
    }
   
    
  }
}