var ofbizUrl = "/ecommerce/control/";

function progressBlockingGet(target, data, success) {
    block();
    jQuery.ajax({
        url: ofbizUrl + target,
        type: 'GET',
        data: data,
        error: function() {
            alert('Problem vid uppdatering av kundvagn.');
            releaseError();
        },
        success: function(msg) {
            success(msg);
            release();
        }
    });
}

function updateCartItem(elm, minAmount, allowBreakPackage) {
    var itemBox = jQuery(elm).parents('.productItemBox').first();
    if(!checkAntal(jQuery(itemBox).find('input[name=quantity]')[0], minAmount, allowBreakPackage)) return;
    var index = itemBox.parent().children('.productItemBox').index(itemBox);
    var comment = itemBox.find('input[name=comment]')[0].value;
    var quantity = itemBox.find('input[name=quantity]')[0].value;
    if(quantity < 1) {
        deleteCartItem(elm);
        return;
    }
    progressBlockingGet("updateCartItem", {
        item: index,
        comment: comment,
        quantity: quantity
    }, function(msg) {
        itemBox.html(jQuery(msg).html());
        fireEcomEvent("updatedCartItem", index);
        fireEcomEvent("invalidateCartValue", null);
    });
}

function deleteCartItem(elm) {
    var itemBox = jQuery(elm).parents('.productItemBox').first();
    var index = itemBox.parent().children('.productItemBox').index(itemBox);
    progressBlockingGet("deleteCartItem", {
        item: index
    }, function(msg) {
        itemBox[0].parentNode.removeChild(itemBox[0]);
        fireEcomEvent("updatedCartItem", index);
        fireEcomEvent("invalidateCartValue", null);
        release();
    });
}

function addCartValueListener(elm) {
    addEcomListener("invalidateCartValue", function(data) {
        jQuery.get(ofbizUrl + "cartTotal", {}, function(msg) {
            jQuery(elm).html(jQuery(msg).html());
        });
    });
}
function addShippingValueListener(elm) {
    addEcomListener("invalidateCartValue", function(data) {
        jQuery.get(ofbizUrl + "shippingTotal", {}, function(msg) {
            jQuery(elm).html(jQuery(msg).html());
        });
    });
}
function addFreightCostListener(elm) {
    addEcomListener("invalidateCartValue", function(data) {
        jQuery.get(ofbizUrl + "freightCost", {}, function(msg) {
            jQuery(elm).html(jQuery(msg).html());
        });
    });
}
function addOfferingListener(elm) {
    if(elm.hasOfferingListener) return;
    elm.hasOfferingListener = true;
    addEcomListener("updatedCartItem", function(data) {
        jQuery.get(ofbizUrl + "offerings", {}, function(msg) {
            jQuery(elm).html(jQuery(msg).html());
        });
    });
}

var blockCount = 0;
var releaseHandlers = [];

function block() {
    blockCount++;
}

function releaseError() {
    blockCount--;
    releaseHandlers = [];
}

function release() {
    blockCount--;
    if(blockCount == 0) {
        for(var i in releaseHandlers) {
            releaseHandlers[i]();
        }
        releaseHandlers = [];
    }
}

function blockOnUpdate(criteria, targetUrl) {
    if(!criteria()) return false;
    if(blockCount > 0)
        releaseHandlers.push(function(){blockOnUpdate(criteria, targetUrl)});
    else
        window.location = targetUrl;
    return false;
}

function auriga() {
    jQuery("#dialog").dialog({
        width: 600,
        height: 750,
        resizable: false,
        modal: true,
        open: function(event, ui) {
            jQuery.ajax({
                url: '/ecommerce/jsp/RedirectToProvider.jsp',
                success: function(data) {
                    jQuery('#auriga').html(data);
                }
            });
        }
    })
    jQuery("#dialog").dialog().parents(".ui-dialog").find(".ui-dialog-titlebar").remove();
}

function sendOrderInfo(infoType, elm, hasAddress, hasItems) {
    var urlStr = '/ecommerce/jsp/setOrderRef.jsp?infotype=' + infoType + '&infoValue='+encodeURIComponent(elm);
    block();
    jQuery.ajax({
        url: urlStr,
        type: 'GET',
        dataType: 'xml',
        timeout: 15000,
        error: function() {
            alert('Misslyckades att spara orderinformation.');
            releaseError();
        },
        success: function() {
            fireEcomEvent("invalidateCartValue", null);
            release();
        }
    });
}

function Delete() {
    var answer = confirm("\u00C4r du s\u00E4ker p\u00E5 att du vill ta bort denna kundvagn?");
    if (answer){
        window.location = "/ecommerce/control/emptycart?emptyShoppingList=true";
    }
}

function showHideKK(cb1, id1, cb2, id2) {
    var box1 = document.getElementById(cb1);
    var box2 = document.getElementById(cb2);

    var elm1 = document.getElementById(id1);
    var elm2 = document.getElementById(id2);

    if(box1 && box1.checked) {
        elm1.style.display = "block";
        elm2.style.display = "none";
    } else {
        elm2.style.display = "block";
        elm1.style.display = "none";
    }
}

function createListFromCartToggle() {
    jQuery(document).find('form[name=createCartForm]').each(function() {
        if(this.svnVisible == true) {
            this.svnVisible = false;
            this.style.display = "none";
        } else {
            this.svnVisible = true;
            this.style.display = "block";
        }
    });
}

function checkToggle(e) {
    var cform = document.cartform;
    if (e.checked) {
        var len = cform.elements.length;
        var allchecked = true;
        for (var i = 0; i < len; i++) {
            var element = cform.elements[i];
            if (element.name == "selectedItem" && !element.checked) {
                allchecked = false;
            }
            cform.selectAll.checked = allchecked;
        }
    } else {
        cform.selectAll.checked = false;
    }
}

function addToList() {
    var cform = document.cartform;
    cform.action = ofbizUrl + "addBulkToShoppingList";
    cform.submit();
}

function validateEntry() {
    if(jQuery(document).find('.productItemBox').length == 0) {
        alert("Kundvagnen f\u00E5r ej vara tom");
        return false;
    }
    if(document.getElementById('teleavi')!=null && document.getElementById('telnumber')!=null) {
        var teleavi = document.getElementById('teleavi').checked;
        var telnumber = document.getElementById('telnumber').value;
        if (teleavi && !/^([0-9\-\+\(\)\s]+)$/.test(telnumber)) {
            alert('Du m\u00e5ste ange ett telefonnummer f\u00F6r din telefonavisering!');
            //document.getElementById('telnumber').focus();
            return false;
        }
        else {
            return true;
        }
    }
    return true;
}

function TransformToNumeric(sText) {
    return sText.replace(/[^0-9]/g, "");
}

function validateZipCode(zip, doAlert) {
    var pcodeRegxp = /^([0-9]{5})$/;
    var res = pcodeRegxp.test(zip);

    if(doAlert && !res) {
        alert("Postnummer best\u00E5r av 5 siffror");
    }
    return res;
}

function addAdress(form) {
    var postcode = document.checkoutInfoForm.uniqueshipadress_postalCode.value;
    var address = document.checkoutInfoForm.uniqueshipadress_address1.value;
    var city = document.checkoutInfoForm.uniqueshipadress_city.value;

    if (!validateZipCode(postcode, true)) {
    } else if (address.length < 1) {
        alert("Address kan inte vara tom")
    } else if (city.length < 1) {
        alert("City kan inte vara tom")
    } else {
        form.action =  ofbizUrl + "addShipNewAddress";
        form.nextpage.value = "shippingaddress";
        form.submit();
    }
}

function validateAdress(elm) {
    var postcode = elm.CUSTOMER_SPOSTAL_CODE.value;
    var pcodeRegxp = /^([0-9]{5})$/;
    if (validateZipCode(postcode, true)) {
        elm.submit();
    }
}

function selectUnik() {
    document.getElementById("checkUnik").checked = true;
}

function selectShippingAddressAndSubmit( id ) {
    var el = document.getElementById("radio_" + id);
    el.checked = "checked";

    var form = document.checkoutInfoForm;
    form.action =  ofbizUrl + "checkoutoptionssvanstroms";
    form.nextpage.value = "shippingaddress";
    form.submit();
}

var clicked = 0;

function processOrder(form) {
    if (clicked == 0) {
        clicked++;
        //window.location.replace( ofbizUrl + "processorder");
        form.processButton.value="Bearbetar best\u00E4llning";
        form.processButton.disabled=true;
        form.submit();
    } else {
        alert("You order is being processed, this may take a moment.");
    }
}

function confirmOrder(salesConditions){
    if((document.getElementById("salesConditions").checked == true) || (!salesConditions)) {
        if(document.getElementById("payment-faktura").checked == true ||
                document.getElementById("transaction_id").value.length > 0){
            document.orderreview.submit();
        } else {
            auriga();
        }
    }
    else {
        alert("Du m\u00E5ste godk\u00E4nna f\u00F6rs\u00E4ljningsvillkoren f\u00F6r att kunna bekr\u00E4fta ordern!");
    }
}

function submitAcceptPromo(elm) {
    elm.submit();
}

function changeaddress(changeObj) {
    var selObj = document.getElementById("chosenaddress");
    var selIndex = selObj.selectedIndex;
    var showaddressId = selObj.options[selIndex].value;
    clearAllAddresses();
    var currentDiv = document.getElementById("showadress_" + showaddressId);
    currentDiv.style.display = "block";
    document.getElementById("currLevAddress").value = "";
    if ((showaddressId != "newadress") && (changeObj)) {
        selectShippingAddressAndSubmit(showaddressId);
    }
    if (showaddressId != "newadress") {
        document.getElementById("currLevAddress").value = showaddressId;
    }


}

function clearAllAddresses() {
    var alldivs = document.getElementsByTagName("div");
    for (var i = 0; i<alldivs.length; i++) {
        var thisname = alldivs[i].getAttribute('name');
        if (thisname == "levaddress") {
            alldivs[i].style.display = "none";
        }
    }
}

function validateShippingOptionsPrivate() {
    var levAddr = document.getElementById("currLevAddress").value;
    if (levAddr == "") {
        alert("Du m\u00E5ste v\u00E4lja en leveransadress!");
        return false;
    }
    return true;
}

function validateShippingOptionsCorporate() {
    var customerref = document.getElementById("customerref").value;
    if (customerref == "") {
        alert("\"Er referens\" \u00E4r obligatorisk");
        return false
    }
    return validateShippingOptionsPrivate();
}