function ProductClass(productID, priceData, mElmName, mSelName, mNum, measuresData, mSel, cElmName, cSelName, cNum, colorsData, cSel, pPriceNum, pPriceObj){
  
  var measures_num = mNum;
  var colors_num = cNum;
  var product_id = productID;
  
  var selectedMeasure = mSel;
  var selectedColor = cSel;
  
  var measures_data = measuresData;
  var colors_data = colorsData;
  var price = priceData;
  
  var colorElement = (document.all) ? document.all[cElmName] : document.getElementById(cElmName);
  var measureElement = (document.all) ? document.all[mElmName] : document.getElementById(mElmName);
  var colorSelName = cSelName;
  var measureSelName = mSelName;
  var colorSelNameX;
  var measureSelNameX;
  
  var showColor = true;
  var showMeasure = true;
  
  var pushPriceId = pPriceNum;
  var pushPriceObj = pPriceObj;
  
  this.RenderMeasureForm = RenderMeasureFormEx;
  this.SelectedMeasure = SelectedMeasureEx;
  this.RenderColorForm = RenderColorFormEx;
  this.SelectedColor = SelectedColorEx;
  this.Execute = ExecuteEx;
  this.MeasureHasPrice = MeasureHasPriceEx;
  this.ColorHasPrice = ColorHasPriceEx;
  this.MeasureHasPrice2 = MeasureHasPriceEx2;
  this.ColorHasPrice2 = ColorHasPriceEx2;
  this.FlushMeasureForm = FlushMeasureFormEx;
  this.FlushColorForm = FlushColorFormEx;
  this.PushPrice = PushPriceEx;
  
  
  function RenderMeasureFormEx()
  {
  
    if(!showMeasure)
      return;
  
    var form_html = "";
    var i = 0;
  
    if(measures_num > 0){
  
      form_html += "\n\t<select id=\"" + measureSelName + "\" name=\"" + measureSelNameX + "\" onChange=\"product[" + product_id + "].SelectedMeasure()\" size=\"1\">\n";
      
      if(pushPriceId!=2)
          form_html += "\t\t<option value=\"0\" >----------</option>\n";
      
      for (i in measures_data)
      {
        if(selectedColor != 0){
          if(!this.MeasureHasPrice2(measures_data[i][0], selectedColor))
          {
            continue;
          }
        } else {
          if(!this.MeasureHasPrice(measures_data[i][0]))
          {
            continue;
          }
        }
          
          
          
        form_html += "\t\t<option value=\"" + measures_data[i][0] + "\"";
        if(measures_data[i][0] == selectedMeasure)
          form_html += " selected='selected'";
        form_html += ">" + measures_data[i][1] + "</option>\n";
      }
      
      form_html += "\t</select>";
      
    } else {
    
      form_html += "-";
      
    }
  
    measureElement.innerHTML = form_html;
  }
  
  
  
  function FlushMeasureFormEx()
  {
    if(showMeasure)
        measureElement.innerHTML = "-";
  }
  
  
  
  function SelectedMeasureEx()
  {
    //var selected = (document.all[measureSelName]!=null) ? document.all[measureSelName] : document.getElementById(measureSelName);
    var selected = (document.all) ? document.all[measureSelName] : document.getElementById(measureSelName);
    
    //alert(measureSelName);
    
    //alert(selected);
    
    if(selected!="undefined")
    {
      selectedMeasure = selected.value;  
      this.RenderColorForm();
      
      if(showColor && showMeasure){
         if(selectedColor!=0 && selectedMeasure!=0)
              this.PushPrice(price[selectedMeasure][selectedColor]);
      } else if(!showColor && showMeasure) {
          if(selectedMeasure!=0)
              this.PushPrice(price[selectedMeasure][0]);
      } else if(showColor && !showMeasure) {
          if(selectedColor!=0)
              this.PushPrice(price[0][selectedColor]);
      }
    }
    
  }
  
  
  
  function RenderColorFormEx()
  {
  
    if(!showColor)
      return;
  
    var form_html = "";
    var i = 0;
  
    if(colors_num > 0){
  
      form_html += "\n\t<select id=\"" + colorSelName + "\" name=\"" + colorSelNameX + "\" onChange=\"product[" + product_id + "].SelectedColor()\" size=\"1\">\n";
      if(pushPriceId!=2)
          form_html += "\t\t<option value=\"0\" >----------</option>\n";
      
      for (i in colors_data)
      {
      
        if(selectedMeasure != 0){
          if(!this.ColorHasPrice2(selectedMeasure, colors_data[i][0]))
          {
            continue;
          }
        } else {
          if(!this.ColorHasPrice(colors_data[i][0]))
          {
            continue;
          }
        }
        
        
        form_html += "\t\t<option value=\"" + colors_data[i][0] + "\"";
        if(colors_data[i][0] == selectedColor)
          form_html += " selected='selected'";
        form_html += ">" + colors_data[i][1] + "</option>\n";
      }
      
      form_html += "\t</select>";
      
    } else {
    
      form_html += "-";
      
    }

    colorElement.innerHTML = form_html;
  }
  
  
  function FlushColorFormEx()
  {
    if(showColor)
      colorElement.innerHTML = "-";
  }
  
  
  function MeasureHasPriceEx2(measureID, colorID)
  {
    if(price!="undefined")
    { 
      if(price[measureID]!="undefined")
      {
        if(price[measureID][colorID]!="undefined")
        {
          if(price[measureID][colorID] > -1)
          {
            return true;
          }
        }
      }
    }
    return false; 
  }
  
  
  function MeasureHasPriceEx(measureID)
  {
    if(price!="undefined")
    { 
      
      if(price[measureID]!="undefined")
      {
        var x = 0;
        for(x in price[measureID])
        {
          if(price[measureID][x]!="undefined")
          {
            if(price[measureID][x] > -1)
            {
              return true;
            }
          }
        }
      }
    }
    return false;    
  }
  
  
  
  
  
  function ColorHasPriceEx2(measureID, colorID)
  {
    if(price!="undefined")
    { 
      if(price[measureID]!="undefined")
      {
        if(price[measureID][colorID]!="undefined")
        {
          if(price[measureID][colorID] > -1)
          {
            return true;
          }
        }
      }
    }
    return false;    
  }
  
  
  function ColorHasPriceEx(colorID)
  {
    if(price!="undefined")
    { 
      var i;
      for(i in price)
      {
        
        if(price[i][colorID]!="undefined")
        {
          if(price[i][colorID] > -1)
          {
            return true;
          }
        }
      }
    }
    
    return false;    
  }
  
  
  
  function SelectedColorEx()
  {
    //var selected = (document.all[colorSelName]!=null) ? document.all[colorSelName] : document.getElementById(colorSelName);
    var selected = (document.all) ? document.all[colorSelName] : document.getElementById(colorSelName);
    
    if(selected!="undefined")
    {
      selectedColor = selected.value;  
      this.RenderMeasureForm();
      if(showColor && showMeasure){
         if(selectedColor!=0 && selectedMeasure!=0)
              this.PushPrice(price[selectedMeasure][selectedColor]);
      } else if(!showColor && showMeasure) {
          if(selectedMeasure!=0)
              this.PushPrice(price[selectedMeasure][0]);
      } else if(showColor && !showMeasure) {
          if(selectedColor!=0)
              this.PushPrice(price[0][selectedColor]);
      }
    }
    
  }
  
  
  function IsNumeric(sText)
  {
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
   }
  
  
  function PushPriceEx()
  {
  
      if(pushPriceId==1)
      {
          // sme na stranke o produktoch
          var xNum = (document.all) ? document.all[pushPriceObj[1]] : document.getElementById(pushPriceObj[1]);
          if(xNum=="" || !IsNumeric(xNum))
              return false;
          
          
          var xInput = (document.all) ? document.all[pushPriceObj[0]] : document.getElementById(pushPriceObj[0]);
          xInput.disabled = false;
      
      }
      else if(pushPriceId==2)
      {
          // sme na baskete
      }
  
  }
  
  
  
  function ExecuteEx()
  {
    var cx = (document.all) ? document.all[colorSelName] : document.getElementById(colorSelName);
    var mx = (document.all) ? document.all[measureSelName] : document.getElementById(measureSelName);
    
    if(cx==null)
    {
        showColor = false;
    } else {
      colorSelNameX = cx['name'];
    }
    
    if(mx==null)
    {
        showMeasure = false;
    } else {
        measureSelNameX = mx['name'];
    }
    
    if(!showColor && !showMeasure)
        return;
  
    this.FlushMeasureForm();
    this.FlushColorForm();
    
    this.RenderMeasureForm();
    this.RenderColorForm();
    
    
    
    if(pushPriceId==1)
    {
        // sme na stranke o produktoch
        var xInput = (document.all) ? document.all[pushPriceObj[0]] : document.getElementById(pushPriceObj[0]);
        xInput.disabled = true;
    
    }
    
  }
  
}

