function replace_fonts() {
  Cufon.replace('h1');
}

function fix_heights() {
  var h = $("#content_box").height();
  $("#content_box_left").css('height', h);
  $("#content_box_right").css('height', h);
  $("#content_box_right span").css('height', h);
  $("#content_box_left span").css('height', h);
}


/**
 * Removes duplicates in the array 'a'
 * @author Johan Känngård, http://johankanngard.net/
 */
function unique(a) {
  tmp = new Array(0);
  for(i=0;i<a.length;i++){
    if(!contains(tmp, a[i])){
      tmp.length+=1;
      tmp[tmp.length-1]=a[i];
    }
  }
  return tmp;
}

/**
 * Returns true if 's' is contained in the array 'a'
 * @author Johan Känngård, http://johankanngard.net/
 */
function contains(a, e) {
  for(j=0;j<a.length;j++)if(a[j]==e)return true;
  return false;
}



function removeItems(array, item) {
  var i = 0;
  while (i < array.length) {
    if (array[i] == item) {
      array.splice(i, 1);
    } else {
      i++;
    }
  }
  return array;
}


$(document).ready(function () {

    $("a.fancybox").fancybox();
  
  // everything hinges on creating a string of class names, 
  // so i'll create a variable to hold that first
  
  var stringOfClassNames = '';
  
  // grab the class name of each list item to build that string
  $('.filterThis > li').each( function (i) {
    var thisClassString = $(this).attr('class');
    stringOfClassNames = stringOfClassNames +' '+ thisClassString
  });
  
  // now i have a space-delimited string of all class names stored
  // in the stringOfClassNames variable.  
  // Trim spaces from the ends of that string:
  stringOfClassNames = jQuery.trim(stringOfClassNames);
  
  // i can't really do anything with it until it's an array, so
  // convert that string to an array.
  var arrayClasses = stringOfClassNames.split(' ');
  
  
  // now for the isolating the filter that is common to all.
  // must do before extracting only the unique classes
  // one way to approach: count the number of times classes occur, and
  // if any occur the same number of times as how many list items i have,
  // assume that class is common to all list items, and remove it from
  // the filter list. duplicate class on same item = problem, but 
  // i'm not thinking about that right now.
  // i've also chosen sort the pre-unique'd array
  // instead of sorting the unique'd array.  i think i have to for the count.
  var arrayClasses = arrayClasses.sort();
  totalNumberOfItemsToFilter = $('.filterThis > li').length;
  
  
  // borrowed from http://stackoverflow.com/questions/348021/counting-results-in-an-array
  // for counting up items.  do i even need this?
  var result = new Object();
  for (var filterClass in arrayClasses) {
    if (result[arrayClasses[filterClass]] === undefined) {
      result[arrayClasses[filterClass]] = 1;
    } else {
      result[arrayClasses[filterClass]]++;
    }
  }
  var resultsToRemoveFromFilters = new Array();
  for (var item in result) {
    if (result[item] == totalNumberOfItemsToFilter) {
      resultsToRemoveFromFilters.push(item);
    }
  }
  
  
  

  // pull out only unique values from that array.  Otherwise
  // i'll end up with duplicate filter checkboxes.
  arrayUniqueClasses = (unique(arrayClasses));


  // and now remove classes that appear in every result from my 'unique
  // classes' array
  for (x in resultsToRemoveFromFilters) {
    arrayUniqueClasses = removeItems(arrayUniqueClasses,resultsToRemoveFromFilters[x]);
  }



  // we only want to create filters if there are multiple classes. check
  // length of that array to see if it worth going forward.  I need at least
  // two, so my value has to be greater than 1.
  if (arrayUniqueClasses.length > 1) {

    // it must be worth it, because everything else is
    // within the true side of this if statement. 
    // so since we're going to have some filters, 
    // lets give them a place to live
    $('<ul class="filters"><\/ul>').insertBefore('#products_box');

    // lets throw in the 'fadeIn all' checkbox for giggles
    $('<a class="select_all">Zobrazit vše<\/a>').appendTo('ul.filters');
    $('<a class="select_none">Schovat vše<\/a>').appendTo('ul.filters');

    
    // then build the filter checkboxes based on all the class names
    $.each(arrayUniqueClasses, function() {
      $('<li><input class="dynamicFilterInput" type="checkbox" checked="checked" value="'+this+'" id="filterID'+this+'" /><label for="filterID'+this+'"><img src="img/kostky/'+this+'.gif" alt="Obtížnost '+this+'" /><\/label><\/li>').appendTo('ul.filters');
    });
    

    // now lets give those filters something to do
    $('.filters input').click( function() {
      var value= $(this).val();
      if ((value == 'filterAll') && ($(this).is(':checked'))) {
        $('.filters input').attr('checked','checked');
        $('.filterThis li').fadeIn( function() {fix_heights();});
        fix_heights();
      } else {
        stringValue = '.filterThis > li.'+value;
        stringValueOpposite = '.filterThis > li:not(.'+value+')';
        if ($(this).is(':checked')) {
          classesOfItemTofadeIn = '';
          $(stringValue).fadeIn().each( function() {
            classesOfItemTofadeIn = classesOfItemTofadeIn + ' ' + $(this).attr('class');
            fix_heights();
          });
          // trim spaces, then turn to an array, then
          // exclude non-unique classes
          classesOfItemTofadeIn = jQuery.trim(classesOfItemTofadeIn);
          classesOfItemTofadeIn = classesOfItemTofadeIn.split(' ');
          classesOfItemTofadeIn = (unique(classesOfItemTofadeIn));
          if (classesOfItemTofadeIn.length > 1) {
            $.each(classesOfItemTofadeIn, function() {
              $('.filters input[value='+this+']').attr('checked','true');
            }); 
          }
          if ($('.dynamicFilterInput').not(':checked').length == 0) {
            $('#filterIDall').attr('checked','true');
          };
        } else {
          // all my new stuff goes here to tackle that 'webdev'
          // and 'resources' class issue.
          OtherClassesAssociatedWithTheItemToBeRemoved = '';
          Oca = OtherClassesAssociatedWithTheItemToBeRemoved;
          $(stringValue).each(function(i) {
            Oca = Oca + ' ' + $(this).attr('class');
          });
          
          // trim spaces, then turn to an array, then
          // exclude non-unique classes
          Oca = jQuery.trim(Oca);
          Oca = Oca.split(' ');
          Oca = (unique(Oca));
          if (Oca.length > 1) {
            $.each(Oca, function() {
              classToCompare = this; 
              if (!($('.'+classToCompare).is(stringValueOpposite))) {
                // uncheck the checkbox that classToCompare represents
                $('.filters input[value='+classToCompare+']').removeAttr('checked');
              }
            }); 
          }
          $(stringValue).fadeOut( function() {fix_heights();});
          $('.filters #filterIDall').removeAttr('checked');
        }
      }
    });
    $('.select_all').click( function() {
      $('.filters input').attr('checked','checked');
      $('.filterThis li').fadeIn( function() {fix_heights();});
      
    });
    $('.select_none').click( function() {
          $('.filters input').removeAttr('checked');
          $('.filterThis li').fadeOut( function() {fix_heights();});
          
        });
    replace_fonts();
//    $(".equal").equalHeights(); 

      
  }
});

