/**

 * Coin Slider - Unique jQuery Image Slider

 * @version: 1.0 - (2010/04/04)

 * @requires jQuery v1.2.2 or later 

 * @author Ivan Lazarevic

 * @modified by: mr Chung - website: http://skyoftech.com - email: contactnum1@gmail.com



**/



(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();	// order of square appereance

			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);



			// create images, links and titles arrays

			$.each($('#'+el.id+' img.thumb_large_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).parent().next().is('span') ? $(item).parent().next().html() : '';

				$(item).hide();

				$(item).next().hide();

			});		

			



			// set panel

			$(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'

			}).wrap("<div class='"+params[el.id].classPrefix+"coin-slider' id='coin-slider-"+el.id+"' />");	

			

				

			// create title bar

			$('#'+el.id).append("<div class='"+params[el.id].classPrefix+"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);

				

		}

		

		// squares positions

		$.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='"+params[el.id].classPrefix+"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='"+params[el.id].classPrefix+"cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></div>");

								

					// positioning squares

					$("#cs-"+el.id+i+j).css({ 

						'background-position': -sLeft +'px '+(-sTop+'px'),

						'left' : sLeft ,

						'top': sTop

					});

				

					sLeft += sWidth;

				}



				sTop += sHeight;

				sLeft = 0;					

					

			}

			

			

			$('.'+params[el.id].classPrefix+'cs-'+el.id).mouseover(function(){

				$('#cs-navigation-'+el.id).show();

			});

		

			$('.'+params[el.id].classPrefix+'cs-'+el.id).mouseout(function(){

				$('#cs-navigation-'+el.id).show();

			});	

			

			$('#cs-title-'+el.id).mouseover(function(){

				$('#cs-navigation-'+el.id).show();

			});

		

			$('#cs-title-'+el.id).mouseout(function(){

				$('#cs-navigation-'+el.id).show();

			});	

			

			if(params[el.id].hoverPause){	

				$('.'+params[el.id].classPrefix+'cs-'+el.id).mouseover(function(){

					params[el.id].pause = true;

				});

			

				$('.'+params[el.id].classPrefix+'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){

			if(params[el.id].auto)

			{

				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);

			}

			

		}

		

		// transitions

		$.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;

			}

	

			$('.'+params[el.id].classPrefix+'cs-button-'+el.id).removeClass(params[el.id].classPrefix+'cs-active');

			$('#cs-button-'+el.id+"-"+(imagePos[el.id]+1)).addClass(params[el.id].classPrefix+'cs-active');

			

			if(titles[el.id][imagePos[el.id]]){

				$('#cs-title-'+el.id).css({ 'opacity' : 0 }).animate({ 'opacity' : 0.89 }, params[el.id].titleSpeed);

				

				if(params[el.id].readmoreLink)

				{

					var url = "<div class=\"sot-readmore\"><a href=\""+ links[el.id][imagePos[el.id]] + "\" > ++ " + params[el.id].readmoreText + " </a></div>";

					$('#cs-title-'+el.id).html(titles[el.id][imagePos[el.id]]+url);

				}

				else

				{

					$('#cs-title-'+el.id).html(titles[el.id][imagePos[el.id]]);

				}

				

			} else {

				$('#cs-title-'+el.id).css('opacity',0);

			}				

				

		};

		

		$.appereance = function(el,sid){



			$('.'+params[el.id].classPrefix+'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]++;

			

		};

		

		// navigation

		$.setNavigation = function(el){

			// create prev and next 

			$(el).append("<div id='cs-navigation-"+el.id+"'></div>");

			$('#cs-navigation-'+el.id).show();

			

			$('#cs-navigation-'+el.id).append("<a href='#' id='cs-prev-"+el.id+"' class='"+params[el.id].classPrefix+"cs-prev'><img src='http://gio.in/images/left.png' /></a>");

			$('#cs-navigation-'+el.id).append("<a href='#' id='cs-next-"+el.id+"' class='"+params[el.id].classPrefix+"cs-next'><img src='http://gio.in/images/right.png' /></a>");

			$('#cs-prev-'+el.id).css({

				'position' 	: 'absolute',

				'top'		: '318px',

				'right'		: '66px',

				'z-index' 	: 1001

				

				

			}).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'		: '318px',

				'right'		: '38px',

				'z-index' 	: 1001

				

				

			}).click( function(e){

				e.preventDefault();

				$.transition(el);

				$.transitionCall(el);

			}).mouseover( function(){ $('#cs-navigation-'+el.id).show() });

		

			// image buttons

			if(params[el.id].navigationPos=='bottom' || params[el.id].navigationPos=='right')

			{

				$("<div id='cs-buttons-"+el.id+"' class='"+params[el.id].classPrefix+"cs-buttons'></div>").appendTo($('#coin-slider-'+el.id));

			}else{

				$("<div id='cs-buttons-"+el.id+"' class='"+params[el.id].classPrefix+"cs-buttons'></div>").prependTo($('#coin-slider-'+el.id));

			}

			

			for(k=1;k<images[el.id].length+1;k++){

				$('#cs-buttons-'+el.id).append("<a href='#' class='"+params[el.id].classPrefix+"cs-button-"+el.id+"' id='cs-button-"+el.id+"-"+k+"'>"+k+"</a>");

			}

			

			$.each($('.'+params[el.id].classPrefix+'cs-button-'+el.id), function(i,item){

				$(item).click( function(e){

					$('.'+params[el.id].classPrefix+'cs-button-'+el.id).removeClass(params[el.id].classPrefix+'cs-active');

					$(this).addClass(params[el.id].classPrefix+'cs-active');

					e.preventDefault();

					$.transition(el,i);

					$.transitionCall(el);				

				})

			});	

			

			$('#cs-navigation-'+el.id+' a').mouseout(function(){

				$('#cs-navigation-'+el.id).show();

				params[el.id].pause = false;

			});						



			$("#cs-buttons-"+el.id).css({

				'float'			: 'right',

				'margin-left' 	: -images[el.id].length*15/2-5,

				'position'		: 'absolute',

				'right':'57px'

				

			});

			

				

		}









		// effects

		$.effect = function(el){

			

			effA = ['random','swirl','rain','straight'];

			if(params[el.id].effect == '')

				eff = effA[Math.floor(Math.random()*(effA.length))];

			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();

			}



		}



			

		// shuffle array function

		$.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 effect by milos popovic

		$.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 effect

		$.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 effect

		$.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); }

	);

	



	};

	

	

	// default values

	$.fn.coinslider.defaults = {	

		width: 565, // width of slider panel

		height: 290, // height of slider panel

		spw: 7, // squares per width

		sph: 5, // squares per height

		delay: 3000, // delay between images in ms

		sDelay: 30, // delay beetwen squares in ms

		opacity: 0.87, // opacity of title and navigation

		titleSpeed: 500, // speed of title appereance in ms

		effect: '', // random, swirl, rain, straight

		navigation: true, // prev next and buttons

		navigationPos: 'bottom', // navigation position top, left, bottom, right 

		links: true, // show images as links 

		readmoreLink: true, //show readmore links

		readmoreText: 'readmore', // text read more for language

		hoverPause: true, // pause on hover

		auto: false, // true is auto play

		classPrefix: '' // add prefix for class(style)

	};	

	

})(jQuery);

	
