(function($){ 
     $.fn.extend({  
         tabify: function(callback, PREFIX) {
			function getHref(el){
				var hash = $(el).find('a').attr('href');
				hash = '#'+PREFIX+hash.slice(1);
				return hash || false;
			}
		 	function setActive(el){
				$(el).addClass('active');
				if(getHref(el))
					$(getHref(el)).show();
				else
					return false;
				$(el).siblings('li').each(function(){
					$(this).removeClass('active');
					$(getHref(this)).hide();
				});
			}

			lasthash = "";
			return this.each(function() {
				var self = this;
				
				function handleHash(){
					if(location.hash != lasthash) {
						lasthash = location.hash;
						var h = lasthash || $(self).find('a:first').attr('href');
						setActive($(self).find('a[href=' + h + ']').parent());
						if($.isFunction(callback))
							callback(lasthash);
					}
				}

				$(this).find('li').each(function(){
					var e = $( $(this).find('a').attr('href') );
					e.attr('id', PREFIX+e.attr('id'));
					if($(this).hasClass('active'))
						e.show();
					else
						e.hide();
				});
				handleHash();
				setInterval(handleHash,200);
            }); 
        } 
    }); 
})(jQuery);
