/*
 * Matratex support script
 *
 * Copyright (c) 2009 Tomáš Jenej @ NEONUS, s.r.o.
 *
 * Filter products 
 */

  elements = Array();
  metadata = Array();
  visible = Array();

  /*
 * Initialise all elements with metadata and store metadata into associative array
 */
  function initMetadata()
  {
    elements = $('div[class^=metadata]');
    for(var idx = 0; idx < elements.length; idx++ )
    {
      var element = elements[idx];
      metadata[element.id] = $(element).metadata();
    }
  }

$(document).ready(function(){

  /*
 * @param weight String - weight selected in form
 * @return Array of elements passed condition
 */
  function filterWeight(weight)
  {
    var arr = Array();
    for(var idx in visible)
    {
      var data = metadata[idx];
      weight = parseInt(weight);
      if(parseInt(data.vaha) >= weight)
      {
        arr[idx] = data;
      }
    }
    return arr;
  }

  /*
 * @param range String - price range in format: lower_price-higher_price (e.g. 100-200)
 * @return Array of elements passed condition
 */
  function filterPrice(range)
  {
    var arr = Array();
    var bottom = '';
    var top = '';
    var pom = range.split('-');
    bottom = pom[0];
    top = pom[1];
    for(var idx in visible)
    {
      var data = metadata[idx];
      if(data.cena >= parseInt(bottom) && data.cena <= parseInt(top))
      {
        arr[idx] = data;
      }
    }
    return arr;
  }

  /*
   *@param position Char
   *@return Array of elements passed condition
   */
  function filterPosition(position)
  {
    var arr = Array();
    for(var idx in visible)
      {
        var data = metadata[idx];
        if(
        ((position == 'P') && (data.poloha == 'P' || data.poloha == 'SP')) ||
        ((position == 'C') && (data.poloha == 'C' || data.poloha == 'P' || data.poloha == 'SP')) ||
        (position == data.poloha) ||
        (position == '-')
        )
          {
            arr[idx] = data;
          }
      }
      return arr;
  }

  /*
 * @param hardness Integer - integer representation of hardness
 * @return Array of elements passed condition
 */
  function filterHardness(hardness)
  {
    var arr = Array();
    for(var idx in visible)
    {
      var data = metadata[idx];
      if (data.tvrdost)
      {
	var pom = data.tvrdost.split(',');
	for(var i in pom)
	{
	  if(hardness == parseInt(pom[i]) || hardness == '-')
	  {
	    arr[idx] = data;
	  }
	}
      }
    }
    return arr;
  }

  /*
 * @param name String - name of metadata property
 * @param value String
 * @return Array of elements passed condition
 */
  function filterProducts(name, value)
  {
    var arr = Array();
    for(var idx in visible)
    {
      data = metadata[idx];
      if(data[name] && data[name] == value || value == '-') arr[idx] = data;
    }
    return arr;
  }

  initMetadata();
  $('form#filterProducts select').live(($.browser.msie ? "click" : "change"),function(){
    var selects = $('form#filterProducts select').get();
    visible = metadata;
    for(var idx in selects)
    {
      var name = selects[idx].name;
      var value = selects[idx].value;
      switch(name)
      {
        case 'vaha':
          visible = filterWeight(value);
          break
        case 'cena':
          visible = filterPrice(value);
          break
        case 'tvrdost':
          visible = filterHardness(value);
          break
        case 'poloha':
          visible = filterPosition(value);
          break
        default:
          visible = filterProducts(name, value);
      }
      //console.log('--------'+name+'--------------');
      //for(var a in visible) console.log(visible[a]);
      //console.log('----------------');
    }
    $(elements).css('visibility', 'hidden');
    //$(elements).css('border', '0px');
    for(var id in visible)
    {
      $('#'+id).css('visibility', 'visible');
      //$('#'+id).css('border', '1px solid #000');
    }
    return false;
  });

});

