//////////////////////////
// Cart handling on client

function add2cart( id, price ) {
//return false;
    var oCart = createCartObj(id, price);

    oCart.modifyCart();

    var expDate = new Date(2037,9,26);
    document.cookie = 'cart=' + oCart.cartAsStr() + '; path=/; expires=' + expDate.toGMTString();

    oCart.pinchMainCart();
    oCart.pinchRowQuantity();
//    return true;
    return false;
}

function pinchMainCart() {
    var cartPos = 0;
    var cartSum = 0;
    var id = this.id;
    var quantity = 1;
    var price = this.price;

    var aSum = document.getElementsByName('exactSum');
    var nSum = parseFloat(aSum[0].value);

    for (var cid in this.Cart) {
        if (this.Cart[cid] > 0) {
            cartPos++;
        }
        if (cid == id) {
            nSum += price * quantity;
        }
    }

    aSum[0].value = nSum;
    var oSum = document.getElementById('cartSum');
    oSum.innerHTML = Math.round(nSum);

    var oPos = document.getElementById('cartPos');
    oPos.innerHTML = cartPos.toString();
}

function pinchRowQuantity() {
    var id = this.id;

    var reR = /\-/;
    var spanId = 'id' + id.replace(reR, 'd');
    var oSpan = document.getElementById(spanId);

    var quantity = 0;
    for (var cid in this.Cart) {
        if (cid == id) {
            quantity = this.Cart[cid];
            break;
        }
    }

    if (quantity > 0) {
        oSpan.innerHTML = '[' + quantity + ']';
    } else {
        oSpan.innerHTML = '';
    }
}

function modifyCart() {
    var quantity = 1;

    var idExists = false;
    for (var cid in this.Cart) {
        if (cid == this.id) {
            this.Cart[cid] += quantity;
            idExists = true;
            break;
        }
    }

    if (! idExists) {
        this.Cart[this.id] = quantity;
        this.itemsOrder[ this.itemsOrder.length ] = this.id;
    }
}

function cartAsStr() {
    var newCart = new Array;

    for (var ee = 0; ee < this.itemsOrder.length; ee++) {
        var cid = this.itemsOrder[ee];
        if (this.Cart[cid] > 0) {
            newCart[ newCart.length ] = cid + '=' + this.Cart[cid];
        }
    }
    return escape( newCart.join('.') );
}

function createCartObj(id, price) {
    var cartStr = getCartValue();
    var itemsOrder = new Array();

    var loCart = new Object; // local obj
    loCart.Cart = new Object;
    if (cartStr && cartStr.length > 2) { // id + "." [+ value]
        var cooCrc = unescape(cartStr).split('#'); // old format, with crc
        var Items = cooCrc[0].split('.');
        for (var dd = 0; dd < Items.length; dd++) {
            var IdQ = Items[dd].split('=');
            loCart.Cart[ IdQ[0] ] = parseInt(IdQ[1], 10);
            itemsOrder[dd] = IdQ[0];
        }
    }

    loCart.id       = id;    // last handled id
    loCart.price    = price; // last price
    loCart.itemsOrder = itemsOrder; // array
    loCart.modifyCart = modifyCart; // method
    loCart.cartAsStr  = cartAsStr;  // method
    loCart.subtractAllowed  = subtractAllowed;  // method
    loCart.pinchRowQuantity = pinchRowQuantity; // method
    loCart.pinchMainCart    = pinchMainCart;    // method
    return loCart;
}

function subtractAllowed() {
    var id = this.thisForm.elements.id.value;
    var quantity = parseInt(this.thisForm.elements.quantity.value, 10);
    var sa = false;
    for (var cid in this.Cart) {
        if (cid == id) {
            if ( this.Cart[cid] + quantity >= 0 ) {
                sa = true;
                break;
            }
        }
    }
    return sa;
}

function getCartValue(thisForm) {
    var oldCartValue = '';
    var cartCookieExists = false;
    var AllCookies = document.cookie.split(/\s*;\s*/);
    for (var cc = 0; cc < AllCookies.length; cc++) {
        var Nv = AllCookies[cc].split('=');
        if ( Nv[0] == 'cart' ) {
            // modify cart
            oldCartValue = Nv[1];
            break;
        }
    }
    return oldCartValue;
}
