var indkoebskurv_data = new Array();
var indkoebskurv_data_loaded = false;
var indkoebskurv_disabled = false;

var sb_translations = {
                        'url': '/indkoebskurv/',
                        'Samlet pris: ': 'Samlet pris: ',
                        'Indkøbskurv': 'Indkøbskurv',
                        'Til indkøbskurv': 'Til indkøbskurv',
                        'dummy': 'nothing'
                    };

var sb_translations_en = {
                            'url': '/indkoebskurv_en/',
                            'Samlet pris: ': 'Total: ',
                            'Indkøbskurv': 'Shopping basket',
                            'Til indkøbskurv': 'To the shopping basket',
                            'dummy': 'nothing'
                        };


function sb_redraw() {
    if(indkoebskurv_disabled) {
        return true;
    }
    
    var content = sb_get_content_from_cookies();


    if(content.length == 0) {
        // Ok, it's empty, remove it if it's there:
        var sb_elem = document.getElementById('indkoebskurv');
        if(sb_elem) {
            sb_elem.parentNode.removeChild(sb_elem);
        }

        return true;
    }

    var right = document.getElementById('right');
    if(! right) {
        // If we have a rightEmpty element, remove it:
        var rightEmpty = document.getElementById('rightEmpty');
        if(rightEmpty) {
            rightEmpty.parentNode.removeChild(rightEmpty);
        }

        var center = document.getElementById('content') || document.getElementById('contentFront');
        if(! center) {
            // alert('Indkøbskurven kunne ikke finde center-elementet på siden!');
            return true;
        }

        // Create a new right element and insert it before the center element:
        right = document.createElement('div');
        right.id = 'right';
        var nextSibling = center.nextSibling;
        if(nextSibling) {
            center.parentNode.insertBefore(right, nextSibling);
        } else {
            center.parentNode.appendChild(right);
        }
    }

    var sb_elem;
    if(right.lastChild && right.lastChild.id == 'indkoebskurv') {
        sb_elem = right.lastChild;
    } else {
        sb_elem = document.createElement('div');
        sb_elem.id = 'indkoebskurv';
        sb_elem.innerHTML = sb_make_innerhtml();
        right.appendChild(sb_elem);
    }

    var list_elem = document.getElementById('sb_contents');
    var total_price=0;

    if(list_elem) {
        // remove old childrem
        for(var i=list_elem.childNodes.length - 1;i>=0;i--) {
            list_elem.removeChild(list_elem.childNodes[i]);
        }
        // And create new:

        for(var i=0;i<content.length;i++) {
            var li_elem = document.createElement('li');
            var a_elem = document.createElement('a');
            a_elem.href = content[i].href;
            a_elem.title = content[i].title;
            a_elem.innerHTML = content[i].quantity + " x " + content[i].short_title + " - " + sb_format_price(content[i].price) + ".";
            li_elem.appendChild(a_elem);
            list_elem.appendChild(li_elem);

            total_price += content[i].quantity * content[i].price;
        }

        document.getElementById('indkoebskurv_pris').innerHTML = sb_translations['Samlet pris: '] + sb_format_price(total_price);
    } else {
        alert("Could't find list element from shoppingbasket!");
    }

}

function sb_get_content_from_cookies() {
    if(indkoebskurv_data_loaded) {
        return indkoebskurv_data;
    }

    var cookies = document.cookie;

    var cookie_list = cookies.split("; ");

    for(var i=0;i<cookie_list.length;i++) {
        cookietext = cookie_list[i];
        var data = cookietext.split("=");
        if(data && data[0] && data[0].indexOf('indkoebskurv') == 0) {
            var item = sb_unpack_item(data[1]);
            if(item) {
                indkoebskurv_data[indkoebskurv_data.length] = item;
            }
        }
    }

    indkoebskurv_data_loaded = true;

    return indkoebskurv_data;
}

function sb_unpack_item(itemstr) {
    var data = itemstr.split("|") || [];

    if(data.length == 6) {
        return {
                id: unescape(data[0]),
                title: unescape(data[1]),
                short_title: unescape(data[2]),
                href: unescape(data[3]),
                quantity: unescape(data[4]),
                price: unescape(data[5])
            };
    } else {
        return false;
    }
}

function sb_pack_item(id, title, short_title, href, quantity, price) {
    var packed = escape(id);
    packed += "|" + escape(title);
    packed += "|" + escape(short_title);
    packed += "|" + escape(href);
    packed += "|" + escape(quantity);
    packed += "|" + escape(price);

    return packed;
}

function sb_format_price(price) {
    // This corrects number formatting, which javascript sucks at.
    // Fixes two issues:
    // - 198,90 would be written as 198,9.
    // - Javascript is not good for adding floatting point values and
    // sometimes end up a result that's 0.000...001 short.
    // Also formats the price according to a danish locale.

    price = price + ""; // Make sure it's a string;
    var data = price.split(".");
    if(data && data[1]) {
        if(data[1].length == 1) {
            data[1] += "0";
        } else if(data[1].length > 2 && data[1].indexOf("9999" != -1)) {
            var val = data[1].substr(0, 2);
            val = Number(val);
            val += 1;
            data[1] = val;
        }
        return data[0] + "," + data[1] + " kr";
    }

    return price + ",00 kr";
}

function sb_add_item(id, title, short_title, href, quantity, price) {
    var content = sb_get_content_from_cookies();

    var packed = sb_pack_item(id, title, short_title, href, quantity, price);
    var item = sb_unpack_item(packed);

    if(! item) {
        return false;
    }

    // Check if this item is allready there:
    var found = false;
    for(var i=0;i<content.length;i++) {
        if(id == content[i].id) {
            found = true;
            // Add one to quantity in the list:
            content[i].quantity++;

            // And repack item with the new quantity:
            packed = sb_pack_item(id, title, short_title, href, content[i].quantity, price);
            break;
        }
    }

    // If not found in the list of existing items, add it at the bottom:
    if(! found) {
        content[content.length] = item;
    }

    // Always set the cookie:
    document.cookie="indkoebskurv_" + id + "=" + packed + "; path=/";

    sb_redraw();

    return false;
}



function sb_make_innerhtml() {
    var html = "<h2>" + sb_translations['Indkøbskurv'] + "</h2>\n";
    html +=    "<ul id=\"sb_contents\">\n";
    html +=    "</ul>\n";
    html +=    "<div id=\"indkoebskurv_pris\" style=\"text-align: center; padding-bottom: 6px;\">Pris:\n";
    html +=    "</div>\n";
    html +=    '<div style="margin-bottom: 6px;text-align: center;">' + "\n";
    html +=    '  <img src="/grafik/right/kurv.gif" alt="" />&nbsp;&nbsp;' + "\n";
    html +=    '  <a href="' + sb_translations['url'] + '">' + sb_translations['Til indkøbskurv'] + '</a>' + "\n";
    html +=    "</div><br />\n\n";

    return html;
}
