
//alert ('project.js');

var slideshow = function () {
	
	/* private */
	
	var transitionTime = 800;
	var intervalTime = 10000;

	var eventsBound = false;
	var bindEvents = function() {
		
		//execute only once
		if (eventsBound) return;
		eventsBound = true;

		$('.buttonleft').live('click', function() {
			var slideshow = $(this).parent();
			var cb = $(slideshow).data('interactCallback');
			if (cb) cb(slideshow);
			showPrev(slideshow);
		});

		$('.buttonright').live('click', function() {
			var slideshow = $(this).parent();
			var cb = $(slideshow).data('interactCallback');
			if (cb) cb(slideshow);
			showNext(slideshow);
		});
	};
	
	var showNext = function(slideshow) {
		//alert($(slideshow).children('.images').children('img.active').length);
		var active = $(slideshow).children('.images').children('img.active');
		if (active.length == 0) active = $(slideshow).children('.images').children('img:first');

		var next = active.next().length ? active.next() : $(slideshow).children('.images').children('img:first');
		
		next.css( { opacity: 0.0 } )
			.addClass('active')
			.animate( { opacity: 1.0 }, transitionTime, function() {
				active.removeClass('active last-active');
			});
		
		active.css( { left: 0 } )
			.addClass( 'last-active' );
	};

	var showPrev = function(slideshow) {
		var active = $(slideshow).children('.images').children('img.active');
		if (active.length == 0) active = $(slideshow).children('.images').children('img:first');
		
		var next = active.prev().length ? active.prev() : $(slideshow).children('.images').children('img:last');
		
		next.css( { opacity: 0.0 } )
			.addClass('active')
			.animate( { opacity: 1.0 }, transitionTime, function() {
				active.removeClass('active last-active');
			});
		
		active.css( { left: 0 } )
			.addClass( 'last-active' );
	};



	var create = function (element, interactCallback) {
		if (interactCallback)
			$(element).data('interactCallback', interactCallback);

		bindEvents();
		$(element).append('<div class="buttonleft"></div><div class="buttonright"></div>');
	};

	return {

		/* public */

		createSlideshow: function(element, interactCallback) {
			create(element, interactCallback);
		}
	}

}();

var project = function () {
	
	var eventsBound = false;
	var bindEvents = function() {
		
		//execute only once
		if (eventsBound) return;
		eventsBound = true;

		
		$('.toggledescription').live('click', function() {
			toggleInfo($(this).parent());
		});
		


	};
	
	var slideshowInteractionCallback = function(slideshow) {
		var project = $(slideshow).parent();
		hideInfo(project);
	};
	
	var hideInfo = function (project) {
		if ( $(project).data('infoShown') ) {
			$(project).data('infoShown', false);
            $(project).children('.description, .title').fadeOut();
			$(project).children('.toggledescription').children('.hide').slideUp(function() {
				$(project).children('.toggledescription').children('.show').slideDown();
			});

		}
	}

	var  showInfo = function (project) {
		if ( !$(project).data('infoShown') ) {
			$(project).data('infoShown', true);
            $(project).children('.description, .title').fadeIn();
			$(project).children('.toggledescription').children('.show').slideUp(function() {
				$(project).children('.toggledescription').children('.hide').slideDown();
			});

		}
	}

	var toggleInfo = function (project) {
		if ( $(project).data('infoShown') )
			hideInfo(project);
		else
			showInfo(project);

	};


	var create = function (element) {
		bindEvents();
		$(element).data('infoShown', true);
		$(element).append('<div class="toggledescription"><span class="hide">Hide info</span><span class="show">Show info</span></div>');
		slideshow.createSlideshow($(element).children('.slideshow'), slideshowInteractionCallback);

	};
	
	return {
		createProject: function (element) {
			create(element);
		}
	}
}();

