/*
	dwa plguiny do jQuery
	
	$.fn.preview(opts)
	opts = {		
		itemsRootClass 	{string} 	default 'items'	klasa elementu zawierajaca wszystkie elementy (ten element jest przesuwany, ma nadawana position: absolute)
		itemsClass 			{string} 	default 'item' 	klasa elementu listy 
		nextClass 			{string} 	default 'next'	klasa elementu ktory wywoluje przesuniecie bloku i pokazanie nastepnego elementu z listy
		prevClass				{string} 	default 'prev'	klasa elementu ktory wywoluje przesuniecie bloku i pokazanie poprzedniego elementu z listy
		speed 					{integer}	default 1000		predkosc animacji (przesuwania itemsRoot)
	}
	wywolanie z defaultowymi ustawieniami:
	$(".moj_element").preview();
	
	$.fn.tooltip(opts)
	opts = {
		speed 					{integer}	default 1000		predkosc animacji (zanikania tooltipa)
		delay						{integer}	default	1000		czas od zjechania myszka z tooltipa lub ikonki, po którym tooltip znika
	}
	
	tested: ff 3+, 

*/
(function($){
	$.fn.preview = function(opts){
		opts = $.extend({
			nextClass: 'preview_next',
			prevClass: 'preview_prev',
			itemsRootClass: 'items',
			itemsClass: 'item',
			speed: 1000
		}, opts);
		return $(this).each(function(){
			var root = $(this), itemsRoot = $('.'+opts.itemsRootClass, root), items = $('.'+opts.itemsClass, root), prev = $('.'+opts.prevClass, root), next = $('.'+opts.nextClass, root), locked = false;
			root.css({position: 'relative',overflow: 'hidden', width: '100%', height: 133});
			itemsRoot.css({position:'absolute', left: 0, top: 0}).width('999em');
			var itemW = root.width();
			items.css({float: 'left', width: itemW}).show();
					
			var go_next = function(e){
				e.preventDefault();
				if (locked) {
					return false;
				}
				locked = true;
				itemsRoot.animate({
					left: -itemW
				}, opts.speed, function(){
					
					$('.'+opts.itemsClass, root).eq(0).appendTo(itemsRoot);
					itemsRoot.css({left: 0});
					locked = false;
				});
			};
			
			var go_prev = function(e){
				e.preventDefault();
				if (locked) {
					return false;
				}
				locked = true;
				$('.'+opts.itemsClass, root).eq(items.length-1).prependTo(itemsRoot);
				itemsRoot.css({left:-itemW});
				itemsRoot.animate({
					left: 0
				}, opts.speed, function(){
					locked = false;
				});
			};
			next.bind('click.preview', go_next);
			prev.bind('click.preview', go_prev);
		});
	};
	$.fn.tooltip = function(opts){
		opts = $.extend({
			speed: 400,
			delay: 1000
		}, opts);
		return $(this).each(function(){
			var icon = $(this), message = icon.html() || icon.attr('title'), timer;
			icon_offset = icon.offset();
			icon.text('');
			var tooltip_bubble = $('<div class="tooltip_bubble"><b></b><div class="content">'+message+'</div></div>').css({
				position: 'absolute',
				'z-index': 999,
				visibility: 'hidden'
			}).appendTo('body');
			tooltip_bubble.css({top: icon_offset.top - tooltip_bubble.height() -13, left: icon_offset.left - 15, visibility: 'visible', display: 'none' })
						
			var show = function(e){
				clearTimeout(timer);
				tooltip_bubble.show();
			};
			var hide = function(e){
				timer = setTimeout(fadeOut, opts.delay);
			};
			var fadeOut = function(){
				tooltip_bubble.fadeOut(opts.speed);
			};
			icon.bind('mouseenter.tooltip', show).bind('mouseover.tooltip', show);
			tooltip_bubble.bind('mouseenter.tooltip', show).bind('mouseover.tooltip', show);
			tooltip_bubble.bind('mouseleave.tooltip', hide);
			icon.bind('mouseleave.tooltip', hide);
		});
	};
	$(document).ready(function(){
		$(".preview").preview();
		$(".tooltip").tooltip();
	});
})(jQuery);
