var browseManager;

/**

browseManager:
   Section specific file for browse behaviour

author: dedmondson
date:   17/01/2009
*/

// Object Def
function  browseManager(){
 

   // Private functions 
    var addProductSuccessCallback = function(data,catEntryId){
      $("button.buyButton_"+catEntryId).removeAttr("disabled").removeClass("addBasketProcessing");
	  showBasketNotification(catEntryId);
	  browseManager.setProductPageDeliveryMessage();	  
	  if(window.istActive) {
		window.istBasketItems = catEntryId;
		$.getScript('https://www.ist-track.com/ContainerBasketJavaScript.ashx?id='+window.istCompanyId);
	  }
	};
	
	
	var addMultiProductSuccessCallback = function(data,catEntryId){
		   $("button.addMultipleToBasket").removeAttr("disabled").removeClass("addBasketProcessing");
		   showMultiProductBasketNotification();
	};
	
	var addMultiProductErrorCallback = function(errorMessages,catEntryIds){
    	$("button.addMultipleToBasket").removeAttr("disabled").removeClass("addBasketProcessing");
      if(errorMessages){
    	sessionController.showErrorOverlay(errorMessages);
      }
  	};

    var addProductErrorCallback = function(errorMessages,catEntryId){
    	$("button.buyButton_"+catEntryId).removeAttr("disabled").removeClass("addBasketProcessing");
      if(errorMessages){
    	sessionController.showErrorOverlay(errorMessages);
      }
  	};
	 
	 // Private functions 
    var addBookshelfSuccessCallback = function(data,catEntryId){ 
	 showBookshelfNotification(catEntryId);
	};
	 
	 var basicErrorCallback = function(errorMessages){
	   sessionController.showErrorOverlay(errorMessages);
	 };
	 

  
	 var sentToFriendSuccessCallback = function(){
	 	
		 $('#friendForm').fadeOut('normal', function(){ $('#QS_friendThankyou').fadeIn('normal') ;} );
     };
		 
     var sentToFriendErrorCallback = function(errorMessages){
    	 sessionController.showErrorOverlay(errorMessages);
     };
     var sentReviewSuccessCallback = function(){
		 $('#reviewForm').fadeOut('normal', function(){ $('div.QS_reviewThanks').fadeIn('normal'); } );
     };
		 
     var sentReviewErrorCallback = function(errorMessages){
    	 sessionController.showErrorOverlay(errorMessages);
     };
	 
	 var showBasketNotification = function(catEntryId) { 
	 	$('div.QS_notification').stop().hide();
	 	 
	 	var notification = $('div#QS_addBasketNotification_'+catEntryId);
	 	notification.stop().fadeIn('slow');
		 
		var metadata = notification.metadata();

		if(metadata && (metadata.isbn || metadata.partNumber) ){
			
			var emark2 = new Emark();
			
			var trackingCode = QS_Utils.getUrlParam("atc");
			var productIdentifier = metadata.isbn;
			
			if(! productIdentifier){
				productIdentifier = metadata.partNumber;
				
			}
			
			
			if(trackingCode){
			  emark2.logAddedToCart(productIdentifier,trackingCode); 
			}
			else{
			  emark2.logAddedToCart(productIdentifier); 
			}
            
			var searchTerm = QS_Utils.getUrlParam("searchTerm");
			if(searchTerm){
			  emark2.saveSearch(searchTerm,productIdentifier); 
			}
			emark2.commit();
		}  
	 };
	 
	 var showMultiProductBasketNotification = function() { 
		 /* 
		    var notification = $('div#QS_addAllBasketNotification');
		 	notification.fadeIn('slow');
			
			var metadata = notification.metadata();

			if(metadata && metadata.isbn){
				
				var emark2 = new Emark();
				
				var trackingCode = QS_Utils.getUrlParam("atc");
				if(trackingCode){
				  emark2.logAddedToCart(""+metadata.isbn,trackingCode); 
				}
				else{
				  emark2.logAddedToCart(""+metadata.isbn); 
				}
				emark2.commit();
			}
		 */  
	 };
	  
	 var showBookshelfNotification = function(catEntryId) { 
	 	 $('div.QS_notification').stop().hide();
		 $('div#QS_addBookshelfNotification_'+catEntryId).stop().fadeIn('slow');
	 };
	 
	
  // Browse: Public functions
  return{
  
    addMultipleProduct:function(catEntryId){
      var qtyFieldSelector = '.QS_addMultipleProductQty_'+catEntryId;
      var qty = $(qtyFieldSelector).val();
      this.addProduct(catEntryId, qty); 
    },
    
    addSingleProduct:function(catEntryId){
      this.addProduct(catEntryId, 1);  
    },
    
    addMultipleProducts:function(catEntryIds){
    	$("button.addMultipleToBasket").attr("disabled","disabled");
    	$("button.addMultipleToBasket").addClass("addBasketProcessing");
        basketController.addMultipleProducts(catEntryIds, addMultiProductSuccessCallback , addMultiProductErrorCallback);
    },
    
    addToBookshelf:function(catEntryId){
      basketController.addToWishList(catEntryId, addBookshelfSuccessCallback, basicErrorCallback);
    },
    
    goBackFromSearch:function(){
    	var count = sessionController.getPageCount();

        if(!count || new Number(count).valueOf() < 2 ){
        	location.href="qs_home_tbp?storeId="+storeId+"&langId="+langId+"&catalogId="+catalogId;
        }
        else{
        	history.go(-1);
        }
    },
    
    addProduct:function(catEntryId, qty){
    	$("button.buyButton_"+catEntryId).attr("disabled","disabled");
    	$("button.buyButton_"+catEntryId).addClass("addBasketProcessing");
    	
      basketController.addProduct(catEntryId, qty, addProductSuccessCallback , addProductErrorCallback);
    },
    
    showAllHomeCategories:function(){
    	$('.homeSubCategory').show(); 
    	showAllHomeCategories.hide();
    },
    
    setProductPageDeliveryMessage:function(){
    	if($('div.deliveryInfo').length >0){
	    	var meta = $('div.deliveryInfo').metadata();
	        var deliveryMessage= this.getDeliveryMessage(new Number(meta.productPriceAmount).valueOf(), new Number(meta.threshold).valueOf(), new Number(meta.singleDelAmount).valueOf(), meta.currency);
	
	        if(deliveryMessage){
	           $("div.deliveryInfo span").html(deliveryMessage);
	        }
    	}
    },
    
    
  getDeliveryMessage:function(productPriceAmount, threshold, singleDelAmount, currency){
    
    	var currencySign = "&euro;";
    	if(currency =="GBP" ){
    	  currencySign = "&pound;";
    	}

    	var basketTotal = basketController.getBasketTotal();
    	var basketQty = basketController.getBasketQty();

    	if(productPriceAmount >= threshold){
    		return "<strong>Free delivery with this item</strong>";
    	}
    	else if(basketTotal >= threshold){
    		return "You have qualified for <strong>free delivery</strong>";
    	}
    	else if( (new Number(basketTotal).valueOf() + new Number(productPriceAmount).valueOf()) >= threshold){
    		return "Qualify for <strong>free delivery</strong> with this item";
    	}
    	else if(singleDelAmount && new Number(basketTotal).valueOf() < 1){
    	 return "<strong>Single item delivery</strong> from only " + currencySign+""+ singleDelAmount;
    	}
    	return "<strong>Free delivery</strong> on orders over " + currencySign+""+threshold;
    },  
           
    submitSendToAFriend:function() {
      var form = $('#QS_sendToAFriendForm');
      if( form.validate().form()) {
    	basketController.sendToAFriend( form.find('input[name=title]').val(),
    									form.find('input[name=author]').val(),
    									form.find('input[name=ourPrice]').val(),
    									form.find('input[name=rrp]').val(),
    									form.find('input[name=save]').val(),
    									form.find('input[name=urlInEmail]').val(),
    									form.find('input[name=thumbnail]').val(),
    									form.find('input[name=fromname]').val(), 
    									form.find('input[name=toname]').val(), 
    									form.find('input[name=fromemail]').val(), 
    									form.find('input[name=toemail]').val(), 
    									form.find('textarea[name=emailMessage]').val(), 
 		       		 				    form.find('input[name=sendMeACopy]').val(),
 		       		 				    sentToFriendSuccessCallback,
 		       		 				    sentToFriendErrorCallback);
      }
    },
    
  /// start to modify review form
    submitReviewForm:function() {
        var reviewForm =  $('#QS_reviewForm');
        
        if( reviewForm.validate().form()) {
        	
        	var rating = reviewForm.find('select[name=rating]').val();
        	if (!rating) {
        		rating = '5';
        	}
        	
          	basketController.postReview( 
          			     reviewForm.find('input[name=productIds]').val(),
          			     reviewForm.find('input[name=productId]').val(),
	          			 reviewForm.find('input[name=itemName]').val(),
			      		 reviewForm.find('input[name=itemMaker]').val(),
			      		 reviewForm.find('input[name=productFeature]').val(),
			      		 reviewForm.find('input[name=reviewStatusRef]').val(),
			      		 reviewForm.find('input[name=reviewTypeRef]').val(),
			      		 rating,
			      		 reviewForm.find('input[name=foreName]').val(),
			      		 reviewForm.find('input[name=emailAddress]').val(), 
			      		 reviewForm.find('input[name=reviewTitle]').val(), 
			      		 reviewForm.find('textarea[name=reviewText]').val(), 
					     sentReviewSuccessCallback,
	 				     sentReviewErrorCallback);

        }
      },
      /// end section 1
    
    initValidation:function(){
        $("#QS_sendToAFriendForm").validate({errorClass: "errorHighlight",
			errorContainer: "#QS_sendToAFriendErrorSection",
			errorLabelContainer: "#QS_sendToAFriendErrors",
			onfocusout: false,
			onclick: false,
			onkeyup: false,
			wrapper: "li",
			highlight: function(element, errorClass) {
				$(element).addClass(errorClass);
			},
			rules: QS_Constants.validation_rules("#QS_sendToAFriendForm"),
		    messages: QS_Constants.validation_messages
		});
        

       
         
        $("#QS_reviewForm").validate({errorClass: "errorHighlight",
  			errorContainer: "#QS_reviewFormErrorSection",
  			errorLabelContainer: "#QS_reviewFormErrors",
  			onfocusout: false,
  			onclick: false,
  			onkeyup: false,
  			wrapper: "li",
  			highlight: function(element, errorClass) {
  				$(element).addClass(errorClass);
  			},
  			rules: QS_Constants.validation_rules("#QS_reviewForm"),
	        messages: QS_Constants.validation_messages
  		});

    	
    },
    
     hideBookshelfNotification:function(catEntryId) { 	
		 $('div#QS_addBookshelfNotification_'+catEntryId).stop().fadeOut('slow');
	 },
	 
	 hideBasketNotification:function(catEntryId) { 	
		 $('div#QS_addBasketNotification_'+catEntryId).stop().fadeOut('slow');
	 }
 
    
    
  };

}

// On page load
$(function(){
 browseManager = new browseManager();
 browseManager.initValidation();
 $('#QS_friendThankyou').hide();
 $('.reviewThanks').hide();
 $('.QS_notification').hide();
});


var productBookPoints;
function  ProductBookPoints(){
  return{
    init:function(){	
		 $("#QS_help_bookPoints").overlay({
            close: 'button.QS_help_bookPointsClose',
			closeOnClick: false
        }); 		
    },
	showHelp:function() {
        var api = $("#QS_help_bookPoints").overlay({
            close: 'button.QS_help_bookPointsClose',
			closeOnClick: false
        }); 
        api.load();
        return false;
    }
  };
}
$(function(){
 productBookPoints = new ProductBookPoints();
 productBookPoints.init();
});


/* image lightbox init code*/
$(document).ready(function(){
	$(".lightbox").lightbox({
	   fitToScreen: true,
	   imageClickClose: false
	});
});

   

