/*
	SimpleStore Cart View
 	Handles javascript events/templating associated with the cart
 */
SS.Views.Cart = Backbone.View.extend({
	
	// State variables
	bOpen: false,
	isUpdate: false,
	closeTimer: null,
	
	events: {
		"click .cartItemName": "toggleDescription",
		"click #showCartLink": "toggleOpen",
		"click #mies1": "stopBubble",
		"click #continueShoppingButton": "close",
		"click #viewCart": "viewDetails",
		"click #cartPreviewCheckout": "previewCheckout",
		"click #checkoutButton": "detailCheckout",
		"click .updateCartLink": "updateCart",
		"click .quantityField": "updateQuantity"
			
	},

	
	initialize: function() {
		
		_.bindAll( this, "close", "add" );
		
		// Custom event handlers
		$(document).bind("click", this.close);
		
		// Initial cart load
		$.ajax({
			type: "POST",
			url: "/~site/siteapps/cartpreview.action",
			data: $("#productForm").serialize(),
			success: function(data) {
				$("#mies1").html(data);
				// Update number of items in cart text
			var itemNumber = parseInt($(".cartSize").text());	
			 if (isNaN(parseInt($(".cartSize").text()))) {
				 itemNumber = 0;
			 } else {
				 itemNumber = parseInt($(".cartSize").text());
			 } 		    	  
		    $("#cartNumber").text(itemNumber);
			this.isUpdate = false;
			}
		});
		
	},
	
	
	// Toggles opening of the cart
	toggleOpen: function(e, forceToggle) {
		var $overlay;
		
		if (e) {
			e.preventDefault();
			e.stopPropagation();
		}
		
		if (forceToggle !== undefined) {
			this.bOpen = forceToggle;
		}
		
		this.el.toggleClass("cartPreview", !this.bOpen);
		
		// #mies is the cart overlay
		$overlay = this.el.find("#mies1").toggle(!this.bOpen);
		
		// We are opening the cart
		if ( !this.bOpen ) {
			
			// When opening from cart link we always go to detail display
			if ( e && e.currentTarget && e.currentTarget.id === "showCartLink" ) {
				$.ajax({
					type: "POST",
					url: "/~site/siteapps/cartpreview.action",
					data: $("#productForm").serialize(),
					success: function(data) {
						$("#mies1").html(data);
						// Update number of items in cart text
					var itemNumber = parseInt($(".cartSize").text());	
					 if (isNaN(parseInt($(".cartSize").text()))) {
						 itemNumber = 0;
					 } else {
						 itemNumber = parseInt($(".cartSize").text());
					 } 		    	  
				    $("#cartNumber").text(itemNumber);
					this.isUpdate = false;
					$("#mies1").show().find("#cart-detail").show();
					}
				});
				
			
			// We must be opening cart in some other way so display preview display
			} else {
				$overlay.find("#cart-preview").show();
				$overlay.find("#cart-detail").hide();
			}
			
		}
		
		this.bOpen = !this.bOpen;
	},
	
	
	// Toggle function is nice, but we also need a close for close specific events
	// such as clicking outside the cart
	close: function(e) {
		
		if (!this.bOpen) {
			return;
		}
		
		if (e) {
			e.preventDefault();
		}
		this.toggleOpen(e, true);
	},
	
	
	// Handles switching from preview view to details view
	viewDetails: function(e) {
		
		e.preventDefault();
		
		this.el.find("#cart-preview").hide();
		this.el.find("#cart-detail").show();
		this.isUpdate = false;
		// Stop window from auto-closing
		if ( this.closeTimer !== null) {
			clearTimeout( this.closeTimer );
		}
	},
	

	// Callback function for a successful ajax call for adding an item
	add: function(data, status) {
		var 
			self = this,
			top;
		
	  // Insert newest data to the overlay
	    $("#mies1").html(data);
	    
		// Update number of items in cart text
		var itemNumber = parseInt($(".cartSize").text());		    	  
	    $("#cartNumber").text(itemNumber);
	    
	  
	    
	    // Open cart
	    this.toggleOpen(undefined, false);
	    
	    if ( this.closeTimer !== null ) {
	    	clearTimeout( this.closeTimer );
	    }
	    
	    // Set timeout for closing the cart
	    this.closeTimer = setTimeout(function(){
	    	self.close();
	    }, 10000);
	    
	    // Scroll to top of wrapper div every time we add to cart
	    SS.Utils.scrollToTop();
	},
	
	
	// Toggles showing the product description in the cart details view
	toggleDescription: function(e) {
		var $eventEl, $itemDesc;
	
		if (!e.currentTarget) {
			return this;
		}
		
		// Get clicked element
		$eventEl = $(e.currentTarget);
		$eventEl = $eventEl.closest(".cartDetailItem");
		
		if ( $eventEl.length === 0 ) {
			return this;
		}
		
		// Show item desc
		$itemDesc = $eventEl.next(".cart-item-description").toggle();
		
		// Change arrow selector
		if ( $itemDesc.css("display") === "none" ) {
			$eventEl.find(".arrowDown")
					.removeClass("arrowDown")
					.addClass("arrowRight");
		}
		else {
			$eventEl.find(".arrowRight")
					.removeClass("arrowRight")
					.addClass("arrowDown");
		}
	},
	
	
	// Utility function that just calls stop propagation
	// Used to create functionality of closing cart whenever we click outside
	stopBubble: function(e) {
		e.stopPropagation();
	},
	
	
	fbCheckout: function(e) {
		
		if($("#productForm_fromFacebook").val()== "false") {
			return false;
		}
		
		if (e) {
			e.preventDefault();
		}
		
		var cf = $('#checkoutFormPreview');
		var stringBuilder = '/~site/Scripts_ForSale/ForSale.dll?';
		
		$fields = cf.find('input[type="hidden"]');
		for( var i =0; i < $fields.length; i++ ) {
			var $field = $($fields[i]);
			stringBuilder = stringBuilder.concat($field.attr('name') + '=', encodeURI($field.val()), '&');
		}
		stringBuilder = stringBuilder.substring(0, stringBuilder.length - 1);
	//	console.log('url' + stringBuilder);
		
		var frame = document.getElementById('checkoutFrame');
		frame.src = stringBuilder;

		$(frame).load(function(){
			$('#cart_container').fadeIn(500);
			$('#close-icon').bind('click', function(){
				$('#cart_container').fadeOut(500);
			});
		});
	},
	
	updateQuantity: function(e) {
		this.isUpdate = true;
	},
	
	
	updateCart: function(e) {
		if (e) {
			e.preventDefault();
		}
		
		if(this.isUpdate == true) 
		{
			$.ajax({
				type: "POST",
				data: $("#checkoutForm").serialize(),
				url: '/~site/siteapps/cartupdate.action',
				success: function(data) {
					$("#mies1").html(data);
		     		 $("#cart-detail").css("display", "inline-block");
		    		 $("#cart-preview").css("display", "none");
		    		   $("#cartNumber").text(cartSize);
		    		   $(".error").css("display", "none");
		    		   var i=0;
		    		   var hasError = false;
		    		   $(".errorMessage").each(function() {
		    			   if($(this).text().indexOf(i) >= 0)
		    			{
		    				 $(this).next().css('border-color','#dc3c1e');
		    				 $(this).next().css('border-width','1px');
		    				 $(".error").text("Quantity must be a valid number");
		    				 $(".error").css("display", "inline");
		    				 hasError = true;
		    			   }
		    			   i++;
		        		});
		    		   var cartSize = 0;
		    		  
			    	   $(".quantityField").each(function() {
			    		   if ((!isNaN(parseInt($(this).val())))&&(hasError == false)) {
			    		    cartSize = cartSize +  parseInt($(this).val());
			    		   } 
			    	   });
			    	   $("#cartNumber").text(cartSize);
			       }
			});
		} else {
			return false;
		}
	  
	},
	
	previewCheckout: function(e) {
		if($("#productForm_fromFacebook").val()== "false") {
			if($("#checkoutFormPreview_paymentType").val() == "ips") {
				  if($("#checkoutFormPreview_live").val() == "true") {
					  document.checkoutFormPreview.action =$("#imageAbsoluteURL").val()+"/~site/Scripts_ForSale/ForSale.dll";
				  } else {
					  alert("Can't checkout in preview mode");
					  return false;
				  }
			}
			else {
				
				 if($("#checkoutFormPreview_live").val() == "true") {
					 document.checkoutFormPreview.action ="https://www.paypal.com/cgi-bin/webscr";
					 if($("#productForm_paypalEmail").val() =="") {
						 alert('PayPal has not yet been activated for this store.  If you are trying to make a purchase, please contact the store owner for assistance.');
						 return false;
					 }
				  } else {
					  alert("Can't checkout in preview mode");
					  return false;
				  }
			}
		}  else {
			if (e) {
				e.preventDefault();
			}
			
			var cf = $('#checkoutFormPreview');
			var stringBuilder = '/~site/Scripts_ForSale/ForSale.dll?';
			
			$fields = cf.find('input[type="hidden"]');
			for( var i =0; i < $fields.length; i++ ) {
				var $field = $($fields[i]);
				stringBuilder = stringBuilder.concat($field.attr('name') + '=', encodeURI($field.val()), '&');
			}
			stringBuilder = stringBuilder.substring(0, stringBuilder.length - 1);
			stringBuilder = stringBuilder + "&style=facebook";
		//	console.log('url' + stringBuilder);
			
			var frame = document.getElementById('checkoutFrame');
			frame.src = stringBuilder;

			$(frame).load(function(){
				$('#cart_container').fadeIn(500);
				$('#close-icon').bind('click', function(){
					$('#cart_container').fadeOut(500);
				});
			});
			
		}
		return true;
	},
	
	
	detailCheckout: function(e)
	{ 
		if($("#productForm_fromFacebook").val()== "false") {
			
				if($("#checkoutForm_paymentType").val() == "ips") {
					 if($("#checkoutForm_live").val() == "true") {
						  document.checkoutForm.action =$("#imageAbsoluteURL").val()+"/~site/Scripts_ForSale/ForSale.dll";
					  } else {
						  alert("Can't checkout in preview mode");
						  return false;
					  }
				} else {
					 if($("#checkoutForm_live").val() == "true") {
						 document.checkoutForm.action ="https://www.paypal.com/cgi-bin/webscr";
						 if($("#productForm_paypalEmail").val() =="") {
							 alert('PayPal has not yet been activated for this store.  If you are trying to make a purchase, please contact the store owner for assistance.');
							 return false;
						 }
					  } else {
						  alert("Can't checkout in preview mode");
						  return false;
					  }
				}
					
		} else {
		
			if (e) {
				e.preventDefault();
			}
			
			var cf = $('#checkoutFormPreview');
			var stringBuilder = '/~site/Scripts_ForSale/ForSale.dll?';
			
			$fields = cf.find('input[type="hidden"]');
			for( var i =0; i < $fields.length; i++ ) {
				var $field = $($fields[i]);
				stringBuilder = stringBuilder.concat($field.attr('name') + '=', encodeURI($field.val()), '&');
			}
			stringBuilder = stringBuilder.substring(0, stringBuilder.length - 1);
			stringBuilder = stringBuilder + "&style=facebook"; 
		//	console.log('url' + stringBuilder);
			
			
					
			var frame = document.getElementById('checkoutFrame');
			frame.src = stringBuilder;
	
			$(frame).load(function(){
				$('#cart_container').fadeIn(500);
				$('#close-icon').bind('click', function(){
					$('#cart_container').fadeOut(500);
				});
			});
		}
	 
	   return true;
	
}
	
});

