/**
 * events Scroller
 */

var events = {
	num_features : null,
	feature_width : null,
	timeout : null,
	wait_delay : null,
	animation_delay : null,
	current_feature_index : null,
	handles : {
		$container: null,
		$viewport : null, 
		$feature_header : null, 
		$feature_repository : null, 
		$frame : null, 
		$feature_header : null
	}
};

$(document).ready(function() {
	events.current_feature_index = 0;
	events.num_features = $('#featured_events .features .feature').length;

	events.feature_width = $('#featured_events .features .feature:first').width();
	events.timeout = null;
	events.wait_delay = 8000;
	events.animation_delay = 700;
	
	
	// Initial setup
	events.handles.$container = $('#featured_events');
	events.handles.$container.prepend('<div class="feature_header"></div><div class="feature_viewport"><div class="feature_frame"></div></div>');
	events.handles.$viewport = $('#featured_events .feature_viewport');
	events.handles.$feature_header = $('#featured_events .feature_header');
	events.handles.$feature_repository = $('#featured_events .features');
	
	events.handles.$frame = $('#featured_events .feature_viewport .feature_frame');
	events.handles.$frame.append($('#featured_events .features .feature:eq('+events.current_feature_index+')').clone());
	
	
	
	// feature repository
	events.handles.$feature_repository.hide();
	
	
	// feature controls
	for(var i = 0; i < events.num_features; i++) {
		events.handles.$feature_header.append('<span class="feature_control'+((i==0)?' current':'')+'" data-index="'+i+'"></span>');
	}
	
	if (events.num_features > 1) { 
		// jump to specific feature
		events.handles.$feature_header.children('.feature_control').click(function() {
			events_scroll_left(parseInt($(this).attr('data-index')));
		});
		
		events.timeout = setTimeout('events_scroll_left(false)', events.wait_delay);		
	}
	
	
});


function events_scroll_left(jump_to) {
	if (jump_to !== false) {
		events.current_feature_index = jump_to;
	} else {
		events.current_feature_index++;
	}
	
	if (events.current_feature_index >= events.num_features) {
		events.current_feature_index = 0;
	}
	
	// Select next feature from repository
	events.handles.$frame.append(events.handles.$feature_repository.children('.feature:eq('+events.current_feature_index+')').clone());
	events.handles.$frame.width(2 * events.feature_width);
	
	// Animate scroll
	events.handles.$frame.animate({
		left: -1 * events.feature_width
	}, events.animation_delay, function() {
			// Switch alignment edge
			events.handles.$frame.css({
				'right': 0,
				'left': 'auto'
			});
			
			events.handles.$frame.children('.feature:first').remove();
			events.handles.$frame.css({
				'width': 'auto',
				'left': 0,
				'right': 'auto'
			});
			
			events_update_current();
			
			if (events.timeout) {
				events_resetTimeout();
			}
	});
}		

function events_scroll_right() {
	events.current_feature_index--;
	if (events.current_feature_index < 0) {
		events.current_feature_index = events.num_features - 1;
	}
	
	// Switch alignment edge
	events.handles.$frame.css({
		'right': 0,
		'left': 'auto'
	});
	
	// Add next feature to start
	events.handles.$frame.append(events.handles.$feature_repository.children('.feature:eq('+events.current_feature_index+')').clone());
	events.handles.$frame.width(2 * events.feature_width);
	
	// Animate scroll
	events.handles.$frame.animate({
		'right' : -1 * events.feature_width
	}, events.animation_delay, function() {
			// Switch alignment edge
			events.handles.$frame.css({
				'left' : 0,
				'right' : 'auto'
			});
			
			// Remove previous feature
			events.handles.$frame.children('.feature:last').remove();
			events.handles.$frame.css({
				'width': 'auto'
			});
			
			events_update_current();
			
			if (events.timeout) {
				events_resetTimeout();
			}
	});
}
	
function events_resetTimeout() {
	clearTimeout(events.timeout);
	events.timeout = setTimeout('events_scroll_left(false)', events.wait_delay);
}

function events_update_current() {
	events.handles.$feature_header.children('.feature_control').removeClass('current');
	events.handles.$feature_header.children('.feature_control:eq('+events.current_feature_index+')').addClass('current');
}
