﻿(function ($) {
    $.webMethod = function (options) {
        var settings = $.extend({
            'svcPath': '',
            'methodName': '',
            'async': true,
            'cache': false,
            timeout: 5000,
            debug: false,
            'parameters': {},
            success: function (response) { },
            error: function (response) { }
        }, options); var parameterjson = "{}";
        var result = null;
        var getUrl = window.location;
        var baseUrl = getUrl.protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
        if (settings.parameters != null) { parameterjson = JSON.stringify(settings.parameters); }
        $.ajax({
            type: "POST",
            url: baseUrl + "/" + settings.svcPath + "/" + settings.methodName,
            data: parameterjson,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: settings.async,
            cache: settings.cache,
            timeout: settings.timeout,
            success: function (value) {
                result = value.d;
                settings.success(result);
            },
            error: function (response) {
                settings.error(response);
                if (settings.debug) { alert("Error Calling Method \"" + settings.methodName + "\"\n\n+" + response.responseText); }
            }
        });
        return result;
    };
})(jQuery);

$(document).ready(function () {
    loadCart();
});
function showWaitCursor() {
    $("body").css("cursor", "progress");
}
function showDefaultCursor() {
    $("body").css("cursor", "default");
}
function createCartCookie(cartId) {
    var cookieName = 'JacksCart';
    var cookieValue = cartId;
    var expireDate = new Date();
    expireDate.setMonth(expireDate.getMonth() + 1);
    document.cookie = cookieName + "=" + cookieValue + ";expires=" + expireDate + ";domain=" + document.cookieDomain +";path=/;Secure";
}
function getCookie(name) {
    var re = new RegExp(name + "=([^;]+)");
    var value = re.exec(document.cookie);
    return (value != null) ? unescape(value[1]) : null;
}
function getCartId() {
    var cartId = getCookie('JacksCart');
    if (!cartId)
        cartId = 0;

    return cartId;
}
function getPriceLevel() {
    var priceLevel = 1;
    if (getCookie('jacks_commercial'))
        priceLevel = 2;
    if (getCookie('jacks_wholesale'))
        priceLevel = 3;

    return priceLevel;
}
function hideCurrentTooltip() {
    var tooltip = Telerik.Web.UI.RadToolTip.getCurrent();
    if (tooltip) {
        tooltip.hide();
    }
}

var isCartAdding = false;
function addToCart(itemId, cartButtonId) {

    if (!isCartAdding) {
        isCartAdding = true;
        var cartId = getCartId();
        var priceLevel = getPriceLevel();

        showAddAnimation(cartButtonId);
        showCartLoadingPanel();
        $.webMethod({
            'svcPath': 'uc/ToolTipWebService.asmx', 'methodName': 'addToCart', 'parameters': { 'cartId': cartId, 'itemId': itemId, 'qty': 1, 'priceLevel': priceLevel },
            success: function (value) {
                try {
                    createCartCookie(value);
                    hideCurrentTooltip();
                    loadCart();

                    $('a.show-hide').removeClass('show').addClass('hide');
                    var newHeight = $('.c-body').height() + 32;
                    $('.lu-cart').animate({ 'height': newHeight + 'px' });
                    hideCartLoadingPanel();

                } catch (e) {
                    hideCartLoadingPanel();
                    //alert(e.message);
                } finally {
                    isCartAdding = false;
                }
            },
            error: function (response) {
                //alert(response.responseText);
                hideCartLoadingPanel();
                isCartAdding = false;
            }
        });
    }
}

var selectedLoadingPanelControlId = '';
function addToCartAndRedirectWithLoadingPanel(itemId, qty, loadingPanelId) {
    selectedLoadingPanelControlId = loadingPanelId;
    addToCartAndRedirect(itemId, qty);
}

function addToCartAndRedirect(itemId, qty) {

    var cartId = getCartId();
    var priceLevel = getPriceLevel();

    showCartLoadingPanel();

    $.webMethod({
        'svcPath': 'uc/ToolTipWebService.asmx', 'methodName': 'addToCart', 'parameters': { 'cartId': cartId, 'itemId': itemId, 'qty': qty, 'priceLevel': priceLevel },
        success: function (value) {
            try {
                createCartCookie(value);
                window.location = '//' + document.sslBaseUrl + '/jacks-checkout/';
                hideCartLoadingPanel();
            } catch (e) {
                hideCartLoadingPanel();
            }
        },
        error: function (response) {
            //alert(response.responseText);
            hideCartLoadingPanel();
        }
    });
}
function removeFromCart(cartDetailId) {

    showCartLoadingPanel();
    $.webMethod({
        'svcPath': 'uc/ToolTipWebService.asmx', 'methodName': 'removeFromCart', 'parameters': { 'cartDetailId': cartDetailId },
        success: function (value) {
            try {
                loadCart();
                hideCartLoadingPanel();
            } catch (e) {
                hideCartLoadingPanel();
                //alert(e.message);
            }
        },
        error: function (response) {
            //alert(response.responseText);
            hideCartLoadingPanel();
        }
    });
}
function updateCartDetailQty(cartDetailId, qtyEl) {


    if (qtyEl) {

        var newQty = qtyEl.value;
        if (!newQty)
            newQty = 0;

        showCartLoadingPanel();
        $.webMethod({
            'svcPath': 'uc/ToolTipWebService.asmx', 'methodName': 'updateCartDetailQty', 'parameters': { 'cartDetailId': cartDetailId, 'qty': newQty },
            success: function (value) {
                try {
                    loadCart();
                    hideCartLoadingPanel();
                } catch (e) {
                    hideCartLoadingPanel();
                    //alert(e.message);
                }
            },
            error: function (response) {
                hideCartLoadingPanel();
                //alert(response.responseText);
            }
        });
    }
}
function loadCart() {


    var cartEl = $('#cartWrapper');
    if (cartEl) {
        var cartId = getCartId();
        var priceLevel = getPriceLevel();

        showWaitCursor();
        $.webMethod({
            'svcPath': 'uc/ToolTipWebService.asmx', 'methodName': 'loadCart', 'async': true, 'parameters': { 'cartId': cartId, 'priceLevel': priceLevel },
            success: function (value) {
                try {
                    $(cartEl).html(value);
                    if ($('.qtyBox').length)
                        setCartCount($('.qtyBox').length);
                    $('a.show-hide').removeClass('show').addClass('hide');
                    var newHeight = $('.c-body').height() + 32;
                    $('.lu-cart').animate({ 'height': newHeight + 'px' });
                    showDefaultCursor();
                } catch (e) {
                    //alert(e.message);
                    showDefaultCursor();
                }
            },
            error: function (response) {
                //alert(response.responseText);
                showDefaultCursor();
            }
        });
    }
}

function setItemQty(evt, cartDetailId, qtyEl) {

    var charCode = (evt.which) ? evt.which : event.keyCode
    if (charCode > 31 && (charCode < 48 || charCode > 57))
        return false;

    if (charCode === 13) {
        updateCartDetailQty(cartDetailId, qtyEl);
        return false;
    }

    return true;
}
function hideCartLoadingPanel() {
    setTimeout(function () {
        if (currentLoadingPanel !== null)
            currentLoadingPanel.hide(currentUpdatedControl);
    }, 250);
}

function showAddAnimation(cartButton) {
    var cart = $('#cartWrapper');
    var cartBtn = document.getElementById(cartButton);
    var imgtodrag = $(cartBtn);
    if (imgtodrag) {
        var imgclone = imgtodrag.clone()
            .removeClass('w-100')
            .css({
                'opacity': '0.5',
                'position': 'absolute',
                'height': '30px',
                'width': '100px',
                'z-index': '10000'
            })
            .offset({
                top: imgtodrag.offset().top,
                left: imgtodrag.offset().left
            })
            .appendTo($('body'))
            .animate({
                'top': cart.offset().top + 100,
                'left': cart.offset().left + 50,
                'width': 50,
                'height': 15
            }, 2000, 'easeInOutExpo');

        setTimeout(function () {
            cart.effect("shake", {
                times: 2
            }, 150);
        }, 1500);

        imgclone.animate({
            'width': 0,
            'height': 0
        }, function () {
            $(this).detach()
        });
    }
}
