var num_items = 0;

function renderCart()
{
    var code_array = [];

    var cur_cart = new Cart();

    var aCart = cur_cart.getCartItems();
    num_items = cur_cart.getNumCartItems();

    if (num_items > 0) {
        code_array.push("<table border=\"0\" class=\"header_table\" cellpadding=\"0\" cellspacing=\"0\">");
        code_array.push("<tr>");
            code_array.push("<td class=\"header_cell\">Remove</td>");
            code_array.push("<td class=\"header_sep\"><img src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/line_sep.gif\" /></td>");
            code_array.push("<td class=\"header_cell\">Description</td>");
            code_array.push("<td class=\"header_sep\"><img src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/line_sep.gif\" /></td>");
            code_array.push("<td class=\"header_cell\">Quantity</td>");
            code_array.push("<td class=\"header_sep\"><img src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/line_sep.gif\" /></td>");
            code_array.push("<td class=\"header_cell\">Unit Price</td>");
            code_array.push("<td class=\"header_sep\"><img src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/line_sep.gif\" /></td>");
            code_array.push("<td class=\"header_cell\">Price</td>");
            code_array.push("<td><img src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/end_cap.gif\" /></td>");
        code_array.push("</tr>");
        code_array.push("<tr><td style=\"height:18px;\"></td></tr>");

        //loop through each item and display
        var i;
        var cur_item;
        var running_total = 0;
        for (i=1;i<=num_items;i++) {
            eval("cur_item = aCart.cart_item_"+i+";");

            code_array.push("<tr id=\"cart_line_"+i+"\">");
            code_array.push("<td class=\"item_cell\"><input id=\"delete_"+i+"\" type=\"checkbox\" value=\""+cur_item.cart_id+"\" /></td>");
            code_array.push("<td class=\"header_sep\"></td>");
            code_array.push("<td>"+cur_item.product.name);
            if (cur_item.option) {
                code_array.push("<br /><small>"+cur_item.option+"</small>");
            }
            code_array.push("</td>");
            code_array.push("<td class=\"header_sep\"></td>");
            code_array.push("<td class=\"item_cell\"><input id=\"qty_input_"+i+"\" class=\"qty_input\" type=\"text\" size=\"1\" value=\""+cur_item.qty+"\" maxlength=\"3\" /></td>");
            code_array.push("<td class=\"header_sep\"></td>");
            code_array.push("<td class=\"item_cell\">" + cent(cur_item.subtotal / cur_item.qty) + "</td>");
            code_array.push("<td class=\"header_sep\"></td>");
            code_array.push("<td class=\"item_cell\">"+cent(cur_item.subtotal)+"</td>");
            code_array.push("<td></td>");
            code_array.push("</tr>");

            code_array.push("<tr><td style=\"height:10px;\"></td></tr>");

            running_total = running_total + parseFloat(cur_item.subtotal);
        }

        code_array.push("<tr><td style=\"height:5px;\"></td></tr>");

        code_array.push("<tr><td colspan=\"10\" class=\"subtotal\"><span id=\"subtotal\">Subtotal: $" + cent(running_total) + "</span></td></tr>");

        code_array.push("<tr><td style=\"height:10px;\"></td></tr>");

        //add buttons at bottom
        code_array.push("<tr>");
        code_array.push("<td colspan=\"2\"><a href=\"javascript:void(0);\" onclick=\"removeItems();\"><img alt=\"remove\" src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/remove.gif\" /></a></td>");

        code_array.push("<td class=\"checkout\" colspan=\"8\"><span id=\"recalc_but\"><a href=\"javascript:void(0);\" onclick=\"updateQty();\"><img alt=\"recalculate total\" src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/recalc.gif\" /></a></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\""+makeUrl({'module':'shop','action':'view','manager':'checkout'})+"\"><img alt=\"checkout\" src=\""+SGL_JS_WEBROOT+"/themes/"+SGL_JS_THEME+"/images/checkout.gif\" /></a></td>");
        code_array.push("</tr>");

        code_array.push("</table>");

        $('cart_listing').innerHTML = code_array.join('\n');
    } else {
        $('cart_listing').innerHTML = 'There are currently no products in your cart.';
    }

    updateSummary();
}

function cent(v_n){
    var n=2;
    var nT=Math.pow(10,n);
    function pad(s){
            s=s||'.';
            return (s.length>n)?
                s:
                pad(s+'0');
    }
    return (isNaN(v_n))?
        v_n:
        (new String(
            Math.round(v_n*nT)/nT
        )).replace(/(\.\d*)?$/,pad);
}

function updateQty()
{
    var aUpdate = [];
    aIds        = [];
    var pass = true;

    for (i=1;i<=num_items;i++) {
        aUpdate.push($('qty_input_'+i).value)
        aIds.push($('delete_'+i).value);//pushes on id
        if (isNaN($('qty_input_'+i).value) || parseInt($('qty_input_'+i).value) < 1 || $('qty_input_'+i).value == '') {
            new Effect.Shake('qty_input_'+i);
            new Effect.Highlight('cart_line_'+i);
            pass = false;
        }
    }

    if (pass) {
        AjaxHandler.prototype.updateQuantity = function(aResult) {

            if (aResult && !aResult.retValue && aResult.errString) {
                alert(aResult.errString);
            }

            renderCart();
            Element.hide('subtotal');
            new Effect.Appear('subtotal');
            //alert(aResult);
        }

        var ah = new AjaxHandler('recalc_but', '');
        var cur_cart = new Cart(ah);
        cur_cart.updateQuantity(aIds, aUpdate);
    }
}

var aIds = [];
function removeItems()
{
    var i;
    aIds    = [];
    var aDelete = [];
    for (i=1;i<=num_items;i++) {
        if ($('delete_'+i).checked) {
            aIds.push($('delete_'+i).value);
            aDelete.push(i);
        }
    }

    //fade away
    for (i=0;i<aDelete.length;i++) {
        if (i == aDelete.length - 1) {
            new Effect.Fade('cart_line_'+aDelete[i], {afterFinish:removeItemsCallback});
        } else {
            new Effect.Fade('cart_line_'+aDelete[i]);
        }
    }

}

function removeItemsCallback()
{
    var cur_cart = new Cart();

    if (cur_cart.deleteItems(aIds)) {
        //good
        renderCart();
    } else {
        renderCart();
        alert('An error occured while deleting an item.\n\nPlease try again.');
    }
}
