

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	}
});


function clone(obj)
{
    if(obj == null || typeof(obj) != 'object')
        return obj;

    var temp = new obj.constructor();
    for(var key in obj)
        temp[key] = clone(obj[key]);

    return temp;
}



var current_set = 0;
var max_set = projects.length;
var current_slide = -1;
var max_slide;

var slide_time = 3;
var animation_time = 2;


var current_project_id = 0;

var slides;
var width_left = project_width;
var align;
var horizontal_space = 0;
var playlist = new Array();
var padding = "";

var current_counter = 0;
var next_counter = 0;
var current_max_counter;
var next_max_counter;

var imageArray;

var timeout;

var content_html = "";

var current_one = 0;

var pause = false;

function randOrd()
{
	return (Math.round(Math.random())-0.5); 
}

function generate_align()
{
	if(Math.random() > 0.5) return "lAlign";
	else return "rAlign";
}

function start_presentation()
{
	if(pause)
	{
		timeout = setTimeout(function()
		{
			next_slide();
		}
		, 1000 * slide_time);
		return false;
	}
	clearTimeout(timeout);
	projects.sort(randOrd);
	current_project_id = projects[0].id;
	generate_slides();
	next_slide();
}

function generate_slides()
{
	playlist = new Array();
	for(var index in projects)
	{
		var tmp_array = clone(projects[index].img);
		var tmp_object = {};
		var slide = {};
		tmp_array.sort(randOrd);
		slide = clone(tmp_array[0]);
		slides = new Array();
		var finished = false;
		width_left = project_width;
		for (var i in tmp_array)
		{
			tmp_object = clone(tmp_array[i]);
			var skip = Math.random();
			if (width_left < tmp_object.w)
			{
				slides.push(slide);
				slide = clone(tmp_array[i]);
				width_left = project_width - tmp_object.w - horizontal_space;
			}
			else
			{	
				width_left -= (tmp_object.w - horizontal_space); 
				if (skip > 0.25) width_left = 0; //slide = clone(tmp_array[i]);
				else if(i != 0)
				{
					//alert(skip);
					slide.p += "," +  tmp_object.p;
					slide.w += "," +  tmp_object.w;
					slide.h += "," +  tmp_object.h;
				}
			}
			if (i == tmp_array.length - 1) slides.push(slide);
		}
		playlist.push(slides);
	}
	max_slide = playlist[0].length;
}

function next_slide()
{
	if(pause)
	{
		timeout = setTimeout(function()
		{
			next_slide();
		}
		, 1000 * slide_time);
		return false;
	}
	clearTimeout(timeout);
	current_slide++;
	if(current_slide >= max_slide)
	{
		current_slide = 0;
		current_set++;
		if(current_set >= max_set)
		{
			current_set = 0;
			projects.sort(randOrd);
			generate_slides();
		}
		else
		{
			max_slide = playlist[current_set].length;
		}
		
	}
	current_project_id = projects[current_set].id;
	current_counter = 0;
	var data = clone(playlist[current_set][current_slide]);
	data.p = data.p.split(",");
	data.w = data.w.split(",");
	data.h = data.h.split(",");
	
	align = generate_align();
	if(align == "lAlign") padding = "padding-left";
	else padding = "padding-right";

	current_max_counter = data.p.length;
	current_counter = 0;
	
	imageArray = new Array();
	
	for (var i in data.p)
	{
		imageArray[i] = new Image(data.w[i], data.h[i]);
		imageArray[i].onload = imageLoaded;
		imageArray[i].src = data.p[i];
		
	}
}	

function imageLoaded()
{
	current_counter++;
	if (current_counter >= current_max_counter)
	{
		content_html = "";


		for (var i in imageArray)
		{
			content_html += "<img src=\"" + imageArray[i].src + "\" style=\"" + padding + ":" + (i == 0 ? 0 : horizontal_space) + "px; " + "padding-top:" + (project_height-imageArray[i].height) + "px\" class=\"" +  align + "\" width=\"" + imageArray[i].width  + "\" height=\"" + imageArray[i].height  + "\">\n";
		}
		
		$slides[0].css({opacity:0}).html(content_html).animate(
		{ opacity: 1 },
		{
			duration: 1000 * animation_time, 
			specialEasing: 'easeInOutQuad', 
			complete: function() { 
				timeout = setTimeout(function()
				{
					next_slide();
				}
				, 1000 * slide_time);
			}
		});
		
		$slides.reverse();
		
		$slides[0].animate(
		{ opacity: 0 },
		{
			duration: 1000 * animation_time, 
			specialEasing: 'easeInOutQuad', 
			complete: function() { 
				$slides[0].removeClass("loading");
			}
		});
		
	}
}

$(function() {
	window.$content = $('#content');
	window.$slides = new Array($('#one'), $('#two'));
	start_presentation();
});
