/**
 * @author Bluntworks
 */
if ($.log != 'function') {
	$.log = function(m){
		if (window && window.console && window.console.log) {
			window.console.log(arguments.length == 1 ? m : arguments);
		}
	};
};

function itrObj(o){
		for (var k in o) {
			$.log('key : '+k+ ' val : '+o[k]);
		}
 }
  
(function($) {
    $.fn.nuaslide = function(options) {
		return this.each(function() {
			$.nuaslide(this, options);
		});
	};
	
	$.nuaslide = function(container,options) {

		var settings = { 
			  'animationtype'	: 'sideslide'
            , 'speed'			: 1000
            , 'type'			: 'sequence'
            , 'timeout'			: 8000
            , 'containerheight'	: 'auto'
            , 'runningclass'	: 'nuaslide'
			, 'activenavclass'  : 'active'
            , 'children'		: null
			, 'navselector' 	: '#navigation'
			, 'trigger' 		: 'auto'
			, 'backgroundcolor' : '#FFFFFF'
		}
		
		if (options) $.extend(settings, options);

		var $self = $(container)
			, $elements
			, index
			, count
			, max
			, $nav
			, navElements = new Array()
			, $tray
			, current
			, last
			, ch = $(container).height()
			, chpx = '-'+String(ch)+'px'
			
		settings.chpx = chpx;

		
		init(); 
		
		function init() { 
		
			if(settings.trigger == 'auto') {
				current = 1; 
				last = 0;
			} else { 
				current = 0; 
				last = 0; 
			}
			//alert(' id : '+$self.parent().attr('id') );
			(settings.children === null) ?  $elements = $(container).children() :  $elements = $(container).children(settings.children); 
			
			
			getNav();
			
			$self.css('overflow','hidden');
			
			(settings.animationtype == 'sideslide') ? sideSlide() : innerFade();  
		}
		
		function getNav() { 
			
			
			switch(typeof settings.navselector) { 
				case 'string' :
					$nav=$self.find(settings.navselector).children();
					if($nav.length == 0)
						$nav=$self.parent().find(settings.navselector).children();				
					break;
				case 'object' :
					$nav = settings.navselector.children();
					break;
			}

			
		}
		
		function sideSlide() { 
			$elements.remove();
			$self.append('<div id="Tray"></div>');
			$tray= $self.find('#Tray');
			count= $elements.length;
			
			$tray.css({ 
					'width' 	: $self.width()*count
				,	'height' 	: settings.containerheight
				,	'position' 	: 'absolute'
				,	'top'		: 0
				,	'left'		: 0
				,	'z-index'	: 1
				,	'background': '#fff'
				,	'float': 'left'
				
			});
			$tray.append($elements);
			$elements.each(function(i,el) {
				$(el).css( { 
						'position' 	: 'absolute'
					,	'top' 		:  0
					,	'left'		: $self.width()*i
				});
			});
			
			(settings.trigger == 'user') ? userTrigger() : autoTrigger();	
		}
		
		function innerFade() { 
			if($elements.length > 1) { 
				$(container).css({ 'position' : 'relative', 'background' : settings.backgroundcolor }).addClass(settings.runningclass);
				
	            for (var i = 0; i < $elements.length; i++) {
	                $($elements[i]).css('z-index', String($elements.length-i)).css('position', 'absolute').hide();
					if(settings.animationtype == 'slide' && i > 0)
						$($elements[i]).css('margin-top', chpx);
	            };
				
				$($elements[0]).show();
				
				(settings.trigger == 'user') ? userTrigger() : autoTrigger();			
			}
		}
		
		function autoTrigger() { 
			setTimeout(function() { showNext(current,last,$elements,settings); }, settings.timeout);
		}
		
		function userTrigger() { 
			
			$nav.each(function(i,el){
				var href = $(el).find('a').attr('href');

				$(el).click(function(ev){ 
					window.location = href;	
				});
				
				$(el).css('cursor','pointer');
				
				$(el).mouseover(function(ev) {
					ev.stopPropagation();
					$nav.removeClass(settings.activenavclass);
					$(this).addClass(settings.activenavclass);
					triggerNext(i);	
				});
			});
		}
		
		function triggerNext(nexti) { 
			last = current; 			
			current = nexti;
			
			showNext(current,last,$elements,settings);
		}

		
		function showNext(current,last,$elements,settings) { 

			switch(settings.animationtype) { 
				case 'fade' : 
					fade(current, last,$elements,settings);
					break;
				case 'slide' : 
					slide(current,last,$elements,settings);
					break; 
				case 'sideslide' :
					moveTo(current*$self.width());
					if(settings.trigger == 'auto') { 
						doNext(current,last,$elements,settings);
					}
					break;
			}
			
			activateNav(current,last);
		}
		
		function doNext(current, last,$elements,settings) { 			
			if(settings.trigger != 'user') { 
				
				if (settings.type == "sequence") {
		            if ((current + 1) < $elements.length) {
		                current = current + 1;
		                last = current - 1;
		            } else {
		                current = 0;
		                last = $elements.length - 1;
		            }
		        } else if (settings.type == "random") {
		            last = current;
		            while (current == last)
		                current = Math.floor(Math.random() * $elements.length);
		        } else
		            alert('nuaSlide-Type must either be \'sequence\', \'random\' or \'random_start\'');					
				
				//$.log(' doNext set Timeout');
				
				setTimeout(function () { showNext(current, last,$elements,settings); },settings.timeout);	
				
			}
		}
		
		/*
		 * Animation functions
		 */
		
		function moveTo(newPos) { 
			$tray.stop().animate({left : -newPos}, settings.speed); 
		}
		
		function fade(current,last,$elements,settings) { 
			$($elements[last]).stop().animate({	'opacity': 0 }, settings.speed);
			$($elements[current]).stop().show().animate({ 'opacity': 1 }, settings.speed);

			doNext(current,last,$elements,settings);	
		}
		
		function slide(current,last,$elements,settings) { 			
			$($elements[last]).stop().animate({ 'margin-top' : settings.chpx},settings.speed); 
			$($elements[current]).stop().show().animate({ 'margin-top' : 0 }, settings.speed);

			doNext(current,last,$elements,settings);		
		}

		function activateNav(current,last) { 
			$($nav[last]).removeClass(settings.activenavclass);
			$($nav[current]).addClass(settings.activenavclass);
		}
	
		function removeFilter(element) {
			if(element.style.removeAttribute){
				element.style.removeAttribute('filter');
			}
		}
	}
})(jQuery);
