/*
 * cycle.js 1.0
 * By Komunikado (http://komunikado.dk)
 * Copyright (c) 2011
 */
(function( $ ){
$.fn.cycle = function ( options ) {    
	return this.each(function () {
        
		var $wrapper = $('> div', this).css('overflow', 'hidden'),
            $slider = $wrapper.find('> ul'),
            $items = $slider.find('> li'),
            $single = $items.filter(':first'),
			t = null, s = null;
			
		var settings = {
            'singleWidth' : $single.outerWidth(),
            'visible' : Math.ceil($wrapper.innerWidth() / $single.outerWidth()),
			'pages' : Math.ceil($items.length),
			'itemsinside' : 1,
			'bigwidth' : 261,
			'bigheight' : 362,
			'smallwidth' : 120,
            'currentPage' : 1,
			'autoplay' : false,
			'autoRestart' : true,
			'interval' : 5000,
			'restarttime' : 15000,
			'clearAutoplayonClick' : true
		};
		
		if ( options ) { 
			$.extend( settings, options );
		}
		
		console.log(settings);

        // 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
        $items.filter(':first').before($items.slice(- settings['visible']).clone().addClass('cloned'));
        $items.filter(':last').after($items.slice(0, settings['visible']).clone().addClass('cloned'));
        $items = $slider.find('> li'); // reselect
        
        // 3. Set the left position to the first 'real' item and scroll to desired active item
		$wrapper.scrollLeft(settings['singleWidth'] * settings['visible']);
		
        if( settings['startAt'] > 0 ) {
			var goTo = settings['pages'] > settings['startAt'] ? settings['startAt'] :  settings['startAt']-(settings['pages']+1);
			gotoPage(goTo);
		}
		
		// 3.2 set pagination
		settings['hasPagination'] && $(".cycle_pages").text( settings['pages'] );
		
		switch(settings['animType']) {
			case 'singleSlide':
				$('.slidemetoheaven .category').removeClass('active').filter('[data-page='+settings['currentPage']+']').addClass('active');
			break;
			case 'tripleSlide':
				$items.filter(':not(.active)').find("img.b-infront").fadeTo(10, 0);
			break;
			case 'tripleSlideSize':
				settings['smallheight'] = Math.round((settings['smallwidth']/settings['bigwidth'])*settings['bigheight']),
				settings['marginTop'] = Math.round(($single.outerHeight()-settings['smallheight'])/2);
				$items.filter(':not(.active)').find('img').css({
					'opacity':	0.5,
					'width':	settings['smallwidth']+"px",
					'height':	settings['smallheight']+"px",
					'marginTop':settings['marginTop']+"px"
				});
			break;
			default:
			case 'choose':
        
			break;
		}
		
        // 4. paging function
        function gotoPage(page) {
			page = page*1;
            var dir = page < settings['currentPage'] ? -1 : 1,
                n = Math.abs(settings['currentPage'] - page),
                left = settings['singleWidth'] * dir * n;
			
			$wrapper.filter(':not(:animated)').animate({
				scrollLeft : '+=' + left
			}, 500, function () {
				if (page == 0) {
					$wrapper.scrollLeft(settings['singleWidth'] * (settings['visible'] + settings['pages'] - 1 ) );
					page = settings['pages'];
				} else if (page > settings['pages']) {
					$wrapper.scrollLeft(settings['singleWidth'] * settings['visible']);
					// reset back to start position
					page = 1;
				} 

				settings['currentPage'] = page;
				settings['hasPagination'] && $(".cycle_current_page").text( settings['currentPage'] );
				switch(settings['animType']) {
					case 'singleSlide':
						$wasactive = $('.slidemetoheaven .category.wasactive');
						var classtoadd = $wasactive.length > 0 ? 'wasactive' : 'active';
						$('.slidemetoheaven .category').removeClass('active').filter('[data-page='+settings['currentPage']+']').addClass( classtoadd );
						$wasactive.removeClass('wasactive')
					break;
				}
			});
			
			switch(settings['animType']) {
				case 'singleSlide':
					//var theme = $items.filter(":eq("+(page)+")").attr('data-theme');
				break;
				case 'tripleSlide':
					var theme = $items.filter(":eq("+(page+3)+")").attr('data-theme');
					var $notAnimatedItems = $items.filter(':not(:animated)');
					$notAnimatedItems.filter("[data-theme='"+theme+"']").find('img.b-infront').fadeTo(500, 1);
					$notAnimatedItems.filter("[data-theme!='"+theme+"']").find('img.b-infront').fadeTo(500, 0, function() {
						// 4.6. Show relevant Advanced bar
						jQuery(".b-advanced:visible").hide();
						jQuery("#b-advanced_"+theme).show();
					});
				break;
				case 'tripleSlideSize':
					var id = $items.filter(":eq("+(page+3)+")").attr('data-id');
					var $notAnimatedItems = $items.filter(':not(:animated)');
					$notAnimatedItems.filter("[data-id='"+id+"']").find('img').animate({
						'opacity':	1, 
						'width':	settings['bigwidth']+"px",
						'height':	settings['bigheight']+"px",
						'marginTop':0
					});
					$notAnimatedItems.filter("[data-id!='"+id+"']").find('img').animate({
						'opacity':	0.5,
						'width':	settings['smallwidth']+"px",
						'height':	settings['smallheight']+"px",
						'marginTop':settings['marginTop']+"px"
					});
				break;
				default:
				case 'choose':
          
				break;
			}
            return false;
        }
		function nextPage() {
			gotoPage( settings['currentPage'] + 1 );
		}
		function prevPage() {
			gotoPage( settings['currentPage'] - 1 );
		}
		window.gotoPage = gotoPage;
		window.nextPage = nextPage;
		window.prevPage = prevPage;
		
        // 5. Bind to the forward and back buttons
        $('a.left, a.b-arr_mini_left, a.b-arr_left, a.left', this).click(function () {
			if( settings['clearAutoplayonClick'] ) {
				clearInterval(t);
				if( settings['autoRestart'] ) {
					clearTimeout(s);
					s = setTimeout(autoPlay, settings['restarttime']);
				}
			}
            return prevPage();
        });
        $('a.right, a.b-arr_mini_right, a.b-arr_right, a.right', this).click(function () {
			if( settings['clearAutoplayonClick'] ) {
				clearInterval(t);
				if( settings['autoRestart'] ) {
					clearTimeout(s);
					s = setTimeout(autoPlay, settings['restarttime']);
				}
			}
            return nextPage();
        });
		
		// 6. Autoplay
		function autoPlay() {
			t = setInterval(function() {
				if( $(".b-pop_up:visible").length < 1 ) {
					return nextPage();
				}
			}, settings['interval']);
		}
		if( settings['autoplay'] ) {
			autoPlay();
		}
		
    });  
};
})( jQuery );
