var $=jQuery.noConflict();

$(document).ready(function(){
	$(".promo-inner").hide();
	$(".promo a.use").click(function(){
		$(".promo-inner").slideToggle();
		return false;
	})
});
$(document).ready(function(){
	$(".billing-address .wrap").hide();
	$(".billing-address .check input").click(function(){
		if (this.checked)
			$(".billing-address .wrap").slideUp();
		else
			$(".billing-address .wrap").slideDown();
	})
});

// $.fn.throbber = function() {
// 	var throbber = $('<img src="/content/images/throbber-170505-B30606.gif" />');
// 	this.after(throbber).css("display", "none");
// }
var icon_tick = '<img src="/content/images/icon-tick.png" style="vertical-align:middle;" />';
var throbber = '<img src="/content/images/throbber.gif" style="vertical-align:middle;" />';
var calculating = throbber + ' <em style="font-size:12px;">Calculating...</em>';


function price_to_float(str) {
	str = str.replace('$', '');
	str = str.replace(',', '');
	str = parseFloat(str);
	return str;
}
function timestamp() {
	return new Date().getTime();
}
function ajax_url_params() {
	var str = 'r='+timestamp();
	var regexp = new RegExp("cart", "i");
	if(regexp.test(window.location.href)) {
		str += '&mode=cart';
	}
	return str;
}
function refresh_modals() {
	$('.ot-shipping-modal').each( function () {	
		$(this).qtip({
			id: 'modal', // Since we're only creating one modal, give it an ID so we can style it
			content: {
				text: '<img src="/content/images/throbber.gif" style="vertical-align:middle;" />',
				ajax: {
					url: $(this).attr('href')
				},
				title: {
					text: $(this).attr('title'),
					button: true
				}
			},
			position: {
				my: 'center', // ...at the center of the viewport
				at: ' center',
				target: $(window)
			},
			show: {
				event: 'click', // Show it on click...
				solo: true, // ...and hide all other tooltips...
				modal: true // ...and make it modal
			},
			hide: false,
			style: 'ui-tooltip-shadow ui-tooltip-tipped ui-tooltip-light'
		});
	}).click(function(event) { event.preventDefault(); });
}

// cart
// function cart_update_totals(xml, no_ship_quotes) {
function cart_update_totals(xml, mode) {
	
	var totals_node = $("totals", xml);
	
	if( $("#cart_subtotal").length > 0 ) {
		$("#cart_subtotal").html( $("subtotal", totals_node).text() );
	}
	
	var istaxed = false;
	
	if( $("#tr_cart_gst").length > 0 ) {
		var gst = $("gst", $("tax", totals_node)).text();
		var gst_val = price_to_float(gst);
		if(gst_val > 0) {
			$("#cart_gst").html(gst);
			$("#tr_cart_gst").css('display', '');
			istaxed = true;
		} else {
			$("#tr_cart_gst").css('display', 'none');
		}
	}
	
	if( $("#tr_cart_pst").length > 0 ) {
		var pst = $("pst", $("tax", totals_node)).text();
		var pst_val = price_to_float(pst);
		if(pst_val > 0) {
			$("#cart_pst").html(pst);
			$("#tr_cart_pst").css('display', '');
			istaxed = true;
		} else {
			$("#tr_cart_pst").css('display', 'none');
		}
	}
	
	if( $("#tr_cart_hst").length > 0 ) {
		var hst = $("hst", $("tax", totals_node)).text();
		var hst_val = price_to_float(hst);
		if(hst_val > 0) {
			$("#cart_hst").html(hst);
			$("#cart_hst_label").html( 'HST (' + $("hst", $("tax", totals_node)).attr('rate') + '%):');
			$("#tr_cart_hst").css('display', '');
			istaxed = true;
		} else {
			$("#tr_cart_hst").css('display', 'none');
		}
	}
	
	if(istaxed) {
		$('#tr_cart_tax').css('display', 'none');
	} else {
		$('#tr_cart_tax').css('display', '');
		$("#cart_tax").html('$0.00');
	}
	
	var misc = new Array;
	misc['table'] = '';
	misc['list'] = '';
	$("misc", totals_node).children().each(
		function(key) {
			misc['table'] += '<tr class="tr_cart_misc_added">';
			misc['table'] += '<td align="right" style="padding-right:7px;">' + $("label", this).text() + '</td>';
			misc['table'] += '<td align="right">' + $("text", this).text() + '</td>';
			misc['table'] += '</tr>';
			misc['list'] += '<li class="tr_cart_misc_added">';
			misc['list'] += '<strong>' + $("label", this).text() + '</strong>';
			misc['list'] += '<span>' + $("text", this).text() + '</span>';
			misc['list'] += '</li>';
		}
	);
	$('#tr_cart_misc').html('');
	$('.tr_cart_misc_added').remove();
	if(misc['table'] != '' && $('#table_cart_totals').length > 0) {
		$('#tr_cart_misc').after( misc['table'] );
	}
	if(misc['list'] != '' && $('#ul_cart_totals').length > 0) {
		$('#tr_cart_total').before( misc['list'] );
	}
	
	//surcharges: if surcharge record isn't shown yet but it's part of the order totals, create record
	if(
		$('#tr_cart_surcharges').length == 0
		&& $("surcharges", totals_node).length > 0
	) {
		var surcharges = new Array;
		surcharges['table'] = '';
		surcharges['list'] = '';
		
		var surcharge_node = $("surcharges", totals_node);
		
		surcharges['table'] += '<tr id="tr_cart_surcharges">';
		surcharges['table'] += '<td align="right" style="padding-right:7px;">' + $("label", surcharge_node).text() + '</td>';
		surcharges['table'] += '<td align="right">' + $("text", surcharge_node).text() + '</td>';
		surcharges['table'] += '</tr>';
		surcharges['list'] += '<li id="tr_cart_surcharges">';
		surcharges['list'] += '<strong>' + $("label", surcharge_node).text() + '</strong>';
		surcharges['list'] += '<span>' + $("text", surcharge_node).text() + '</span>';
		surcharges['list'] += '</li>';
		
		if($('#table_cart_totals').length > 0) {
			$('#tr_cart_shipping').after( surcharges['table'] );
		}
		if($('#ul_cart_totals').length > 0) {
			$('#tr_cart_shipping').after( surcharges['list'] );
		}
	}
	
	$("#cart_total").html( $("total", totals_node).text() );
	
	var address_node = $("address", xml);
	
	var subtotal = $("subtotal", totals_node).text();
	subtotal = price_to_float(subtotal);
	
	// initialize(); //lightbox
	refresh_modals();
	var free = false;
	if( $("method", xml).text().indexOf('Ground') != -1 && subtotal >= 150 && $("freeshipelegible", xml).text() == '1' && $("country", address_node).text() == 'CA' ) {
		free = true;
	}
	
	if(mode == 'update_coupon_code') {
		
		
		
	// if(no_ship_quotes == true) {
	} else if(mode == 'select_ship_quote') {
		
		// select shipping quote (manually or auto by update zip (below)):
		// * update totals line
		// * update other totals (e.g. tax may change as well)
		
		var shipping = $("shipping", totals_node).text();
		if(shipping != '') {
			// $("#cart_shipping_label").html("Shipping (" + $("method", xml).text() + "):");
			$("#cart_shipping_label").html($("method", xml).text() + ":");
			var shipping_float = price_to_float(shipping);
			// if(shipping_float == 0) {
			if(free == true || shipping_float == 0) {
				
				var savings = '';
				var actual_rate = $("shipping", totals_node).attr('actual_rate');
				if(actual_rate != '' && actual_rate != undefined) {
					savings = '<s>$'+actual_rate+'</s> ';
				}
				
				if (free != true) {
					$("#cart_shipping").html('$' + actual_rate);
				} else {
					$("#cart_shipping").html(savings + '<strong class="free">FREE</strong>');
				}
				
				$("#tr_cart_surcharges").css('display', '');
				$("#cart_surcharges").html( shipping );
			} else {
				$("#cart_shipping").html( shipping );
				$("#tr_cart_surcharges").css('display', 'none');
			}
		}
	} else {
		
		// update zip: 1st run: get ship quotes
		
		// $('#shipquotes').html("<tr><td>Getting quotes...</td></tr>");
		
		if(free == true) {
			$("#cart_shipping_label").html("Shipping (Ground):");
			$("#cart_shipping").html('<strong class="free">FREE</strong>');
			// $("#tr_cart_surcharges").css('display', '');
		} else {
			// $("#tr_cart_surcharges").css('display', 'none');
		}
		// } else {
			
			// initialize(); //lightbox
			refresh_modals();
			
			$.get("xmlhttp-shippingQuotes.php?"+ajax_url_params(), {}, function(xml) {
				
				if($("error", xml).text() != '') {
					$('#shipquotes').html('<tr><td style="text-align:center;"><em>' + $("error", xml).text() + '</em></td></tr>');
					if( $('#cart_shipping').html().indexOf('Calculating') != -1) {
						$('#cart_shipping').html("<em>Enter Postal Code</em>");
					}
					
				} else {
				
					// var quotes_node = $("quotes", xml);
					// var ground_node = $("ground", quotes_node);
				
					var ground = '';
					var ground_node = $("ground", xml);
					if(ground_node.text() != '') {
						var ground_rate = $("rate", ground_node).text();
						var ground_rate_float = price_to_float(ground_rate);
						if(ground_rate_float == 0) {
							
							ground_rate = '<strong class="free">FREE</strong>';
							var actual_rate = $("rate", ground_node).attr('actual_rate');
							if(actual_rate != '' && actual_rate != undefined) {
								ground_rate = '<s>$'+actual_rate+'</s> ' + ground_rate;
							}
							// $("#tr_cart_surcharges").css('display', '');
							
						} else {
							
							// free shipping + surcharges?
							
							var address_node = $("address", xml);
							
							var subtotal = $("subtotal", totals_node).text();
							subtotal = price_to_float(subtotal);
							if( subtotal >= 150 && $("freeshipelegible", xml).text() == '1' && $("country", address_node).text() == 'CA' ) {
								ground_rate = '<strong class="free">FREE</strong> + $' + ground_rate + ' Surcharges';
							} else {
								ground_rate = '$' + ground_rate;
							}
							// $("#tr_cart_surcharges").css('display', 'none');
						}
						// ground = '\
						// 	<tr>\
						// 		<td style="width:1%;">\
						// 			<input type="radio" name="shipquote" value="ground" id="shipquote[ground]" onchange="cart_select_shipping_method(this);" checked="checked" />\
						// 		</td>\
						// 		<td>\
						// 			<label for="shipquote[ground]">Ground</label>\
						// 		</td>\
						// 		<td style="text-align:right;">\
						// 			' + ground_rate + '\
						// 		</td>\
						// 	</tr>\
						// ';
						ground = '<tr><td style="width:1%;"><input type="radio" name="shipquote" value="ground" id="shipquote[ground]" onchange="cart_select_shipping_method_onchange(this);" onclick="cart_select_shipping_method_onclick(this);" checked="checked" /></td><td><label for="shipquote[ground]">Ground</label></td><td class="amount">' + ground_rate + '</td></tr>';
					}
					
				
					var express = '';
					var express_node = $("express", xml);
					var express_rate = $("rate", express_node).text();
									
					express_rate_float = express_rate.replace('$', '');
					express_rate_float = express_rate_float.replace(',', '');
					express_rate_float = parseFloat(express_rate_float);
					
					var tbd = $(express_node).attr('tbd');
					
					if(express_rate_float > 0) { // || tbd == '1'
						
						var checked = '';
						var disabled = '';
						var tr_class = '';
						var express_rate_display = '$' + express_rate;
						
						if(ground == '') {
							checked = ' checked="checked"';
						}
						
						var notavailable = $(express_node).attr('notavailable');
						if(notavailable == '1') {
							checked = '';
							disabled = ' disabled="disabled"';
							tr_class = 'notavailable';
							express_rate_display = '';
						}
						// if(tbd == '1') {
						// 	express_rate_display = '<span style="color:red;">TBD</span>';
						// }
						// express = '\
						// 	<tr>\
						// 		<td class="radio">\
						// 			<input type="radio" name="shipquote" value="express" id="shipquote[express]" onchange="cart_select_shipping_method(this);"' + checked + ' />\
						// 		</td>\
						// 		<td>\
						// 			<label for="shipquote[express]">Express</label>\
						// 		</td>\
						// 		<td class="amount">\
						// 			$' + express_rate + '\
						// 		</td>\
						// 	</tr>\
						// ';
						express = '<tr class="' + tr_class + '"><td class="radio"><input type="radio" name="shipquote" value="express" id="shipquote[express]" onchange="cart_select_shipping_method_onchange(this);" onclick="cart_select_shipping_method_onclick(this);"' + checked + disabled +' /></td><td><label for="shipquote[express]">Express</label></td><td class="amount">' + express_rate_display + '</td></tr>';
					}
					// $('#shipquotes').empty();
					// $('#shipquotes').append(content);
					$('#shipquotes').html(ground + express);
					
					// $("#cart_shipping").html( '$' + rate );
					
					if(free == false) {
						$.get("xmlhttp-shippingToolbox.php?"+ajax_url_params(), {}, function(xml2) {
							// cart_update_totals(xml2, true);
							cart_update_totals(xml2, 'select_ship_quote');
						});
					} else {
						$('#cart_surcharges').html(ground_rate);
						$("#tr_cart_surcharges").css('display', '');
					}
				} //no error
				// initialize(); //lightbox
				refresh_modals();
			});
		// }
	}
}
function cart_update_qty(upc) {
	var qty = $("#cart_quantity\\["+upc+"\\]").val();
	if(qty.match(/[^\d]/) != null) {
		return false;
	}
	qty *= 1;
	if(qty == 0) {
		cart_remove_product(upc);
		return;
	}
	$("#sub-total-cell\\["+upc+"\\]").html("Updating...");
	$.post("xmlhttp-orderToolbox.php?action=cart_update_qty_ajax&"+ajax_url_params(), {
		product_id: $("#products_id\\["+upc+"\\]").val(),
		qty: qty
	}, function(xml) {
		$(xml).find("product").each(function(){
			if($("products_upc", this).text() == upc) {
				$("#sub-total-cell\\["+upc+"\\]").html( $("subtotal", this).text() );
				var stock = $("stock", this).text() * 1;
				if(stock < qty) {
					if(stock > 0) {
						$("#instock\\["+upc+"\\]").css("display", "none");
						$("#limitedstock\\["+upc+"\\]").css("display", "");
						$("#outofstock\\["+upc+"\\]").css("display", "none");
					} else {
						$("#instock\\["+upc+"\\]").css("display", "none");
						$("#limitedstock\\["+upc+"\\]").css("display", "none");
						$("#outofstock\\["+upc+"\\]").css("display", "");
					}
				} else {
					$("#instock\\["+upc+"\\]").css("display", "");
					$("#limitedstock\\["+upc+"\\]").css("display", "none");
					$("#outofstock\\["+upc+"\\]").css("display", "none");
				}
			}
		});
		cart_update_totals(xml);
	});
}
function cart_remove_product(upc) {
	if(confirm( 'Remove ' + $("#product_name\\["+upc+"\\]").text() + ' from your cart?' )) {
		$.post("xmlhttp-orderToolbox.php?action=cart_remove_product_ajax&"+ajax_url_params(), {
			product_id: $("#products_id\\["+upc+"\\]").val()
		}, function(xml) {
			if( $(xml).find("products").children().size() == 0) {
				var table = $("#cart-contents table");
				var div = $('<div class="empty">Your Cart is empty.</div>');
				table.fadeOut(function() {
					$("#cart-contents").append( div.fadeIn() );
				});
				$("#cart-totals").fadeOut();
			} else {
				$("#cart_product\\["+upc+"\\]").fadeOut("slow");
				cart_update_totals(xml);
			}
		});
	}
}
function cart_update_zip() {
	var zip = $("#zip").val();
	if(zip == '') {
		return false;
	}
	// var throbber = $('<img src="/content/images/throbber-170505-B30606.gif" />');
	// $(invoker).after(throbber);
	// $('#shipping_method').css("display", "none");
	// $('#shipping_method_loading').html("Loading...");
	// $('#est_ship_button').val("Loading...");
	
	$('#shipquotes_wrapper').css('visibility', 'visible');
	$('#shipquotes').html('<tr><td style="text-align:center;line-height:16px;">'+calculating+'</td></tr>');
	
	$("#cart_shipping_label").html("Shipping:");
	// $("#cart_shipping").html("Calculating...");
	// $('#cart_gst').html("Calculating...");
	// $('#cart_pst').html("Calculating...");
	// $('#cart_hst').html("Calculating...");
	// $('#cart_tax').html("Calculating...");
	// $('#cart_total').html("Calculating...");
	$("#cart_shipping").html(calculating);
	$("#cart_surcharges").html(calculating);
	$('#cart_gst').html(calculating);
	$('#cart_pst').html(calculating);
	$('#cart_hst').html(calculating);
	$('#cart_tax').html(calculating);
	$('#cart_total').html(calculating);
	
	// $(this).fadeOut(500, function() { $().remove(this); });
	
	// $('#tr_cart_misc').empty();
	// $('#tr_cart_misc *').fadeOut('slow', function() { $('#tr_cart_misc').html(''); });
	// $('#tr_cart_misc').fadeOut("slow");
	
	//todo: add 30s timeout => "Shipping rate currently unavailable"
	$.get("xmlhttp-shippingToolbox.php?action=update_zip&zip="+zip+"&"+ajax_url_params(), {}, function(xml) {
		if( $("error", xml).text() != '' ) {
			// $('#shipping_method_loading').html( $("error", xml).text() );
			$('#shipquotes').html('<tr><td style="text-align:center;"><em>' + $("error", xml).text() + '</em></td></tr>');
			$('#cart_shipping').html("<em>Enter Postal Code</em>");
			$("#tr_cart_gst").css('display', 'none');
			$("#tr_cart_pst").css('display', 'none');
			$("#tr_cart_hst").css('display', 'none');
			$('#cart_tax').html("<em>Enter Postal Code</em>");
			$('#tr_cart_tax').css('display', '');
			$('#cart_total').html( $('#cart_subtotal').html() );
		} else {
			cart_update_totals(xml);
			if( $("country", $("address", xml)).text() == 'CA' ) {
				$('#freeshipnote').css('display', '');
			} else {
				$('#freeshipnote').css('display', 'none');
			}
			// $('#shipping_method_loading').html("");
			// $('#shipping_method').css("display", "");
			//get shipping quotes
		}
		// $('#est_ship_button').val("Calculate");
	});
}
function cart_update_coupon_code() {
	
	$('#update_coupon_code_status_img').html('');
	$('#update_coupon_code_error').html('');
	
	var coupon_code = $("#coupon_code").val();
	if(coupon_code == '') {
		return false;
	}
	
	$('#update_coupon_code_status_img').html(throbber);
	$('#cart_total').html(calculating);
	
	$.get("xmlhttp-orderToolbox.php?action=update_coupon_code&coupon_code="+coupon_code+"&"+ajax_url_params(), {}, function(xml) {
		if( $("error", xml).text() != '' ) {
			
			$('#update_coupon_code_status_img').html('');
			$('#update_coupon_code_error').html( $("error", xml).text() );
			
			$.get("xmlhttp-orderToolbox.php?nd&"+ajax_url_params(), {}, function(xml2) {
				cart_update_totals(xml2, 'update_coupon_code');
			});
			
		} else {
			$('#update_coupon_code_status_img').html(icon_tick);
			cart_update_totals(xml, 'update_coupon_code');
		}
	});
}

function single_product_update_zip(product_id) {
	var zip = $("#zip").val();
	if(zip == '') {
		return false;
	}
	$('#shipquotes_wrapper').css('display', 'block');
	$('#shipquotes').html('<tr><td style="text-align:center;line-height:16px;">'+calculating+'</td></tr>');
	
	$.get("xmlhttp-singleProductShippingQuote.php?action=update_zip&zip="+zip+"&product_id="+product_id+"&"+ajax_url_params(), {}, function(xml) {
		if( $("error", xml).text() != '' ) {
			$('#shipquotes').html('<tr><td style="text-align:center;"><em>' + $("error", xml).text() + '</em></td></tr>');
		} else {
			
			var ground = '';
			var ground_node = $("ground", xml);
			if(ground_node.text() != '') {
				var ground_rate = $("rate", ground_node).text();
				var ground_rate_float = price_to_float(ground_rate);
				var product_price = $("product_price", xml).text();
				product_price = price_to_float(product_price);
				var address_node = $("address", xml);
				if(
					ground_rate_float == 0
					|| (
						product_price >= 150 && $("freeshipelegible", xml).text() == '1' && $("country", address_node).text() == 'CA'
					)
				) {
					ground_rate = '<strong class="free">FREE</strong>';
					
				} else {
					ground_rate = '$' + ground_rate;
				}
				ground = '<tr><td>Ground:</td><td class="amount">' + ground_rate + '</td></tr>';
			}
			
			
			var express = '';
			var express_node = $("express", xml);
			var express_rate = $("rate", express_node).text();
							
			express_rate_float = express_rate.replace('$', '');
			express_rate_float = express_rate_float.replace(',', '');
			express_rate_float = parseFloat(express_rate_float);
			
			if(express_rate_float > 0) {
				
				var tr_class = '';
				var express_rate_display = '$' + express_rate;
				
				var notavailable = $(express_node).attr('notavailable');
				if(notavailable == '1') {
					tr_class = 'notavailable';
					express_rate_display = '';
				}
				express = '<tr class="' + tr_class + '"><td>Express:</td><td class="amount">' + express_rate_display + '</td></tr>';
			}
			$('#shipquotes').html(ground + express);
		}
	});
}

function cart_select_shipping_method_onclick(radio) {
	//only for ie which doesn't trigger onchange
	if($.browser.msie) {
		cart_select_shipping_method(radio);
	}
}
function cart_select_shipping_method_onchange(radio) {
	//for all non-ie
	if($.browser.msie) {
		return;
	}
	cart_select_shipping_method(radio);
}
function cart_select_shipping_method(radio) {
	if(radio.checked == false) {
		return;
	}
	$("#cart_shipping_label").html("Shipping:");
	// $("#cart_shipping").html("Loading...");
	$("#cart_shipping").html(calculating);
	$("#cart_surcharges").html(calculating);
	if( $('#cart_gst').length > 0 ) {
		// $('#cart_gst').html("Loading...");
		$('#cart_gst').html(calculating);
	}
	if( $('#cart_pst').length > 0 ) {
		// $('#cart_pst').html("Loading...");
		$('#cart_pst').html(calculating);
	}
	if( $('#cart_hst').length > 0 ) {
		// $('#cart_hst').html("Loading...");
		$('#cart_hst').html(calculating);
	}
	// $('#cart_total').html("Loading...");
	$('#cart_total').html(calculating);
	$.get("xmlhttp-shippingToolbox.php?action=select_method&method="+radio.value+"&"+ajax_url_params(), {}, function(xml) {
		if( $("error", xml).text() != '' ) {
			// $('#shipping_method_loading').html( $("error", xml).text() );
			$('#shipquotes').html('<tr><td style="text-align:center;">' + $("error", xml).text() + '</td></tr>');
			$('#cart_shipping').html("-");//$0.00
			$('#cart_surcharges').html("-");//$0.00
			$('#cart_gst').html("-");//$0.00
			$('#cart_pst').html("-");//$0.00
			$('#cart_hst').html("-");//$0.00
			$('#cart_total').html("-");//$0.00
		} else {
			// cart_update_totals(xml, true);
			cart_update_totals(xml, 'select_ship_quote');
		}
	});
}
