/**
 * openFilters apply filters (and clear previous filter)
 * 
 * @access public
 * @return void
 */
function openFilters()
{
  //Clear filters
  clearFilters();
  //Apply filters
  applyFilters();
  //Show or hide no results
  if (hasResults())
  {
    jQuery('#no_results').hide();
  }
  else
  {
    jQuery('#no_results').show();
  }
  //Scroll left
  $('#serveroverview').scrollTo( '600', 0, {axis:'x'} );
  
  checkSpecialPrice();
  displayScroll(jQuery("#serveroverview tr.price td.fixed:not(#no_results):visible").length);
}

function hasResults()
{
  if (0 == jQuery("#serveroverview td.fixed:not(#no_results):visible").length)
  {
    return false;
  }
  return true;
}

function resetFilters()
{
  jQuery('.filter_all').each(function(){jQuery(this).attr('checked', 'checked')});
  openFilters();
}
/**
 * clearFilters clear all filters
 * 
 * @access public
 * @return void
 */
function clearFilters()
{
  jQuery('#serveroverview td, #serveroverview th').show();
}

/**
 * hideColumn hide table column 
 * 
 * @param index $index Column number
 * @access public
 * @return void
 */
function hideColumn(index)
{
  jQuery('#serveroverview td:nth-child('+(parseInt(index)+1)+'), #serveroverview th:nth-child('+(parseInt(index)+1)+')').hide();
}

/**
 * applyFilter apply single filter
 * 
 * @param elements $elements elements details
 * @param filter $filter filter name
 * @param value $value selected value
 * @param condition $condition condition
 * @access public
 * @return void
 */
function applyFilter(elements, filter, value, condition)
{
  if (condition == 'eq')
  {
    for (index in elements[filter]['columns']) 
    {
      if (elements[filter]['columns'][index].toLowerCase() != value.toLowerCase())
      {
        hideColumn(index);
      }
    }
  }
  else if (condition == 'gt')
  {
    for (index in elements[filter]['columns'])
    {
      if (parseInt(elements[filter]['columns'][index]) < parseInt(value))
      {
        hideColumn(index);
      }
    }
  }
  else if (condition == 'bt')
  {
    for (index in elements[filter]['columns'])
    {
      values = value.split('-');
      if (
          (parseInt(values[0]) != 0 && parseInt(elements[filter]['columns'][index]) < parseInt(values[0])) ||
          (parseInt(values[1]) != 0 && parseInt(elements[filter]['columns'][index]) > parseInt(values[1]))
         )
      {
        hideColumn(index); 
      }
    }
  }
  else if (condition == 'location')
  {
    for (index in elements[filter]['columns'])
    {
      var countries = elements[filter]['columns'][index].toLowerCase().split(', ');
      if (-1 == jQuery.inArray(value.toLowerCase(), countries))
      {
        hideColumn(index); 
      }
    }
  }
}

/**
 * getCheckedByClass get checked checkbox by it's classname
 * 
 * @param classname $classname String, class name
 * @access public
 * @return object
 */
function getCheckedByClass(classname)
{
  return jQuery('input.'+classname+':checked').val();
}

/**
 * applyAutoFilter apply default filters
 * 
 * @access public
 * @return void
 */
function applyAutoFilter()
{
  if ('' != auto_filter)
  {
    jQuery('input.os').each(function()
    {
      if(jQuery(this).val().toLowerCase() == auto_filter)
      {
        jQuery(this).attr('checked', 'checked');
      }
    });
    openFilters();
  }
}

/**
 * applyFilters apply all filters (and select condition);
 * 
 * @access public
 * @return void
 */
function applyFilters()
{
  var attr_eq = ['os', 'green_hosting', 'filter_cpu_core', 'filter_harddisk_type', 'filter_traffic_bandwidth_type'];
  for (i in attr_eq)
  {
	  var filter_value = getCheckedByClass(attr_eq[i]);  //alert(filter_value + ' ' +attr_eq[i]);
  	if (filter_value && filter_value != '-1')
  	{
	    applyFilter(servers_details, attr_eq[i], filter_value, 'eq');
  	}
  }
  /*var attr_gt = [];
  for (i in attr_eq)
  {
	  var filter_value = getCheckedByClass(attr_gt[i]);  
  	if (filter_value && filter_value != '-1')
	  {
  	  applyFilter(servers_details, attr_gt[i], filter_value, 'gt');
	  }
  }*/
  var attr_bt = ['price_total', 'ram_total', 'storage'];
  for (i in attr_bt)
  {
    var filter_value = getCheckedByClass(attr_bt[i]);
    if (filter_value && filter_value != '-1')
    {
      applyFilter(servers_details, attr_bt[i], filter_value, 'bt');
    }
  }

  var attr_ey = ['location'];
  for (i in attr_ey)
  {
    var filter_value = getCheckedByClass(attr_ey[i]);  
    if (filter_value && filter_value != '-1')
    {
      applyFilter(servers_details, attr_ey[i], filter_value, 'location');
    }
    updatePriceAndCurrency(servers_details);
  }
}

function updatePriceAndCurrency(elements)
{
  for (index in elements['all_prices']['columns'])
  {
    var countries = elements['location']['columns'][index].toLowerCase().split(', ');
    var priceColumn = jQuery('#serveroverview td[data-id="price"]:nth-child('+(parseInt(index)+1)+')');
    var setupColumn = jQuery('#serveroverview td[data-id="setup"]:nth-child('+(parseInt(index)+1)+')');
    var matches = priceColumn.text().match(/(maand|month|Monat)/);
    var monthText = matches[0];
    
    var selectedLocation = $("input[name='location']:checked").val().toString();
    if (-1 == $("input[name='location']:checked").val())
    {
      selectedLocation = $("input[id='locationEntity']:hidden").val();
    }
    
    if (-1 == jQuery.inArray(selectedLocation.toLowerCase(), countries))
    {
      selectedLocation = countries[0];
    }
    
    var regularPrice = elements['all_prices']['columns'][index][selectedLocation]['regular'];
    var specialPrice = elements['all_prices']['columns'][index][selectedLocation]['special'];
    var setupPrice = elements['all_prices']['columns'][index][selectedLocation]['setup'];
    var specialsetupPrice = elements['all_prices']['columns'][index][selectedLocation]['special_setup'];
    var currency = elements['all_prices']['columns'][index][selectedLocation]['currency'];
    
    if ('us' == selectedLocation)
    {
      var centText = '.- ';
    }
    else
    {
      var centText = ',- ';
    }
    
    if (0 != specialPrice)
    {
      var textPrice = '<s>' + currency + regularPrice + '</s><br/><span class="offer">' + currency + specialPrice + centText + monthText +' </span>'
    }
    else
    {
      var textPrice = currency + regularPrice + centText + monthText;
    }
    
    if (0 != specialsetupPrice)
    {
      var textSetupPrice = '<s>' + currency + setupPrice + '</s><br/><span class="offer">' + currency + setupPspecialsetupPricerice +' </span>'
    }
    else
    {
      var textSetupPrice = currency + setupPrice;
    }

    priceColumn.html(textPrice);
    setupColumn.html(textSetupPrice);
  }
}

/**
 * showFilters show filter box
 * 
 * @access public
 * @return void
 */
function showFilters()
{
  jQuery("#filters span, #filters input, #filters label, #filters br").show();
  jQuery("#hide_filters").show();
  jQuery("#show_filters").hide();
  jQuery("#reset_filters").show();
}

/**
 * hideFilters hide filter box
 * 
 * @access public
 * @return void
 */
function hideFilters()
{
  jQuery("#filters span, #filters input, #filters label, #filters br").hide();
  jQuery("#show_filters").show();
  jQuery("#hide_filters").hide();
  jQuery("#reset_filters").hide();
}

/**
 * showSorting show sorting box
 */
function showSorting()
{
  jQuery("#sorting form").show();
  jQuery("#show_sorting").hide();
  jQuery("#hide_sorting").show();
}

/**
 * hideSorting hide sorting box
 */
function hideSorting()
{
  jQuery("#sorting form").hide();
  jQuery("#show_sorting").show();
  jQuery("#hide_sorting").hide();
}

jQuery(document).ready(function()
{
  //Register button clicks
  jQuery("#reset_filters").click(resetFilters);
  jQuery("#show_filters").click(showFilters);
  jQuery("#hide_filters").click(hideFilters);
  jQuery("#show_sorting").click(showSorting);
  jQuery("#hide_sorting").click(hideSorting);

  //Default show filters
  showFilters();
  showSorting();
  openFilters();
});

