var COOKIE_NAME = 'cart_guid';
var COOKIE_CARTSUMMARY = "cart_summary";
var BASEACTION = "/api/proxy.php"; //"/api/proxy_test.php";
var BLOCKUI_MESSAGE = '<h2><img src="/giving/public/images/pictures/8-0.gif" /></h2>';
var CARTLOADER_SELECTOR = "div#cartLoader";
var FORCECART_SELECTOR = "#forcenewcart";
var CARTREFERRER_SELECTOR = "#cartreferrer";
var PERSISTER_SELECTOR = "div#persister";
var options = { path: '/', expires: 1 };
var cartId = "";
var cartObject;
var loading = false;

$(document).ready(function() {
    if ($(PERSISTER_SELECTOR).length > 0) {
        floatBar();
        wireSpinner();
        hideBottomBar();
        loadCartFromClient();
        wireActions();
        //added
        loadSingleSkuForm();
        loadCartObject();
        orderFormMode();
        checkpc();
    }
});

function gup(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1];
}

function checkpc() {
    try {
        var name = gup('pc');
        if (name != "") {
            var pc_param = ("fb" + name);
            tb_show("", "#TB_inline?height=361&width=750&inlineId=" + pc_param + "", "");
        }
    } catch (exception) { }
}

function clearCart() {
    var cart = new Object();
    cart.LoadId = cartId;
    cart.ClearCartItems = true;
    var action = BASEACTION + "/Cart/UpdateCart.persister";
    jQueryPostHtml($.postify(cart), action, displayResults, displayError);

}
function wireSpinner() {
    $().ajaxStart(spinner).ajaxStop(spinnerstop);
}
function spinner() {
    $("input.tototal").attr("disabled", true);
}
function spinnerstop() {
    $("input.tototal").removeAttr("disabled");
}
function clearCookies() {
    //$.cookie(COOKIE_NAME, null);
    //$.cookie(COOKIE_CARTSUMMARY, null);
    setCookie(COOKIE_NAME, null);
    setCookie(COOKIE_CARTSUMMARY, null);
    //            loadCartFromClient();
}


function floatBar() {
    try {
        $('#results').floating().hide();
    } catch (exception) { }
}
function block() {
    try {
        $.blockUI({ message: BLOCKUI_MESSAGE });
    } catch (exception) { }
}
function unblock() {
    try {
        $.unblockUI();
        $(".dynamicthickbox").click(function() {
            var url = $(this).attr("url");
            tb_show("", url, "");
        });
    } catch (exception) { }
}

function loadCartObject() {
    cartObject = getObjectFromInputsName(PERSISTER_SELECTOR);
}
function wireAjax(x) {
    $("form.ajaxed").submit(handlePost);
}
function wireActions() {
    $("div.toggler").hide();
    $("a.toggleraction").live("click", function() {
        var name = $(this).attr("name").replace("toggle_", "");
        var togglers = $("div.togglefor_" + name);
        togglers.toggle();
        return false;
    });
    $("form.ajaxed").submit(handlePost);
    $("input.tototal").bind("change", function() {
        loading = true;
        var cart = new Object();
        cart.LoadId = cartId;
        cart.UpdateCartItem = new Object();
        cart.UpdateCartItem.Sku = $(this).attr("name").split(".")[1];
        cart.UpdateCartItem.Amount = $(this).val().replace(",", "");
        cart.UpdateCartItem.Description = $($("div[sku='" + cart.UpdateCartItem.Sku + "']")[0]).attr("description");
        cart.UpdateCartItem.ItemAmount = $($("div[sku='" + cart.UpdateCartItem.Sku + "']")[0]).attr("itemamount");
        cart.UpdateCartItem.Quantity = $($("div[sku='" + cart.UpdateCartItem.Sku + "']")[0]).attr("quantity");
        cart.UpdateCartItem.AllowCartResponse = $($("div[sku='" + cart.UpdateCartItem.Sku + "']")[0]).attr("allowcartresponse");
        var action = BASEACTION + "/Cart/UpdateCart.persister";
        jQueryPostHtml($.postify(cart), action, displayResults, displayError);
    });
    $("form.checkoutform").submit(handleCheckoutPost);
}

function forcenewcart() {
    if ($(FORCECART_SELECTOR).length > 0) {
        clearCookies();
        return true;
    }
    return false;
}
function loadCartFromClient() {
    //var guid = $.cookie(COOKIE_NAME);
    var guid = getCookie(COOKIE_NAME);
    if (guid != null && forcenewcart() == false) {
        cartId = guid;
        //var cartSummary = $.cookie(COOKIE_CARTSUMMARY);
        var cartSummary = getCookie(COOKIE_CARTSUMMARY);
        if (cartSummary != null) {
            $(".cartsummary").empty().append(cartSummary);
        }
        if ($(CARTLOADER_SELECTOR).length > 0) {
            loadCartFromServer();
        }
    } else {
        if ($(CARTREFERRER_SELECTOR).length > 0) {
            var cartReferrer = window.location.pathname;
            var cart = new Object();
            if ($(CARTREFERRER_SELECTOR).attr("cartreferrer") != null) {
                cart.UpdateReferrer = $(CARTREFERRER_SELECTOR).attr("cartreferrer");
            }
            if ($(CARTREFERRER_SELECTOR).attr("urlredirect") != null) {
                cart.UrlRedirect = $(CARTREFERRER_SELECTOR).attr("urlredirect");
            }
            var action = BASEACTION + "/Cart/UpdateCart.persister";
            jQueryPostHtml($.postify(cart), action, displayResultsQuiet, displayError);
        }
    }
}

function loadCartFromServer() {
    var cart = new Object();
    cart.LoadId = cartId;
    var action = BASEACTION + "/Cart/UpdateCart.persister";
    jQueryPostHtml($.postify(cart), action, displayResultsQuiet, displayError);
}

function updateCookies(id) {
    setCartId(id);
    setLoadIds(id);
    setCartSummary();
    loading = false;
    //		setCartPersister();
}
function setLoadIds(id) {
    $("input[name='cart.LoadId']").val(id);
}
function setCartId(id) {
    // $.cookie(COOKIE_NAME, id);
    setCookie(COOKIE_NAME, id);
}
function setCartSummary() {
    var summary = $($(PERSISTER_SELECTOR + " input#cart_CartSummary").get()).val();
    // $.cookie(COOKIE_CARTSUMMARY, summary);
    setCookie(COOKIE_CARTSUMMARY, summary);
    $('.cartsummary').empty().append(summary);
}
function setCookie(cookieName, cookieValue) {
    var options = { path: '/', expires: 1 };
    return $.cookie(cookieName, cookieValue, options);
}
function getCookie(cookieName) {
    return $.cookie(cookieName);
}
function checkoutMode() {
    $("div.orderform").hide();
    $("div.checkoutform").show();
    $('html').animate({ scrollTop: 0 }, 'slow');
}
function orderFormMode() {
    $("div.orderform").show();
    $("div.checkoutform").hide();
    $('html').animate({ scrollTop: 0 }, 'slow');
}
function handlePost(x) {
    $(".hideonsubmit").hide();
    var f = this;
    var action = f.getAttribute("action").replace(".html", ".clean");
    f = $(f).serialize();
    action = BASEACTION + action;
    jQueryPostHtml(f, action, displayResults, displayError);
    orderFormMode();
    return false;
}
function handleCheckoutPost(x) {
    block();
    var f = this;
    var action = f.getAttribute("action").replace(".html", ".clean");
    if (action.toLowerCase().indexOf("checkoutcomplete") > 0) {
        // unset cookies
        //$.cookie(COOKIE_CARTSUMMARY, null);
        //$.cookie(COOKIE_NAME, null);
        setCookie(COOKIE_CARTSUMMARY, null);
        setCookie(COOKIE_NAME, null);
        cartId = '';
    }
    f = $(f).serialize();
    if (f === "") {
        if (cartId !== "") {
            var cart = new Object();
            cart.LoadId = cartId;
            f = $.postify(cart);
        }
    }
    checkoutMode();
    action = BASEACTION + action;
    jQueryPostHtml(f, action, displayCheckoutResults, displayError);
    return false;
}
function setItemTotals() {
    var toTotal = $("input.tototal");
    $(toTotal).each(function() {
        totalItem(this);
    });
    setCartSummary();
}

function totalItem(item) {
    var sku = $(item).attr("name").split(".")[1].toString();
    var amt = amountFromSku(sku);
    if ($(item).data("focused") != true) {
        $(item).val(amt);
    }
}
function amountFromSku(sku) {
    var cartForm = $(PERSISTER_SELECTOR);
    if (cartForm != null) {
        var skuItems = $(cartForm).find("input[name^='cart.Cart.CartItems'][name*='Sku']").get();
        for (i in skuItems) {
            if (skuItems[i].value == sku) {
                var amt = $(cartForm).find("#" + skuItems[i].id.toString().replace("_Sku", "_Amount")).val();
                if (amt == 'undefined') {
                    return parseFloat("0.00").toFixed(2);
                }
                return parseFloat(amt).toFixed(2);
            }
        }
    }
    return "0.00";
}
function displayResults(results) {
    var persister = $(PERSISTER_SELECTOR);
    $(persister).empty();
    $(persister).append(results);
    $(persister).hide();
    setItemTotals();
    cartId = $(persister).find("input[name='cart.Cart.Id']")[0].value;
    updateCookies(cartId);
    try {
        tb_remove();
        showBottomBar();
        setPrintButtons();
        tryRedirect();
        wireHideShow();
    } catch (err) {

    }
}

function displayResultsQuiet(results) {
    var persister = $(PERSISTER_SELECTOR);
    $(persister).empty();
    $(persister).append(results);
    $(persister).hide();
    setItemTotals();
    cartId = $(persister).find("input[name='cart.Cart.Id']")[0].value;
    updateCookies(cartId);
    wireHideShow();
    tryRedirect();
}
function displayCheckoutResults(results) {
    hideBottomBar();
    $("div#checkoutform").empty().append(results);
    $("div#checkoutform form").submit(handleCheckoutPost);
    $("div#checkoutform").show();
    resetCheckoutForm();
    setPrintButtons();
    wireHideShow();
    unblock();
}

function tryRedirect() {
    try {
        var redir = $(PERSISTER_SELECTOR).find("input[name='cart.UrlRedirect']").val();
        if (redir != undefined) {
            if (redir != '') {
                window.location = redir;
            }
        }
    } catch (err) {
    }
}

function hideBottomBar() {
    $("#results").fadeOut("slow");
}

function showBottomBar() {
    $("#results").hide();
    $("#results").fadeIn("slow"); // .animate({ opacity: 1.0 }, 4000, 'linear', function() { $(this).fadeOut("slow"); });
}

function displayError(request, error) {
    unblock();
    if (request.innerText == undefined) {
        alert("There seems to be an issue communicating with the site. Please refresh the page and try again.");
        location.reload(true);
    } else {
        alert(request.innerText);
    }
}
function resetCheckoutForm() {
    $("input:checkbox[name='cart.AddCartResponseItem.SendBlankCard']").attr("checked", false);
    showRegularForm();
    $("input:checkbox[name='cart.AddCartResponseItem.SendBlankCard']").click(function(e) {
        if ($(e.target).attr("checked") == true) {
            showBlankForm();
        } else {
            showRegularForm();
        }
    });

    $("li.memorialname").hide();
    $("select[name='cart.AddCartResponseItem.ResponseType']").change(function(e) {
        if ($(e.target).val() === "memorial") {
            $("li.memorialname").show();
            $("li.sendcardform > label").each(function() {
                $(this).html($(this).html().replace("Honoree's", "Mail to"));
            });
        } else {
            $("li.memorialname").hide();
            $("li.sendcardform > label").each(function() {
                $(this).html($(this).html().replace("Mail to", "Honoree's"));
            });
        }
    });

}
function showBlankForm() {
    $(".sendblankcardform").show();
    $(".sendcardform").hide();
}
function showRegularForm() {
    $(".sendblankcardform").hide();
    $(".sendcardform").show();
}
function submitCheckout() {
    if (!loading) {
        $('form#checkoutmethod').submit();
    }
    return false;
}

function wireHideShow() {
    $(".hideshow").each(function() {
        var selector = $(this).attr("hideshowselector");
        $(selector).hide();
    });

    $(".hideshow").click(function() {
        var selector = $(this).attr("hideshowselector");
        $(selector).toggle();
        return false;
    });

}

function loadSingleSkuForm() {
    var singlesku = $("div.singlesku");
    $(singlesku).each(function() {
        if ($(this).attr("loadform") == "true") {
            var action = "/Cart/SingleSku.clean";
            var skusource = $(this).attr("skusource");
            action = BASEACTION + action + "/" + skusource;
            jQueryGetHtml({}, action, displaySingleSkuForm, displayError);
        } else {
            $("div.singlesku form").submit(handleCheckoutPost);
        }
    });
    return false;
}

function displaySingleSkuForm(results) {
    $("div.singlesku").html(results);
    $("div.singlesku form").submit(handleCheckoutPost);
    try {
        $("div.singlesku input.autocomplete").each(function() {
            var url = $(this).attr("url");
            $(this).autocomplete(url, {
                dataType: 'json',
                parse: parseAutocomplete,
                formatItem: formatItem,
                delay: 10,
                minChars: 2,
                matchSubset: 1,
                matchContains: 1,
                cacheLength: 10,
                autoFill: true
            }).result(itemSelect);
        });
    } catch (err) { }
}
