(function ($) {
// Behaviours begin here…


var hide_timer = false;
function at_oxford_rollover () {
    if (hide_timer) {
        clearTimeout(hide_timer);
    }
    var rollover = $('#at-oxford-rollover');
    rollover.hide();
    var new_html = $(this).next('.info').html();
    rollover.html(new_html);
    // rollover.fadeIn(50);
    rollover.show();
}

function at_oxford_clear () {
    hide_timer = setTimeout(function () {
        var rollover = $('#at-oxford-rollover');
        rollover.fadeOut(200);
        rollover.empty();
    }, 2000);
}

function focus_self_labelling () {
    var me = $(this);
    if (!me.hasClass('self-labelling')) { return false; }
    
    me.removeClass('self-labelling');
    me.attr('x-data-original-value', me.val());
    me.val('');
}

function blur_self_labelling () {
    var me = $(this);
    if (!me.val() && me.attr('x-data-original-value')) {
        me.val(me.attr('x-data-original-value'));
        me.addClass('self-labelling');
    }
}

function select_current_section () {
    if (window.location.pathname.match($(this).attr('href'))) {
        $(this).addClass('current');
    }
}

function show_checkout_prompt () {
    var prompt = $('<div class="checkout-prompt"><div class="inner">' + 
        '<h3>Product Added</h3>' + 
        '<p>Would you like to…</p>' + 
        '<p><a class="primary-link" href="/store/cart/">Check Out</a>' + 
        '<br>or<br>' + 
        '<a href="#" class="secondary-link close-prompt">Continue browsing</a></p>' + 
        '</div></div>');
    $('#store-content-div').append(prompt);
    // prompt.fadeIn(500);
    prompt.show();
    prompt.find('.close-prompt').click(function () {
        // prompt.fadeOut(500, function () {prompt.remove();});
        prompt.hide();
        prompt.remove();
        return false;
    });
}

function update_cart_status (sender, error_timer) {
    return function (data) {
        clearTimeout(error_timer);
        if (data.error) {
            alert("An error occurred: " + data.error);
            return false;
        }
        sender.css({opacity: '0.99', filter: 'alpha(99)'});
        
        var message = '';
        if (data.cart_count === 0) {
            message = 'Your cart is empty';
        } else if (data.cart_count == 1) {
            message = '1 item in your cart';
        } else {
            message = String(data.cart_count) + ' items in your cart';
        }
        $('#cart-count').text(message);
        
        if (data.action == 'updated' || data.action == 'added') {
            $('#cart-message').html(data.quantity+' &times; '+data.product_name);
            // sender.text('Update');            
        } else {
            $('#cart-message').html(data.action + ' ' + data.product_name);            
            // sender.text('Add To Cart');
        }
        sender.css('background-color', '');
        $("#cart-status").show().queue([]).stop().css({backgroundColor: '#F4E382'})
            .animate({backgroundColor: '#fff'}, 1000);
        
        show_checkout_prompt();
        return false;
    };
}

function cart_add () {
    var me = $(this);
    $.post(me.attr('href'), {}, update_cart_status(me), "json");
    return false;
}

function cart_remove () {
    var me = $(this);
    $.post(me.attr('href'), {}, update_cart_status(me), "json");
    return false;
}

function get_current_radio_value (nodename) {
    return $("input[name='"+nodename+"']:checked").val();
}

function cart_update () {
    var me = $(this);
    // me.attr('data-original-text', me.text());
    // me.text('Updating…');
    // me.css('background-color', '#999');
    // var target = $(me.attr('data-quantity-target'));
    me.css({opacity: '0.1', filter: 'alpha(10)'});
    var color = '0';
    if (me.attr('data-color-target')) {
        color = get_current_radio_value(me.attr('data-color-target'));
    }
    var error_timer = setTimeout(function () {cart_error(me);}, 30000);
    $.post(me.attr('href'), {
        // 'quantity': target.val(), 
        'color': color
        }, update_cart_status(me, error_timer), "json");
    // if (Number(target.val()) === 0) {
    //     setTimeout(function () { target.val(1); }, 500);
    // }
    return false;
}

function cart_error (button) {
    alert("There was an error updating your shopping cart. Please try again.");
    button.text(button.attr('data-original-text'));
    button.css('background-color', '');
    return false;
}

function cart_view () {
    $.post($(this).attr('href'), {}, function (data) {
        console.log(data);
    }, "json");
    return false;
}

function max (x, y) {
    if (x < y) {
        return y;
    }
    return x;
}

function balance_cols (cols) {
    cols.css('height', 'auto');
    var max_height = 0;
    cols.each(function () {
        max_height = max(max_height, $(this).height());
    });
    cols.css('height', '' + max_height + 'px');
}

// On DOM-ready:
$(function () {
    $('#at-oxford-buttons a').mouseover(at_oxford_rollover)
        .mouseout(at_oxford_clear);
        
    $('input.self-labelling').focus(focus_self_labelling).blur(blur_self_labelling);

    $('#nav a').each(select_current_section);
    
    $('.slim3.recipe').add('.slim3.product').each(function () {
        var me = $(this);
        me.mouseover(function () {me.addClass('hovered');});
        me.mouseout(function () {me.removeClass('hovered');});
        me.click(function () {document.location.href = me.find('a').eq(0).attr('href');});
    });
    
    $('.cart-add-link').click(cart_add);
    $('.cart-remove-link').click(cart_remove);
    $('.cart-update-link').click(cart_update);
    $('.cart-view-link').click(cart_view);
    $('#cart-message').html('&nbsp;').css('background-color', '');

    $('hr.fat').each(function () {
        var me = $(this);
        me.replaceWith($('<div></div>').attr('class', me.attr('class')));
    });
    
    balance_cols($('.journal-column, .recipe-column, .shop-column'));
});

$(window).load(function () {
    balance_cols($('.journal-column, .recipe-column, .shop-column'));    
});


// end wrapper func
})(jQuery);
