    var cart   = new Array;
    var extras = new Array;


function Cookie(cookname)
{
    var fpos, tpos;
    var cookies=document.cookie;
    var clen   =cookname.length + 1; 
    var thisname ="";
    
    fpos = 0;
    while (fpos < cookies.length)
    {
        while (cookies.substring(fpos, fpos+1)==" ")
            fpos++;
        tpos = cookies.indexOf("=", fpos);
        if (tpos < 0)
            tpos=cookies.length;
        else
        {
            thisname = cookies.substring(fpos, tpos);
            tpos     = cookies.indexOf(";", fpos);
            if (tpos < 0)
                tpos=cookies.length;

            if (thisname==cookname)
                return cookies.substring(fpos+clen, tpos);
        }
        fpos = tpos + 1;
    }
    return "";
}


function FormatMoney(price)

{
    var textval=""+price;
    var dpoint=textval.indexOf(".",0);
    if (dpoint<0)
        textval+=".00";
    else
    {
        while ((dpoint + 3) > textval.length)
            textval+="0";
        textval=textval.substring(0, dpoint + 3)
    }
    var nextcomma=textval.length - 6;
    while (0 <nextcomma)
    {
        textval=textval.substring(0,nextcomma) + ',' + textval.substring(nextcomma, textval.length);
        nextcomma=nextcomma - 3
    }
    return textval
}


function BuildItem(Id,Desc,Price,Qty,Extra)
{
    this.id   =Id;
    this.desc =Desc;
    this.price=parseFloat(Price);
    this.qty  =parseInt(Qty);
    this.extra=Extra;
}


function AsItem(ItemText)
{
    var fpos, tpos;
    var NewId, NewDesc, NewPrice;
    var NewQty     = "error";
    var NewFreight = "Freight";

    tpos=ItemText.indexOf("|", 0);
    if (tpos > -1)
    {
        NewId = ItemText.substring(0, tpos);
        fpos  = tpos + 1;
        tpos=ItemText.indexOf("|", fpos);
        if (tpos > -1)
        {
            NewDesc = ItemText.substring(fpos, tpos);
            fpos    = tpos + 1;
            tpos    =ItemText.indexOf("|", fpos);
            if (tpos > -1)
            {
                NewPrice = ItemText.substring(fpos, tpos);
                fpos     = tpos + 1;
                tpos     =ItemText.indexOf("|", fpos);
                if (tpos > -1)
                {
                    NewQty     = ItemText.substring(fpos, tpos);
                    NewFreight = ItemText.substring(tpos+1, ItemText.length);
                }
                else
                    NewQty   = ItemText.substring(fpos, ItemText.length);

                if (isNaN(NewQty))
                    NewQty=0;
            }
            else
            {
                NewPrice = ItemText.substring(fpos, ItemText.length);
                NewQty   = "1"
            }
        }
    }
    if (NewQty != "error")
        return new BuildItem(NewId,NewDesc,NewPrice,NewQty,NewFreight);
}



function ExtractCart()
{
    if (cart.length > 0) return; 

    var fpos, tpos;
    var items=Cookie("cart");
    var itemcount=0;
    
    fpos = 0;
    while (fpos < items.length)
    {
        tpos = items.indexOf("¦", fpos);
        if (tpos < 0)
            tpos=items.length;
        cart[itemcount]=AsItem(items.substring(fpos,tpos));
        if (isNaN(cart[itemcount].qty))
        {
            alert("The Cart contents is corrupt and has been discarded");
            cart.length=0;
            tpos=items.length;
        }
        itemcount++;
        fpos = tpos + 1;
    }

}


function SaveCart()
{
    var carttext="";
    var index;

    for (index=0;index<cart.length;index++)
    {
        if (carttext != "")
            carttext=carttext+"¦";
        carttext = carttext + cart[index].id + "|" + cart[index].desc + "|" + cart[index].price + "|" + cart[index].qty + "|" + cart[index].extra
    }
    document.cookie="cart=" + carttext + ";";
    if (Cookie("cart") != carttext)
    {
        alert("Please enable session cookies to enable the e-commece cart to work");
        return false;
    }
    return true;
}


function SelectIsland(AnIsland)
{
   document.cookie="island=" + AnIsland + ";";
   location.href=location.href;
}


function IsExtra(anextra)
{
    for (var newindex=0;newindex < extras.length;newindex++)
    {
        if (extras[newindex] == anextra)
            return true;
    }
    return false;
}


function AddExtras(anextra)
{
    var offset;
    var avalue;

    while (anextra != "")
    {
        offset=anextra.indexOf(",",0);
        if (offset < 0)
        {
            avalue =anextra;
            anextra=""
        }
        else
        {
            avalue =anextra.substring(0,offset);
            anextra=anextra.substring(offset+1, anextra.length);
        }
        if ((avalue != "")&&(!IsExtra(avalue)))
            extras[extras.length]=avalue;
    }
}


function WriteCartCells(aclass,bclass,qtystart,qtyend)
{
    var index;
    var item;
    var total    =0;
    var itemvalue=0;

    ExtractCart();
    for (index=0;index<cart.length;index++)
    {
        item      = cart[index];
        itemvalue = item.qty * item.price;
        document.write("<tr>");
        document.write("<td class=\""+aclass+"\">"  +item.desc                +"<\/td>");
        document.write("<td class=\""+bclass+"\">$" +FormatMoney(item.price)  +"<\/td>");
        document.write("<td class=\""+bclass+"\">"  +qtystart+item.qty+qtyend +"<\/td>");
        document.write("<td class=\""+bclass+"\">$" +FormatMoney(itemvalue)   +"<\/td>");
        document.write("<\/tr>");
        AddExtras(item.extra);
        total = total + itemvalue;
    }
    return total;
}


function UpdateCart(QtyList)
{
    var NewQty;
    var NewCart = new Array;
    var IsDiff  = false;

    if (cart.length>1)
    {
        if (QtyList.length!=cart.length)
        {
            alert("Cart Internal Error: Form length does not match cart contents");
            return;
        }
        for (var index=0;index<cart.length;index++)
        {
            NewQty=parseInt(QtyList[index].value);
            if (NewQty != 0)
            {
                if (isNaN(NewQty))
                    NewQty=0;
                if (cart[index].qty!=NewQty)
                {
                    IsDiff = true;
                    cart[index].qty=NewQty;
                }
                NewCart[NewCart.length] = cart[index];
            }
            else
                IsDiff = true;
        }
    }
    else if (cart.length>0)
    {
        NewQty=parseInt(QtyList.value);
        if (NewQty != 0)
        {
            if (isNaN(NewQty))
                NewQty=0;
            if (cart[0].qty!=NewQty)
            {
                cart[0].qty=NewQty;
                IsDiff = true;
            }
            NewCart[NewCart.length] = cart[0];
        }
        else
            IsDiff = true;
    }
    if (IsDiff)
    {
        cart=NewCart;
        return SaveCart();
    }
    return IsDiff;
}


function AddItem(ItemText)
{
    var index    = 0;
    var newindex = -1;
    var NewItem  = AsItem(ItemText);

    ExtractCart();
    
    while (newindex < 0)
    {
        if (index < cart.length)
        {
            if (cart[index].id == NewItem.id)
            {
                if (cart[index].price != NewItem.price)
                {
                    alert('Internal cart pricing error - the cart contents have been cleared');
                    cart.length =0;
                    newindex    =0;
                }
                else
                {
                    newindex = index;
                    NewItem.qty = NewItem.qty + cart[index].qty;
                }
            }
            else
                index++;
        }
        else
            newindex = cart.length
    }
    cart[newindex] = NewItem;
    if (SaveCart())
    //    alert("Your cart now contains "+NewItem.qty+" of "+NewItem.desc+" @ $" + NewItem.price);
    {
        if (!confirm("Your Cart has been updated to include "+NewItem.qty+" of "+NewItem.desc+" @ $" + NewItem.price +" each.\n\nContine shopping?"))
            location.href="Cart.htm";
    }
}

