/**
* @author simonschmidt
*/
jQuery.fn.slider = function(options){
	var slider = this;
	slider._num_visible_images 				= options.num_visible_images;
	slider._slide_speed						= options.slide_speed;
	slider._item_onclick 					= (options.item_onclick!="undefined")?options.item_onclick:null;
	slider._slider_controlls_height 		= 0;
	slider._slider_controlls_margin_top 	= 0;
	
	slider._num_images						= 0;
	slider._current_page					= 1;
	
	slider._slider_container_width 			= 0;
	
	slider._slider_controlls_width 			= 0;
	slider._slider_bar_width 				= 0;
	slider._slider_width 					= 0;
	
	
	slider.s						= "";
	slider.slider_container 		= "";
	slider.slider_bar 				= "";
	slider.slider_controlls			= "";
	
	slider.init = function(container)
	{
		slider.s					= container;
		slider.slider_container 	= container.find('.slider-container');
		slider.slider_bar 			= container.find('.slider-bar');
		slider.slider_controlls		= container.find('.slider-controlls');
		slider.slide_counter		= container.find('.slide-counter span');
		
		slider.slider_item			= slider.slider_bar.find('.item');
		slider.slider_item_img		= slider.slider_bar.find('.item img');
		
		slider._num_images			= slider.slider_item.length;
		
		if(slider._item_onclick!=null)
		{
			slider.slider_item.each(function(){
				$(this).find('a').each(function(){
					
					$(this).get(0).onclick = function(event)
						{
							var val = slider.getCurrentItemJSON($(this));
							$(this).removeAttr('href');
							slider._item_onclick(val);
						};
				})
			});
		}
		slider.update_slide_counter();
		
		slider._slider_controlls_height 	= slider.slider_item_img.outerHeight();
		slider.slider_controlls.find('a').height(slider._slider_controlls_height+'px');
		slider._slider_controlls_margin_top = (slider.slider_item.outerHeight()-slider._slider_controlls_height)/2;
	
		slider._slider_container_width 		= slider._num_visible_images * slider.slider_item.outerWidth()+1;
		slider.slider_container.width(slider._slider_container_width);
		slider._slider_controlls_width 		= slider.slider_controlls.outerWidth();
		
		slider._slider_bar_width = 0;
		slider.slider_item.each(function(){
			slider._slider_bar_width += $(this).outerWidth();
		})	
		
		slider._slider_width = ((slider._slider_controlls_width*2)+slider._slider_container_width)+1;
		slider.s.width(slider._slider_width+'px');
		
		slider.slider_controlls.height(slider._slider_controlls_height+'px');
		
		
		slider.slider_bar.css("width", slider._slider_bar_width + "px");
		
		
		slider.slider_controlls.find('a.prev').fadeOut('slow');
		
		slider.slider_controlls.find('a').click(function(){
			slider.slider_controlls_click( $(this) );
		})
		
		slider.slider_bar.find('a').mouseover(function()
		{
			slider.show_tooltip( $(this) );
		})
		
		slider.slider_bar.find('a').mouseout(function()
		{
			slider.hide_tooltip();
		})
		
		
	}
	
	this.getCurrentItemJSON = function(JNode){
		var val = {	"href"		: JNode.attr('href'),
					"img_src" 	: JNode.find('img').attr('src'),
					"title"		: JNode.parent(".item").find('.caption').text(),
					"desc"		: JNode.parent(".item").find('.desc').text()}
		
		return val;
	}	
	
	this.update_slide_counter = function(){
		slider.slide_counter.text(slider._current_page + " / " +Math.ceil(slider._num_images/slider._num_visible_images));
	}
	
	this.slider_controlls_click = function( jNode ){
		var _dir = (jNode.hasClass('next'))?"next":"prev";
		var _current_margin = slider.slider_bar.css("margin-left");
		
		slider._current_page = (_dir == "next")?(slider._current_page+1):(slider._current_page-1);
		//_current_margin = _current_margin.replace("px", "")*1;
		//_new_margin = (_dir == "next")?(_current_margin - slider._slider_container_width):(_current_margin + slider._slider_container_width);
		_new_margin = (slider._current_page-1) * slider._slider_container_width * -1;
		_possible_next_margin = (_dir == "next")?((slider._current_page) * slider._slider_container_width * -1):((slider._current_page-2) * slider._slider_container_width * -1);
		
		slider.update_slide_counter();
		var _prev_just_hidden = false;
		var _next_just_hidden = false;
		
		/* hide 'next' button as soon as arriving on last slider
		 * (that is when the marging to the left is bigger 
		 * than the total width of the slider)
		 */
		if(_possible_next_margin + slider._slider_bar_width < 0)
		{
			slider.slider_controlls.find('a.next').fadeOut('fast');
			_next_just_hidden = true;
		}
		
		/* hide 'prev' button as soon as on first slide
		 * (that is when the margin to the left is smaller or exactly 0)
		 */
		if(_new_margin >= 0)
		{
			slider.slider_controlls.find('a.prev').fadeOut('fast');
			_prev_just_hidden = true;
		}
		
		/* unhide 'prev' button when not on first slide
		 * 
		 */
		if(!_prev_just_hidden)
		{
			slider.slider_controlls.find('a.prev:hidden').fadeIn('fast');
		}
		
		/* unhide 'next' buttone when not on last slide
		 * 
		 */
		if(!_next_just_hidden)
		{
			slider.slider_controlls.find('a.next:hidden').fadeIn('fast');
		}
		
		/* slide andimation
		 * 
		 */
		
		slider.slider_bar.animate({
			marginLeft : _new_margin+"px"
			},
			slider._slide_speed,
			"linear",
			function(){
				
			});
	}
	
	this.show_tooltip = function ( jNode )
	{
		if(jNode.find('img').hasClass('st'))
		{
			var elm 	= jNode.find('img');
			
			var _title 	= (jNode.parents('.item').find('.caption').length > 0)?jNode.parents('.item').find('.caption').html():elm.attr('title'); 
			var _offset = elm.position();
			var _width 	= elm.innerWidth(); 
			var _top 	= _offset.top - 20; 
			var _left 	= _offset.left + _width - 30;
			
			var _title_container = '<div class="tooltip"' +
									'style="display:none;width:'+_width+'px;position:absolute;top:'+_top+'px;left:'+_left+'px;"'+
									'><div class="inner">'+_title+'</div></div>';
			
			slider.slider_bar.prepend(_title_container);
			
			_height = $('.slider .tooltip').innerHeight();
			var _top 	= _offset.top - (_height-20); 
			$('.slider .tooltip').css('top', _top+"px");
			$('.slider .tooltip').fadeIn('fast');
		}
		
	}
	
	this.hide_tooltip = function(){
		$('.slider .tooltip').remove(); //jr
	}
	
	this.each(function(){
		var jNode = $( this );
		slider.init(jNode);
	});
	
	return this;
		
};