var CategoryFilter_LabelDisplayWidth = 135;
var CategoryFilter_animationSpeedFactor = 20;
var CategoryFilter_minAnimationDuration = 500;
var CategoryFilter_minimizeSpeed = 300;

function CategoryFilter_minimize(aCategoryFilter) {
  if(aCategoryFilter.minimized) {
    return;
  }
          
  $(aCategoryFilter).children('.categoryFilterSelectors').slideUp(CategoryFilter_minimizeSpeed);
  $(aCategoryFilter).find('.minMaxButton').addClass('maximizeButton');
  $(aCategoryFilter).find('.minMaxButton').removeClass('minimizeButton');

  aCategoryFilter.minimized = true;
}

function CategoryFilter_maximize(aCategoryFilter) {
  if(!aCategoryFilter.minimized) {
    return;
  }
  
  $(aCategoryFilter).children('.categoryFilterSelectors').slideDown(CategoryFilter_minimizeSpeed);
  $(aCategoryFilter).find('.minMaxButton').addClass('minimizeButton');
  $(aCategoryFilter).find('.minMaxButton').removeClass('maximizeButton');
  
  aCategoryFilter.minimized = false;
}

function CategoryFilter_enableScrollingLabels() {
  $(".categoryFilterBox .category .name").each(function(i, val) {
    
    var catLabel = $(val);
    catLabel.css('font-weight', 'bold');
    var labelWidth = catLabel.width();    
    catLabel.removeAttr('style');
    
    if(labelWidth > CategoryFilter_LabelDisplayWidth) {

      val.scrollAmount = labelWidth - CategoryFilter_LabelDisplayWidth;      
      catLabel.css('display', 'block');
      catLabel.parent().append($('<div class="ellipsis"></div>'));
      
      catLabel.mouseover(function(e) {
        var catLabel = $(e.target);
        var speed = Math.max(e.target.scrollAmount * CategoryFilter_animationSpeedFactor, CategoryFilter_minAnimationDuration);
        catLabel.stop();
        var ellipsis = catLabel.siblings('.ellipsis');        
        catLabel.animate({
          marginLeft: '-' + e.target.scrollAmount + 'px'
        }, speed, function() {          
          ellipsis.hide();
        });              
      });
      catLabel.mouseout(function(e) {
        var catLabel = $(e.target);
        catLabel.stop();
        var ellipsis = catLabel.siblings('.ellipsis');
        ellipsis.show();
        var speed = Math.max(e.target.scrollAmount * CategoryFilter_animationSpeedFactor / 2, CategoryFilter_minAnimationDuration);
        catLabel.animate({
          marginLeft: '0px'
          }, speed);      
      });            
    }
  });   
}

function CategoryFilter_toggleSelector(aSelector) {
  
  var checkbox = $(aSelector).find('.checkbox');
  var label = $(aSelector).find('.category .name');
  var ellipsis = $(aSelector).find('.category .ellipsis');
  
  if(checkbox.hasClass('selectedCheckbox')) {
    checkbox.removeClass('selectedCheckbox');
    label.removeClass('selected');    
    ellipsis.removeClass('ellipsisSelected');
    return false;
  } else {
    checkbox.addClass('selectedCheckbox');
    label.addClass('selected');
    ellipsis.addClass('ellipsisSelected');
    return true;
  }
}

function CategoryFilter_rollOverSelector(aSelector) {
  
  var checkbox = $(aSelector).find('.checkbox');
  var label = $(aSelector).find('.category .name');
  var ellipsis = $(aSelector).find('.category .ellipsis');
  
  checkbox.addClass('checkboxOver');
  label.addClass('over');
  ellipsis.addClass('ellipsisOver');
}

function CategoryFilter_rollOutSelector(aSelector) {
  
  var checkbox = $(aSelector).find('.checkbox');
  var label = $(aSelector).find('.category .name');
  var ellipsis = $(aSelector).find('.category .ellipsis');
  
  checkbox.removeClass('checkboxOver');
  label.removeClass('over');
  ellipsis.removeClass('ellipsisOver');
}
