/**
 * jQuery.inlineSearch
 * Copyright (c) 2009 WGBH 
 * Dual licensed under MIT and ECL.
 * Date: 02/12/09
 * 
 * @projectDescription Easy element inline-search using jQuery.
 * Tested with jQuery 1.3.1. On FF 3 and Safari 3. on Mac.
 * 
 * @author Chris Beer - chris_beer(at)wgbh(dot)org
 * @version 0.1
 * 
 * @id jQuery.scrollTo
 * @id jQuery.fn.inlineSearch
 * 
 * @param {string} str The search string
 * 
 * @desc Search for the word "vault"
 * @example $('div').inlineSearch( "vault" );
 * 
 * @desc Search for the regex /[0-9]/
 * @example $('div').inlineSearch( "/[0-9]" );
 * 
 * 
 * Depends:
 *	jquery.scrollTo.js
 */
(function($) {
	var last;
	var i = 0;
	var count = 0;
	
	jQuery.expr[':'].containsIgnoreCase = function(a,i,m){ 
		return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0 
		};

	jQuery.expr[':'].containsRegex = function(a,i,m){ 
        var r = new RegExp(m[3], 'i');  
		return r.test(jQuery(a).text());
		};
	
	$.fn.inlineSearch = function(str, options) {
		var opts = $.extend({}, $.fn.inlineSearch.defaults, options);
		if(str == last) {
			i++;
			if(i >= count) {
				i = 0;
			}
		} else {
			$(this).find('.' + opts.className).removeClass(opts.className);
			var r;
			if(str.substring(0,1) == '/') {
				r = $(this).find('p:containsRegex(' + str.substring(1) + ')').addClass(opts.className);
			} else {
				r = $(this).find('p:containsIgnoreCase(' + str + ')').addClass(opts.className);
			}
			count = r.length;
			last = str;
			i = 0;
		}
		return $(this).scrollTo( 'p.' + opts.className + ':eq(' + i + ')', 250);		
	};
	
	$.fn.inlineSearch.defaults = {
			className: 'highlight'
	};
})(jQuery);
