$(document).ready(function(){

	// CSS HOOKS
	$('li:last-child').addClass('last');

	
	// DEBUG GRID
	if( $('#grid').length ){
	
		$('#grid').hide();
		$('#grid').after('<a id="grid-control" href="#">Show Grid</a>');
				
		$('#grid-control').toggle(
			function(){
				$('#grid').fadeIn('fast');
				$('body').addClass('grid');
				$(this).html('Hide Grid');
			},
			function(){
				$('#grid').fadeOut('fast');
				$('body').removeClass('grid');
				$(this).html('Show Grid');
			}
		);
		
	}
	
	
	// SUCKERFISH
	if( $('#nav > li').length ){
	
		$('#nav > li ul').parent().addClass('parent');
	
		$('#nav > li').hover(
			function(){
				$(this).addClass('sfhover')
			},
			function(){ 
				$(this).removeClass('sfhover')
			}
		);
		
	}
	
	// COUNTDOWN
	
	function getDate(offset){
		var now = new Date();
		var hour = 60*60*1000;
		var min = 60*1000;
		return new Date(now.getTime() + (now.getTimezoneOffset() * min) + (offset * hour));
	}
	
	if( $('#countdown').length ){
		
		var d = new Date();
		var offset = -d.getTimezoneOffset()/60;
		var hour = 14 + offset;
		var kickoff = new Date();
		kickoff = new Date("June 11, 2010 "+hour+":00:00");
		
		$('#countdown div').countdown({
			until: kickoff, 
			format: 'dHMs', 
			layout: '<div class="unit days"><strong>{d10}{d1}</strong> {dl}</div>'+'<div class="unit hours"><strong>{h10}{h1}</strong> {hl}</div>'+'<div class="unit minutes"><strong>{m10}{m1}</strong> {ml}</div>'+'<div class="unit seconds"><strong>{s10}{s1}</strong> {sl}</div>'
		});
	}
	
	// TABS
	
	if( $('div.tabs').length ){
		var tabContainers = $('div.tabs > div');
		tabContainers.hide().filter(':first').show();

		$('div.tabs ul.tabs-nav a').click(function () {
			tabContainers.hide();
			tabContainers.filter(this.hash).show();
			$('div.tabs ul.tabs-nav li').removeClass('selected');
			$(this).parent().addClass('selected');
			return false;
		}).filter(':first').click();
	}

	$(".widget_search .search-text").liveUpdate(".widget_search .srch-contents").focus();
	
	$(".entry-content .srch-lookup").remove();

	$(".widget_search .srch-contents").click(function(e){
		var $itp = $(e.target);
		if ($itp.is("p")){
			$(".widget_search .search-text").val($itp.text());
			$(".widget_search .srch-lookup").hide();
			return false;
		}
	});
});

jQuery.fn.liveUpdate = function(list){
	list = jQuery(list);

	if ( list.length ) {
		var rows = list.children('p');
		var cache = rows.map(function(){
				return this.innerHTML.toLowerCase();
			});
			
		this.keyup(filter);
	}
		
	return this;
		
	function filter(){
		var term = jQuery.trim( jQuery(this).val().toLowerCase() );
		//var scores = [];
		rows.hide();
		if ( term ) {
			rows.parent().parent().show();
			
			var matchCount = 0;
			cache.each(function(i){
				var score = Math.floor(this.score(term)*100);
				if (score > 75 && matchCount < 10) {
					//scores.push([score, i]);
					jQuery(rows[i]).show();
					matchCount++;
					}
			});
		}
	}
};

String.prototype.score = function(abbreviation,offset) {
	  offset = offset || 0 // TODO: I think this is unused... remove
	 
	  if(abbreviation.length == 0) return 0.9
	  if(abbreviation.length > this.length) return 0.0

	  for (var i = abbreviation.length; i > 0; i--) {
	    var sub_abbreviation = abbreviation.substring(0,i)
	    var index = this.indexOf(sub_abbreviation)


	    if(index < 0) continue;
	    if(index + abbreviation.length > this.length + offset) continue;

	    var next_string       = this.substring(index+sub_abbreviation.length)
	    var next_abbreviation = null

	    if(i >= abbreviation.length)
	      next_abbreviation = ''
	    else
	      next_abbreviation = abbreviation.substring(i)
	 
	    var remaining_score   = next_string.score(next_abbreviation,offset+index)
	 
	    if (remaining_score > 0) {
	      var score = this.length-next_string.length;

	      if(index != 0) {
	        var j = 0;

	        var c = this.charCodeAt(index-1)
	        if(c==32 || c == 9) {
	          for(var j=(index-2); j >= 0; j--) {
	            c = this.charCodeAt(j)
	            score -= ((c == 32 || c == 9) ? 1 : 0.15)
	          }

	          // XXX maybe not port this heuristic
	          // 
	          //          } else if ([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[self characterAtIndex:matchedRange.location]]) {
	          //            for (j = matchedRange.location-1; j >= (int) searchRange.location; j--) {
	          //              if ([[NSCharacterSet uppercaseLetterCharacterSet] characterIsMember:[self characterAtIndex:j]])
	          //                score--;
	          //              else
	          //                score -= 0.15;
	          //            }
	        } else {
	          score -= index
	        }
	      }
	   
	      score += remaining_score * next_string.length
	      score /= this.length;
	      return score
	    }
	  }
	  return 0.0
	}

