_PRODUCT_SLIDER_ANIMATE = false;
(function(j){
	j.fn.bannerSlider = function(options){
	
		var opts = {
			sliderContainer: '.bannerSlideContainer',
			sliderWrapper: '.bannerSlideWrapper',
			slide: '.bannerSlide',
			naviContainer: '.bannerSliderNavi',
			sliderWidth: 477,
			active: 0,
			duration: 200,
			productsOnSlide: false /* false - brak produktow na slajdzie */
		};
		j.extend(opts, options);
		
		var SLIDER = this;
		
		var banners = j(this).find(opts.slide);
		var active = opts.active;
		
		var slide = function(args){
			var tmpArgs = { dir: '', durationMult: 1, repeat: 0  };
			j.extend(tmpArgs, args);
			if(!_PRODUCT_SLIDER_ANIMATE){
				_PRODUCT_SLIDER_ANIMATE=true;
				j(SLIDER).children('.slideCover').show();
				var tmpD = '-=';
				if( tmpArgs.dir=='p' ){	tmpD = '+='; }
				if(tmpArgs.dir=='p'){ 
					j(opts.sliderContainer).css('left',function(){ 
						return parseInt(j(this).css('left')) - opts.sliderWidth });
					j(opts.slide).last().prependTo(opts.sliderContainer);
					if( active == 0 ) active = banners.length;
				}
				j(opts.sliderContainer).animate({
						left: tmpD + opts.sliderWidth
					},{
						duration: opts.duration/tmpArgs.durationMult,
						complete: function(){
							active += tmpArgs.dir=='p'?-1:1;
							if(tmpArgs.dir=='n'){
								j(opts.slide).first().appendTo(opts.sliderContainer);
								j(opts.sliderContainer).css('left',function(){ return parseInt(j(this).css('left')) + opts.sliderWidth });
								if( active == banners.length ) active = 0;
							}
							if( tmpArgs.repeat <= 1 ){
								j(opts.naviContainer).find('li.active').removeClass('active');
								j(opts.naviContainer).find('li[rel=b-'+active+']').addClass('active');
							}
							_PRODUCT_SLIDER_ANIMATE=false;
							j(SLIDER).children('.slideCover').hide();
							if( tmpArgs.repeat > 1 ){
								slide({dir: tmpArgs.dir, durationMult: tmpArgs.durationMult, repeat: tmpArgs.repeat-1 });
							}
						}
				});
			}
		}
		
		var switchTo = function(args){
			var tmpArgs = {to:1,steps:1};
			tmpArgs = j.extend(tmpArgs,args);
			if( active == tmpArgs.to ) return true;
			var tmpSteps = tmpArgs.to-active;
			var tmpDir = tmpSteps < 0 ? 'p' : 'n';
			tmpSteps = Math.abs(tmpSteps);
			slide({dir:tmpDir,durationMult:tmpSteps,repeat:tmpSteps}); 
		}
		
		var init = function(){
			/* dodanie warstwy blokującej animacje/eventy zawartości slajdu w czasie animacji slidera */
			j(SLIDER).append('<div class="slideCover"></div>');
			/* ustawienie szerokosci poszczególnych slide'ów (może być różna w zależności od zawartości; max 960) */
			j(opts.sliderContainer).find(opts.slide).each(function(i){
				/* przepisanie dla przypadku, gdy w ostatnim slajdzie jest mniej niż 4 elementy */
				var tmpDiff = opts.productsOnSlide - j(this).find('.productSlideItem').length;
				if( tmpDiff > 0 ){
					j(this).prev().find('.productSlideItem').slice( opts.productsOnSlide - tmpDiff ).clone().prependTo(this);
				}
				/* zabawa z overflowem */
				j(opts.slide).hover(
					function(){
						//j(opts.sliderWrapper).removeClass('oH');
						//j(opts.sliderContainer+' '+opts.slide+':nth-child(1n+2)').css({'visibility':'hidden'});
						//if (!+'\v1') {j('html').css({'overflow-x':'hidden'});} else {j('body').css({'overflow-x':'hidden'});}
						//j(this).parent().parent().css({'visibility':'visible'});
					},
					function(){
						j(opts.sliderWrapper).addClass('oH');
						j(opts.sliderContainer+' '+opts.slide+':nth-child(1n+2)').css({'visibility':'visible'});
						if (!+'\v1') {j('html').css({'overflow-x':'auto'});} else {j('body').css({'overflow-x':'auto'});}
				});
			});
			j(opts.sliderContainer).width( banners.length*opts.sliderWidth );
			var naviUl = j('<ul></ul>');
			banners.each(function(i){
				naviUl.append('<li rel="b-'+i+'"'+(i==opts.active?' class="active"':'')+'><a class="slideSwitch" href="#">'+i+'</a></li>');
			});
			//var naviUlWrap = naviUl.wrap(</div>');
			j(opts.naviContainer)
				.append('<a href="#" class="pn prev" rel="p">prev</a>')
				.append('<div class="naviUl"><ul style="width:'+(banners.length*20)+'px">' + naviUl.html() + '</ul></div>' )
				.append('<a href="#" class="pn next" rel="n">next</a>')
				.append('<div class="clear"></div>')
				.delegate('a.pn','click',function(){
					slide({ dir: j(this).attr('rel') });
					return false;
				})
				.delegate('a.slideSwitch','click',function(){
					switchTo( {to:parseInt(j(this).parent('li').attr('rel').replace(/b\-/,''))} );
					return false;
				});
			j(document).keydown(function(e){
				if( e.keyCode == 37 ){ j(opts.naviContainer+' a.pn.prev').click(); }else
				if( e.keyCode == 39 ){ j(opts.naviContainer+' a.pn.next').click(); }
			});
		}
	
		return this.each(function(){
			init();
		});
	}
})(jQuery);
