function validateCartItem(details, item) {
	var product = details.items[item];
	
	if (details.categorylimits !== '') {
		for (var i=0; i<details.categorylimits.data.CATEGORYID.length; i++) {
			if (parseInt(product.categoryid, 3) == parseInt(details.categorylimits.data.CATEGORYID[i], 3)) {
				if (! isNaN(parseInt(details.categorylimits.data.LIMIT[i], 3)) && parseInt(details.categorylimits.data.LIMIT[i], 3) > 0)
				{
					if (parseInt(product.quantity, 3) + parseInt(details.categorylimits.data.PURCHASED[i], 3) > parseInt(details.categorylimits.data.LIMIT[i], 3)) {
						return false;
					}
				}
			}
		}
	}		
	return true;
}

// this is the main check out cart display //
function getCategoryLimits(details, item) {
	var product = details.items[item];
	var limits = {
	limit : 0,
	purchased : 0,
	category : ''
	};
	
	for (var i=0; i<details.categorylimits.data.CATEGORYID.length; i++) {
		if (parseInt(product.categoryid, 3) == parseInt(details.categorylimits.data.CATEGORYID[i], 3)) {
			limits.limit = details.categorylimits.data.LIMIT[i];
			limits.purchased = details.categorylimits.data.PURCHASED[i];
			limits.category = details.categorylimits.data.CATEGORYNAME[i];
			
			return limits;
		}
	}

	return limits;
}
window.jsonCartObj = '';


function handlePromoResponse(response){
	// hide any error messages
	if($('promoMsg')){
		$('promoMsg').remove();
	}
	// if error inject new error message
	if(response.type == "error"){
		var promoMsg = new Element('span',{
			'id':'promoMsg',
			'class':'error'
		});
		promoMsg.setHTML(response.text);
		promoMsg.injectAfter($('applyPromo'));

	} else if(response.type == "notice"){
		var promoMsg = new Element('span',{
			'id':'promoMsg',
			'class':'error'
		});
		promoMsg.setHTML(response.text);
		promoMsg.injectAfter($('applyPromo'));
	
		buildCart(response);
		generateShippingSelections();    

	} else {
		buildCart(response);
		generateShippingSelections();    
	}
}

function checkPromoCode(e){
	e.preventDefault();
	var discountCode = $('discountCode').value;
	if(discountCode == ''){return false;}
	
	url = '?event=cart.checkDiscount&discountCode=' + discountCode; 
	var req = new Json.Remote(url, {
		onComplete: function(response){
			handlePromoResponse(response);
		}  
	}).send();
}
function initPromoCheck(){
	if( ! $type($('applyPromo'))){return false; }
	var applyPromo = $('applyPromo');
	applyPromo.addEvent('click', checkPromoCode.bindWithEvent(this));
}Onload.add(initPromoCheck);

function buildCart(prod) {
	//console.log('---------------77-----------------------------------------------------------------');
	if(typeof(prod) == 'string'){
		window.jsonCartObj = prod = Json.evaluate(prod);
	}else{
		window.jsonCartObj = prod;
	}
	var target = $('itemContainerScroll');
	var quickCartUpdate = '';
	var isCartValid = true;
	var qTotal = '';
	var productName = '';
	var imageURL = '';
	var imageTitle = '';
	var imageClass = '';
	var lim = '';

	
	target.empty();
	for(i=0; i< prod.items.length; i++){
		qTotal = prod.items[i].quantity*(prod.items[i].price-prod.items[i].discount);
		productName = prod.items[i].name;
		if(productName.length > 30){
			productName = productName.substr(0,27)+'...';
		}		
		imageURL = SCENE7URL + "/is/image/BuckKnives/qCart?$knife=is{BuckKnives/" + prod.items[i].imagename + "_1?scl=1}&$qSharp$";
		imageTitle = productName;
		if (validateCartItem(prod, i) === false)
		{
			lim = getCategoryLimits(prod, i);
			isCartValid = false;
			imageURL = imageURL + "&layer=2&src=BuckKnives%2FWarning20";
			imageTitle = 'Warning!!!::You can only purchase ' + (lim.limit-lim.purchased) + ' more item(s) in the ' + lim.category + ' category';
			imageClass = 'toolTip';
		}
		
		if (typeof(showUpdateLinks) == 'undefined' || showUpdateLinks == true) {
			quickCartUpdate += "<form id='item_"+prod.items[i].upc+"' class='cartItem'>" +
			"<div class='info'>" +
			"<h2 class='prodTitle'><a href='/index.cfm?event=product.detail&productID="+prod.items[i].productid+"'>"+productName+"</a></h2>" +
			"<input type='text' id='"+prod.items[i].itemkey+"_qty' class='updateQty' value='"+prod.items[i].quantity+"'>" +
			"<a style='cursor: pointer;' onClick=removeItem('"+prod.items[i].itemkey+"')>remove</a>" +
			" | <a style='cursor: pointer;' onClick=updateItemQty('"+prod.items[i].itemkey+"_qty')>update</a>" +
			"<div class=\"clear\"></div>" +
			"<h2 style='padding-top:3px;'><span style='margin-left:0;font-weight:bold;font-size:10px;'>SUB TOTAL:</span> "+formatCurrency(qTotal)+"</h2>" +
			"</div>" +
			"<div class='pix'>" +
			"<div class='previous'></div>" +
			"<div class='next'></div>" +
			"<div class='itemPict'><img class='" + imageClass + "' height='35' width='72' src='" + imageURL + "' title='" + imageTitle + "' /></div>" +
			"<a href='/index.cfm?event=secureCart.begin' id='proceedCheckout_btn_" + i + "' class='proceedCheckout_btn clear_text'>Proceed to Checkout</a>" +
			"</div>" +
			"</form>";
		}else{
			quickCartUpdate += "<form id='item_"+prod.items[i].upc+"' class='cartItem'>" +
			"<div class='info'>" +
			"<h2 class='prodTitle'><a href='/index.cfm?event=product.detail&productID="+prod.items[i].productid+"'>"+productName+"</a></h2>" +
			"<input type='text' id='"+prod.items[i].itemkey+"_qty' class='updateQty' readonly='readonly' value='"+prod.items[i].quantity+"'>" +
			"<div class=\"clear\"></div>" +
			"<h2 style='padding-top:3px;'><span style='margin-left:0;font-weight:bold;font-size:10px;'>SUB TOTAL:</span> "+formatCurrency(qTotal)+"</h2>" +
			"</div>" +
			"<div class='pix'>" +
			"<div class='previous'></div>" +
			"<div class='next'></div>" +
			"<div class='itemPict'><img class='" + imageClass + "' height='35' width='72' src='" + imageURL + "' title='" + imageTitle + "' /></div>" +
			"</div>" +
			"</form>";
			
		}


	}
	target.innerHTML = quickCartUpdate;
	
	if($('cartContentsScroll')){
		var cartTarget = $('cartContentsScroll');
		cartTarget.empty();
		var mainCartUpdate = "";
		var cartTotal = 0;
		var totalDiscount = 0;
		for(i=0; i< prod.items.length; i++){
			qTotal = prod.items[i].quantity*(prod.items[i].price-prod.items[i].discount);
			cartTotal += qTotal;
			productName = prod.items[i].name;
			if(productName.length > 23){
				if(productName.contains('&trade;')){
					var tmp = productName.split('&trade;');
					productName = tmp[0].substr(0,20)+'...';
				}else{
					productName = productName.substr(0,18)+'...';
				}
			}
			imageURL = SCENE7URL + "/is/image/BuckKnives/carttemp?$addcart2$&$product=is%7bBuckKnives/"+prod.items[i].imagename+"_1?scl=1%7d&$bkgd=BuckKnives/mainCart_itemBackground2";
			imageTitle = productName;
			imageClass = 'pict';

			if (validateCartItem(prod, i) === false)
			{
				lim = getCategoryLimits(prod, i);
				isCartValid = false;
				imageURL = imageURL + "&layer=2&src=BuckKnives%2FWarning40";
				imageTitle = 'Category Limit::Limits Exceeded';
				imageClass = 'pict toolTip';
				imageTitle = 'Warning!!!::You can only purchase ' + (lim.limit-lim.purchased) + ' more item(s) in the ' + lim.category + ' category';
			}

			//curDisc = (prod.items[i].discount * prod.items[i].quantity);
			curDisc = (prod.items[i].discount);
			if (!isNaN(curDisc) && curDisc) {
				totalDiscount += (curDisc * prod.items[i].quantity);
			}
			
			var coStr = '';
			if (typeof(showUpdateLinks) == 'undefined' || showUpdateLinks == true) {
				mainCartUpdate += "<div class='itemBlock'>" +
					"<img src='"+imageURL+"' class='" + imageClass + "' title='" + coStr + "' alt='" + coStr + "'>" +
					"<div class='content'>" +
					"<p class='itemId'>"+prod.items[i].upc+"</p>" +
					"<a class='productName' href='/index.cfm?event=product.detail&productID="+prod.items[i].productid+"'>"+productName+"</a>" +
					"<p class='quantity'>Qty:</p><input type='text' id='"+prod.items[i].itemkey+"_qty2' class='updateQty2' value='"+prod.items[i].quantity+"' />" +
					"<a class='cartUpdate' onClick=updateItemQty('"+prod.items[i].itemkey+"_qty2')>update</a>" +
					"<a class='cartRemove' onClick=removeItem('"+prod.items[i].itemkey+"')>remove</a>" +	
					"<div class='clear'></div>";
				
				
			} else {
				mainCartUpdate += "<div class='itemBlock'>" +
					"<img src='"+imageURL+"' class='" + imageClass + "' title='" + coStr + "' alt='" + coStr + "'>" +
					"<div class='content'>" +
					"<p class='itemId'>"+prod.items[i].upc+"</p>" +
					"<a class='productName' href='/index.cfm?event=product.detail&productID="+prod.items[i].productid+"'>"+productName+"</a>" +
					"<p class='quantity'>Qty: " + prod.items[i].quantity + "</p>" +	
					"<div class='clear'></div>";
			}

			console.log(prod);
			
			if (prod.isproaccount) {
				mainCartUpdate += "<p class='price'><del><span>" + formatCurrency(prod.items[i].price) + "</span></del>&nbsp;&nbsp;&nbsp;";
				//mainCartUpdate += formatCurrency(prod.items[i].price-prod.items[i].discount) + "</p>";
				mainCartUpdate += formatCurrency(prod.items[i].price-curDisc) + "</p>";
//			} else if (!isNaN(curDisc) && curDisc) {
//				mainCartUpdate += "<p class='price'><del><span>" + formatCurrency(prod.items[i].price) + "</span></del>&nbsp;&nbsp;&nbsp;";
//				mainCartUpdate += formatCurrency(prod.items[i].price-curDisc) + "</p>";
			} else {
				mainCartUpdate += "<p class='price'>" + formatCurrency(prod.items[i].price) + "</p>";
			}
			mainCartUpdate += "</div></div>";
		}
		
		cartTarget.setHTML(mainCartUpdate);
		
		$('priceSubTotal').innerHTML 			= formatCurrency(cartTotal+totalDiscount);
		$('priceTax').innerHTML 				= formatCurrency(prod.taxes);
		$('priceShipping').innerHTML 			= formatCurrency(prod.shipping);
		
		if (typeof(showUpdateLinks) == 'undefined' || showUpdateLinks == true) {
			$('priceTax').innerHTML 			= formatCurrency(0.00);
			$('priceShipping').innerHTML 		= formatCurrency(0.00);
		}
		
		if (totalDiscount && $('priceDiscount')){
			$('priceDiscount').innerHTML 		= formatCurrency(totalDiscount);
		} else if(totalDiscount && ! $('priceDiscount')){
			var pdWrap = new Element('p');
			var priceDiscount = new Element('span',{'id':'priceDiscount','class':'prices'});
			priceDiscount.innerHTML = formatCurrency(totalDiscount);
			
			var priceDiscountLabel = new Element('span',{'id':'priceDiscountLabel','class':'titles'});
			priceDiscountLabel.innerHTML = 'Discount: ';
			
			priceDiscountLabel.injectTop(pdWrap);
			priceDiscount.injectTop(pdWrap);
			
			pdWrap.injectAfter($('priceShipping').getParent());
		}
		
			
		/*
		if (totalDiscount && $('priceDiscount')){
			$('priceDiscount').innerHTML 		= formatCurrency(totalDiscount);
		} else {
			if ($('priceDiscount')){
				$('priceDiscount').remove();
			}
			if ($('priceDiscountLabel')){
				$('priceDiscountLabel').remove();
			}
		}
		*/
		calcTotalPrice();
	}
	setCartWidth();
	
	// set total items in cart
	var totalItems = "";
	if (prod.items.length == 1){
		totalItems = prod.items.length+' item';
	} else {
		totalItems = prod.items.length+' items';
	}
	var updateTotal = $('totalItemsCart');
	if (typeof(showUpdateLinks) != 'undefined' && showUpdateLinks == false) {
		if($('detailToggle') ){
			// userID set in nav.cfm
			if (userID > 0) {
				var replacment = new Element('a',{
					'id':'editCart',
					'href':'/?event=secureCart.edit'
				});
			} else {
				var replacment = new Element('a',{
					'id':'editCart',
					'href':'/?event=secureCart.begin'
				});
			}
			replacment.setHTML('EDIT CART');
			replacment.injectBefore($('detailToggle'));
			$('detailToggle').remove();
		}
	}else{
		updateTotal.innerHTML = totalItems;
	}
	
	if($('mainCartItems')){
		var mainCartItems = $('mainCartItems');
		mainCartItems.innerHTML = totalItems;
	}
	//cartUtilityToggle();
	cartItemSlide();
	var fx = new Fx.Scroll($('itemContainer'), {duration:800, wait:false, transition:Fx.Transitions.Quad.easeInOut,
			onStart:function(){
			}
		});	
	fx.toLeft();
	
	var subBtn = $('placeOrder');
	if (subBtn) {
		subBtn.setAttribute('title', '');
		subBtn.removeClass('toolTip');
		tooltip();
	}
}

function removeItem(id) {
	urchinTracker('quick cart/item removed/upc:'+id);
	var url = '/index.cfm?event=cart.removeitem.ajax&itemkey='+id+ '&c=' + generateRandom();
	var sendUpdate = new Ajax(url, {method: 'get',
		onComplete: function(response){
			initCart(response);
		}}
	);
	sendUpdate.request();
}

function updateItemQty(id) {
	var qtyInput = $(id);
	var nID = id.split('_');
	var url = '/index.cfm?event=cart.update.json&quantity_'+nID[0]+'='+qtyInput.value + '&c=' + generateRandom();
	urchinTracker('quick cart/item qty updated/upc:'+nID[0]+', quantity:'+qtyInput.value);
	var sendUpdate = new Ajax(url, {method: 'get', onComplete: function(response){
		var addTheItem = processCartResponse(response);
			if(addTheItem === true){
				initCart(response);
			}
			else{
				window.fireEvent('onLimitExceeded');
			}
	}}).request();
}



function invalidCartUpdateItemQty(id) {
	var qtyInput = $(id);
	var nID = id.split('_');
	var url = '/index.cfm?event=cart.update.json&quantity_'+nID[0]+'='+qtyInput.value+ '&c=' + generateRandom();
	urchinTracker('quick cart/item qty updated/upc:'+nID[0]+', quantity:'+qtyInput.value);
	var sendUpdate = new Ajax(url, {method: 'get', onComplete: function(response){
		// nothing now
	}}).request();
}

/* *** checkout procedure *** */


function containsCustomKnife(){
	var flag = false;
	window.jsonCartObj.items.each(function(x){
		if(x.customoptions != ''){
			flag = true;
		}
	})
	return flag;
}
function IsPOBox(str){
	//console.log('*IsPOBox*');
	var s = str.toUpperCase();
	var m = null;
	var re = new RegExp("^P\\s*\\.*\\s*O\\s*\\.*\\s*Box|APO\\s+|FPO\\s+|PO\\s+");
	m = re.exec(s);
	
	if (m == null){
		//console.log('no po box');
		return false;
		
	} else {
		//console.log('is po box');
		return true;
	}
}

function calcShippingTotal(){
	var priceDiscount = '';
	var getItemTotal = parseFloat($('priceSubTotal').getText().split('$')[1]);
	var updatedTotal = '';
	if($('priceDiscount')){
		priceDiscount = parseFloat($('priceDiscount').getText().split('$')[1]);
		return getItemTotal - priceDiscount;
	}else{
		return getItemTotal;
	}
}

function calcTotalPrice(){
	// get price from dom since cartObject is not updated
	// after taxes are applied and we don't want to do another request 
	
	var getItemTotal = parseFloat($('priceSubTotal').getText().split('$')[1]);
	var getTax		 = parseFloat($('priceTax').getText().split('$')[1]);
	var getShipping	 = parseFloat($('priceShipping').getText().split('$')[1]);
	var priceDiscount = '';
	var updatedTotal = '';
	if($('priceDiscount')){
		priceDiscount = parseFloat($('priceDiscount').getText().split('$')[1]);
		updatedTotal = getItemTotal + getTax + getShipping - priceDiscount;
	}else{
		updatedTotal = getItemTotal + getTax + getShipping;
	}

	$('priceTotal').empty();
	$('priceTotal').setText('Total:');
	var totalvalue = new Element('span');
	totalvalue.setText(formatCurrency(updatedTotal));
	totalvalue.injectInside($('priceTotal'));
}
function generateRandom(){
	rand = new Date().getTime();
	return rand;
}
function updateTaxes(){
	// gets values of state/province and zip code from dom and updates taxes
	var url = "index.cfm?event=secureCart.requestTaxRate&country=" + $('shippingBlock_country').value + "&state="+$('shippingBlock_stateprovince').value + "&zipcode="+$('shippingBlock_postalcode').value + '&c=' + generateRandom();;
	var tr = new Ajax(url, {
		method: 'get', 
		update: $('priceTax'),
		onComplete:calcTotalPrice
	}).request();
}

function initCountry(){
	var state = $('shippingBlock_stateprovince');
}

function initShippingOptions(isPOBox){
	//console.log('--*initShippingOptions*--')
	var s_val = $('shippingBlock_stateprovince').value
	var is_s = -1;
	var redraw = false;
	var state;
	var baseShipping = isPOBox;
	for (var s=0; s<statesArray.length; s++){
		if (statesArray[s].STATEPROVINCESHORT == s_val){
			document.getElementById('shippingBlock_country').value = statesArray[s].COUNTRYNAME;
			$('countryNameDiv').setText(statesArray[s].COUNTRYNAME);
			if (countryName != statesArray[s].COUNTRYNAME || baseShipping == false){
				redraw = true;
			}
		}
	}
	if (redraw || arguments.length){
		if ($('continueBilling')) {
			$('continueBilling').setStyle('display', 'none');
		}
		countryName = $('shippingBlock_country').value;
		
		// need to retrieve subtotal + discount to pass for shipping options
		
		var passPrice = calcShippingTotal();
		generateShippingSelections(passPrice);
	}
}



// get from DOM, the state/province country and zip, then update taxes

function generateShippingSelections(getTotal) {
	//console.log('*generateShippingSelections*');
	var optionsElement = $('ShippingOptions');
	var country = $('shippingBlock_country').value.trim();
	var customKnife = containsCustomKnife();
	
	var total = getTotal || _cartTotal;
	console.log(total);
	if(optionsElement && country.length > 0){
		var url = "index.cfm?event=secureCart.needCountryShippingMethods&countryName=" + country + '&SubTotal=' + total + '&customKnife=' + customKnife+ '&c=' + generateRandom();
		var defaultRequest = new Json.Remote(url, {
			onComplete: function(shippingOptionsObj){
				
				// first, check if address is PO box
				isPo = IsPOBox($('shippingBlock_addressline1').value);
				
				// check if cart OBJ contains a custom Knife, returns true if CF found
				buildShippingOptions(isPo, customKnife, shippingOptionsObj);
				updateTaxes();
			}
		}).send();
	}
}
function isShipMethodAvailable(method, shippingOptionsObj){
	for (var si=0; si<shippingOptionsObj.data.SERVICECODE.length; si++)	{
		if (shippingOptionsObj.data.SERVICEKEY[si] == method){
			return true;
		}
	}
	return false;
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function buildShippingOptions(isPOBox, customKnife, shippingOptionsObj){
	console.log('-rebuild shipping selections-', isPOBox, customKnife, shippingOptionsObj)
	var chk = '';
	var radStr = '';
	var optionsElement = $('ShippingOptions');
	optionsElement.empty();
	
	
	for (si=0; si<shippingOptionsObj.data.SERVICECODE.length; si++){
		if (shippingOptionsObj.data.METHODISACTIVE[si] && (isPOBox == false || (isPOBox == true && shippingOptionsObj.data.CANSENDTOPOBOX[si]))){
			// CREATE INPUT CONTAINER
			var inputContainer = new Element('div',{
				'class':'inputContainer',
				'styles':{
					'float' : 'left',
					'width' : "48%"
				}
			}).injectInside(optionsElement);

			function createShippingSelector(){
				var radio =  new Element('input',{
					'type':'radio',
					'class':'shippingMethodInput',
					'name':'shippingMethod',
					'id': 'shippingMethod_'+si,
					'value':  shippingOptionsObj.data.SERVICEKEY[si],
					'events': {
				        'click': updateCartShipMethod.bindWithEvent(this)
				    }
				}).injectInside(inputContainer);
				
				// SEE IF THE RADIO BUTTON SHOULD BE CHECKED
				if ((isShipMethodAvailable(shipMethod, shippingOptionsObj)==false && shippingOptionsObj.data.ISDEFAULT[si]) || (shippingOptionsObj.data.ISDEFAULT[si] && shipMethod == '0') || shippingOptionsObj.data.SERVICEKEY[si] == shipMethod || (isPOBox == true && shippingOptionsObj.data.CANSENDTOPOBOX[si])) {
					////console.log('check this')
					radio.setProperty('checked','checked');
				}
				
				// RADIO LABEL
				var radioLabel  = new Element('label',{
					'for': 'shippingMethod_'+si,
					'styles':{
					'font-size': '11px',
					'font-weight': 'bold'
				}
				}).setText(shippingOptionsObj.data.SERVICECODE[si]).injectInside(inputContainer);
				
				// DOES THIS NEED AN EMPHASIS FOR THE DISCLAIMER
				if (shippingOptionsObj.data.TOTALCHARGES[si] > 0) {
					var emphasis = new Element('span',{
						'styles':{
						color: "#FF0000"
					}
					}).setText('*').injectInside(radioLabel);
				}
				
				// Add the price to the shipping option
				var price = new Element('p',{
					'class': 'shippingPrice',
					'styles':{
					'float':'none'
				}
				}).setText(formatCurrency(shippingOptionsObj.data.TOTALCHARGES[si])).injectInside(radioLabel);
			}
			
			// need to only display basic shipping if a custom knife is found.
			if(customKnife == true){
				if(shippingOptionsObj.data.SHIPPINGTYPE[si] == 'Standard'){
					createShippingSelector();
				} 
			}else{
				createShippingSelector();
			}			
		}
	}
	var clear = new Element('div',{
		'class':'clear'
	}).setHTML('&nbsp;');

	clear.clone().injectInside(optionsElement);

	var disclaimer = new Element('p',{
		'class':'disclaimer',
		'styles':{
			'padding-top':12,
			'color':'#FF0000',
			'height':'auto'
		}
	}).setHTML('* All expedited orders must be placed by 12:00pm (noon) PST Monday - Thursday. Orders placed after 12pm PST will ship the next day. Any orders placed on Friday must be placed by 10am PST. Orders placed after Friday 10am PST won\'t ship until Monday. No Saturday deliveries.<br /><br />No expedited shipping available for Custom Knife Shop orders.<br /><br />UPS only accepts physical addresses, no P.O. Boxes<br /><br />FREE UPS Ground Shipping on USA orders over $50.00!').injectInside(optionsElement);
	clear.clone().injectInside(optionsElement);

	updateCartShipMethod();
	//initShippingEvents(isPOBox);
}



function updateCartShipMethod(event){
	if(event){
		event.stopPropagation();
	}
	var match = false;
	var shipMethod = "";
	$ES('.shippingMethodInput').each(function(el){
		if(el.checked){
			shipMethod = el.value;
		}
	});
	if(shipMethod.length > 0 ) {
		//debug(generateRandom())
		var url = 'index.cfm?event=secureCart.shippingmethod&shippingMethod=' + shipMethod+ '&c=' + generateRandom();
		var defaultRequest = new Json.Remote(url, {
			onComplete: function(response){
				if(window.ie6){
					//debug(response.taxes);
					//debug(response.shipping);
				}
				
				if(window.first > 0){
					initCart(response);
				}
				window.first++;
				
				$('continueBilling').setStyle('display', 'block');
			}  
		}).send();
	}
}



function initShippingEvents(isPOBox){
	
	if( ! $type($('shippingBlock_addressline1'))){return false};
	
	var addl = [$('shippingBlock_addressline1'), $('shippingBlock_stateprovince'), $('shippingBlock_city'), $('shippingBlock_postalcode'), $('continueBilling')];
	try{
		addl.each(function(el){
			el.addEvents({
				'change': function(e){
				initShippingOptions(isPOBox);
				updateTaxes();
			}			
			})
		})
	}
	catch(err){
		//nada
	}
}Onload.add(initShippingEvents);

window.first = 0;

function initCart(response){
	
	try{
		buildCart(response);
	}
	catch(error){
		buildCart(jsonCart);
	}
	if( ! $('chooseShippingMethod')){
		////console.log('we\'re NOT the shipping configuration now todo');
		return false
	}else{
		////console.log('we\'re in the shipping configuration now: ' , $('chooseShippingMethod'));
		initShippingOptions();
	}
} Onload.add(initCart);