var cart_url = 'http://www.whatever3d.com/store/cart.ez';
var curView;
var changed = true;

function view_cart(refresh) {
    if (curView == 'cart' && ! refresh) return false;

    var callback = function (response) {
        document.getElementById('cart_display').innerHTML = response;
        document.getElementById('show_cart_button').className = 'selected-control';
        document.getElementById('show_wishlist_button').className = 'unselected-control';
        curView = 'cart';
    };

    asynch_call_rpc(cart_url, 'get_cart', callback);

}

function view_cart_full() {
    var callback = function (response) {
        document.getElementById('cart_display').innerHTML = response;
    };

    asynch_call_rpc(cart_url, 'get_cart_full', callback);
}

function view_wishlist(refresh) {
    if (curView == 'wishlist' && !refresh) return false;

    var callback = function (response) {
        document.getElementById('cart_display').innerHTML = response;
        document.getElementById('show_wishlist_button').className = 'selected-control';
        document.getElementById('show_cart_button').className = 'unselected-control';
        curView = 'wishlist';
    };

    asynch_call_rpc(cart_url, 'get_wishlist', callback);
}

function add_product_to_cart(product) {
    var there = parseInt(synch_call_rpc(cart_url, 'get_num_in_cart', {'product' : product}));

    if (there) {
        alert('This product is already in your cart: ' + there);
        return false;
    }

    var callback;
    eval (
        'callback = function (response) {'+
            'if (parseInt(response)) { ' +
                'view_cart(true);' +
                'get_controls("' + product + '");' +
            '}' +
        '};'
    );

    asynch_call_rpc(cart_url, 'add_to_cart', callback, {'product' : product});
    changed = true;
}

function add_product_to_wishlist(product) {
    var there = parseInt(synch_call_rpc(cart_url, 'get_num_in_wishlist', {'product' : product}));

    if (there) {
        alert('This product is already in your wishlist');
        return false;
    }

    var callback;
    eval (
        'callback = function (response) {'+
            'if (parseInt(response)) { ' +
                'view_wishlist(true);' +
                'get_controls("' + product + '");' +
            '}' +
        '};'
    );

    asynch_call_rpc(cart_url, 'add_to_wishlist', callback, {'product' : product});
}

function remove_product_from_cart(product) {
    var callback;
    eval (
        'callback = function (response) {'+
            'view_cart(true);' +
            'get_controls("' + product + '");' +
        '};'
    );

    asynch_call_rpc(cart_url, 'remove_from_cart', callback, {'product' : product});
    changed = true;
}

function remove_product_from_wishlist(product) {
    var callback;
    eval (
        'callback = function (response) {'+
            'view_wishlist(true);' +
            'get_controls("' + product + '");' +
        '};'
    );

    asynch_call_rpc(cart_url, 'remove_from_wishlist', callback, {'product' : product});
}

function wishlist_to_cart(product) {
    var callback;
    eval (
        'callback = function (response) {'+
            'view_cart(true);' +
            'get_controls("' + product + '");' +
        '};'
    );

    asynch_call_rpc(cart_url, 'wishlist_to_cart', callback, {'product' : product});
    changed = true;
}

function cart_to_wishlist(product) {
    var callback;
    eval (
        'callback = function (response) {'+
            'view_wishlist(true);' +
            'get_controls("' + product + '");' +
        '};'
    );

    asynch_call_rpc(cart_url, 'cart_to_wishlist', callback, {'product' : product});
    changed = true;
}

function get_controls(product) {
    var callback;
    var mini = 1;
    if (no_mini) mini = 0;
    eval (
        'callback = function (response) {'+
            'document.getElementById("product_controls_' + product + '").innerHTML = response;' +
            'get_checkout_button(1);' +
        '};'
    );

    asynch_call_rpc(cart_url, 'get_product_controls', callback, {'product' : product, mini : mini});
}

function place_order_button() {
    var callback = function (response) {
        document.getElementById('place_order_button').innerHTML = response;
    };
    
    asynch_call_rpc(cart_url, 'place_order_button', callback);
}

function get_checkout_button(mini) {
    var callback = function (response) {
        var button = document.getElementById('go_to_checkout_button');
        button.innerHTML = response;
        if (response.match(/disabled/)) {
            button.className = 'disabled-control';
        }
        else {
            button.className = 'unselected-control';
        }
    };

    asynch_call_rpc(cart_url, 'checkout_button', callback, {'mini' : mini});
}

function view_order(order_id) {
    var callback = function (response) {
        document.getElementById('order_display').innerHTML = response;
    };

    asynch_call_rpc(cart_url, 'view_order', callback, {'order' : order_id});
}

function cart_peek() {
    var peekbox = document.getElementById('cart_show_button');
    peekbox.style.width = 'auto';
    document.getElementById('cart_peek').style.display = 'inline';

    if (changed) {
        var callback = function (response) {
            document.getElementById('cart_peek').innerHTML = response;
        };

        asynch_call_rpc(cart_url, 'cart_peek', callback);
        changed = false;
    }
}

function cart_unpeek() {
    var peekbox = document.getElementById('cart_show_button');
    document.getElementById('cart_peek').style.display = 'none'
}

function show_cart() {
    document.getElementById('cart').style.display = 'block';
}

function hide_cart() {
    document.getElementById('cart').style.display = 'none';
}
