/*
 * jQuery FullScreen Image Scroller
 * Examples and documentation are nowhere
 * Copyright (c) 2011 Adam Libonatti-Roche
 * Version: 0.1
 * Dual licensed under the MIT and GPL licenses.
 * Requires: jQuery v1.3.2 or later
 */
(function ($) {
	
	/* Delay Function */
	/* Delays any action */	
	var delay = (function(){
	  var timer = 0;
	  return function(callback, ms){
	    clearTimeout (timer);
	    timer = setTimeout(callback, ms);
	  };
	})();
	
	
		
	var ScrollImage = function(element,options) {
		
		/* Base Settings*/
		var settings = {
			"speed"	: "500",
			"images": ""  
		};
		
		var $this = $(element);
		 
		$this.each(function() {
		  	if(options) {
 					$.extend(settings,options);
 				}
 			});

			var vars = {
	            currentSlide: 0,
				nextSlide:'',
	            currentImage: '',
				currentLink: '',
	            totalSlides: 0,
	            randAnim: '',
	            running: false,
	            paused: false,
	            stop: false,
				ops: settings
	        };
	
			$this.data('si:vars',vars)
		 				
		 	$this.append('<ul id="banner_images"></ul>');
 			$this.append('<ul id="banner_links"></ul>');
		
 			$.each(settings.images,function(i,o) {
 				$('#banner_images').append('<li><a href="' + settings.hrefs[i] + '"><img class="item" src="' + o + '" /><img class="caption" src="' + settings.captions[i] + '" /></a></li>');
 				$('#banner_links').append('<li><a href="#" class="block" rel="' + i + '"></a></li>');
 			});

			$('#banner_links li a').each(function() {
				$(this).bind('click',{ele:$(this)},function(e) {
					switchImage(e.data.ele,$this);
					//we need to fire CM tag
					cmCreatePageElementTag(settings.tags[this.rel],'Homepage Rotations');
				});
			})

			var imageChildren = $this.find('#banner_images').children();
			var links	= $this.find('#banner_links').children();
			
			imageChildren.each(function() {
				var chi = $(this);
				chi.css('display','none');
			});
				
			vars.totalSlides = $('#banner_images li').length;
			vars.currentSlide = 0;
			vars.currentImage = $(imageChildren[vars.currentSlide]);
			vars.currentLink	=	$(links[vars.currentSlide]);
			
			// show starting image
			$(imageChildren[vars.currentSlide]).css('display','block');
			$(links[vars.currentSlide]).addClass('active');
			
			vars.running = true;
			timer = setInterval(function(){ runShow($this, imageChildren, settings, false); }, 4000);
			vars.timer = timer;
			
			$this.data('si:vars',vars);
	}
	
	
	var runShow = function(scroller,images,links,settings) {
		
		var vars = scroller.data('si:vars');
		
		 	var $this = $(this);
		 	
		 		var images = images
		 		var current = vars.currentSlide;
		 		var i = 0;
		 		images.each(function() {
		 			if ($(this).is(':visible')) {
		 				current = i;
						vars.currentSlide = i;
		 				return false;
		 			}
		 			i++;
		 		});
				
		 		var next = (current * 1) + 1;
		
		 		if (next >= images.length) {
		 			next = 0;
		 		}
		
				vars.nextSlide = next;
				
				var links	= scroller.find('#banner_links').children();
		 		$(images[current]).fadeOut(1000);
				$(links[current]).removeClass('active');
				
		 		$(images[next]).fadeIn(1000);
				$(links[next]).addClass('active');
		
		
				vars.currentSlide = next;
				vars.nextSlide = (vars.currentSlide * 1) + 1;
				if (vars.nextSlide >= images.length) {
		 			vars.nextSlide = 0;
		 		}
	
				scroller.data('si:vars',vars);				
	}
		
	var switchImage = function(data,element) {
		$element = $(element);
		vars = $element.data('si:vars');
		timer = vars.timer;
		clearInterval(timer);
		var temp = parseFloat(data.attr('rel'));
		vars.nextSlide = temp;
		
		var imageChildren = $element.find('#banner_images').children();
		var links	= $element.find('#banner_links').children();
		$(imageChildren[vars.currentSlide]).fadeOut(100);
		$(links[vars.currentSlide]).removeClass('active');
		$(imageChildren[vars.nextSlide]).fadeIn(100);
		$(links[vars.nextSlide]).addClass('active');
		
		vars.currentSlide = vars.nextSlide;
		vars.nextSlide = (vars.currentSlide * 1) + 1;
		if (vars.nextSlide >= imageChildren.length) {
 			vars.nextSlide = 0;
 		}
	
		$element.data('si:vars',vars);
	}
	

	
	var resizeImages = function() {
		var browW = $(window).width();

        if(browW > 1260) {
            browW = 1260;
        } else if (browW < 1024) {
            browW = 1024;
        }

		$cap = $('#banner_images').find('li:visible').find('img.caption');

		var capwidth = $cap.width();
    	var pos = (browW - capwidth)/2;
        $('img.caption').css('left', pos + 'px');
    	$('img.caption').show();
	}
	
	$(window).resize(function() {
		delay(function(){
			resizeImages();
		    },0);
		
	});
	
	$(window).load(function() {
		delay(function(){
			resizeImages();
		    },50);
		
	});
	
	$.fn.scrollimage = function(options) {
		return this.each(function(key, value){
        	var element = $(this);
            if (element.data('ScrollImage')) return element.data('ScrollImage');
            var scroll = new ScrollImage(this, options);
            element.data('ScrollImage', scroll);
		});
	};
	
	resizeImages();
	
})(jQuery);


