/**
 * Scroller implementation for 'glory' page, adds vertical scrolling
 * 
 * @param {Object} container
 * @param {Array} content_blocks
 */
function ScrollerController () {
	this.container = null;
	this.content_blocks = [];
	this.content_block_h = [];
	this.content_block_offset = [];
	this.current_block = -1;
	this.scroller = null;

	this.showContent = function (content_id)
	{
		if (content_id < 0) content_id = 0;
		if (content_id >= this.content_blocks.length) content_id = this.content_blocks.length - 1;
	
		if (content_id != this.current_block)
		{
			this.container.animate({height: this.content_block_h[content_id] + 'px'});
			this.content_blocks[content_id].css({marginLeft: '0px'});
			this.content_blocks[0].stop();
			this.content_blocks[0].animate({marginTop: - this.content_block_offset[content_id] + 'px'});
			
			this.current_block = content_id;			
			
			this.scroller.refresh(this.container, this.content_blocks[this.current_block], $('div', this.content_blocks[this.current_block]));
			this.scroller.pos = 0;
		}
	};

	this.init = function (container, content_blocks) {
		this.content_blocks = content_blocks;
		this.container = $(container);
		
		var sum = 0;
		
		for(var i = 0, j = this.content_blocks.length; i < j; i++)
		{
			this.content_blocks[i] = $(this.content_blocks[i]);
			
			if (this.current_block == -1 && !(/hidden/g.test(this.content_blocks[i].className)))
			{
				this.current_block = i;
			}else{
				this.content_blocks[i].addClass('hidden');
			}
	
			this.content_blocks[i].css({display: 'block'});
			this.content_block_h[i] = this.content_blocks[i].height();
			this.content_block_offset[i] = sum;
			sum = sum + this.content_block_h[i];
			
			if (this.current_block != i)
				this.content_blocks[i].css({display: 'none'});
		}
	
		this.container.css({height: this.content_block_h[this.current_block] + 'px'});
		$(this.content_blocks).each(function () {
			this.css({display: 'block'});
		});
		
		this.scroller = new Scroller();
		this.scroller.refresh(this.container, this.content_blocks[this.current_block], $('div', this.content_blocks[this.current_block]));
	};
};

/* Initialize javascript */
$(function () {
	
	var cs = new ScrollerController();
	cs.init('#scroller .container', jQuery.makeArray($('#scroller .container .content')));
	
	/* Check navigation link visibility */
		function setNavLinkVisibility()
		{
			var pos = cs.scroller.getPos();

			var nav_r = $('#scroller div.nav div.right');
			var nav_l = $('#scroller div.nav div.left');
			
			if (pos <= 5)
				nav_l.css({visibility: 'hidden'});
			else
				nav_l.css({visibility: 'visible'});
				
			if (pos >= cs.scroller.max_pos - 5)
				nav_r.css({visibility: 'hidden'});
			else
				nav_r.css({visibility: 'visible'});
		}
		setNavLinkVisibility();
		
	/* Attaching events for year selector */
		var year_list = $('#scroller .list a');
		
		for(i = 0, j = year_list.length; i < j; i++)
		{
			$(year_list[i]).attr('scroller_index', i);
			$(year_list[i]).click(function () {
				var par = $(this).parent().parent().parent();	//TD element
				par.siblings().each(function () {
					if ($(this).hasClass('active')) { $(this).removeClass('active'); }
				});
				par.addClass('active');
				
				cs.showContent($(this).attr('scroller_index'));
				
				//After content has been changed calculate and set initial values
				
				$('#scroller .content_overlay').css({height: cs.content_blocks[cs.current_block].height() + 'px'});
				
				$('#scroller .nav .left a').html(scrollerPrevious.replace('%d', $(this).html()));
				$('#scroller .nav .right a').html(scrollerNext.replace('%d', $(this).html()));
				
				setNavLinkVisibility();
				
				return false;
			});
		}
	
	/* Initializing */
		$('#scroller .content_overlay').css({height: cs.content_blocks[cs.current_block].height() + 'px'});
	
	/* Mouse follow */
		var track = new DragTracker('#scroller .content_overlay', function (pos) {
			var old_pos = cs.scroller.getPos();
			
			cs.scroller.setPos(old_pos - pos.x);
			
			setNavLinkVisibility();
		}, 20);
		
		$('#scroller .nav .right a').click(function () {
			var next = (Math.floor(cs.scroller.getPos() / 164) + 1) * 164;
			cs.scroller.scrollTo(next);
			setNavLinkVisibility();
			
			return false;
		});
		$('#scroller .nav .left a').click(function () {
			var prev = (Math.ceil(cs.scroller.getPos() / 164) - 1) * 164;
			cs.scroller.scrollTo(prev);
			setNavLinkVisibility();
			
			return false;
		});

});