// shopping javacript

function confirmBuy(itemForm, buttonType)
{
  if (buttonType == "wishlist") {
    itemForm.cart.value = "WISHLIST";
  } else {
    itemForm.cart.value = "ADD";
  }
  var params = getProductParams(itemForm);
  var basePrice = params["base_price"];
  // check what options were selected and what options is active
  var returnedValues = checkOptions(itemForm);
  var selectedOptions = returnedValues[0];
  var activeOptions = returnedValues[1];
  // check options for requirements
  var prMessage = requiredProperty;
  var productName = params["item_name"];
  for (prID in activeOptions) {
    if (itemForm.elements["property_control_" + prID]) { // check if it is property control
      var prRequired = itemForm.elements["property_required_" + prID].value;
      var prControl = itemForm.elements["property_control_" + prID].value;
      if (prRequired == 1 && activeOptions[prID] && !selectedOptions[prID]) {
        var propertyName = itemForm.elements["property_name_" + prID].value;
        prMessage = prMessage.replace("\{property_name\}", propertyName);
        prMessage = prMessage.replace("\{product_name\}", productName);
        alert(prMessage); 
        if (prControl != "RADIOBUTTON" && prControl != "CHECKBOXLIST" && prControl != "TEXTBOXLIST" && prControl != "LABEL") {
          itemForm.elements["property_" + prID].focus();
        }
        return false;
      }
    }
  }
  // calculate price for selected options
  var propertiesPrice = calculateOptionsPrice(itemForm, selectedOptions);

  var productPrice = basePrice + params["comp_price"] + propertiesPrice;
  if (params["zero_product_action"] == 2 && productPrice == 0) {
    alert(params["zero_product_warn"]);
    return false;
  }
  if (buttonType == "wishlist") {
    var savedTypesHidden = "0";
    if (document.saved_types.saved_types_hidden) {
      // check if we don't need to show popup win
      savedTypesHidden = document.saved_types.saved_types_hidden.value; 
    }
    if (savedTypesHidden == "1") {
      // assign default type_id from hidden popup
      itemForm.saved_type_id.value = document.saved_types.type_id.value;
    }
    // check if type_id was selected 
    var savedTypeId = itemForm.saved_type_id.value;

    if (savedTypeId == "") {
      popupSavedTypes(itemForm);
    } else {
      itemForm.submit();
    }
    return false;
  } else if (confirmAdd == "1") {
    return confirm(addProduct);
  } else {
    return true;
  }
}

function confirmSubscription(itemForm)
{
  if (confirmAdd == "1") {
    return confirm(addSubscription);
  } else {
    return true;
  }
}

function addToWishlist()
{
  var formId = document.saved_types.form_id.value;
  if (formId != "") {
    var formName = "form_" + formId
    var itemForm = document.forms[formName];
    var typesTotal = parseInt(document.saved_types.saved_types_total.value);
    var typeId = "";
    if (typesTotal == 1) {
      var typeId = document.saved_types.type_id.value;
    } else if (typesTotal > 1) {
      var typeId = document.saved_types.type_id.options[document.saved_types.type_id.selectedIndex].value;
    }
    if (typeId != "") {
      itemForm.saved_type_id.value = typeId;
      hideSavedTypes();
      confirmBuy(itemForm, "wishlist");
    } else {
      alert("Please select a type");
    }
  } else {
    alert("Product wasn't selected");
  }
}

function popupSavedTypes(itemForm)
{                               
  var params = getProductParams(itemForm);
  var formId = params["form_id"];
  document.saved_types.form_id.value = formId;
  var savedTypesShadow = document.getElementById("saved_types_shadow");
  var savedTypesWin = document.getElementById("saved_types_win");
  if (formId != "") {
    var wishlistButton = document.getElementById("wishlist_" + formId);
    savedTypesWin.style.left = (findPosX(wishlistButton, 0) - 150) + "px";
    savedTypesWin.style.top = (findPosY(wishlistButton, 0) - 100) + "px";
    var arrayPageSizeWithScroll = getPageSizeWithScroll();
    savedTypesShadow.style.height = arrayPageSizeWithScroll[1] + "px";
  }

  savedTypesWin.style.display = "block";      
  savedTypesShadow.style.display = "block";     
  hideSelectBoxes("saved_types_win", new Array("type_id"));
}

function hideSavedTypes()
{                               
  document.saved_types.form_id.value = "";
  var savedTypesShadow = document.getElementById("saved_types_shadow");
  var savedTypesWin = document.getElementById("saved_types_win");
  savedTypesWin.style.display = "none";     
  savedTypesShadow.style.display = "none";      
  showSelectBoxes("saved_types_win");
}

function changeSavedType()
{
  var prevTypeId = document.saved_types.prev_type_id.value;
  var typeIdControl = document.saved_types.type_id;
  var selectedTypeId = typeIdControl.options[typeIdControl.selectedIndex].value;
  document.saved_types.prev_type_id.value = selectedTypeId;
  if (prevTypeId != selectedTypeId) {
    if (prevTypeId != "") {
      var typeDescBlock = document.getElementById("type_desc_" + prevTypeId);
      typeDescBlock.style.display = "none";     
    }
    if (selectedTypeId != "") {
      var typeDescBlock = document.getElementById("type_desc_" + selectedTypeId);
      typeDescBlock.style.display = "block";      
    }
  }
}

function changeProperty(itemForm)
{
  var selectedOptions = new Array();
  var priceControl = "";
  var htmlControl = false;
  var itemId = "";
  var taxPercent = 0;

  var params = getProductParams(itemForm);
  var taxNote = params["tax_note"];
  var pointsBase = params["base_points_price"];
  var prIDs = params["properties_ids"];
  var formId = params["form_id"];

  if (params["pe"] == "1") {
    return;
  }

  if (itemForm.tax_percent && itemForm.tax_percent.value != "") {
    taxPercent = parseFloat(itemForm.tax_percent.value);
    if (isNaN(taxPercent)) { taxPercent = 0; }
  }

  if (itemForm.add_id) {
    itemId = itemForm.add_id.value;
  } else if (itemForm.item_id) {
    itemId = itemForm.item_id.value;
  }
  if (itemId != "" && document.getElementById) {
    priceControl = document.getElementById("sales_price_" + itemId);
    if (!priceControl) {
      priceControl = document.getElementById("price_" + itemId);
    }
  } 
  var pointsPriceControl = document.getElementById("points_price_" + itemId);

  // check what options were selected and what options is active
  var returnedValues = checkOptions(itemForm);
  var selectedOptions = returnedValues[0];
  var activeOptions = returnedValues[1];
  // calculate price for selected options
  var totalAdditionalPrice = calculateOptionsPrice(itemForm, selectedOptions);

  // hide or show property blocks
  for (prID in activeOptions) {
    if (itemForm.elements["property_control_" + prID]) { // check if it is property control
      var propertyBlock = document.getElementById("pr_" + formId + "_" + prID);
      if (activeOptions[prID]) {
        propertyBlock.style.display = "block";        
      } else {
        propertyBlock.style.display = "none";       
      }
    }
  }

  // show hide image for subcomponents
  for (prID in activeOptions) {
    if (itemForm.elements["property_control_" + prID]) { // check if it is property control
      var prControl = itemForm.elements["property_control_" + prID].value;
      if (activeOptions[prID] && (prControl == "LISTBOX" || prControl == "RADIOBUTTON")) {
        var prValue = selectedOptions[prID];
    
        var objId = formId + "_" + prID; // id for current product option
        if (prValue != "") {
          var image_button = document.getElementById("option_image_action_" + objId);
          if (!image_button) {
            var image_button       = document.createElement('a');       
            image_button.id        = "option_image_action_" + objId;
            image_button.href      = "#";
            image_button.onclick   = popupImage;
            image_button.style.display = "none";
            image_button.innerHTML = "<img src='images/icons/view_page.gif' alt='View' border='0'/>";
            var propertyObj = document.getElementById("pr_" + objId);
            if (propertyObj) { propertyObj.appendChild(image_button); }
          }       
          if (itemForm.elements["option_image_" + prValue]) {
            var image = itemForm.elements["option_image_" + prValue].value;
            if (itemForm.elements["option_image_action_" + prValue]) {
              image_button.onclick = (itemForm.elements["option_image_action_" + prValue].onclick);
            }         
            image_button.style.display = "inline";
            image_button.href  = image;
            image_button.title = itemForm.elements["property_" + prID].options[itemForm.elements["property_" + prID].selectedIndex].text;
          } else {
            image_button.style.display = "none";
          }
        } else {
          var image_button = document.getElementById("option_image_action_" + objId);
          if (image_button) {
            image_button.style.display = "none";
          }
        }
      }
    }
  }

  var basePrice = params["base_price"];
  var baseTax = 0;
  // check product quantity
  var quantity = 1;
  if (itemForm.quantity) {
    if (itemForm.quantity.selectedIndex) {
      quantity = parseInt(itemForm.quantity.options[itemForm.quantity.selectedIndex].value);
    } else {
      quantity = parseInt(itemForm.quantity.value);
    }
    if (isNaN(quantity)) { quantity = 1; } 
  }
  var isQuantityPrice = false;
  if(params["quantity_price"]) { 
    var prices = params["quantity_price"]; 
    if (prices != "") {
      prices = prices.split(",");
      for (var p = 0; p < prices.length; p = p + 5) {
        var minQuantity = parseInt(prices[p]);
        var maxQuantity = parseInt(prices[p + 1]);
        if (quantity >= minQuantity && quantity <= maxQuantity) {
          isQuantityPrice = true;
          basePrice = parseFloat(prices[p + 2]);
          baseTax = parseFloat(prices[p + 3]);
          var propertiesDiscount = parseFloat(prices[p + 4]);
          if (propertiesDiscount > 0) {
            totalAdditionalPrice -= (Math.round(totalAdditionalPrice * propertiesDiscount) / 100);
          }
          break;
        }
      }
    }
  }
  
  var price = basePrice + totalAdditionalPrice;
  var taxAmount = 0; var productPrice = 0; var taxPrice = 0; var priceExcl = 0;
  if (params["tax_prices_type"] == 1) {
    // price already includes tax
    if (isQuantityPrice) {
      taxPrice = Math.round((price) * 100) / 100; 
      taxAmount = baseTax; 
    } else {
      taxPrice = Math.round((price + params["comp_price"]) * 100) / 100; 
      taxAmount = (Math.round(price * 100) - Math.round(price * 10000 / ( 100 + taxPercent))) / 100; 
    }
    if (isQuantityPrice) {
      productPrice = Math.round((price - taxAmount) * 100) / 100;
    } else {
      productPrice = Math.round((price - taxAmount + params["comp_price"] - params["comp_tax"]) * 100) / 100;
    }
    priceExcl = productPrice;
  } else {
    if (isQuantityPrice) {
      taxAmount = baseTax; 
      productPrice = Math.round((price) * 100) / 100;
      taxPrice = Math.round((productPrice + taxAmount) * 100) / 100; 
    } else {
      taxAmount = Math.round(price * taxPercent) / 100; 
      productPrice = Math.round((price + params["comp_price"]) * 100) / 100;
      taxPrice = Math.round((productPrice + taxAmount + params["comp_tax"]) * 100) / 100; 
    }
    priceExcl = productPrice;
  }

  if (params["show_prices"] == 2) {
    productPrice = taxPrice;
    taxPrice = priceExcl;
  } else if (params["show_prices"] == 3) {
    productPrice = taxPrice;
  }

  if (priceControl) {
    if (params["zero_price_type"] != 0 && productPrice == 0) {
      if (params["zero_price_type"] == 1) { params["zero_price_message"] = ""; }
      priceControl.innerHTML = params["zero_price_message"];
    } else {
      priceControl.innerHTML = params["cleft"] + formatNumber(productPrice * params["crate"], params["cdecimals"], params["cpoint"], params["cseparator"]) + params["cright"];
    }
    priceBlockControl = document.getElementById("price_block_" + itemId);
    if (priceBlockControl) {
      if (params["zero_price_type"] == 1 && productPrice == 0) {
        priceBlockControl.style.display = "none";
      } else {
        priceBlockControl.style.display = "block";
      }
    }
    //DJM:
    if (params["rrp"])
    {
      var RRP = productPrice - parseFloat(params["base_price"]) + parseFloat(params["rrp"]);
      document.getElementById("price_" + itemId).innerHTML = params["cleft"] + formatNumber(RRP * params["crate"], params["cdecimals"], params["cpoint"], params["cseparator"]) + params["cright"];
    }
    //-DJM
  }
  taxPriceControl = document.getElementById("tax_price_" + itemId);
  if (taxPriceControl) {
    if (params["zero_price_type"] != 0 && taxPrice == 0) {
      taxPriceControl.innerHTML = "";
    } else {
      if (taxNote != "") { taxNote = " " + taxNote; }
      taxPriceControl.innerHTML = "(" + params["cleft"] + formatNumber(taxPrice * params["crate"], params["cdecimals"], params["cpoint"], params["cseparator"]) + params["cright"] + taxNote + ")";
    }
  }
  if (pointsPriceControl) {
    var pointsPrice = pointsBase + (totalAdditionalPrice * params["points_rate"]);
    pointsPriceControl.innerHTML = formatNumber(pointsPrice, params["points_decimals"]);
  }
}

function checkOptions(itemForm)
{
  var params = getProductParams(itemForm);
  var prIDs = params["properties_ids"];
  var selectedOptions = new Array();
  var activeOptions = new Array();
  var returnValues = new Array();

  // check first all selected options
  var prIDs = params["properties_ids"];
  if (prIDs != "") {
    var properties = prIDs.split(",");
    for ( var i = 0; i < properties.length; i++) {
      var prID = properties[i];
      var prValue = ""; 
      var prControl = itemForm.elements["property_control_" + prID].value;
      if (prControl == "LISTBOX") {
        prValue = itemForm.elements["property_" + prID].options[itemForm.elements["property_" + prID].selectedIndex].value;
        if (prValue != "") {
          selectedOptions[prID] = prValue;
        }
      } else if (prControl == "RADIOBUTTON") {
        var radioControl = itemForm.elements["property_" + prID];
        if (radioControl.length) {
          for ( var ri = 0; ri < radioControl.length; ri++) {
            if (radioControl[ri].checked) {
              prValue = radioControl[ri].value;
              break;
            }
          }
        } else {
          if (radioControl.checked) {
            prValue = radioControl.value;
          }
        }
        if (prValue != "") {
          selectedOptions[prID] = prValue;
        }
      } else if (prControl == "CHECKBOXLIST") {
        if (itemForm.elements["property_total_" + prID]) {
          var totalOptions = parseInt(itemForm.elements["property_total_" + prID].value);
          for ( var ci = 1; ci <= totalOptions; ci++) {
            if (itemForm.elements["property_" + prID + "_" + ci].checked) {
              var checkedValue = itemForm.elements["property_" + prID + "_" + ci].value;
              if (!selectedOptions[prID]) {
                selectedOptions[prID] = new Array();
              }
              selectedOptions[prID][checkedValue] = 1;
            }
          }
        } 
      } else if (prControl == "TEXTBOXLIST") {
        if (itemForm.elements["property_total_" + prID]) {
          var totalOptions = parseInt(itemForm.elements["property_total_" + prID].value);
          for ( var ci = 1; ci <= totalOptions; ci++) {
            if (itemForm.elements["property_" + prID + "_" + ci].value != "") {
              var valueId = itemForm.elements["property_value_" + prID + "_" + ci].value;
              var valueText = itemForm.elements["property_" + prID + "_" + ci].value;
              if (!selectedOptions[prID]) {
                selectedOptions[prID] = new Array();
              }
              selectedOptions[prID][valueId] = valueText;
            }
          }
        } 
      } else if (prControl == "LABEL"){
        // get from hidden control
        if (itemForm.elements["property_" + prID]) {
          prValue = itemForm.elements["property_" + prID].value;
          if (prValue != "") {
            selectedOptions[prID] = prValue;
          }
        }
      } else {
        prValue = itemForm.elements["property_" + prID].value;
        if (prValue != "") {
          selectedOptions[prID] = prValue;
        }
      }
    }
  }

  // second check for active options and correct selected options if necessary
  if (prIDs != "") {
    do {
      // save how many selected options we have at start
      var startSelectedNumber = selectedOptions.length;
      // check availability of parent options   
      var properties = prIDs.split(",");
      for ( var i = 0; i < properties.length; i++) {
        var prID = properties[i];
        var parentPropertyId = itemForm.elements["property_parent_id_" + prID].value;
        var parentValueId = itemForm.elements["property_parent_value_id_" + prID].value;
        var showProperty = true;
        if (parentPropertyId != "") {
          if (!selectedOptions[parentPropertyId]) {
            showProperty = false;
          } else if (parentValueId != "") {
            if (!selectedOptions[parentPropertyId][parentValueId] && selectedOptions[parentPropertyId] != parentValueId) {
              showProperty = false;
            }
          }
        }
        activeOptions[prID] = showProperty;
        if (!showProperty) {
          // delete from selected
          if (selectedOptions[prID]) {
            delete selectedOptions[prID];
          }
    
          // clear all options
          var prControl = itemForm.elements["property_control_" + prID].value;
          if (prControl == "LISTBOX") {
            var selectedIndex = itemForm.elements["property_" + prID].selectedIndex;
            if (selectedIndex > 0) {
              itemForm.elements["property_" + prID].options[0].selected = true;
            }
          } else if (prControl == "RADIOBUTTON") {
            var radioControl = itemForm.elements["property_" + prID];
            if (radioControl.length) {
              for ( var ri = 0; ri < radioControl.length; ri++) {
                radioControl[ri].checked = false;
              }
            } else {
              radioControl.checked = false;
            }
    
          } else if (prControl == "CHECKBOXLIST") {
            var totalOptions = parseInt(itemForm.elements["property_total_" + prID].value);
            for ( var ci = 1; ci <= totalOptions; ci++) {
              itemForm.elements["property_" + prID + "_" + ci].checked = false;
            }
          } else if (prControl == "TEXTBOXLIST") {
            var totalOptions = parseInt(itemForm.elements["property_total_" + prID].value);
            for ( var ci = 1; ci <= totalOptions; ci++) {
              itemForm.elements["property_" + prID + "_" + ci].value = "";
            }
          } else if (prControl == "TEXTBOX" || prControl == "TEXTAREA") {
            itemForm.elements["property_" + prID].value = "";
          }
        }
      }
    } while (startSelectedNumber != selectedOptions.length);
  }

  returnValues[0] = selectedOptions;
  returnValues[1] = activeOptions;

  return returnValues;
}

function calculateOptionsPrice(itemForm, selectedOptions)
{
  var params = getProductParams(itemForm);
  var propertiesPrice = 0;
  var prPrice = 0;
  for (prID in selectedOptions) {
    if (itemForm.elements["property_control_" + prID]) { // check if it is property control
      var usedControls = 0; var controlText = ""; var freeLetters = 0;
      var priceType = parseInt(itemForm.elements["property_price_type_" + prID].value);
      var priceAmount = parseFloat(itemForm.elements["property_price_" + prID].value);
      if (isNaN(priceAmount)) { priceAmount = 0; }
      var freePriceType = parseInt(itemForm.elements["property_free_price_type_" + prID].value);
      var freePriceAmount = itemForm.elements["property_free_price_amount_" + prID].value;
      var freeControls = 0;
      if (freePriceType == 1) {
        freePriceAmount = parseFloat(freePriceAmount);
      } else {
        freePriceAmount = parseInt(freePriceAmount);
      }
      if (isNaN(freePriceAmount)) { freePriceAmount = 0; }
      if (freePriceType == 2) {
        freeControls = freePriceAmount;
      } else if (freePriceType == 3 || freePriceType == 4) {
        freeLetters = freePriceAmount;
      }
      
      var prControl = itemForm.elements["property_control_" + prID].value;
      if (prControl == "LISTBOX" || prControl == "RADIOBUTTON") {
        usedControls++;
        prPrice = getOptionPrice(itemForm, selectedOptions[prID]);
        propertiesPrice += prPrice;
      } else if (prControl == "CHECKBOXLIST" || prControl == "TEXTBOXLIST") {
        var values = selectedOptions[prID];
        for (valueId in values) {
          usedControls++;
          prPrice = getOptionPrice(itemForm, valueId);
          propertiesPrice += prPrice;
          if (prControl == "TEXTBOXLIST") {
            controlText += selectedOptions[prID][valueId];
            if (freeControls >= usedControls) {
              if (priceType == 3) {
                freeLetters = controlText.length;
              } else if (priceType == 4) {
                freeLetters = controlText.replace(/[\n\r\t\s]/g, "").length;
              }
            }
          }
        } 
      } else {
        usedControls++;
        if (prControl == "TEXTAREA" || prControl == "TEXTBOX") {
          controlText = selectedOptions[prID];
          if (freeControls >= usedControls) {
            if (priceType == 3) {
              freeLetters = controlText.length;
            } else if (priceType == 4) {
              freeLetters = controlText.replace(/[\n\r\t\s]/g, "").length;
            }
          }
        }
      }
      if (priceType == 1) {
        propertiesPrice += priceAmount;
      } else if (priceType == 2) {
        if (usedControls > freeControls) {
          propertiesPrice += (priceAmount * (usedControls - freeControls));
        }
      } else if (priceType == 3) {
        var textLength = controlText.length;
        if (textLength > freeLetters) {
          propertiesPrice += (priceAmount * (textLength - freeLetters));
        }
      } else if (priceType == 4) {
        var textLength = controlText.replace(/[\n\r\t\s]/g, "").length;
        if (textLength > freeLetters) {
          propertiesPrice += (priceAmount * (textLength - freeLetters));
        }
      }
      if (freePriceType == 1) {
        propertiesPrice -= freePriceAmount;
      }
    }
  } 
  return propertiesPrice;
}

function changeQuantity(itemForm)
{
  changeProperty(itemForm);
}

function properyImageUpload(uploadUrl)
{
  var uploadWin = window.open (uploadUrl, 'uploadWin', 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=400,height=300');
  uploadWin.focus();
}

function openPreviewWin(previewUrl, width, height)
{
  var previewWin = window.open (previewUrl, 'previewWin', 'left=0,top=0,toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=' + width + ',height=' + height);
  previewWin.focus();
  return false;
}

function openSuperImage(imageUrl, width, height)
{
  var scrollbars = "no";
  // add margins to image size
  if (width > 0 && height > 0) {
    width += 30; height += 30;
  }
  // check available sizes
  var availableHeight = window.screen.availHeight - 60;
  var availableWidth = window.screen.availWidth - 20;
  if (isNaN(availableHeight)) { availableHeight = 520; } 
  if (isNaN(availableWidth)) { availableWidth = 760; } 
  if (height > availableHeight || height == 0) { 
    height = availableHeight;
    scrollbars = "yes"; 
  }
  if (width > availableWidth || width == 0) {
    width = availableWidth;
    scrollbars = "yes";
  }
  var superImageWin = window.open (imageUrl, 'superImageWin', 'left=0,top=0,toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=' + scrollbars + ',resizable=yes,width=' + width + ',height=' + height);
  superImageWin.focus();
  return false;
}

function setFilePath(filepath, filetype, controlName, formId)
{
  if(filepath != "" && controlName != "" && formId != "")
  {
    var formName = "form_" + formId;
    document.forms[formName].elements[controlName].value = filepath;
    document.forms[formName].elements[controlName].focus();
  }
}

function getOptionPrice(itemForm, prValue)
{
  var optionPrice = 0;
  if (prValue != "") {
    if(itemForm.elements["option_price_" + prValue]) {
      optionPrice = parseFloat(itemForm.elements["option_price_" + prValue].value);
      if(isNaN(optionPrice)) {
        optionPrice = 0;
      }
    }
  }
  return optionPrice;
}

function formatNumber(numberValue, decimals, decimalPoint, thousandsSeparator)
{
  if (decimals == undefined) {
    decimals = 0;
  }
  if (thousandsSeparator == undefined) {
    thousandsSeparator = ",";
  }

  var numberParts = "";
  var roundValue = 1;
  for (var d = 0; d < decimals; d++) {
    roundValue *= 10;
  }
  numberValue = Math.round(numberValue * roundValue) / roundValue;
  var numberSign = "";
  if (numberValue < 0) {
    numberSign = "-";
    numberValue = Math.abs(numberValue);
  } 

  var numberText = new String(numberValue);
  var numberParts = numberText.split(".");
  var beforeDecimal = numberParts[0];
  var afterDecimal = "";
  numberText = "";
  if (numberParts.length == 2) {
    afterDecimal = numberParts[1];
  }
  while (beforeDecimal.length > 0) {
    if (beforeDecimal.length > 3) {
      numberText = thousandsSeparator + beforeDecimal.substring(beforeDecimal.length - 3, beforeDecimal.length) + numberText;
      beforeDecimal = beforeDecimal.substring(0, beforeDecimal.length - 3);
    } else {
      numberText = beforeDecimal + numberText;
      beforeDecimal = "";
    }
  }
  if (decimals > 0) {
    while (afterDecimal.length < decimals) {
      afterDecimal += "0";
    }
    if (decimalPoint == undefined) {
      decimalPoint = ".";
    }
    numberText += decimalPoint + afterDecimal;
  }
  numberText = numberSign + numberText;

  return numberText;
}

function getProductParams(itemForm)
{
  var params = new Array();
  var paramsList = itemForm.product_params.value; 
  var paramsPairs = paramsList.split("#");
  for (var p = 0; p < paramsPairs.length; p++) {
    var paramPair = paramsPairs[p];
    var equalPos = paramPair.indexOf("=");
    if(equalPos == -1) {
      params[paramPair] = "";
    } else {
      var paramName = paramPair.substring(0, equalPos);
      var paramValue = paramPair.substring(equalPos + 1, paramPair.length);
      paramValue = paramValue.replace(/%0D/g, "\r");
      paramValue = paramValue.replace(/%0A/g, "\n");
      paramValue = paramValue.replace(/%27/g, "'");
      paramValue = paramValue.replace(/%22/g, "\"");
      paramValue = paramValue.replace(/%26/g, "&");
      paramValue = paramValue.replace(/%2B/g, "+");
      paramValue = paramValue.replace(/%25/g, "%");
      paramValue = paramValue.replace(/%3D/g, "=");
      paramValue = paramValue.replace(/%7C/g, "|");
      paramValue = paramValue.replace(/%23/g, "#");
      params[paramName] = paramValue;
    }
  }
  // check params values
  var checkParams = new Array();
  checkParams["base_price"] = 0;
  checkParams["crate"] = 1;
  checkParams["pe"] = 0;
  checkParams["zero_product_action"] = 1;
  checkParams["zero_price_type"] = 0;
  checkParams["show_prices"] = 1;
  checkParams["tax_prices_type"] = 0;
  checkParams["points_rate"] = 1;
  checkParams["points_decimals"] = 0;
  checkParams["points_decimals"] = 0;
  checkParams["comp_price"] = 0;
  checkParams["comp_tax"] = 0;
  checkParams["base_points_price"] = 0;
  checkParams["base_reward_points"] = 0;
  checkParams["base_reward_credits"] = 0;
  for (paramName in checkParams) {
    if (params[paramName]) {
      params[paramName] = parseFloat(params[paramName]);
      if (isNaN(params[paramName])) { params[paramName] = checkParams[checkParams]; }
    } else {
      params[paramName] = checkParams[checkParams];
    }
  }
  return params;
}

function checkMaxLength(e, obj, maxLength, limitType)
{
  var key;
  if (window.event) {
    key = window.event.keyCode; //IE
  } else {
    key = e.which; //Firefox
  }
  var objText = obj.value;
  var selectedText = "";
  if (obj.selectionEnd) {
    selectedText = objText.substring(obj.selectionStart, obj.selectionEnd);
  } else if (document.selection && document.selection.createRange) {
    selectedText = document.selection.createRange().text;
  } 
  if (limitType == 3 || limitType == 4) {
    selectedText = selectedText.replace(/[\n\r\t\s]/g, "");
  }
  if (selectedText.length > 0) {
    return true;
  }
  if (key == 0 || key == 8 || key == 9 || key == 16 || key == 17 || key == 35 || key == 36 || key == 37 || key == 39 || key == 46 || key == 116) {
    return true;
  }

  if (limitType == 3 || limitType == 4) {
    objText = objText.replace(/[\n\r\t\s]/g, "");
  }
  return (objText.length < maxLength);
}

function checkBoxesMaxLength(e, obj, itemForm, prID, maxLength, limitType)
{
  var key;
  if (window.event) {
    key = window.event.keyCode; //IE
  } else {
    key = e.which; //Firefox
  }

  var objText = obj.value;
  var selectedText = "";
  var selectedText = "";
  if (obj.selectionEnd) {
    selectedText = objText.substring(obj.selectionStart, obj.selectionEnd);
  } else if (document.selection && document.selection.createRange) {
    selectedText = document.selection.createRange().text;
  } 
  if (limitType == 3 || limitType == 4) {
    selectedText = selectedText.replace(/[\n\r\t\s]/g, "");
  }
  if (selectedText.length > 0) {
    return true;
  }

  if (key == 0 || key == 8 || key == 9 || key == 16 || key == 17 || key == 35 || key == 36 || key == 37 || key == 39 || key == 46 || key == 116) {
    return true;
  }

  var totalOptions = parseInt(itemForm.elements["property_total_" + prID].value);
  var totalLength = 0;
  for ( var ci = 1; ci <= totalOptions; ci++) {
    if (itemForm.elements["property_" + prID + "_" + ci].value != "") {
      var valueText = itemForm.elements["property_" + prID + "_" + ci].value;
      if (limitType == 3 || limitType == 4) {
        valueText = valueText.replace(/[\n\r\t\s]/g, "");
      }
      totalLength += valueText.length;
    }
  }
  return (totalLength < maxLength);
}

