var Driebit = Driebit || {}

Driebit.caroussel = new Class({
	initialize: function(container, settings) {
		this._settings = {
			width: 320,
			slide_amount: 3,
			height: 240,
			expressInstall: '/flash/expressInstall.swf',
			flv_player: '/flash/player.swf',
			replace_with_flash_id: 'replace_with_flash' 
		};
		
		for (key in settings) {
			this._settings[key] = settings[key];
		}
		
		this._container = $(container);
		this._links_slider = this._container.getElement('.videocaroussel_links');
		this._animating = false;
		
		this._settings.replace_with_flash_id = this._container.getElements('.replace_with_flash')[0].get('id');
		this.init_links();
		this.load_video_url(this._first_video_element.get('href'), false);
	},
	
	init_links: function() {
		var caroussel = this;
		var first = true; 
		$(this._container).getElements('.videocaroussel_links a').each(function(element) {
			if (first) {
				caroussel._first_video_element = $(element);
				var link_size = $(element).getSize();
				var container = $(element).getParent('.videocaroussel_link_container');
				if (container) {
					link_size = container.getSize();
				}
				caroussel._slide_width = link_size.x * caroussel._settings.slide_amount;
				first = false;
			}
			var carousselLink = new Driebit.carousselLink(caroussel, element);
		});
		
		if (this._links_slider.getWidth() > this._container.getWidth()) {
			this._container.getElement('.videocaroussel_links_slide_to_left a').addEvent('click', this.slide_to_left.bind(this));
			this._container.getElement('.videocaroussel_links_slide_to_right a').addEvent('click', this.slide_to_right.bind(this));
		}
		else {
			this._container.getElements('.videocaroussel_navigation').setStyle('display', 'none');
		}
	},
	
	load_video_url: function(video_url, autoplay) {
		if (autoplay === null) {
			autoplay = false;
		}
		var flashvars = {
			file: video_url,
			type: 'video',
			autostart: autoplay
		};
		var params = {
			allowfullscreen: true,
			allowscriptaccess: 'always'
		};
		var attributes = {};
		swfobject.embedSWF(this._settings.flv_player, this._settings.replace_with_flash_id, this._settings.width, this._settings.height, "9.0.0", this._settings.expressInstall, flashvars, params, attributes);
	},
	
	slide_to_left: function() {
		if (this._animating) {
			return false;
		}
		var current_left = parseInt(this._links_slider.getStyle('left'));
		var next_left = current_left + this._slide_width;
		if (next_left > 0) {
			next_left = 0;
		}
		if (current_left != next_left) {
			this.startSlide(this._links_slider, next_left);
		}
	},
	
	slide_to_right: function() {
		if (this._animating) {
			return false;
		}
		var current_left = parseInt(this._links_slider.getStyle('left'));
		var next_left = current_left - this._slide_width;
		if (Math.abs(next_left) < this._links_slider.getWidth()) {
			this.startSlide(this._links_slider, next_left);
		}
	},
	
	slide_complete: function() {
		this._animating = false;	
	},
	
	startSlide: function(element, to_left) {
		var slideTween = new Fx.Tween(element, { property: 'left' });
		slideTween.addEvent('complete', this.slide_complete.bind(this));
		this._animating = true;
		slideTween.start(to_left);		
	}
});

Driebit.carousselLink = new Class({
	initialize: function(caroussel, link) {
		this._caroussel = caroussel;
		this._element = $(link);
		this._element.addEvent('click', this.click.bind(this)); 
	},
	
	click: function(event) {
		this._caroussel.load_video_url(this._element.get('href'), true);
		return false;
	}
});

