/* Se debe definir en cada template de carrito las funciones:
    insertItem(item){
        return un objeto DOM tr con los datos del item
        ejemplo de row basico:
        <tr id="item+item['id']">
            <td>
                <input id="input+item['id']" onchange="updateItem(item['id'], this.value)" value="item['quantity']"/>
            </td>
            [<td>
                <img onclick="addBook(item['id'])"> [aumenta en uno la cantidad de libros para el item]
                <img onclick="subBook(item['id'])"> [disminuye en uno la cantidad de libros para el item]
            </td>] optional
            <td>
                <img onclick="removeItem(item['id'])">
            </td>
        </tr>
    
    cartTotal(carrito){
        return un objeto DOM tr con el total
        
    el carro que devuelve el controller es un diccionario-like de la siguiente forma:
        { 'serializedCart': { 'totalAmount': '$ 25.50', 'items': [ { 'id': bookId, 'quantity': cantidad, 'title': titulo,
                                                                     'author': autor, 'price': precioUnitario,
                                                                     'total': totalDelItem,
                                                                     'availability': captionDisponibilidad } ]
                            }
        }
*/
function llenarCarro(){
    var url = '/obtenerCarrito?tg_format=json';
    var carro = loadJSONDoc(url);
    carro.addCallback(fillCart);
}
function fillCart(carro){
    var items = map(insertItem, carro['serializedCart']['items']);
    replaceChildNodes('cart', items);
    cartTotal(carro);
}
function updateItem( bookId, quantity ){
    if (quantity && quantity > 0){
        var url = '/actualizarLibro?tg_format=json&bookId=' + bookId + '&quantity=' + quantity;
        var updatedItem = loadJSONDoc(url);
        updatedItem.addCallback(fillCart);
    }else{
        alert('La cantidad ingresada no es valida.\nSi desea borrar el libro, haga click en el botón correspondiente.');
        llenarCarro();
    }
}
function removeItem(itemId){
    var url = '/borrarLibro?tg_format=json&bookId=' + itemId;
    var deletedItem = loadJSONDoc(url);
    deletedItem.addCallback(fillCart);
}
function vaciarCarro(){
    var url = '/vaciarCarrito?tg_format=json';
    var emptyCart = loadJSONDoc(url);
    emptyCart.addCallback(fillCart);
}
function addBook(itemId){
    var input = $('input'+itemId);
    input.value = parseInt(input.value) + 1;
    updateItem(itemId, input.value);
}
function subBook(itemId){
    var input = $('input'+itemId);
    if (input.value > 1){
        input.value = parseInt(input.value) - 1;
        updateItem(itemId, input.value);
    }
}
