var url_docroot = '/';
var slideshow_time = 1500;

/* ================================================================================
 *  Tomarq extras
 * ================================================================================ */

$.extend({
	lock: function(count, callback) {		
		var count = count;
		return function(e) {if (--count == 0) callback();};
	},
  generateId: function() {return arguments.callee.prefix + arguments.callee.count++;}
});

$.generateId.prefix = 'jq';
$.generateId.count = 0;

$.fn.extend({
  generateId: function() {
    return this.each(function() {
      if (this.id == '')
        this.id = $.generateId();
    });
  }
});

/* ================================================================================
 *  Slideshow
 * ================================================================================ */
var Slideshow = function() {
	var current_image;
	var total_images;
	var image_path;
	var container;
	
	var current_background;
	
	function init(num_images, path) {
		total_images = num_images;
		image_path = path;
		
		container = $('#background_container');
				
		// Initially, set to a random image
		current_image = Math.floor(Math.random() * total_images);
		
		loadNextImage();
	}
	
	function setTimer() {
		setTimeout(loadNextImage, slideshow_time);
	}
	
	function loadNextImage() {
		current_image = (current_image + 1) % total_images;
		
		var div = $('<div />').addClass('loading');
		var elem = $('<img />');
		
		div.append(elem);
		container.append(div);
		
		elem.bind('load', imageLoaded);
		elem.attr('src', image_path + 'image_' + (current_image + 1) + '.jpg');
	}

	function imageLoaded() {
	    var o_image = $('div:not([class~=loading])', container);	    
	    var n_image = $('div[class~=loading]', container);    
	    
	    o_image.fadeOut(1500, function() {
		      n_image.removeClass('loading');	   
		      o_image.remove();
		      setTimer();
	    });
	}
				
	return {
		init: init
	};
}();

/* ================================================================================
 *  Video content
 * ================================================================================ */
function getVideoContent(video_filename) {
	var vt = '<div class="video_frame"><video controls="controls" width="854" height="480" autoplay>';
	
	// mp4 version needs to go first otherwise iPad won't work...
	vt += '<source type="video/mp4" src="' + url_docroot + 'assets/videos/' + video_filename + '.m4v" />';
	vt += '<source type="video/webm" src="' + url_docroot + 'assets/videos/' + video_filename + '.webm" />';
	vt += '<source type="video/ogg" src="' + url_docroot + 'assets/videos/' + video_filename + '.ogvid" />';
	
	// flash fallback...
	vt += '<object width="854" height="480" type="application/x-shockwave-flash" data="' + url_docroot + 'assets/flowplayer/flowplayer-3.2.5.swf">';
	vt += '<param name="movie" value="' + url_docroot + 'assets/flowplayer/flowplayer-3.2.5.swf" />'; 
	vt += '<param name="allowfullscreen" value="true" />'; 
	vt += '<param name="flashvars" value=\'config={"clip": {"url": "' + url_docroot + 'assets/videos/' + video_filename + '.m4v", "autoPlay":true, "autoBuffering":true}}\' />';      
	vt += '</object>';
	
	vt += '</video></div>';
	return vt;
}

/* ================================================================================
 *  Who Scroller
 * ================================================================================ */
var Scroller = function() {
	var mover;
	var max;
	var left;
	var right;
	
	function init() {
		var scroller = $('#scroller');
		if (scroller.length != 1) return;
		
		mover = $('.mover', scroller);
		
		max = 2139 - 975;
		
		left = $('.left', scroller).bind('click', bumpLeft).bind('mouseover', scrollLeft).bind('mouseout', stop);
		right = $('.right', scroller).bind('click', bumpRight).bind('mouseover', scrollRight).bind('mouseout', stop);
		
		updateArrows();
	}
	
	function updateArrows() {
		var pos = mover.scrollLeft();
		
		var lvis = left.is(':visible');
		var rvis = right.is(':visible');		

		if ($.browser.msie && parseFloat($.browser.version < 9.0)) {
			if (pos > 0) {
				if (!lvis) left.fadeIn('slow');
			} else if (lvis) left.fadeOut('slow');
	
			if (pos < max) {
				if (!rvis) right.fadeIn('slow');
			} else if (rvis) right.fadeOut('slow');
		} else {
			if (pos > 0) {
				if (!lvis) left.show();
			} else if (lvis) left.hide();
	
			if (pos < max) {
				if (!rvis) right.show();
			} else if (rvis) right.hide();			
		}
	}
	
	function bumpLeft() {
		bump(-500);
	}
	
	function bumpRight() {
		bump(500);
	}
	
	function bump(delta) {
		var pos = mover.scrollLeft();
		var dest = pos + delta;
		
		if (dest < 0) dest = 0;
		if (dest > max) dest = max;
		scrollTo(dest);
	}
	
	function scrollLeft() {
		scrollTo(0);
	}
	
	function scrollRight() {
		scrollTo(max);
	}
	
	function stop() {
		mover.stop();
		updateArrows();
	}
	
	function scrollTo(targetPos) {
		var pos = mover.scrollLeft();
		var dist = Math.abs(targetPos - pos);
		var time = (dist / max) * 4000;
		
		mover.stop().animate({
			scrollLeft: targetPos
		}, time, updateArrows);		
	}
	
	return {
		init: init
	};
}();

/* ================================================================================
 *  Initialisation
 * ================================================================================ */

$(function() {
	$('a.video').fancybox({
		'autoDimensions': true,
		'content': getVideoContent('socrates')
	});
	
	Scroller.init();
});

