$(document).ready(function() {

	/**
	* Shop
	*/
	$('#coupon #use').live('click', function() {
		gerberCartUseCoupon();

		return false;
	});
	
	$('#coupon').submit(function() {
		gerberCartUseCoupon();

		return false;
	});


	// Add to cart - Product page
	$('#product #addToCart').live('click', function(){
		
		$(this).addClass('added').removeClass('buy').removeAttr('id');
		
		var objectId = $('#contentObjectId').val();
		var amount = $('#qtysb').val();

		addToCart(objectId, amount);
		
		setTimeout(function(){
			$('#purchase .added').removeClass('added').addClass('buy').attr('id', 'addToCart');
		}, 1500);
		
		return false;
	});


	// Add to cart - Product listing
	$('.product .addtocart').live('click', function() {

		$(this).addClass('added').removeClass('addtocart');
		
		//$(this).parent().append('<span class="productAdded success">Product was added to cart</span>');
				
		var objectId = $(this).prev('.contentObjectId').val();
		var amount = 1;

		addToCart(objectId, amount);	

		setTimeout(function(){
			$('.product .added').removeClass('added').addClass('addtocart');
			//$('.productAdded').remove();
		}, 1500);
			
		return false;
	});


	//cart help
	$('#cart .help').mouseover(function(){
		$('#cart #scInstructions').show();
	}).mouseout(function(){
		$('#cart #scInstructions').hide();
	});
	
	$('#cartLink').click(function(){
		openOverlay();
		$('#content').append('<div id="modal"></div>');
		
		getCart = _siteRootHttpS + "/gerber_shop/viewcart";
		$.get(getCart, function(data) {
			$('#modal').html(data);
		});
		return false;
	});

	$('.modal #close, .modal #keepShopping, .modal .freeShippingMessages button').live('click', function() {
		$('#modal').remove();
		closeOverlay();
		return false;
	});
	
	// If "Use this info as billing address" is checked, show overlay png on billing form
	//change fix for ie
	if ($.browser.msie) {
		$("#shippingAsBilling").click(function() {
			this.blur();
			this.focus();
		});
	}
	
	$("#shippingAsBilling").change(function() {
		if($('#shippingAsBilling').attr('checked')) {
			$('#gerberCartBilling').append('<div class="overlayWhite"></div>');
		}
		else {
			$('#gerberCartBilling .overlayWhite').remove();
		}
	});
	
	if($('#shippingAsBilling').attr('checked')) {
		$('#shippingAsBilling').trigger('change');
		return false;
	}

});
/* ------- end - document.ready ------- */



/**
* Add item to the shopping cart
**/
function addToCart(contentObjectId, amount) {
	$.post(_siteRootHttpS + '/gerber_shop/addtocart',
		{ 	
			contentObjectId: contentObjectId,
			amount: amount
		}, 
		function(data) {
			if(data.result == "success") {
				updateCartLinkValue(data.item_count);
			}
		},
		"json"
	);
}



/**
* Update the header cart link item count
**/
function updateCartLinkValue(totalCartItems) {
	if( $('ul#topNavigation #cartLink span').length > 0) {
		$('ul#topNavigation #cartLink span').html(totalCartItems);
	}
	else {
		$('#gerberShopHeaderCartItemCount').html(totalCartItems);
	}

	Cufon.refresh();
}

function gerberCartShowStates(mode, country) {

	var modeS = mode.charAt(0).toUpperCase() + mode.slice(1);

	if(country) {
		$('#' + mode + 'State').val('');
		$('#' + mode + 'State').html('');

		if(country in statesList) {
			for(var i = 0; i < statesList[country].length; i++) {
				if(i == 0) {
					$('#' + mode + 'State').append('<option></option>'); // first option must be empty
				}

				$('#' + mode + 'State').append('<option id="gerberCart' + modeS + 'State' + statesList[country][i] +'" value="' + statesList[country][i] + '" class="' + statesList[country][i] + '">' + statesList[country][i] + '</option>');
			}

			if(statesList[country].length == 0) {
				// If the selected country has no states, show the no states option
				$('#' + mode + 'State').val('--');
				$('#' + mode + 'State').append('<option id="gerberCart' + modeS + 'State--" value="--" class="NOSTATES">--</option>');
			}
			else {
				$('#' + mode + 'State').attr('disabled', false);
			}
		}
		else {
			$('#' + mode + 'State').val('--');
			$('#' + mode + 'State').append('<option id="gerberCart' + modeS + 'State--" value="--" class="NOSTATES">--</option>');
			$('#' + mode + 'State').attr('disabled', false);
		}
	}
	/*if(country) {
		$('#'+mode+'State').val('');
		$('#'+mode+'State option').hide();
		$('#'+mode+'State option.' + country).show();

		// If the selected country has no states, show the no states option:
		if($('#'+mode+'State option:visible').length == 0) {
			$('#'+mode+'State').val('--');
			$('#'+mode+'State option.NOSTATES').show();
			$('#'+mode+'State').attr('disabled', false);
		}
		else {
			$('#'+mode+'State').attr('disabled', false);
		}	
	}*/
	/*else {
		$('#'+mode+'State').val('--');
		$('#'+mode+'State').attr('disabled', false)
	}*/
}

function gerberCartRemoveItem(el, itemId) {
	$(el).addClass('active');

	gerberCartResetShipping();
	var url = _siteRootHttpS + "/gerber_shop/removeitem";
	$.post(url, {contentObjectId: itemId}, function(data){
		$('#gerberCartItemRow' + itemId).remove();
		
		var totalCount = 0;
		$('.quantityAmount').each(function(){
			totalCount += Number($(this).html());		
		});
		$('#gerberShopHeaderCartItemCount').html(totalCount);
		
		gerberCartUpdateCartTotals(data.cartTotals);
		
		if( $(".freeShippingMessages").length > 0 ) {
			updateFreeShippingDiscountMessages(data.cartTotals.sub_total, data.cartTotals.discount_minimum);
		}
		
		$(el).removeClass('active');
	}, 'json');
}


function gerberCartChangeItemCount(el, itemId, change) {

	$(el).addClass('active');
	gerberCartResetShipping();
	var url = _siteRootHttpS + "/gerber_shop/changeitemcount";
	$.post(url, {contentObjectId: itemId, change: change}, function(data){
		$('#gerberCartItemRow' + itemId + ' .quantityAmount').html(data.new_amount);
		$('#gerberCartItemRow' + itemId + ' .rowTotal').html(data.row_total);
		
		if(data.new_amount == 0) {
			gerberCartRemoveItem(el, itemId);
		}
		
		var totalCount = 0;
		$('.quantityAmount').each(function(){
			totalCount += Number($(this).html());		
		});
		$('#gerberShopHeaderCartItemCount').html(totalCount);
		
		gerberCartUpdateCartTotals(data.cartTotals);
		
		if( $(".freeShippingMessages").length > 0 ) {
			updateFreeShippingDiscountMessages(data.cartTotals.sub_total, data.cartTotals.discount_minimum);
		}
		
		$(el).removeClass('active');
	}, 'json');
}


/**
 *
 *
 */
function gerberCartUpdateCartTotals(totals) {
	// Default shipping
	if( totals.shipping == 'TBD' || totals.shipping == '0.00') {
		totals.shipping = "5.00";
	}

	// Free Shipping discount
	if( (totals.sub_total >= totals.discount_minimum) && totals.discount_minimum != '0') {
		totals.shipping = "0.00";
	}

	$('#gerberCartTotals #sub_total').html(totals.sub_total);
	$('#gerberCartTotals #sales_tax').html(totals.sales_tax);
	$('#gerberCartTotals #total_tax').html(totals.total_tax);
	$('#gerberCartTotals #shipping_tax').html(totals.shipping_tax);
	$('#gerberCartTotals #shipping').html(totals.shipping);
	window.taxRate = totals.tax_rate;			
	
	$('#gerberCartTotals #grand_total').html('$' + totals.grand_total);

	$('#totalOrder #sum').html('$' + totals.grand_total);
}


/**
 * Resets shipping and tax data. Tax data includes the shipping tax,
 * so it also needs to be reset.
 *
 */
function gerberCartResetShipping() {
	var url = _siteRootHttpS + "/gerber_shop/clearshippingoptions";
	$.post(url);
	$('#shippingOptions').html('');
	$('#shippingOptions').hide();
	$('#getShippingOptions').show();
}


/**
 * Replaces the shipping address <p> elements with textboxes to allow for editing
 */
function showAddressEditBox() {
	var editHtml = '<div id="addressEdit">';
	var addressVal = '';
	var addressLabel = '';
	var addressId = '';
	var el = '';
	
	$('.address').each(function (idx) {
		el = $(this);
		
		el.find('span').remove();
		addressVal = el.text();
		addressLabel = (idx == 0) ? 'Street Address 1' : 'Street Address 2';
		addressId = (idx == 0) ? 'address_1' : 'address_2';
		
		editHtml += '<label for="'+ addressId +'">'+ addressLabel +'<input type="text" value="'+ addressVal +'" id="'+ addressId +'"/></label>';
		
		if (idx == 1) {
			editHtml += '<input type="button" id="edit_address_btn" value="Edit Shipping Address"/></div>'
			$(editHtml).insertAfter(this);
		}
		$(this).hide();
	});
	
	return false;
	
}


/**
 * Posts the edited shipping address to backend
 */
function editShippingAddress() {
	var postData = {
		'address_1': $('#address_1').val(),
		'address_2': $('#address_2').val(),
		'order_id': $('body').data('order_id')
	};
	
	if (postData.address_1.length < 2) {
		$('#mesg').html('Shipping Address 1 cannot be empty. Please fill it in and try again');
		return false;
	}
	
	$.post(_siteRootHttpS + '/gerber_shop/fulfillment_order_change_address', postData, function (data) {
		$('#mesg').html(data.message);
		
		if (data.result == 'success') {
			$('.address').each(function (idx) {
				var addressId = (idx == 0) ? 'address_1' : 'address_2';
				$(this).text($('#'+ addressId).val()).show();
			});
		
			$('#addressEdit').remove();
		}
		
	}, 'json');
}



/**
* Uses a new discount coupon
**/
function gerberCartUseCoupon() {
	var code = $('#coupon #couponCode').val();

	$.post(_siteRootHttpS + '/gerber_shop/coupon',
		{
			code: code
		},
		function(data) {
			if(data.result == "success") {
				$('form#coupon #couponCode, form#coupon #use').hide();

				$('#couponMessages').html(data.message);

				for(var i=0; i < data.cart_items.length; i++) {
					$('#gerberCartItemRow' + data.cart_items[i].object_id + ' .rowTotal').html('$' + data.cart_items[i].row_total);
				}

				gerberCartUpdateCartTotals(data.cartTotals);
			}
			
			if(data.result == "error") {
				$('#couponMessages').html(data.message);
			}
		},
		"json"
	);
}


/**
* Updates the messages related to the free shipping methods
**/
function updateFreeShippingDiscountMessages(sub_total, discount_minimum) {
	sub_total = parseFloat(sub_total);
	discount_minimum = parseFloat(discount_minimum);
	
	if(sub_total >= discount_minimum) {

		$(".freeShippingMessages div").hide();
		$(".freeShippingMessages .freeMessage").show();
	}
	else {

		$(".freeShippingMessages div").hide();
		var remaining = discount_minimum - sub_total;
		$(".freeShippingMessages .notFreeMessage span#freeShippingRemaining").html("$" + remaining);
		$(".freeShippingMessages .notFreeMessage").show();
	}
}
