function attachSortListener()
{
    $("#sortForm")[0].action = "javascript:";
    $("#sortForm select, #sortForm input").on("change", sortBySubmit);
}

function initSimpleCart()
{
    $.ajaxSetup({ cache: false });
    //pull datetimepicker css if needed
    if($('#silverservers_datetimepicker_base').length == 0)
    {
        $.get("https://img.silverservers.com/css/jquery.datetimepicker.css", function (a) {
            $("<style type='text/css' id='silverservers_datetimepicker_base'></style>").html(a).appendTo("head")
        });  
        console.log("loading datetimepicker css");
    }
    else{
        console.log("datetimepicker css already loaded");
    }
    $(".pickuptimepicker").datetimepicker({
        format: "Y-m-d H:i",
        lang: "en",
        mask: 0,
        timepicker: !0,
        validateOnBlur: !0,
        scrollInput: !1,
        scrollTime: !1,
        scrollMonth: !1,
        step: 15
    });
    if(!navigator.cookieEnabled)
    {
        $(".nocookie").removeClass("hide");
    }
}

var sortBySubmits = 0;
var sortBySubmitTimer = false;
function sortBySubmit(event)
{
    event.preventDefault();
    sortBySubmits++;
    $data = new FormData(event.target.form);
    $data.append("function", "sortForm");
    $.ajax({
        url: '/simplecart-ajax',
        beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
        method: 'post',
        data: $data,
        contentType: false,
        processData: false,
        xhrFields: 
        {
            withCredentials: true
        }
    }).done(function(res){
        sortBySubmits--;
        var $href = window.location.href;
        if($href[$href.length -1] == '#')
        {
            $href = $href.substr(0, -1);

        }
        
        if($href.includes("timestamp="))
        {
            var $index = $href.indexOf('timestamp') + "timestamp=".length;
            $href = $href.substr(0, $index) + (new Date().getTime() / 1000);
        }
        else if($href.includes("?"))
        {
            $href = $href + "&timestamp=" + (new Date().getTime() / 1000);
        }
        else
        {
            $href = $href + "?timestamp=" + (new Date().getTime() / 1000);
        }
        
        if(sortBySubmits <= 0)
        {
            window.location = $href;
        }
        else{
            console.log("Sort By Submit waiting on " + sortBySubmits + " requests..");
            if(sortBySubmitTimer == false) //in case a request was lost
            {
                sortBySubmitTimer = true;
                setTimeout(function(){
                    window.location = $href;
                }, 750);
            }
        }
    });
}

$minQuantity = 1;
$maxQuantity = 10;

function incrementQuantity($div) {
    var $input = $div.querySelector("input[name='quantity']");
    var $quantity = parseInt($input.value);
    $quantity++;
    if ($quantity > $maxQuantity) {
        $quantity = $maxQuantity;
    }
    $input.value = $quantity;
}

function decrementQuantity($div) {
    var $input = $div.querySelector("input[name='quantity']");
    var $quantity = parseInt($input.value);
    $quantity--;
    if ($quantity < $minQuantity) {
        $quantity = $minQuantity;
    }
    $input.value = $quantity;
}

function addToSimpleCart(event) {
    var $button = event.target;
    var $item = $($button).data("id");
    var $form = $button.parentNode;
    var $input = $form.querySelector("input[name='quantity']");
    var $quantity = parseInt($input.value);
    $.ajax({
        url: '/simplecart-ajax',
        beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
        method: 'post',
        xhrFields: 
        {
            withCredentials: true
        },
        data: {
            addToCart: 1,
            quantity: $quantity,
            item: $item
        }
    }).done(function (res) {
        var message = JSON.parse(res);
        console.log(message);
        //        $("#cartCount")[0].innerHTML = message['items'];
        //        checkCartCountDisplay();
        $("#simpleCartCount")[0].innerHTML = message['items'];
        $("#simpleCartMenuUL")[0].innerHTML = message['menu'];
        updateShipping(message['subtotal']);
        if(message['status'] == "ok")
        {
            var $closest = $button.closest("li");
            if($closest != null)
            {
                $closest.classList.add("store-selected");
            }

            $check = $(".partafterpic form a"); 
            if($check.length > 0 && $($check[0]).data("id") == $item)
            {
                $(".partafterpic").addClass("store-selected");
            }
        }
        attachCartListeners();
    });
}

function updateQuantities(dir, t) {
    console.log(t);
    if(dir == '-') {
        t.nextSibling.stepDown();
        updateCartItem(t.nextSibling);
    }else{
        t.previousSibling.stepUp();
        updateCartItem(t.previousSibling);
    }
}

function updateCartItem($input) {
    var $quantity = $input.value;
    var $li = $input.parentNode.parentNode.parentNode.parentNode;
    var $item = $li.querySelector("input[name='seo']").value;

    $.ajax({
        url: '/simplecart-ajax',
        beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
        method: 'post',
        data: {
            updateCart: 1,
            quantity: $quantity,
            item: $item
        }
    }).done(function (res) {
    	var obj = JSON.parse(res);
//        $("#cartcontainer")[0].innerHTML = obj.cart;
        var $cart = obj.cart;
        for(var $i = 0; $i < $cart.length; $i++)
        {
            var $id = $cart[$i].id;
            var $price = $cart[$i].price;
            
            var $sub = $("tr.cartItemRow[data-item=" + $id + "] td[data-th=Subtotal] span");
            
            if($sub.length > 0)
            {
                $sub[0].innerHTML = $price;        
            }
        }
        $(".simpleCartMenu")[0].innerHTML = obj.menu.menu;
        var $gst = obj.gst;
        var $pst = obj.pst;
        var $subtotal = obj.subtotal;
        var $total = obj.total;
        var $shipping = "$" + obj.shipping.toFixed(2);
        
        $(".simpleCartTotalSub span")[0].innerHTML = $subtotal;
        $(".simpleCartTotalTax span")[0].innerHTML = $gst;
        $(".simpleCartTotalTax span")[1].innerHTML = $pst;
        $(".simpleCartTotalTotal span")[0].innerHTML = $total;
        $(".simpleCartShipping span")[0].innerHTML = $shipping;
        updateShipping($subtotal);
        attachCartListeners();
    });
}

function removeCartItem(event) {
    var $item = $(event.target).data("id");
    var $type = $(event.target).data("type");
    $.ajax({
        url: '/simplecart-ajax',
        beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
        method: 'post',
        data: {
            removeCart: 1,
            item: $item
        }
    }).done(function (res) {
        var result = JSON.parse(res);
        if ($type != 'menu') {
            $("#cartcontainer")[0].innerHTML = result['cart'];
            //            $("#cartCount")[0].innerHTML = result['items']; 
        }
        $("#simpleCartCount")[0].innerHTML = result['items'];
        $("#simpleCartMenuUL")[0].innerHTML = result['menu'];
        updateShipping(result['subtotal']);
        if ($("#cartcontainer").length != 0) {
            $("#cartcontainer")[0].innerHTML = result['current'];
            console.log(result['current']);
        }
        if ($('*[data-shopTileProductID="'+$item+'"]').length != 0){
        	$('*[data-shopTileProductID="'+$item+'"]')[0].classList.remove("store-selected");
        }
        
        $check = $(".partafterpic.store-selected form a"); 
        if($check.length > 0 && $($check[0]).data("id") == $item)
        {
            $(".partafterpic.store-selected").removeClass("store-selected");
        }
        attachCartListeners();
        //checkCartCountDisplay();
        //console.log(res);
    });
}

function finishOrder() {
    alert("placeholder function for finishing order");
}

function checkCartCountDisplay() {
    if ($("#cartCount").length > 0) {
        var $items = $("#cartCount")[0].innerHTML;
        if ($items == 0) {
            $("#cartCountDisplay")[0].style.display = "none";
        } else {
            $("#cartCountDisplay")[0].style.display = "initial";
        }
    }
}

function translator13(e) {
    // Allows the user to press enter to update the item quanty. Useful for mobile.
    var char = e.which || e.keyCode;
    if(char === 13) {
        e = e || window.event;
        var target = e.target || e.srcElement;
        updateCartItem(target);
    }
}

function attachCartListeners() {
    //reset event listeners to make sure they dont fire multiple times
    $(".cartAddButton, .cartAddButton-nostock").off("click", addToSimpleCart);
    $(".cartRemoveButton").off("click", removeCartItem);

    $(".cartAddButton, .cartAddButton-nostock").on("click", addToSimpleCart);
    $(".cartRemoveButton").on("click", removeCartItem);

    $("select.inputAddress").off("change");
    $("select.inputAddress").on("change", confirmAddress);

    if(typeof($('table').basictable) !== 'undefined')
    {
        $('table').basictable('restart');
    }
    
    var $cartCount = $("#simpleCartCount");
    if($cartCount.length > 0)
    {
        setFavicon($cartCount[0].innerHTML);        
    }
}

function toggleCurbside(event)
{
    var $value = event.target.checked;
    var $checkbox = event.target.parentElement.querySelector('span');
    var $addressInputs = $(".inputAddress");
    var $i;
    
    for($i = 0; $i < $addressInputs.length; $i++)
    {
        $addressInputs[$i].required = !$value;
        $addressInputs[$i].disabled = $value;
    }
    var $pickupInputs  = $(".pickup");
    for($i = 0; $i < $pickupInputs.length; $i++)
    {
        $pickupInputs[$i].required = $value;        
    }
    
    if($value)
    {
        $($checkbox).addClass("checked");        
    }
    else
    {
        $($checkbox).removeClass("checked");        
    }
    $.ajax({
        url: "simplecart-ajax",
        beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
        method: "post",
        data: {
            curbside_pickup: $value
        }
    }).done(function(res){
        $result = JSON.parse(res);
        $shipping = $result.shipping;
        $total = $result.total;
        $gst = $result.gst;
        $pst = $result.pst;

        $(".simpleCartShipping span")[0].innerHTML = "$" + $shipping.toFixed(2);
        $(".simpleCartTotalTotal span")[0].innerHTML = "$" + $total.toFixed(2);
        $(".simpleCartTotalTax span")[0].innerHTML = "$" + $gst.toFixed(2);
        $(".simpleCartTotalTax span")[1].innerHTML = "$" + $pst.toFixed(2);

        if($shipping == 0)
        {
            
        }
    });
}


function confirmOrder()
{
    console.log("Confirming order");
    
    var $addButton = $("#addressButton");
    if($addButton.length > 0)
    {
        $addButton[0].style.backgroundColor = "grey";  
        $addButton[0].innerHTML = "Confirming Address";
    }
    
    console.log("Confirming Address");

    $form = $('#addressForm');
    
    if($form.length > 0)
    {
        $form = $form[0];  
        
        $data = new FormData($form);
        
        $data.append("function", "confirmAddress");
        
        $.ajax({
            url: "simplecart-ajax",
            beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
            method: "post",
            contentType: false,
            processData: false,
            xhrFields: 
            {
                withCredentials: true
            },
            data: $data
        }).done(function(res){
            console.log(res);
            var $div = $("#simplecartVerifyButton");
            updatePST();

            var $cartmessage = $("#cartmessage")[0];
            $json = JSON.parse(res);
            if ($json !== false) {
                var $button = $("#simplecartVerifyButton");
                if ($json.status == "ok") {
                    $cartmessage.innerHTML = "";
                    $.ajax({
                        url: "simplecart-ajax",
                        beforeSend: function (xhr) {
                            xhr.setRequestHeader(
                                "X-Requested-With",
                                "XMLHttpRequest"
                            );
                        },
                        method: "post",
                        data: {
                            function: "confirmOrder",
                        },
                    }).done(function (res) {
                        console.log(res);
                        $json = JSON.parse(res);
                        if (
                            $json !== false &&
                            $div.length > 0
                        ) {
                            if (
                                $json["status"] == "bad"
                            ) {
                                $div[0].innerHTML =
                                    $json["button"];
                            } else {
                                window.location.href =
                                    $json["link"];
                            }
                        }
                    });
                } else if ($button.length > 0) {
                    $cartmessage.innerHTML = "Address Information Incomplete.";
                    $($cartmessage).addClass("yellow");
                }

                setTimeout(function () {
                    $($cartmessage).removeClass("yellow");
                    $($cartmessage).removeClass("green");
                }, 2500);
            } else {
                console.log(res);
            }
            
        });
    }   

    return false;
}

function confirmAddress()
{
    
    var $addButton = $("#addressButton");
    if($addButton.length > 0)
    {
        $addButton[0].style.backgroundColor = "grey";  
        $addButton[0].innerHTML = "Confirming Address";
    }
    
    console.log("Confirming Address");

    $form = $('#addressForm');
    
    if($form.length > 0)
    {

        $form = $form[0];  
        
        $data = new FormData($form);
        
        $data.append("function", "confirmAddress");
        
        var $cartmessage = $("#cartmessage")[0];
        $.ajax({
            url: "simplecart-ajax",
            beforeSend: function(xhr){xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');},
            method: "post",
            contentType: false,
            processData: false,
            xhrFields: 
            {
                withCredentials: true
            },
            data: $data
        }).done(function(res){
            console.log(res);
            //trigger update of pst
            updatePST();

            $json = JSON.parse(res);
            if($json !== false)
            {
                var $button = $("#simplecartVerifyButton");
                if($json.status == 'ok')
                {
                    if($button.length > 0)
                    {
                        $button[0].innerHTML = $json.button; 
                        $addButton[0].innerHTML = "Update Address";
                        $addButton.addClass("greenButton");
                        $cartmessage.innerHTML = "Address Information Updated.";
                        $($cartmessage).addClass("green");
                    }
                }
                else if($button.length > 0)
                {
                    $button[0].innerHTML = $json.button;
                    $addButton[0].innerHTML = "Update Address";
                    $addButton.removeClass("greenButton");
                    $cartmessage.innerHTML = "Address Information Incomplete.";
                    $($cartmessage).addClass("yellow");
                }
                
                setTimeout(function(){
                    $($cartmessage).removeClass("yellow");
                    $($cartmessage).removeClass("green");
                }, 2500);
                
            }
            else{
                console.log(res);
            }
        });
    }   
    
    return false;
}

function updatePST()
{
    //trigger update of pst
    $input = $(".cartItemRow input.quantity");
    if($input.length > 0)
    {
        console.log("Updating PST");
        $input[0].onchange();
    }
}

function setFavicon(count){
	if(count > 999) count = 999;
	if(count < 1) count = "";
	var width = 16;
	var height = 16;
	var canvas = document.createElement('canvas');
	canvas.width = width;
	canvas.height = height;
	var ctx = canvas.getContext('2d');
	var img = new Image();
	img.src = '/favicon.ico';
	img.onload = function() {
		ctx.drawImage(img, 0, 0, width, height);
 		ctx.fillStyle = '#FFFFFF';
 		ctx.font = 'bold 10px sans-serif';
 		ctx.textAlign = "end";
 		ctx.fillText(count, width, 14);
		var link = document.getElementById("faviconjs");
		if(!link){
			var link = document.createElement('link');
			link.type = 'image/x-icon';
			link.id = 'faviconjs';
			link.rel = 'shortcut icon';
			document.getElementsByTagName('head')[0].appendChild(link);
		}
		link.href = canvas.toDataURL("image/x-icon");
	}
}

function updateShipping($amount)
{
    //shipping no longer free for large orders
//    $content = "Free Shipping";
//    if($amount < 100)
//    {
//        $needed = (100 - $amount).toFixed(2);
//        $content = "<span>$" + $needed + "</span> Needed <br>for Free Shipping";
//    }
//    
//    $div = $(".shippingOverlay");
//    if($div.length > 0)
//    {
//        $div[0].innerHTML = $content;  
//        if($content == "Free Shipping")
//        {
//            $div.addClass("freeShipping");
//        }
//        else
//        {
//            $div.removeClass("freeShipping");
//        }
//    }
}

//$(document).ready(function(){
//    checkCartCountDisplay();    
//});