$.fn.search = function(searchElements) {
  $(this).keyup(function(){
    var searchString = $(this).val();
    if (searchString.length > 0){
      $(searchElements).hide();
      $(searchElements+':contains(' +searchString+ ')').show();
    }
    else {
      $(searchElements).show();
    }
  });
};

$.fn.sort = function(target,by) {
	var elements = Array();
	var elementsASC = Array();	
	var compare = 0;
	$(this).click(function(){
		elements.length = 0;
		elementsASC.length = 0;
		compare = 0;
		if(by == null)
		{
			$(target).each(function(){ elements.push($(this).text()); elementsASC.push($(this).text()); });	
		}else
		{
			$(target).parent().find(by).each(function(){ elements.push($(this).text()); elementsASC.push($(this).text()); });
		}
		elementsASC.sort();
		for(var i in elements){ if(elements[i] == elementsASC[i]){ compare++;} }
		if(elements.length == compare)	{ elements.reverse(); }else{ elements.sort(); }
		for(var i in elements){
			$(target).eq(i).text(elements[i]); 
		}
	});
};