var cl = cl || {};
cl.checkout = cl.checkout || {};

NO_USER_NOTIFY = 1;

cl.checkout.resource = new Resource({
    CONFIG_LIST: ['language'],
    LIMIT: ['Loading']
});

cl.checkout.hideCartRow = function(baseSkuId) {
    // if cart is empty, redirect to viewcart page (which handles 0 items by displaying a message)
    // find all TR elements with the base SKU ID in their ID
    var skuRows = $$('tr[id*=' + baseSkuId + ']');
    // hide the rows
    skuRows.each( function(rowEle) {
        rowEle.hide();
    });
};

cl.checkout.showIncrementControls = function(baseSkuId) {
    var skuRow = $$('tr[id*=' + baseSkuId + '].cart-item-rows')[0];
    if (skuRow) {
        var loadingNode = skuRow.select("span.loading_msg")[0];
        if (loadingNode) {
            loadingNode.remove();
        }
        var parentCell = skuRow.select('td.qty')[0];
        if (parentCell) {
            parentCell.childElements().each(function(ele) {
                ele.show();
            });            
        }
        var removeLink = skuRow.select("a.viewbag-remove")[0];
        if (removeLink) {
            removeLink.update(prodrb.get("Remove"));
        }
    }
};

cl.checkout.hideContinueButtons = function() {
    cl.checkout.continueButtons.each( function(btnNode) {
        btnNode.hide();
    });
}

// check for empty cart before re-showing Continue buttons
cl.checkout.showContinueButtons = function() {
    cl.checkout.continueButtons.each( function(btnNode) {
        btnNode.show();
    });        
}

cl.checkout.RemoveLink = Class.create({
	initialize: function (element) {
		this.element = $(element);
		this.element.observe ( 'click', function (evt) {
            cl.checkout.hideContinueButtons();
    		var el = evt.element();
    		var elid = el.id;
    		var reResults = elid.match(/SKU.+/);
    		if (reResults.length) {
    			var fullSkuId = reResults[0];
    			var baseSkuId = fullSkuId.replace(/SKU/, "");
                cl.checkout.removeCartItem(baseSkuId);
					// Check for pending refill and remove
//					if ( refills.pending.get(sid) ) {
//						refills.set_pending(sid,'none');
//					}
				el.innerHTML = 'Removing';
				evt.stop();
			} // end if (reResults.length) 
		}); // end this.element.observe 
	} // end initialize
});

cl.checkout.removeCartItem = function(baseSkuId) {
    transaction.remove(baseSkuId, {
        success: function(r) {
            if (transaction.qty() < 1) {
                document.location.href = "/checkout/viewcart.tmpl";
            } else {
                // TODO: refresh page contents without full relaad

                // can't use location.reload() because the page might have been an internal redirect
                // instead, pull path from a variable that was set in viewcart.tmpl or shipping.tmpl
                // window.location.reload();
                document.location.href = cl.cartPageUriPath;

                // cl.checkout.showContinueButtons();
                // cl.checkout.hideCartRow(baseSkuId);
                // cl.checkout.updateCartSubtotal();
                // cl.checkout.updateHighlights();             
                // cl.checkout.updateOrderSummary();
            }
        },
        failure: function(jsonRpcResponse) {
            cl.checkout.showContinueButtons();            
            cl.checkout.showIncrementControls(baseSkuId);
            var errorObjectsArray = jsonRpcResponse.getMessages();
            var errListNode = $("form--errors");
            cl.showErrors(errorObjectsArray, errListNode);            
        }
    });
};

cl.checkout.IncrementButton = Class.create({
    initialize: function (element, incrementValue, currentQty) {
        this.element = $(element);
        var self = this;
        
        if (currentQty == 1 && incrementValue == -1) {
            this.element.hide();
            return;
        }        

        if (currentQty == 4 && incrementValue == 1) {
            this.element.hide();
            return;
        }

        this.element.observe(
            'click',
            function (evt) {
                var el = evt.element();                
                var elid = el.id;
                var reResults = elid.match(/SKU.+/);
                if (reResults.length) {
                    var fullSkuId = reResults[0];
                    var baseSkuId = fullSkuId.replace(/SKU/, "");
                    //
                    // hide Qty controls, show "loading" message.
                    // not going to undo this on Success b/c we are re-loading the entire page
                    var loadingTxt = cl.checkout.resource.keys.get('Loading');
                    var loadingSpan = new Element("span", {"class":"loading_msg"}).update(loadingTxt);
                    var parentRow = $$('tr[id*=' + baseSkuId + '].cart-item-rows')[0];
                    var parentCell = parentRow.select('td.qty')[0];
                    parentCell.childElements().each(function(ele) {
                        ele.hide();
                    });
                    parentCell.insert({'top':loadingSpan});
                    //
                    // call remove method if only one of this item in cart
                    var itemQty = transaction.getItemQty(baseSkuId);
                    if (itemQty < 2 && incrementValue < 0) {
                        cl.checkout.hideContinueButtons();
                        cl.checkout.removeCartItem(baseSkuId);
                    } else {
                        // was transaction.add; 

                        // can't use location.href because the page might have been an internal redirect
                        // instead, pull path from a variable that was set in viewcart.tmpl or shipping.tmpl
                        // var action = location.href.parseUri().path;
						var action = cl.cartPageUriPath;

						var qty = currentQty + incrementValue;
						new HiddenForm({ 
							'name': 'checkout_altercart', 
							'id': 'checkout_altercart',
							'method': 'POST',
							'action': action						
						}).elements({
							'_SUBMIT': 'cart',
							'SKU_BASE_ID': baseSkuId,
							'QTY':qty
						}).submit();
						// end transaction.add
                    }
 				}
                evt.preventDefault();
            });
		return this.element;
	}
	
});

cl.checkout.updateOrderSummary = function() {
    var summaryContainer = $("col-2");
//    new Ajax.Updater(summaryContainer, '/checkout/includes/order_status.tmpl');
};

cl.checkout.updateAllLineItems = function () {
    var lineItemBaseSkuIds = transaction.getBaseSkuIds();
    if ( ! (lineItemBaseSkuIds && transaction) ) {
        return;
    }
    lineItemBaseSkuIds.each( function(baseSkuId) {
        cl.checkout.updateLineItemUnitPrice(baseSkuId);
        cl.checkout.updateLineItemSubtotal(baseSkuId);
    });

};

cl.checkout.updateLineItemUnitPrice = function (baseSkuId) {
    var skuRow = $$('tr[id*=' + baseSkuId + '].cart-item-rows')[0];
    if ( ! (skuRow && transaction) ) {
        return;
    }
    var lineItemUnitPrice = transaction.getLineItemUnitPrice(baseSkuId);
    var lineItemUnitTax = transaction.getLineItemUnitTax(baseSkuId);
    var unitPriceCellNode = skuRow.select("td.price")[0];
    if (!unitPriceCellNode) {
        return;
    }
    var lineItemUnitSubtotal = lineItemUnitPrice + lineItemUnitTax;
    var subtotalString = '税込 ￥' + lineItemUnitSubtotal + ' (本体 ￥' + lineItemUnitPrice + ')';
    unitPriceCellNode.update(subtotalString);
};
cl.checkout.updateLineItemSubtotal = function (baseSkuId) {
    var skuRow = $$('tr[id*=' + baseSkuId + '].cart-item-rows')[0];
    if ( ! (skuRow && transaction) ) {
        return;
    }
    var lineItemAppliedPrice = transaction.getLineItemAppliedPrice(baseSkuId);
    var lineItemAppliedTax = transaction.getLineItemAppliedTax(baseSkuId);
    var totalCellNode = skuRow.select("td.total")[0];
    if (!totalCellNode) {
        return;
    }
    var lineItemSubtotal = lineItemAppliedPrice + lineItemAppliedTax;
    var subtotalString = '税込 ￥' + lineItemSubtotal + ' (本体 ￥' + lineItemAppliedPrice + ')';    
    totalCellNode.update(subtotalString);
};

cl.checkout.updateCartSubtotal = function () {
    var subtotalNode = $$("td.cart_subtotal")[0];
    if (subtotalNode && transaction) {
        subtotalNode.update('¥' + transaction.getSubtotal());
    }
};

cl.checkout.updateHighlights = function () {
	var classbase = 1, classpos = 0;
	var classname = $w('standard highlight');
	var rowNodes = $$('tr.cart-item-rows');
	if (rowNodes) {
		rowNodes.each(function (row) {
			if (row.visible()) {
				classpos += classbase;
				row.removeClassName('standard');
				row.removeClassName('highlight');		
				row.addClassName(classname[classpos]);
				classbase = classbase * -1;			
			}
		});
	};
}

document.observe('txn:loaded', function() {
    if (transaction.count != 0) {
    	cl.checkout.updateCartSubtotal();
    	cl.checkout.updateAllLineItems();
    }
});

document.observe('dom:loaded', function() {
    cl.checkout.continueButtons = $$('.checkout-buttons');
    cl.checkout.updateHighlights();
});

