/*
 * jQuery infinitecarousel plugin
 * @author admin@catchmyfame.com - http://www.catchmyfame.com
 * @version 1.2.2
 * @date August 31, 2009
 * @category jQuery plugin
 * @copyright (c) 2009 admin@catchmyfame.com (www.catchmyfame.com)
 * @license CC Attribution-Share Alike 3.0 - http://creativecommons.org/licenses/by-sa/3.0/
 * 
 * 
 * zmiany w wyglądzie i dostosowanie do karuzel ScanAnida- Maciej.Szwed@Mediaflex.pl
 */

var animAlarm = 0;

(function($){
	$.fn.extend({ 
		infiniteCarousel: function(options)
		{
			var defaults = 
			{
				transitionSpeed : 1500,
				displayTime : 6000,
				textholderHeight : .2,
				displayProgressBar : 1,
                
                //modyfikacje ze względu na drugą, inną karuzelę
                displayNextPrevBtns: 1,
                imgMargin: 0,
                differentCaptions: 0,

                //trzecia mini karuzelka
                noCaptions: 0,
                miniCarousel: 0,
                
				displayThumbnails: 1,
				displayThumbnailNumbers: 1,
				displayThumbnailBackground: 1,
				thumbnailWidth: '20px',
				thumbnailHeight: '20px',
				thumbnailFontSize: '.7em'
			};
		var options = $.extend(defaults, options);
	
    		return this.each(function() {
    			var randID = Math.round(Math.random()*100000000);
				var o=options;
				var obj = $(this);
				var curr = 1;

				var numImages = $('img', obj).length; // Number of images
				var imgHeight = $('img:first', obj).height();
				var imgWidth = $('img:first', obj).width() + o.imgMargin; //plus margines
				var autopilot = 1;
		
                if(!o.differentCaptions) {
                    $('p', obj).hide(); // Hide any text paragraphs in the carousel
                    $(obj).width(imgWidth);
					$(obj).height(imgHeight);
                }
                else{ //pokaż wszystkie paragrafy
                    $('p', obj).css({'position':'relative', 'z-index':'9', //'top':'-50px',
                                    'backgroundColor':'#e5f8fd','color':'#093077',//'opacity':'0.7',
                                    'fontSize':'12pt', 'margin':'0', 'height':'45px',
                                    'overflow':'hidden', 'marginTop':'-6px', 'width': $('img:first', obj).width(),
                                    'borderTop':'1px solid #7fa5bb',
                                    'borderBottom':'1px solid #7fa5bb'
                    });
                    $(obj).width(imgWidth);
					$(obj).height(imgHeight+46);
                }
                
			
				// Build progress bar
				if(o.displayProgressBar)
				{
					$(obj).append('<div id="progress'+randID+'" style="position:absolute;bottom:0;background:#bbb;left:'+$(obj).css('paddingLeft')+'"></div>');
					$('#progress'+randID).width(imgWidth).height(5).css('opacity','.8');
				}
			
				// Move last image and stick it on the front
				$(obj).css({'overflow':'hidden','position':'relative'});
				$('li:last', obj).prependTo($('ul', obj));
				$('ul', obj).css('left',-imgWidth+'px');
				$('ul',obj).width(9999);

				$('ul',obj).css({'list-style':'none','margin':'0','padding':'0','position':'relative'});
				$('li',obj).css({'display':'inline','float':'left'});
			
                if(!o.differentCaptions){
                    // Build textholder div thats as wide as the carousel and 20%-25% of the height
                    $(obj).append('<div id="textholder'+randID+'" class="textholder" style="position:absolute;bottom:0px;margin-bottom:'+-imgHeight*o.textholderHeight+'px;left:'+$(obj).css('paddingLeft')+'"></div>');
                    var correctTHWidth = parseInt($('#textholder'+randID).css('paddingTop'));
                    var correctTHHeight = parseInt($('#textholder'+randID).css('paddingRight'));
                    $('#textholder'+randID).width(imgWidth-(correctTHWidth * 2)).height((imgHeight*o.textholderHeight)-(correctTHHeight * 2)).css({
                        'backgroundColor':'#87d1f8','color':'#0a2069',//'opacity':'0.7',
                        'background':'url('+urlStatic+'/image/Strona/maincarouselbg.png)',
                        'fontSize':'14pt'});
                    showtext($('li:eq(1) p', obj).html());
                }
			
                if(o.displayNextPrevBtns)
                {
                    if(o.miniCarousel){
                        html = '<div id="btn_rt'+randID+'" class="miniCarouselRightArrow"><a href="javascript:void(0);">&nbsp;</a></div>';
                        html += '<div id="btn_lt'+randID+'" class="miniCarouselLeftArrow"><a href="javascript:void(0);">&nbsp;</a></div>';
                    }
                    else {
                        // Prev/next button(img)
                        html = '<div id="btn_rt'+randID+'" class="carouselRightArrow"><a href="javascript:void(0);">&nbsp;</a></div>';
                        html += '<div id="btn_lt'+randID+'"  class="carouselLeftArrow"><a href="javascript:void(0);">&nbsp;</a></div>';
                    }

                    $(obj).parent().append(html);
			    }
				
				// Left and right arrow image button actions .css('opacity','.75')
				$('#btn_rt'+randID).click(function(){
                    autopilot = 0;
                    $('#progress'+randID).stop().fadeOut();
                    if(!animAlarm){
                        //clearTimeout(clearInt);
                        anim('next');
                        animAlarm = setTimeout(function(){
                            animAlarm = 0;
                            $('#play_btn'+randID).fadeIn(250);
                        },o.transitionSpeed);
                    }
				});//.hover(function(){$(this).animate({opacity:'1'},250)},function(){$(this).animate({opacity:'.75'},250)});
				$('#btn_lt'+randID).click(function(){ //.css('opacity','.75')
                    autopilot = 0;
                    $('#progress'+randID).stop().fadeOut();
                    if(!animAlarm){
                        //clearTimeout(clearInt);
                        anim('prev');
                        animAlarm = setTimeout(function(){
                            animAlarm = 0;
                            $('#play_btn'+randID).fadeIn(250);
                        },o.transitionSpeed);
                    }
                    
				});//.hover(function(){$(this).animate({opacity:'1'},250)},function(){$(this).animate({opacity:'.75'},250)});

				if(o.displayThumbnails)
				{
					// Build thumbnail viewer and thumbnail divs
					$(obj).after('<div id="thumbs'+randID+'" style="top:224px;position:absolute;z-index:3;overflow:auto;text-align:right;padding-top:5px;"></div>');
					$('#thumbs'+randID).width(imgWidth);
					for(i=numImages-1;i>=0;i--)
					{ //background-image:url('+thumb+');
						thumb = $('img:eq('+(i+1)+')', obj).attr('src');
						$('#thumbs'+randID).append('<div class="thumb" id="thumb'+randID+'_'+(i+1)+'" style="cursor:pointer;display:inline;float:right;width:'+o.thumbnailWidth+';height:'+o.thumbnailHeight+';line-height:'+o.thumbnailHeight+';padding:0;overflow:hidden;text-align:center;margin-right:4px;font-size:'+o.thumbnailFontSize+';font-family:Arial;color:#000;text-shadow:0 0 3px #fff">'+
                            '<img src="'+urlStatic+'/image/Strona/carousel-pagination-0.png" alt="'+(i+1)+'" width="11" height="11"/>'+
                            '</div>');
						//if(i==0) $('#thumb'+randID+'_1').css({'border-color':'#ff0000'});
					}
					// Next two lines are a special case to handle the first list element which was originally the last
					thumb = $('img:first', obj).attr('src');
					//$('#thumb'+randID+'_'+numImages).css({'background-image':'url('+thumb+')'});
					//$('#thumbs'+randID+' div.thumb:not(:last)').css({'opacity':'.35'}); // makes all thumbs 65% opaque except the first one
                    $('#thumbs'+randID+' div.thumb:not(:last)').children().attr('src', urlStatic+'/image/Strona/carousel-pagination-1.png');

					$('#thumbs'+randID+' div.thumb').hover(
                        function(){ //$(this).animate({'opacity':1},150)
                            $(this).children().attr('src', urlStatic+'/image/Strona/carousel-pagination-0.png')
                        },
                        function(){
                            if(curr!=this.id.split('_')[1])
                                $(this).children().attr('src', urlStatic+'/image/Strona/carousel-pagination-1.png')
                                //$(this).animate({'opacity':.35},250)
                        }); // add hover to thumbs

					// Assign click handler for the thumbnails. Normally the format $('.thumb') would work but since it's outside of our object (obj) it would get called multiple times
					$('#thumbs'+randID+' div').bind('click', thumbclick); // We use bind instead of just plain click so that we can repeatedly remove and reattach the handler
				
					if(!o.displayThumbnailNumbers) $('#thumbs'+randID+' div').text('');
					if(!o.displayThumbnailBackground) $('#thumbs'+randID+' div').css({'background-image':'none'});
				}
				function thumbclick(event)
				{
					target_num = this.id.split('_'); // we want target_num[1]
					if(curr != target_num[1])
					{
						//$('#thumb'+randID+'_'+curr).css({'border-color':'#ccc'});
						$('#progress'+randID).stop().fadeOut();
						//clearTimeout(clearInt);
						//alert(event.data.src+' '+this.id+' '+target_num[1]+' '+curr);
						$('#thumbs'+randID+' div').css({'cursor':'default'}).unbind('click'); // Unbind the thumbnail click event until the transition has ended
						autopilot = 0;
						setTimeout(function(){$('#play_btn'+randID).fadeIn(250);},o.transitionSpeed);
					}
					if(target_num[1] > curr)
					{
						diff = target_num[1] - curr;
						anim('next',diff);
					}
					if(target_num[1] < curr)
					{
						diff = curr - target_num[1];
						anim('prev', diff);
					}
				}

				function showtext(t)
				{
					// the text will always be the text of the second list item (if it exists)
					if(t != null)
					{
						$('#textholder'+randID).html(t).animate({marginBottom:'0px'},500); // Raise textholder
						//showminmax();
					}
				}
				function showminmax()
				{
						if(!autopilot)
						{
							html = '<img style="position:absolute;top:2px;right:18px;display:none;cursor:pointer" src="'+urlStatic+'/image/Strona/down.png" title="Minimize" alt="minimize" id="min" /><img style="position:absolute;top:2px;right:18px;display:none;cursor:pointer" src="/js/infiniteCarousel/image/Stronas/up.png" title="Maximize" alt="maximize" id="max" />';
							html += '<img style="position:absolute;top:2px;right:6px;display:none;cursor:pointer" src="'+urlStatic+'/image/Strona/close.png" title="Close" alt="close" id="close" />';
							$('#textholder'+randID).append(html);
							$('#min').fadeIn(250).click(function(){$('#textholder'+randID).animate({marginBottom:(-imgHeight*o.textholderHeight)-(correctTHHeight * 2)+24+'px'},500,function(){$("#min,#max").toggle();});});
							$('#max').click(function(){$('#textholder'+randID).animate({marginBottom:'0px'},500,function(){$("#min,#max").toggle();});});
							$('#close').fadeIn(250).click(function(){$('#textholder'+randID).animate({marginBottom:(-imgHeight*o.textholderHeight)-(correctTHHeight * 2)+'px'},500);});
						}
				}
				function borderpatrol(elem)
				{ //css({'border-color':'#ccc'}).
					//$('#thumbs'+randID+' div').animate({opacity: 0.35},500);
                    $('#thumbs'+randID+' div').children().attr('src', urlStatic+'/image/Strona/carousel-pagination-1.png');

					setTimeout(function(){
                        elem.children().attr('src', urlStatic+'/image/Strona/carousel-pagination-0.png');
                        //elem.animate({'opacity': 1},500);
                    },o.transitionSpeed);
                    //css({'border-color':'#ff0000'}).
				}
				function anim(direction,dist)
				{
					// Fade left/right arrows out when transitioning
					//$('#btn_rt'+randID).fadeOut(500);
					//$('#btn_lt'+randID).fadeOut(500);
					
					// animate textholder out of frame
					$('#textholder'+randID).animate({marginBottom:(-imgHeight*o.textholderHeight)-(correctTHHeight * 2)+'px'},500);					

					//?? Fade out play/pause?
					$('#pause_btn'+randID).fadeOut(250);
					$('#play_btn'+randID).fadeOut(250);

					if(direction == "next")
					{
						if(curr==numImages) curr=0;
						if(dist>1)
						{
							borderpatrol($('#thumb'+randID+'_'+(curr+dist)));
							$('li:lt(2)', obj).clone().insertAfter($('li:last', obj));
							$('ul', obj).animate({left:-imgWidth*(dist+1)},o.transitionSpeed,function(){
								$('li:lt(2)', obj).remove();
								for(j=1;j<=dist-2;j++)
								{
									$('li:first', obj).clone().insertAfter($('li:last', obj));
									$('li:first', obj).remove();
								}
								//$('#btn_rt'+randID).fadeIn(500);
								//$('#btn_lt'+randID).fadeIn(500);
								$('#play_btn'+randID).fadeIn(250);
								showtext($('li:eq(1) p', obj).html());
								$(this).css({'left':-imgWidth});
								curr = curr+dist;
								$('#thumbs'+randID+' div').bind('click', thumbclick).css({'cursor':'pointer'});
							});
						}
						else
						{
							borderpatrol($('#thumb'+randID+'_'+(curr+1)));
							$('#thumbs'+randID+' div').css({'cursor':'default'}).unbind('click'); // Unbind the thumbnail click event until the transition has ended
							// Copy leftmost (first) li and insert it after the last li
							$('li:first', obj).clone().insertAfter($('li:last', obj));	
							// Update width and left position of ul and animate ul to the left
							$('ul', obj)
								.animate({left:-imgWidth*2},o.transitionSpeed,function(){
									$('li:first', obj).remove();
									$('ul', obj).css('left',-imgWidth+'px');
									//$('#btn_rt'+randID).fadeIn(500);
									//$('#btn_lt'+randID).fadeIn(500);
									if(autopilot) $('#pause_btn'+randID).fadeIn(250);
									showtext($('li:eq(1) p', obj).html());
									if(autopilot)
									{
										$('#progress'+randID).width(imgWidth).height(5);
										$('#progress'+randID).animate({'width':0},o.displayTime,function(){
											$('#pause_btn'+randID).fadeOut(50);
											setTimeout(function(){$('#pause_btn'+randID).fadeIn(250)},o.transitionSpeed)
										});
									}
									curr=curr+1;
									$('#thumbs'+randID+' div').bind('click', thumbclick).css({'cursor':'pointer'});
								});
						}
					}
					if(direction == "prev")
					{
						if(dist>1)
						{
							borderpatrol($('#thumb'+randID+'_'+(curr-dist)));
							$('li:gt('+(numImages-(dist+1))+')', obj).clone().insertBefore($('li:first', obj));
							$('ul', obj).css({'left':(-imgWidth*(dist+1))}).animate({left:-imgWidth},o.transitionSpeed,function(){
								$('li:gt('+(numImages-1)+')', obj).remove();
								//$('#btn_rt'+randID).fadeIn(500);
								//$('#btn_lt'+randID).fadeIn(500);
								$('#play_btn'+randID).fadeIn(250);
								showtext($('li:eq(1) p', obj).html());
								curr = curr - dist;
								$('#thumbs'+randID+' div').bind('click', thumbclick).css({'cursor':'pointer'});
							});
						}
						else
						{
							borderpatrol($('#thumb'+randID+'_'+(curr-1)));
							$('#thumbs'+randID+' div').css({'cursor':'default'}).unbind('click'); // Unbind the thumbnail click event until the transition has ended
							// Copy rightmost (last) li and insert it after the first li
							$('li:last', obj).clone().insertBefore($('li:first', obj));
							// Update width and left position of ul and animate ul to the right
							$('ul', obj)
								.css('left',-imgWidth*2+'px')
								.animate({left:-imgWidth},o.transitionSpeed,function(){
									$('li:last', obj).remove();
									//$('#btn_rt'+randID).fadeIn(500);
									//$('#btn_lt'+randID).fadeIn(500);
									if(autopilot) $('#pause_btn'+randID).fadeIn(250);
									showtext($('li:eq(1) p', obj).html());
									curr=curr-1;
									if(curr==0) curr=numImages;
									$('#thumbs'+randID+' div').bind('click', thumbclick).css({'cursor':'pointer'});
								});
						}
					}
//                    if(!animAlarm)
//                        { alert('!animAlalrm');
//                        clearInt = setInterval(function(){anim('next');},o.displayTime+o.transitionSpeed);}
				}

				var clearInt = setInterval(function(){anim('next');},o.displayTime+o.transitionSpeed);
				$('#progress'+randID).animate({'width':0},o.displayTime+o.transitionSpeed,function(){
					$('#pause_btn'+randID).fadeOut(100);
					setTimeout(function(){$('#pause_btn'+randID).fadeIn(250)},o.transitionSpeed)
				});
  		});
    	}
	});
})(jQuery);
