/**
QS_SessionController:
   Top level Object that wraps session related resources such as 
   basket information and the operations against these resources.

author: dedmondson
date:   09/01/2009
*/

// Main vars
var debug = false;
var sessionController = null;
var accountController = null;
var basketController  = null;

// Common vars required from request
var storeId   = getUrlParam('storeId');
var catalogId = getUrlParam('catalogId');
var categoryId = getUrlParam('categoryId');
var langId    = getUrlParam('langId');

// Object Def
function  QS_SessionController(){

  // QS_SessionController: Public functions
  return{
    
    // Constructor
    init: function(debug){
	  
      // ajax defaults
	  $.ajaxSetup({
	    type:'POST',
	    timeout:60000,
	    dataType:'json',
	    beforeSend:function(){
		  $.blockUI({ 
			  css: { 
	            border: 'none', 
	            padding: '15px', 
	            backgroundColor: '', 
	            '-webkit-border-radius': '10px', 
	            '-moz-border-radius': '10px', 
	            opacity: '.7' 
	            
	        },
	        overlayCSS:  {  
	            backgroundColor:'',  
	            opacity:        '0.2'  
	        }, 
	        message:'<img src="/qs_siteimages/BOOKABOO/common/images/ajaxBusy.gif"/>'
		  }); 
	    },
	    complete:function(data,status){
	    	 $.unblockUI();
	    },
	    error: function( xmlHttpObj ,status){
	      //alert('Ajax Error : '+ status );
	    	$("#QS_errorOverlayTitle").html("System Error");
	    	 $("#QS_errorOverlayMessage").html("There has been an unexpected problem. <br/><br/>  Ajax status: " + status + "<br/>  Http status: " + xmlHttpObj.status );
	    	var errorOverlay = $("#QS_errorOverlay").overlay();      
	    	errorOverlay.load();   	
	    }
	  });
	  
	  
	 
    
      // Create account controller
      accountController = new QS_AccountController();
      accountController.init();
     
      // Create basket controller
      basketController  = new QS_BasketController(); 
      basketController.init();
     
      // debug on/off
      if(debug){
        sessvars.$.debug()
      }
    }, 
    
    addProduct:function(catEntryId, qty, successCallback , errorCallback){
      basketController.addProduct(catEntryId, qty, successCallback , errorCallback);
    },
    
    deleteProduct:function(orderItemId, successCallback , errorCallback){
      basketController.deleteProduct(orderItemId, successCallback , errorCallback);
    },
    
    updateProduct:function( orderItemId, quantity, successCallback , errorCallback){
      basketController.updateProduct(orderItemId, quantity, successCallback , errorCallback);
    },
    
    moveToWishList:function(catEntryId, orderItemId, successCallback , errorCallback ){
      basketController.moveToWishList(catEntryId, orderItemId, successCallback , errorCallback);
    },
 
    logIn:function(){
      accountController.purge();
      basketController.purge();
      sessvars.$.flush(); 
    },
    
    logOut:function(){
      accountController.purge();
      basketController.purge();
      sessvars.$.clearMem(); 
      sessvars.$.flush(); 
    },
    
    register:function(){
      accountController.purge();
      sessvars.$.flush(); 
    },
    
    showErrorOverlay:function(errorMessage, errorTitle){
    	
    	if(! errorTitle){
    		errorTitle = "Sorry, there is a problem.";
    	}
    	
    	$("#QS_errorOverlayMessage").html( encodeHtml(errorMessage) );
    	$("#QS_errorOverlayTitle").html(errorTitle);
    	var errorOverlay = $("#QS_errorOverlay").overlay();      
    	errorOverlay.load();   
    }
    
    
    
    
  }
}

// Page invocation	       
$(function(){
  sessionController = new QS_SessionController();
  sessionController.init(debug);
});

$(window).load(function(){
	  //Create overlay for standard popups
	  $("#QS_errorOverlay").overlay({
			close: 'button.QS_closeOverlay'  
	  }); 
	
});

