function shopProductChangePicture(imageId, productId)
{
        productImages = $("shopProductImages_" + productId).childNodes;
        for (i=0; i<productImages.length; i++) {
            if (productImages[i].nodeName == "IMG") {
                $(productImages[i].id).style.display = productImages[i].id == "shopProductImage_" + productId + "_" + imageId ? "block" : "none";
            }
        }
}

function shopProductChangeLanguage(language, productId)
{
    languageList = $("shopLanguageList").childNodes;
    for (i = 0; i < languageList.length; i++) {
        if(languageList[i].nodeName == "LI"){
            $(languageList[i].id).style.backgroundColor = "white";
        }
    }
    $("shopFieldsLanguage_" + language).style.backgroundColor = "#ebebeb";
    table = $("shopProductFieldsDetails_" + productId);
    for (i = 0; i < table.rows.length; i++) {
        for (j = 1; j < table.rows[i].cells.length; j++) {
            currentCell = table.rows[i].cells[j];
            if (currentCell.id.substr(0,19) == "shopFieldDetails_" + language) {
                currentCell.style.display = "block";
            } else {
                currentCell.style.display = "none";
            }
        }
    }
}

function shopProductInit(productId)
{
    var productForm = $("shopProductForm" + productId);
    for (i = 0; i < productForm.length; i++) {
        currentField = productForm.elements[i];
        if (currentField.onfocus) {
            currentField.onfocus();
        }
    }
}

function shopProductSave(additionalData)
{
    shopProductInit(additionalData["productId"]);
    var productId = additionalData["productId"];
    var productDetails = new Array();
    var fieldDetails = new Array();
    var productForm = $("shopProductForm" + additionalData["productId"]);
    for (i = 0; i < productForm.length; i++) {
        currentField = productForm.elements[i];

        if (currentField.isChanged) {
            if (!fieldDetails[currentField.fieldId]) {
                fieldDetails[currentField.fieldId] = new Array();
            }
            if (currentField.type == "checkbox") {
                fieldDetails[currentField.fieldId]["checked"] =currentField.checked;
                fieldDetails[currentField.fieldId]["fieldName"] = currentField.fieldName;
            } else {
                if (currentField.language) {
                    if (!fieldDetails[currentField.fieldId]["language"]) {
                        fieldDetails[currentField.fieldId]["language"] = new Array();
                    }
                    fieldDetails[currentField.fieldId]["language"][currentField.language] = currentField.value;
                } else {
                    if (!fieldDetails[currentField.fieldId]["value"]){
                        fieldDetails[currentField.fieldId]["value"] = new Array();
                    }
                    fieldDetails[currentField.fieldId]["value"] = currentField.value;
                }
            }
        } else {
            if (currentField.id == "shopComingSoon_" + additionalData["productId"]) {
                productDetails["comingSoon"] = currentField.checked;
            }
            if (currentField.id == "shopIsOffer_" + additionalData["productId"]) {
                productDetails["specialOffer"] = currentField.checked;
            }
        }
    }
    productDetails["fieldDetails"] = fieldDetails;

    productDetails["isDeliverable"] = $("shopDeliverable_" + productId).checked;
    if (productDetails["isDeliverable"]) {
        var deliveryType = $("shopDeliveryType_" + productId);
        productDetails["deliveryType"] = deliveryType.options[deliveryType.selectedIndex].value;
        if (productDetails["deliveryType"] == "daily" || productDetails["deliveryType"] == "daily_business") {
            productDetails["deliveryMax"] = $("shopDeliverableDailyMax_" + productId).value - 0;
        } else if (productDetails["deliveryType"] == "weekly") {
            productDetails["deliveryMax"] = $("shopDeliverableWeeklyMax_" + productId).value - 0;
        } else if (productDetails["deliveryType"] == "monthly") {
            productDetails["deliveryMax"] = $("shopDeliverableMonthlyMax_" + productId).value - 0;
        }
        productDetails["allowPickup"] = $("shopDeliverableAllowPickup_" + productId).checked;
    }
    productDetails["isDownloadable"] = $("shopDownloadable_" + productId).checked;
    return productDetails;
}

function shopProductUpdateFields(productId, fieldId, dependsOnLanguage, fieldObject)
{
    fieldObject.isChanged = true;
    var fieldDetails = new Array();
    var fieldValueId = new RegExp("shopFieldValue_[a-zA-Z]{2}_" + productId + "_" + fieldId, "g");
    var productForm = $("shopProductForm" + productId);
    for (i = 0; i < productForm.length; i++) {
        updatedField = productForm.elements[i];
        if (updatedField.id.match(fieldValueId)) {
            if (!dependsOnLanguage) {
                updatedField.value = fieldObject.value;
            }
            $(productId + "_" + fieldId).checked = true;
            $(productId + "_" + fieldId).onchange();
        }
    }


}

function shopProductUpdate(additionalData, productDetails)
{
    var productId = additionalData["productId"];
    var language = additionalData["language"];

    if (productDetails["comingSoon"] == true) {
        $("shopComingSoon_" + productId).style.display = "block";
        $("shopCart_" + productId).style.display = "none";
    } else {
        $("shopComingSoon_" + productId).style.display = "none";
        $("shopCart_" + productId).style.display = "block";
    }
    var detailHtml = "";

    var productForm = $("shopProductForm" + productId);
    for (i = 0; i < productForm.length; i++) {
        field = productForm.elements[i];
        if (field.type == "checkbox") {
            if (field.checked) {
                if (field.fieldId) {
                    if ($("shopFieldValue_" + language + "_" + productId + "_" + field.fieldId).value) {
                        detailHtml += field.fieldName + ": " + $("shopFieldValue_" + language + "_" + productId + "_" + field.fieldId).value + "<br>";
                    }
                }
            }
        }
    }
    $("shopProductDetails_" + productId).innerHTML = detailHtml;
}

function addNewProduct()
{
    ApOnListAddEditor.add("shopProducts", "first");
}

function shopAddNewPicture(productId)
{
    ApOnListAddEditor.add("shopProductImages_" + productId, "first");
}

function addToCartCallback(response)
{
    if ($("shoppingCartItems")) {
        $("shoppingCartItems").innerHTML = ($("shoppingCartItems").innerHTML - 0) + 1;
    }
}

function shopUpdateQuantityAndPrice(price)
{
    $('shopCartTotalPrice').innerHTML = ($('shopCartTotalPrice').innerHTML - 0) + (price - 0);
}

function shopOptionValues()
{
    shopOptions.init();

    var values = new Array();
    values["before"] = $("txtShopCurrencyBefore").value;
    values["after"]  = $("txtShopCurrencyAfter").value;
    values["currency"]  = $("txtShopCurrency").value;

    //payment
    values["shopPaymentMode"]                     = $("shopPaymentMode").options[$("shopPaymentMode").selectedIndex].value;
    values["shopPaymentGoogleCheckout"]           = $("paymentOptionGoogleCheckout").checked;
    values["shopPaymentGoogleCheckoutMerchantId"] = $("paymentOptionGoogleCheckoutMerchantId").value;
    values["shopPaymentPaypal"]                   = $("paymentOptionPaypal").checked;
    values["shopPaymentPaypalId"]                 = $("paymentOptionPaypalId").value;
    values["shopPaymentKorta"]                    = $("paymentOptionKorta").checked;
    values["shopPaymentKortaMerchantId"]          = $("paymentOptionKortaMerchantId").value;
    values["shopPaymentKortaTerminalId"]          = $("paymentOptionKortaTerminalId").value;
    values["shopPaymentKortaSecretKey"]           = $("paymentOptionKortaSecretKey").value;
    values["shopPaymentKortaMerchantDetails"]     = $("paymentOptionKortaMerchantDetails").value;
    values["shopPaymentKortaTermsOfUse"]          = $("paymentOptionKortaTermsOfUse").value;
    values["shopPaymentBankTransfer"]             = $("paymentOptionBankTransfer").checked;

    //delivery
    values["shopDeliverySingleCityDelivery"] = $("shopOptionsDeliverySingleCityCheck").checked;
    values["shopDeliverySingleCityName"]     = $("shopOptionsDeliverySingleCityName").value;
    var countries = "";
    var boxes = $("shopOptionsDeliveryCountries").getElementsByTagName("input");
    //count the total number of checked countries
    var checked = 0;
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].type == "checkbox" && boxes[i].checked) {
            countries += (countries == "" ? "" : ",") + boxes[i].value
        }
    }
    values["shopDeliveryCountries"] = countries;

    //locations
    var locations = new Object();
    for (key in shopOptions.locations) {
        if (!shopOptions.locations[key].skip) {
            locations[key] = shopOptions.locations[key].location;
            if (shopOptions.locations[key].added) {
                shopOptions.locations[key].skip = true;
            }
        }
    }
    values["locations"] = locations;
    //removed locations
    var removedLocations = new Object();
    for (key in shopOptions.removedLocations) {
        removedLocations[key] = shopOptions.removedLocations[key].location;
    }
    values["removedLocations"] = removedLocations;

    //allow delivery
    values["allowDelivery"] = $("shopAllowDelivery").checked;
    values["queryOnly"] = $("shopOptionsQueryOnly").checked;
    values["queryToEmail"] = $("shopOptionsQueryToEmail").value;
    values["noPrice"] = $("shopOptionsNoPrice").checked;
    return values;
}

function shopOptionValidate()
{
    if (!($("paymentOptionGoogleCheckout").checked || $("paymentOptionPaypal").checked || $("paymentOptionKorta").checked || $("paymentOptionBankTransfer").checked)) {
        alert("Please choose at least one payment method");
        return false;
    }
    return true;
}

function shopOptions()
{
}

shopOptions.init = function()
{
    if (shopOptions.initialized) {
        return;
    }
    shopOptions.locations = new Array();
    shopOptions.removedLocations = new Array();

    var locationSpans = $("shopLocationList").getElementsByTagName("span");
    var prefix = "shopLocationName_";
    for (var i = 0; i < locationSpans.length; i++) {
        var span = locationSpans[i];
        if (span.id.substr(0, prefix.length) == prefix) {
            shopOptions.locations[span.id.substr(prefix.length)] = {location: span.innerHTML, div: span.parentNode};
        }
    }

    shopOptions.initialized = true;
}

shopOptions.showPayment = function ()
{
    $("shopOptionsPayment").style.display = "block";
    $("shopOptionsButtonPayment").className = "selected";

    $("shopOptionsDelivery").style.display = "none";
    $("shopOptionsButtonDelivery").className = "";

    $("shopOptionsOthers").style.display = "none";
    $("shopOptionsButtonOthers").className = "";
}

shopOptions.showDelivery = function ()
{
    $("shopOptionsPayment").style.display = "none";
    $("shopOptionsButtonPayment").className = "";

    $("shopOptionsDelivery").style.display = "block";
    $("shopOptionsButtonDelivery").className = "selected";

    $("shopOptionsOthers").style.display = "none";
    $("shopOptionsButtonOthers").className = "";
}

shopOptions.showOthers = function ()
{
    $("shopOptionsPayment").style.display = "none";
    $("shopOptionsButtonPayment").className = "";

    $("shopOptionsDelivery").style.display = "none";
    $("shopOptionsButtonDelivery").className = "";

    $("shopOptionsOthers").style.display = "block";
    $("shopOptionsButtonOthers").className = "selected";
}

shopOptions.deliveryCountryCheck = function(box)
{
    var checked = shopOptions.getCheckCountriesCount();
    if ($("shopOptionsDeliverySingleCityCheck").checked) {
        if (checked != 1) {
            if (!confirm("Single city delivery will be disabled. Would you like to continue?")) {
                box.checked = !box.checked;
                checked = shopOptions.getCheckCountriesCount();
            }
        }
    }

    //when exactly one country is checked allow single city
    var singleCity = (checked == 1);
    $("shopOptionsDeliverySingleCity").className = singleCity ? "" : "disabled";
    $("shopOptionsDeliverySingleCityCheck").disabled = !singleCity;
    if (!singleCity) {
        $("shopOptionsDeliverySingleCityCheck").checked = false;
    }
    $("shopOptionsDeliverySingleCityName").disabled  = !singleCity || !$("shopOptionsDeliverySingleCityCheck").checked;
}

shopOptions.getCheckCountriesCount = function(box)
{
    var boxes = $("shopOptionsDeliveryCountries").getElementsByTagName("input");
    //count the total number of checked countries
    var checked = 0;
    for (var i = 0; i < boxes.length; i++) {
        if (boxes[i].type == "checkbox" && boxes[i].checked) {
            checked++;
        }
    }
    return checked;
}

shopOptions.deliverySingleCityCheck = function(box)
{
    var checked = shopOptions.getCheckCountriesCount();
    var singleCity = (checked == 1);
    $("shopOptionsDeliverySingleCityName").disabled  = !singleCity || !box.checked;
}

shopOptions.addLocationShow = function()
{
    $("shopAddNewLocationButton").style.display = "none";
    $("shopAddNewLocation").style.display = "block";
    $("txtShopAddLocation").focus();
}

shopOptions.addLocationHide = function()
{
    $("txtShopAddLocation").value = "";
    $("shopAddNewLocationButton").style.display = "block";
    $("shopAddNewLocation").style.display = "none";
}

shopOptions.addLocation = function()
{
    shopOptions.init();
    var location = $("txtShopAddLocation").value;
    if (location.trim() =="") {
        alert("Please enter a location name");
        $("txtShopAddLocation").focus();
        return;
    }

    //create the location div
    var id = generateGuid();

    var div = document.createElement("div");
    div.id = "shopLocation_" + id;
    //remove button
    div.removeButton = document.createElement("input");
    div.removeButton.type = "button";
    div.removeButton.value = "remove";
    div.removeButton.onclick = function() {
        shopOptions.removeLocation(id);
    }
    div.appendChild(div.removeButton);
    div.appendText(" ");
    //edit button
    div.editButton = document.createElement("input");
    div.editButton.type = "button";
    div.editButton.value = "edit";
    div.editButton.onclick = function() {
        shopOptions.editLocation(id);
    }
    div.appendChild(div.editButton);
    div.appendText(" ");
    //name span
    div.nameSpan = document.createElement("span");
    div.nameSpan.id = "shopLocationName_" + id;
    div.nameSpan.innerHTML = location;
    div.appendChild(div.nameSpan);
    //put the div in
    $("shopLocationList").appendChild(div);

    var newLocation = {location: location, div: div, added: true};
    shopOptions.locations[id] = newLocation;
    //clear adding location
    shopOptions.addLocationHide();
}

shopOptions.removeLocation = function(id)
{
    shopOptions.init();
    if (!shopOptions.locations[id]) {
        return;
    }
    var data = shopOptions.locations[id];
    if (!confirm("Are you sure you want to remove '" + data.location + "'?")) {
        return;
    }
    if (!data.added) {
        shopOptions.removedLocations[id] = data;
    }

    //remove it
    delete shopOptions.locations[id];
    $("shopLocation_" + id).remove();
}
