var engine_estore_process = "webcpms/proc_estore.php";

var ajaxLoadDataStructure,
    ajaxLoadItemProperties,
    ajaxSaveEStoreItem,
    ajaxEditEStoreItem,
    ajaxDeleteEStoreItem;

var field_slot_ids;
var item_data_structure;



function saveEStoreSettings() {
   var settings = new Array();

   if (document.getElementById('EStorePanelOperationOnLineShopping')) {
      settings[0] = "estore_shoppingcart=" + (document.getElementById('EStorePanelOperationOnLineShopping').checked ? "true" : "false");
   }

   saveSystemSettings(settings, true, "SystemSettingsIndicator");
}


function loadDataStructure(category_id, item_id) {
   var category = category_id == null ? document.getElementById('EStoreNewItemCategorySelector').value : category_id;
   var item = item_id == null ? 0 : item_id;
   startIndicator("EStoreNewItemPanelIndicator", "Loading");
   var cmd = "cmd=cmdLoadDataStructure&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&category=" + category + "&item=" + item + "&name=EStoreNewItem";
   load(ajaxLoadDataStructure = GetXmlHttpObject(), engine_estore_process, cmd, loadedDataStructure);
}




function loadedDataStructure() {
   if (ajaxLoadDataStructure.readyState == 4 || ajaxLoadDataStructure.readyState == "complete") {
      stopIndicator("EStoreNewItemPanelIndicator");

      field_slot_ids = new Array();
      item_data_structure = new Array();

      var item_to_edit = parseDataStructure(ajaxLoadDataStructure.responseText, item_data_structure, field_slot_ids);


      if (item_to_edit != null) {
         document.getElementById('EStoreNewItemCategorySelector').value = item_to_edit[0];
         document.getElementById('WebCPMSEStoreItemEditor').className = "editor_on";
         resetMIDLItemEditor("EStoreNewItem", printEStoreAmountEditor);
         var cmd = "cmd=cmdLoadEStoreItem&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&item=" + item_to_edit[1];
         load(ajaxEditEStoreItem = GetXmlHttpObject(), engine_estore_process, cmd, loadedEStoreItem);
      } else {
         printMIDLItemEditor("EStoreNewItem", printEStoreAmountEditor);
      }

   }
}



function printEStoreAmountEditor() {
   return "<tr><td class='label'>Amount:</td><td><input type='text' size='5' id='EStoreNewItemAmount' name='EStoreNewItemAmount' value='' /><br /><span class='note'>Enter the amount of this item you have available in stock. If you have unlimited resources of this type of items, you should leave this field blank.</span></td></tr>";
}




function saveEStoreItem(name) {
   var data = checkMIDLItemEditorContent("EStoreNewItem", true)
   if (data.length == 0) {
      return;
   }
   var amount = document.getElementById('EStoreNewItemAmount').value;
   if (amount.length > 0 && isNaN(amount)) {
      alert("You have to enter a number into field 'Amount'");
      return;
   }
   startIndicator("EStoreNewItemPanelIndicator", "Saving");
   var cmd = "cmd=cmdSaveEStoreItem&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&category=" + document.getElementById('EStoreNewItemCategorySelector').value + "&item=" + document.getElementById('EStoreNewItem').value + data + "&amount=" + amount;
   load(ajaxSaveEStoreItem = GetXmlHttpObject(), engine_estore_process, cmd, savedEStoreItem);
}


function savedEStoreItem() {
   if (ajaxSaveEStoreItem.readyState == 4 || ajaxSaveEStoreItem.readyState == "complete") {
      stopIndicator("EStoreNewItemPanelIndicator");
   }
}



function editEStoreItem(name, title, item_id, category_id) {
   startIndicator("EStoreNewItemPanelIndicator", "Loading");
   if (document.getElementById('EStoreNewItemCategorySelector').value == category_id) {
      document.getElementById('WebCPMSEStoreItemEditor').className = "editor_on";
      resetMIDLItemEditor("EStoreNewItem", printEStoreAmountEditor);
      var cmd = "cmd=cmdLoadEStoreItem&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&item=" + item_id;
      load(ajaxEditEStoreItem = GetXmlHttpObject(), engine_estore_process, cmd, loadedEStoreItem);
   } else {
      loadDataStructure(category_id, item_id);
   }
}




function loadedEStoreItem() {
   if (ajaxEditEStoreItem.readyState == 4 || ajaxEditEStoreItem.readyState == "complete") {
      var id = getProperty("ID", ajaxEditEStoreItem.responseText);
      document.getElementById('EStoreNewItem').value = id;
      var category = getProperty("Category", ajaxEditEStoreItem.responseText);
      document.getElementById('EStoreNewItemCategorySelector').value = category;
      var max_amount = getProperty("MaxAmount", ajaxEditEStoreItem.responseText);
      document.getElementById('EStoreNewItemAmount').value = max_amount;
      setMIDLItemEditorContent("EStoreNewItem", ajaxEditEStoreItem.responseText);
      stopIndicator("EStoreNewItemPanelIndicator");
   }
}



function deleteEStoreItem(name, title, item_id, category_id) {
   if (!confirm("Do you really want to delete this item?\n\nTHIS CANNOT BE UNDONE!\n\nContinue?")) {
      return;
   }
   startIndicator("EStoreNewItemPanelIndicator", "Deleting");
   var cmd = "cmd=cmdDeleteEStoreItem&sid=" + document.getElementById('SessionID').value + "&item=" + item_id + "&reload=true";
   load(ajaxDeleteEStoreItem = GetXmlHttpObject(), engine_estore_process, cmd, updateEStoreItems);
}


function updateEStoreItems() {
   if (ajaxDeleteEStoreItem.readyState == 4 || ajaxDeleteEStoreItem.readyState == "complete") {
      if (ajaxDeleteEStoreItem.responseText == "reload") {
         stopIndicator("EStoreNewItemPanelIndicator");
         location.reload();
      }
   }
}



function addToCart(item_id, variant) {
   var i;
   var in_cart = false;
   var count = getCookie("WebCPMSEStoreCartCount", 0);
   for (i = 0; i < count && !in_cart; i++) {
      var item = getCookie("WebCPMSEStoreCart_" + i, "");
      if (getProperty("ID", item) == item_id) in_cart = true;
   }
   if (in_cart) {
   } else {
      var quantity = "";
      quantity = document.getElementById('WebCPMSEStoreItemQuantity_' + item_id).value;
      if (variant == "") {
         var variant_selector = document.getElementById('WebCPMSEStoreItemVariantSelector_' + item_id);
         variant = variant_selector == null ? "" : variant_selector.value;
      }
      startIndicator("WebCPMSEStoreCartIndicator", "Updating");
      var cmd = "cmd=cmdLoadItemProperties&sid=" + document.getElementById('SessionID').value + "&lang=" + document.getElementById('lang').value + "&item=" + item_id + "&variant=" + encodeURIComponent(variant) + "&quantity=" + quantity;
      load(ajaxLoadItemProperties = GetXmlHttpObject(), engine_estore_process, cmd, loadedItemProperties);
   }
}




function loadedItemProperties() {
   if (ajaxLoadItemProperties.readyState == 4 || ajaxLoadItemProperties.readyState == "complete") {
      stopIndicator("WebCPMSEStoreCartIndicator");
      var num = getCookie("WebCPMSEStoreCartCount", 0);
      setCookie("WebCPMSEStoreCart_" + num, encodeURIComponent(ajaxLoadItemProperties.responseText), 3600);
      setCookie("WebCPMSEStoreCartCount", ++num);
      printCart();
   }
}




function printCart() {
   var i, j;
   var list = "", nonempty_cart = false;

   var count = getCookie("WebCPMSEStoreCartCount", 0);
   for (i = 0; i < count; i++) {
      var item = getCookie("WebCPMSEStoreCart_" + i, "");
      if (item != "") {
         nonempty_cart = true;
         var id = 0, category = "", descr = "", price = null, price_unit = null, quantity = 1, max_quantity = null;
         var cartitem = decodeURIComponent(item).split("|");
         for (j = 0; j < cartitem.length; j++) {
            var prop = cartitem[j].split("=");
            if (prop[0] == "ID") {
               id = prop[1];
            } else if (prop[0] == "Category") {
               category = prop[1];
            } else if (prop[0] == "Descr") {
               descr = prop[1];
            } else if (prop[0] == "Price") {
               price = prop[1];
            } else if (prop[0] == "PriceUnit") {
               price_unit = prop[1];
            } else if (prop[0] == "Quantity") {
               quantity = prop[1];
            } else if (prop[0] == "MaxAmount") {
               max_quantity = prop[1];
            }
         }
         price *= quantity;
         list += "<tr><td class='item'>" + category + "</td><td class='item'>" + descr + "</td><td class='item'>"
         if (max_quantity != null) {
            list += "<select type='text' id='WebCPMSEStoreCartItemQuantity_" + i + "' name='WebCPMSEStoreCartItemQuantity_" + i + "' onchange=\"calculateTotal();\">";
            for (j = 1; j <= Math.floor(max_quantity); j++) {
               list += "<option value='" + j + "'" + (j == quantity ? " selected='selected'" : "") + ">" + j + "</option>";
            }
            list += "</select>";
         } else if (quantity != null) {
            list += "<input type='text' id='WebCPMSEStoreCartItemQuantity_" + i + "' name='WebCPMSEStoreCartItemQuantity_" + i + "' value='" + quantity + "' size='5' onkeyup=\"if (!isNaN(this.value)) calculateTotal();\" />";
         } else {
            list += "&nbsp;";
         }
         list += "</td><td class='item'>" + (price ? ((price_unit ? price_unit : "") + price) : "") + "</td><td class='item'>[&nbsp;<span class='menuitem' onclick=\"if(confirm('Remove " + descr + " from cart?')){deleteCookie('WebCPMSEStoreCart_" + i + "');printCart();}\">Remove</span>&nbsp;]</td></tr>";
      }
   }

   var tbl = "";
   if (nonempty_cart) {
      tbl += "<table><tr><td class='itemtitle'>Category</td><td class='itemtitle'>Item</td><td class='itemtitle'>Qty</td><td class='itemtitle'>Price</td><td class='itemtitle'>&nbsp;</td></tr>";
      tbl += list;
      tbl += "<tr><td colspan=5 class='item'><hr /></td></tr>";
      if (isModuleInstalled("delivery")) {
         tbl += "<tr><td colspan=3 class='label'>Shipping:</td><td>FREE</td><td>&nbsp;</td></tr>";
         tbl += "<tr><td colspan=5 class='item'><hr /></td></tr>";
      }
      tbl += "<tr><td colspan=3 class='label'>Total:</td><td class='item'><span id='WebCPMSEStoreCartTotal'></span></td><td class='item'>[&nbsp;<span class='menuitem'>Checkout &gt;&gt;</span>&nbsp;]</td></tr>";
      tbl += "</table>";
   } else {
      tbl += "<p>Your cart is empty.</p>";
   }
   document.getElementById('WebCPMSEStoreCart').innerHTML = tbl;

   if (nonempty_cart) calculateTotal();

}




function calculateTotal() {
   var total = 0;
   var price_unit = null;

   var count = getCookie("WebCPMSEStoreCartCount", 0);
   for (i = 0; i < count; i++) {
      var item = getCookie("WebCPMSEStoreCart_" + i, "");
      if (item != "") {
         var price = null;
         var cartitem = decodeURIComponent(item).split("|");
         for (j = 0; j < cartitem.length; j++) {
            var prop = cartitem[j].split("=");
            if (prop[0] == "Price") {
               price = prop[1];
            } else if (prop[0] == "PriceUnit") {
               price_unit = prop[1];
            }
         }
         var quantity = document.getElementById('WebCPMSEStoreCartItemQuantity_' + i).value;
         if (!isNaN(quantity)) {
            total += quantity * price;
         }
      }
   }

   document.getElementById('WebCPMSEStoreCartTotal').innerHTML = price_unit + total.toFixed(2);
}

