/**
 * Coin Slider - Unique jQuery Image Slider
 * @version: 1.0 - (2010/04/04)
 * @requires jQuery v1.2.2 or later 
 * @author Ivan Lazarevic
 * Examples and documentation at: http://workshop.rs/projects/coin-slider/
 
 * Licensed under MIT licence:
 *   http://www.opensource.org/licenses/mit-license.php
**/

(function($)
{
	var params=new Array;
	var order=new Array;
	var images=new Array;
	var links=new Array;
	var linksTarget=new Array;
	var titles=new Array;
	var interval=new Array;
	var imagePos=new Array;
	var appInterval=new Array;
	var squarePos=new Array;
	var reverse=new Array;
	$.fn.coinslider=$.fn.CoinSlider=function(options)
	{
		init=function(el)
		{
			order[el.id]=new Array();
			images[el.id]=new Array();
			links[el.id]=new Array();
			linksTarget[el.id]=new Array();
			titles[el.id]=new Array();
			imagePos[el.id]=0;
			squarePos[el.id]=0;
			reverse[el.id]=1;
			params[el.id]=$.extend({},$.fn.coinslider.defaults,options);
			$.each($('#'+el.id+' img'),
			function(i,item)
			{
				images[el.id][i]=$(item).attr('src');
				links[el.id][i]=$(item).parent().is('a')?$(item).parent().attr('href'):'';
				linksTarget[el.id][i]=$(item).parent().is('a')?$(item).parent().attr('target'):'';
				titles[el.id][i]=$(item).next().is('span')?$(item).next().html():'';
				$(item).hide();
				$(item).next().hide();
			});
			$(el).css({'background-image':'url('+images[el.id][0]+')','width':params[el.id].width,'height':params[el.id].height,'position':'relative','background-position':'top left','background-repeat':'no-repeat'}).wrap("<div class='coin-slider' id='coin-slider-"+el.id+"' />");
			$('#'+el.id).append("<div class='cs-title' id='cs-title-"+el.id+"' style='position: absolute; bottom:0; left: 0; z-index: 1000;'></div>");
			$.setFields(el);if(params[el.id].navigation)
			$.setNavigation(el);
			$.transition(el,0);
			$.transitionCall(el);
		}
		$.setFields=
		function(el)
		{
			tWidth=sWidth=parseInt(params[el.id].width/params[el.id].spw);
			tHeight=sHeight=parseInt(params[el.id].height/params[el.id].sph);
			counter=sLeft=sTop=0;
			tgapx=gapx=params[el.id].width-params[el.id].spw*sWidth;
			tgapy=gapy=params[el.id].height-params[el.id].sph*sHeight;
			for(i=1;i<=params[el.id].sph;i++)
			{
				gapx=tgapx;
				if(gapy>0)
				{
					gapy--;
					sHeight=tHeight+1;
				}
				else
				{
					sHeight=tHeight;
				}
				for(j=1;j<=params[el.id].spw;j++)
				{
					if(gapx>0)
					{
						gapx--;
						sWidth=tWidth+1;
					}
					else
					{
						sWidth=tWidth;
					}
					order[el.id][counter]=i+''+j;
					counter++;
					if(params[el.id].links)
						$('#'+el.id).append("<a href='"+links[el.id][0]+"' class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></a>");
					else
						$('#'+el.id).append("<div class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></div>");
						$("#cs-"+el.id+i+j).css({'background-position':-sLeft+'px '+(-sTop+'px'),'left':sLeft,'top':sTop});
						sLeft+=sWidth;
				}
				sTop+=sHeight;
				sLeft=0;
			}
			$('.cs-'+el.id).mouseover(
			function()
			{
				$('#cs-navigation-'+el.id).show();
			});
			$('.cs-'+el.id).mouseout(
			function()
			{
				$('#cs-navigation-'+el.id).hide();
			});
			$('#cs-title-'+el.id).mouseover(
			function()
			{
				$('#cs-navigation-'+el.id).show();
			});
			$('#cs-title-'+el.id).mouseout(
			function()
			{
				$('#cs-navigation-'+el.id).hide();
			});
			if(params[el.id].hoverPause)
			{
				$('.cs-'+el.id).mouseover(
				function()
				{
					params[el.id].pause=true;
				});
				$('.cs-'+el.id).mouseout(
				function()
				{
					params[el.id].pause=false;
				});
				$('#cs-title-'+el.id).mouseover(
				function()
				{
					params[el.id].pause=true;
				});
				$('#cs-title-'+el.id).mouseout(
				function()
				{
					params[el.id].pause=false;
				});
			}
		};
		$.transitionCall=
		function(el)
		{
			clearInterval(interval[el.id]);
			delay=params[el.id].delay+params[el.id].spw*params[el.id].sph*params[el.id].sDelay;interval[el.id]=setInterval(
			function()
			{
				$.transition(el)
			},delay);
		}
		$.transition=
		function(el,direction)
		{
			if(params[el.id].pause==true)
				return;
			$.effect(el);
			squarePos[el.id]=0;
			appInterval[el.id]=setInterval(
			function()
			{
				$.appereance(el,order[el.id][squarePos[el.id]])
			},params[el.id].sDelay);
			$(el).css({'background-image':'url('+images[el.id][imagePos[el.id]]+')'});
			if(typeof(direction)=="undefined")
				imagePos[el.id]++;
			else if(direction=='prev')
				imagePos[el.id]--;
			else
				imagePos[el.id]=direction;
			if(imagePos[el.id]==images[el.id].length)
			{
				imagePos[el.id]=0;
			}
			if(imagePos[el.id]==-1)
			{
				imagePos[el.id]=images[el.id].length-1;
			}
			$('.cs-button-'+el.id).removeClass('cs-active');
			$('#cs-button-'+el.id+"-"+(imagePos[el.id]+1)).addClass('cs-active');
			if(titles[el.id][imagePos[el.id]])
			{
				$('#cs-title-'+el.id).css({'opacity':0}).animate({'opacity':params[el.id].opacity},params[el.id].titleSpeed);
				$('#cs-title-'+el.id).html(titles[el.id][imagePos[el.id]]);
			}
			else
			{
				$('#cs-title-'+el.id).css('opacity',0);
			}
		};
		$.appereance=
		function(el,sid)
		{
			$('.cs-'+el.id).attr('href',links[el.id][imagePos[el.id]]).attr('target',linksTarget[el.id][imagePos[el.id]]);
			if(squarePos[el.id]==params[el.id].spw*params[el.id].sph)
			{
				clearInterval(appInterval[el.id]);
				return;
			}
			$('#cs-'+el.id+sid).css({opacity:0,'background-image':'url('+images[el.id][imagePos[el.id]]+')'});
			$('#cs-'+el.id+sid).animate({opacity:1},300);
			squarePos[el.id]++;
		};
		$.setNavigation=
		function(el)
		{
			$(el).append("<div id='cs-navigation-"+el.id+"'></div>");
			$('#cs-navigation-'+el.id).hide();
			$('#cs-navigation-'+el.id).append("<a href='#' id='cs-prev-"+el.id+"' class='cs-prev'>>></a>");
			$('#cs-navigation-'+el.id).append("<a href='#' id='cs-next-"+el.id+"' class='cs-next'><<</a>");
			$('#cs-prev-'+el.id).css({'position':'absolute','top':params[el.id].height/2-15,'left':0,'z-index':1001,'line-height':'30px','opacity':params[el.id].opacity}).click(
			function(e)
			{
				e.preventDefault();
				$.transition(el,'prev');
				$.transitionCall(el);
			}).mouseover(
			function()
			{
				$('#cs-navigation-'+el.id).show()
			});
			$('#cs-next-'+el.id).css({'position':'absolute','top':params[el.id].height/2-15,'right':0,'z-index':1001,'line-height':'30px','opacity':params[el.id].opacity}).click(
			function(e)
			{
				e.preventDefault();
				$.transition(el);
				$.transitionCall(el);
			}).mouseover(
			function()
			{
				$('#cs-navigation-'+el.id).show()
			});
			$("<div id='cs-buttons-"+el.id+"' class='cs-buttons'></div>").appendTo($('#coin-slider-'+el.id));
			for(k=1;k<images[el.id].length+1;k++)
			{
				$('#cs-buttons-'+el.id).append("<a href='#' class='cs-button-"+el.id+"' id='cs-button-"+el.id+"-"+k+"'>"+k+"</a>");
			}
			$.each($('.cs-button-'+el.id),
			function(i,item)
			{
				$(item).click(
				function(e)
				{
					$('.cs-button-'+el.id).removeClass('cs-active');
					$(this).addClass('cs-active');
					e.preventDefault();
					$.transition(el,i);
					$.transitionCall(el);
				})
			});
			$('#cs-navigation-'+el.id+' a').mouseout(
			function()
			{
				$('#cs-navigation-'+el.id).hide();
				params[el.id].pause=false;
			});
			$("#cs-buttons-"+el.id).css({'left':'50%','margin-left':-images[el.id].length*15/2-5,'position':'relative'});
		}
		$.effect=
		function(el)
		{
			effA=['random','swirl','rain','straight'];
			if(params[el.id].effect=='')
				eff=effA[Math.floor(2)];
			else
				eff=params[el.id].effect;order[el.id]=new Array();
			if(eff=='random')
			{
				counter=0;
				for(i=1;i<=params[el.id].sph;i++)
				{
					for(j=1;j<=params[el.id].spw;j++)
					{
						order[el.id][counter]=i+''+j;counter++;
					}
				}
			$.random(order[el.id]);
		}
		if(eff=='rain')
		{
			$.rain(el);
		}
		if(eff=='swirl')
			$.swirl(el);
		if(eff=='straight')
			$.straight(el);
		reverse[el.id]*=-1;
		if(reverse[el.id]>0)
		{
				order[el.id].reverse();
		}
	}
	$.random=function(arr){var i=arr.length;if(i==0)return false;while(--i){var j=Math.floor(Math.random()*(i+1));var tempi=arr[i];var tempj=arr[j];arr[i]=tempj;arr[j]=tempi;}}
	$.swirl=function(el){var n=params[el.id].sph;var m=params[el.id].spw;var x=1;var y=1;var going=0;var num=0;var c=0;var dowhile=true;while(dowhile){num=(going==0||going==2)?m:n;for(i=1;i<=num;i++){order[el.id][c]=x+''+y;c++;if(i!=num){switch(going){case 0:y++;break;case 1:x++;break;case 2:y--;break;case 3:x--;break;}}}
	going=(going+1)%4;switch(going){case 0:m--;y++;break;case 1:n--;x++;break;case 2:m--;y--;break;case 3:n--;x--;break;}
	check=$.max(n,m)-$.min(n,m);if(m<=check&&n<=check)
	dowhile=false;}}
	$.rain=function(el){var n=params[el.id].sph;var m=params[el.id].spw;var c=0;var to=to2=from=1;var dowhile=true;while(dowhile){for(i=from;i<=to;i++){order[el.id][c]=i+''+parseInt(to2-i+1);c++;}
	to2++;if(to<n&&to2<m&&n<m){to++;}
	if(to<n&&n>=m){to++;}
	if(to2>m){from++;}
	if(from>to)dowhile=false;}}
	$.straight=function(el){counter=0;for(i=1;i<=params[el.id].sph;i++){for(j=1;j<=params[el.id].spw;j++){order[el.id][counter]=i+''+j;counter++;}}}
$.min=function(n,m){if(n>m)return m;else return n;}
$.max=function(n,m){if(n<m)return m;else return n;}
this.each(function(){init(this);});};$.fn.coinslider.defaults={width:470,height:300,spw:7,sph:5,delay:5000,sDelay:30,opacity:0.7,titleSpeed:500,effect:'',navigation:true,links:true,hoverPause:true};})(jQuery);
