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 showLoader(){
  //  var processingImg = document.createElement('img');
   // processingImg.src = '/ecommerce/images/ajax-loader.gif';
   // processingImg.id = 'processingImg';
  // var container = document.getElementById("processing");
  //  if(container != null) {
  //      container.appendChild(processingImg);
  //  }
    jQuery('#processing').show();
}

/*hax to make the gif animation not stop after location.href*/
function loaderUpdate(){
    jQuery('#processingImg').attr("src",jQuery('#processingImg').attr("src"));
}


function hideLoader(){
  //  var container = document.getElementById("processing");
  //  var image = document.getElementById("processingImg");
  //  if(image != null) {
  //      container.removeChild(image);
  //  }
     jQuery('#processing').hide();
}

function releaseError() {
    blockCount--;
    releaseHandlers = [];
    hideLoader();
}

function release() {
    blockCount--;
    if(blockCount == 0) {
        for(var i in releaseHandlers) {
            releaseHandlers[i]();
        }
        releaseHandlers = [];
    }

}

function blockOnUpdate(criteria, targetUrl) {
    if(!criteria()) return false;
    showLoader();
    if(blockCount > 0){
        releaseHandlers.push(function(){blockOnUpdate(criteria, targetUrl)});
    }
    else{
        location.href = targetUrl;
        loaderUpdate();
    }
    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: 60000,
        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 createListFromCartToggle(formname) {
    jQuery(document).find('form[name=' + formname + ']').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,doAjaxCall) {
    var pcodeRegxp = /^([0-9]{5})$/;
    var res = pcodeRegxp.test(zip);

    if(doAlert && !res) {
        alert("Postnummer best\u00E5r av 5 siffror");
        return false;
    }
    block();
    if(doAjaxCall){
        new jQuery.ajax({   url: "/ecommerce/control/checkZipCode",
                            method: "post",
                            dataType: 'json',
                            data: {"zipCodeParameter": zip},
                            success: function(transport){
                                //    var jsonData = transport.evalJSON();
                                    if(transport.status=="success"){
                                        if(ajaxSubmitForm==true){
                                            release();
                                            ajaxSubmitFormOnSuccess.submit();
                                        }else{
                                            ajaxRunFunctionOnSuccess();
                                        }
                                    }else{
                                        releaseError();
                                        alert("Vi kan inte leverera till det angivna postnumret. Vid frågor kontakta Kundcenter");
                                    }
                                }  ,
                            error: function(jqXHR, textStatus, errorThrow){
                                    releaseError();
                                    alert("Ett fel intr\u00E4ffade: " + textStatus );
                                }
                            });

        return false;
    }
    return res;
}
function ajaxAddAddress(){
   var urlStr = "/ecommerce/jsp/addShipNewAddress.jsp?";
   var parameters = 'uniqueshipadress_toName='+encodeURIComponent(jQuery('#uniqueshipadress_toName').val()) +
        '&uniqueshipadress_address1='+encodeURIComponent(jQuery('#uniqueshipadress_address1').val()) +
        '&uniqueshipadress_address2='+encodeURIComponent(jQuery('#uniqueshipadress_address2').val()) +
        '&uniqueshipadress_postalCode='+encodeURIComponent(jQuery('#uniqueshipadress_postalCode').val()) +
        '&uniqueshipadress_city='+encodeURIComponent(jQuery('#uniqueshipadress_city').val()) +
        '&uniqueshipadress_countryGeoId='+encodeURIComponent(jQuery('#uniqueshipadress_countryGeoId').val()) +
        '&uniqueshipadress_stateProvinceGeoId='+encodeURIComponent(jQuery('#uniqueshipadress_stateProvinceGeoId').val()) +
        '&orderunique='+encodeURIComponent(jQuery('input[name=orderunique]:checked', '#showadress_newadress').val());



    urlStr = urlStr + parameters;
    //do not block this, it is already blocked
    jQuery.ajax({
        url: urlStr,
        type: 'GET',
        dataType: 'xml',
        timeout: 60000,
        error: function() {
            alert('Misslyckades att spara orderinformation.');
            releaseError();
        },
        success: function(data, textStatus, jqXHR) {

             if(getNodeValue(jqXHR.responseXML,'svar') == 'ok'){
                //hide input
                clearAllAddresses();
                //view new add

                jQuery('#currLevAddress').val(jQuery('id', jqXHR.responseXML).text());
                if(jQuery('unik', jqXHR.responseXML).text()=='unik'){
                    jQuery('#unikAddress').html(jQuery('address', jqXHR.responseXML).text());
                    jQuery('#uniklevAddress').show();
                    jQuery('#chosenaddress').val('newadress');
                }else{

                    createNewAddress(jqXHR);
                }
                release();
             }else{
                 alert('Misslyckades att spara orderinformation.');
                 releaseError();
             }

        }
    });

}

function createNewAddress(jqXHR){
  var newAddress = jQuery('#newlevAddress').clone();

  newAddress.attr('id','showadress_'+jQuery('id', jqXHR.responseXML).text());
  jQuery('.formText', newAddress).html(jQuery('address', jqXHR.responseXML).text());
  //newAddress.after('#showadress_newadress');

  jQuery('#newlevAddress').after(newAddress);
  jQuery('#chosenaddress').append('<option value="' + jQuery('id', jqXHR.responseXML).text() + '">' + jQuery('name', jqXHR.responseXML).text() + '</option>');
  jQuery('#chosenaddress').val(jQuery('id', jqXHR.responseXML).text());
  changeaddress(false);
}


function getNodeValue(obj,tag)
{
	return obj.getElementsByTagName(tag)[0].firstChild.nodeValue;
}

function addAdress(form) {
    var postcode = document.checkoutInfoForm.uniqueshipadress_postalCode.value;
    var address = document.checkoutInfoForm.uniqueshipadress_address1.value;
    var city = document.checkoutInfoForm.uniqueshipadress_city.value;

    form.action =  ofbizUrl + "addShipNewAddress";
    form.nextpage.value = "shippingaddress";

    if (address.length < 1) {
        alert("Address kan inte vara tom")
    } else if (city.length < 1) {
        alert("City kan inte vara tom")
    } else if (!validateZipCode(postcode, true,true)) {
       ajaxRunFunctionOnSuccess=ajaxAddAddress;
       ajaxSubmitForm=false;
    }else{
        form.submit();
    }
}

function validateAdress(elm) {
    var postcode = elm.CUSTOMER_SPOSTAL_CODE.value;
    ajaxSubmitFormOnSuccess=elm;
    ajaxSubmitForm=true;
    if (validateZipCode(postcode, true,true)) {
        elm.submit();
    }
}

function selectUnik() {
    document.getElementById("checkUnik").checked = true;
}

function selectShippingAddressAndSubmit( id ) {
    var el = document.getElementById("radio_" + id);
    el.checked = "checked";



    var urlStr = '/ecommerce/jsp/setOrderAddress.jsp?' +
        'shipping_contact_mech_id=' + encodeURIComponent(jQuery('#chosenaddress').val()) ;
    block();
    jQuery.ajax({
        url: urlStr,
        type: 'GET',
        dataType: 'xml',
        timeout: 60000,
        error: function() {
            alert('Misslyckades att spara orderinformation.');
            releaseError();
        },
        success: function(data, textStatus, jqXHR) {
            if(getNodeValue(jqXHR.responseXML,'svar') == 'ok'){
                release();
            }else{
                alert('Misslyckades att spara orderinformation.');
                releaseError();
            }
        }
    });

  /*  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(!isShippingAddressSetted()) {
        alert("Ingen leveransadress \u00E4r vald. Gå tillbaks till steg 2 och fyll i en leveransadress");
    }
    else 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 isShippingAddressSetted(){
    return document.getElementById("shippingId").value != '';
}

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();
}

function closeChange(){
    jQuery('#Changes').hide();
}
