var ajaxCart = {};

(function($){

var loadingW = 50;
var loadingH = 50;
var confirmW = 360;
var confirmH = 'auto';
var autocloseTimeout = 5000;

var inCart = false, win, is_open = false, autoclose_timer;

if (window.location.toString().search('/product_compare/') != -1){
    win = window.opener;
}
else{
    win = window;
}

if (String(window.location).match(/.*\/checkout\/cart($|\/.*)/)){
    inCart = true;
}

function startAutocloseTimer(){
    autoclose_timer = setTimeout(ajaxCart.close, 5000);
    var ajax_box = jQuery('#ajax_cart_holder');
    if (!ajax_box.data('ajaxCartAutocloseIntervalSet')){
        ajax_box.data('ajaxCartAutocloseIntervalSet', true);
        ajax_box.find('input, button, a').click(function(){
            stopAutocloseTimer();
        });
    }
};

function stopAutocloseTimer(){
    clearTimeout(autoclose_timer);
};

ajaxCart.isOpen = function(){
    return is_open;
};

ajaxCart.close = function(){
    is_open = false;
    stopAutocloseTimer();
    jQuery('#ajax_cart_holder').stop().animate({'height': 0}, 'fast', function(){
        jQuery(this).css('display', 'none');
    });
    jQuery('#btn_shopping_bag').removeClass('active');
};

ajaxCart.open = function(data, persist){
    var ajax_box = jQuery('#ajax_cart_holder'),
        button = jQuery('#btn_shopping_bag'),
        was_open = is_open;
    is_open = true;
    if (data){
        ajax_box.html(data);
        ajax_box.data('ajaxCartAutocloseIntervalSet', false);
    }
    if (!was_open){
        is_open = true;
        if (!persist)
            startAutocloseTimer();
        ajax_box.stop().css({
            'visibility': 'hidden',
            'display': 'block',
            'height': 'auto'
        });
        var height = ajax_box.height();
        ajax_box.css({
            //'opacity': 0,
            'height': 0,
            'visibility': 'visible'
            //'display': 'block'
        }).animate({'height': height}, 'fast');
    } else {
        stopAutocloseTimer();
    }
    button.addClass('active');
    ajaxCart.hideJ2tOverlay();
};

ajaxCart.sendcart = function(url, type, form){
    var scroll;
    if (typeof box != 'undefined' && jQuery(box.content).css('display') != 'none'){
        box.close();
        scroll = true;
    }
    if (typeof frame != 'undefined' && jQuery(frame.content).css('display') != 'none'){
        frame.close();
        scroll = true;
    }
    if (scroll)
        jQuery('html, body').animate({scrollTop: 0}, 'fast');

    showLoading();
    if (type == 'form'){
        if (typeof form == 'undefined')
            form = jQuery('#product_addtocart_form');
        url = form.attr('action').replace('checkout', 'j2tajaxcheckout/index/cart');
        jQuery.post(url, form.serialize(), function(data){
            ajaxCart.open(data, false);
        });
    } else {
        url = url.replace('checkout', 'j2tajaxcheckout/index/cart');
        jQuery.post(url, '', function(data){
            ajaxCart.open(data, false);
        });
    }
};

ajaxCart.toggleBag = function(url){
    if (is_open)
        return ajaxCart.close();
    return ajaxCart.showBag(url);
};

ajaxCart.showBag = function(url){
    if (is_open)
        return;
    showLoading();
    url = url.replace('checkout/cart', 'j2tajaxcheckout/index/cart');
    jQuery.post(url, '', function(data){
        jQuery('#btn_shopping_bag').unbind('click').click(function(evt){
            var ajax_box = jQuery('#ajax_cart_holder');
            evt.preventDefault();
            if (ajax_box.css('display') == 'block'){
                ajaxCart.close();
            } else if (ajax_box.css('display') == 'none'){
                ajaxCart.open(null, true);
            }
        }).addClass('active');
        ajaxCart.open(data, true);
    });
};

ajaxCart.loadBag = function(url){
	if (is_open)
        return;
    showLoading();
    url = url.replace('checkout/cart', 'j2tajaxcheckout/index/cart');
    jQuery.post(url, '', function(data){
        jQuery('#btn_shopping_bag').unbind('click').click(function(evt){
            var ajax_box = jQuery('#ajax_cart_holder');
            evt.preventDefault();
            if (ajax_box.css('display') == 'block'){
                ajaxCart.close();
            } else if (ajax_box.css('display') == 'none'){
                ajaxCart.open(null, true);
            }
        }).addClass('active');
        ajaxCart.open(data, true);
		ajaxCart.close();
    });
	
};

ajaxCart.replaceDelUrls = function(){
    if (!inCart){
        jQuery('a').each(function(){
            var $this = jQuery(this),
                href = $this.attr('href');
            if (href && href.search('checkout/cart/delete') != -1 && href.search('javascript:') == -1){
                $this.click(function(){
                    ajaxCart.cartdelete(href);
                }).attr('href', '#');
            }
        });
    }
};

ajaxCart.replaceAddUrls = function(){
    jQuery('a').each(function(link){
        var $this = jQuery(this),
            href = $this.attr('href');
        if (href && href.search('checkout/cart/add') != -1 && href.search('javascript:') == -1){
            $this.click(function(){
                ajaxCart.sendcart(href, 'url');
                return false;
            }).attr('href', '#');
        }
    });
};

ajaxCart.cartdelete = function(url){
    showLoading();
    url = url.replace('checkout', 'j2tajaxcheckout/index/cart');
    jQuery.post(url, '', function(data){
        ajaxCart.open(data, true);
        ajaxCart.replaceDelUrls();
    });
};

function cartUpdate(url){
    showLoading();
    url = jQuery('#checkout-cart-update').attr('action').replace('checkout/cart', 'j2tajaxcheckout/index/cart');
    jQuery.post(url, jQuery('#checkout-cart-update').serialize(), function(data){
        ajaxCart.open(data, true);
    });
};

function showJ2tOverlay(){
    jQuery('#j2t-overlay').fadeIn('fast');
};

ajaxCart.hideJ2tOverlay = function(){
    jQuery('#j2t-overlay').hide();
    jQuery('#j2t_ajax_progress').hide();
}

function showLoading(){
    stopAutocloseTimer();
    showJ2tOverlay();
    jQuery('#j2t_ajax_progress').css({
        'width': loadingW,
        'height': loadingH,
        'position': 'absolute',
        'zIndex': 9999999
    }).show();
};

})(jQuery);


jQuery(document).ready(function($){
    ajaxCart.replaceDelUrls();
    ajaxCart.replaceAddUrls();
    jQuery('#j2t-overlay').click(ajaxCart.hideJ2tOverlay);

    var cartInt = setInterval(function(){
        if (typeof productAddToCartForm  != 'undefined'){
            jQuery('#j2t-overlay').click(ajaxCart.hideJ2tOverlay);
            productAddToCartForm.submit = function(url){
                if (this.validator && this.validator.validate()){
                    if (parent != self){
                        parent.ajaxCart.sendcart('', 'form', jQuery('#product_addtocart_form'));
                    } else {
                        ajaxCart.sendcart('', 'form');
                    }
                    $('body, html').scrollTop(0);
                    clearInterval(cartInt);
                }
                return false;
            }
        } else {
            clearInterval(cartInt);
        }
    }, 500);

});

