var rotatorNavi = {
	/* Konfiguracja */
	
		timeout: 42,
		step: 24,
		lastSpritePosition: 4560,
		isStatic: false,
	
	/* Handlery */
		timer: null,
		
	/* Flagi */
	
		hasStarted: false,
		currentIndex: 0,
		running: false,
		elementsCount: 0,
		prev: -1,
	
	/* Elementy jQuery */
		
		$container: null,
		$element: null,
		$flash: null,
	
	/* Metody */
	
	init: function () {
		if(!rotatorNavi.hasStarted)
			return false;
		
		this.$container = jQuery('#rotatorNavi');
		
		if( ! this.$container.size())
			return false;
		this.$flash = jQuery('#background');
		this.elementsCount = jQuery('li:visible', this.$container).size();
		
		this.setupEvents();
		this.play(0);
	},
	
	play: function (_arg_bgid) {
		
		if(_arg_bgid === undefined) {
			this.prev = -1;
			_arg_bgid = window.rotatorNavi.currentIndex;
		}
		
		
		if(_arg_bgid !== window.rotatorNavi.currentIndex) {
			this.reset();
			this.prev = window.rotatorNavi.currentIndex;
			window.rotatorNavi.currentIndex = _arg_bgid;
		}

		
		this.$element = jQuery(['#rotatorNavi_',_arg_bgid].join(''), window.rotatorNavi.$container);
		this.$element.removeClass('pause');
		
		
		if(this.prev != -1) {
			if(!this.isStatic) {
				this.$flash.externalInterface({method: 'switchBackground', args: [_arg_bgid, this.prev]});
			} else {
				window.switchBackground(_arg_bgid, this.prev);
			}
		}
		
		window.rotatorNavi.timer = setTimeout(window.rotatorNavi.player, window.rotatorNavi.timeout);
	},
	
	player: function () {
		
		
		if(window.rotatorNavi.$element.hasClass('pause')) {
			window.rotatorNavi.$element.removeClass('pause').parent().addClass('current').css('background-position',"50% 0px");
		}
		
		window.rotatorNavi.running = true;
		
		
		var bgPosition = window.rotatorNavi.$element.parent().addClass('current').css('background-position');
		
		if(bgPosition == undefined) {
			bgPosition = [];
			bgPosition[0] = parseInt(window.rotatorNavi.$element.parent().addClass('current').css('background-position-x'));
			bgPosition[1] = parseInt(window.rotatorNavi.$element.parent().addClass('current').css('background-position-y'));
		} else {
			bgPosition = jQuery.map(bgPosition.split(' '), function (value) {
				return parseInt(value);
			});
		}
		
		targetPosition = bgPosition[1] - window.rotatorNavi.step;
		
		window.rotatorNavi.$element.parent().css('background-position', "50% "+(bgPosition[1] - window.rotatorNavi.step)+"px");
		
		if(0 - targetPosition == window.rotatorNavi.lastSpritePosition) {
			window.rotatorNavi.timer = setTimeout(function () { window.rotatorNavi.$element.parent().removeClass('current'); window.rotatorNavi.reset(); window.rotatorNavi.play((window.rotatorNavi.currentIndex + 1 >= window.rotatorNavi.elementsCount) ? 0 : window.rotatorNavi.currentIndex + 1); }, window.rotatorNavi.timeout);
		}
		else
			window.rotatorNavi.timer = setTimeout(function () { window.rotatorNavi.$element.parent().removeClass('current'); window.rotatorNavi.player()}, window.rotatorNavi.timeout);
		
		if(jQuery('#consoleLOG').size())
			jQuery('#consoleLOG').text('background: '+bgPosition[1] + ' nextPos: ' + (bgPosition[1] - window.rotatorNavi.step) + "\r" + jQuery('#consoleLOG').text());
	},
	
	reset: function (index) {	
		window.rotatorNavi.resetTimer();
		window.rotatorNavi.$element.parent().css('background-position', "50% 0px");
	},
	
	resetTimer: function () {
		window.rotatorNavi.timer = clearTimeout(window.rotatorNavi.timer);
	},
	
	pause: function () {
		this.resetTimer();
		this.running = false;
		this.$element.addClass('pause');
	},
	
	setupEvents: function () {
		
		var self = this;
		
		jQuery('span', this.$container).each(function () {
			
			var $this = $(this);
			
			$this.bind('click', function (e) {
				elementIndex = parseInt($(this).attr('rel'));
				
				if(elementIndex == window.rotatorNavi.currentIndex) {
					if(window.rotatorNavi.running)
						window.rotatorNavi.pause();
					else
						window.rotatorNavi.play();
				} else {
					window.rotatorNavi.play(elementIndex);
				}
			});
		});
	}
};

function startRotator(isStatic) {
	
	rotatorNavi.isStatic = isStatic || false;
	
	
	if(!rotatorNavi.hasStarted)
		rotatorNavi.hasStarted = true;
	
	rotatorNavi.init();
}
