var allProjects;
var pCompProjects;
var webProjects;
var miscProjects;
var menuItems;
var currentProject = null;
	
if(!console)
{
 var console = {
   log: function() {},
   error: function() {},
   warning: function() {}
 };
}


window.addEvent('domready', function() {
	
	allProjects = $('portfolio').getElements('a[class=project]');
	pCompProjects = $('portfolio').getElements('a[rev=pcomp]');
	webProjects = $('portfolio').getElements('a[rev=web]');
	miscProjects = $('portfolio').getElements('a[rev=misc]');
	
	menuItems = $$('.textlink');
  		
	$('embedded-computing-button').addEvent('click', function(e) {
		menuItems.each(function(element, index) {
			element.removeClass('selected');
		})
		$(e.target).addClass('selected');
		showPComp();
	});
	
	$('web-media-button').addEvent('click', function(e) {
		menuItems.each(function(element, index) {
			element.removeClass('selected');
		})
		$(e.target).addClass('selected');
		showWeb();
	});
	
	$('experiments-button').addEvent('click', function(e) {
		menuItems.each(function(element, index) {
			element.removeClass('selected');
		})
		$(e.target).addClass('selected');
		showMisc();
	});
	
	$('all-button').addEvent('click', function(e) {
		menuItems.each(function(element, index) {
			element.removeClass('selected');
		})
		$(e.target).addClass('selected');
		showAll();
	});
	
	var hash = location.hash.replace('#', '');
	if (hash.length > 0) {
		if ( $(hash + '-button') ) {
			$(hash + '-button').fireEvent('click', {target : $(hash + '-button') });
		}
	}
	else {
		$('all-button').fireEvent('click', {target : $('all-button') });
	}
	
	allProjects.addEvent('mouseover', showDescription);
	$$('div[class=description]').each(function(item, index) {
		item.setStyles({opacity: 0, width : 0});
	});
});

var showDescription = function(e) {
	if (e.target.get('tag') == 'img') {
		$$('div[class=description]').each(function(item, index) {
			if (item.getStyle('opacity') == 1 && e.target != currentProject) {
				hideDescription({target : item.getPrevious()})
			}
		});
		currentProject = e.target;
		var description = e.target.getNext();
		var showMorph = new Fx.Morph(description, { duration: 300	});
		var show = function() {
			if (this == currentProject) {
				showMorph.start({	
					'opacity' : 1,
					'width' : this.getStyle('width')
				});
			}
		}
	
		show.delay(750, e.target);
	}
}

var hideDescriptions = function() {
	$$('div[class=description]').each(function(item, index) {
			item.setStyles({width : 0, opacity : 0})
	});
}

var hideDescription = function(e) {
	var description = e.target.getNext();
	var hideMorph = new Fx.Morph(description, { duration: 300 });
	var hide = function() {
		hideMorph.start({	
			'opacity' : 0,	
			'width' : 0		
		});
	}
	
	hide(e.target);	
}
		
var showAll = function() {
  allProjects.each( function(element, index) {
		showIt(element, 180, 180);
	});
};

var hideAll = function() {
	allProjects.each( function(element, index) {
		hideIt(element);
	});
};

var hideAllExcept = function(exception) {
	allProjects.each( function(element, index) {
		if (element.get('rev') != exception) {
			hideIt(element);
		}
	});
};

var showWeb = function() {
	hideAllExcept('web');
	webProjects.each( function(element, index) {
		showIt(element, 250, 250);
	});
};

var showPComp = function() {
	hideAllExcept('pcomp');
	pCompProjects.each( function(element, index) {
		showIt(element, 250, 250);
	});
};

var showMisc = function() {
	hideAllExcept('misc');
	miscProjects.each( function(element, index) {
		showIt(element, 250, 250);
	});
};

var showIt = function(element, height, width) {
	hideDescriptions();
	
	element.getParent().setStyle('display', 'block');
	$(document.body).setStyle('overflow', 'hidden');
	$('status').highlight('#666666');
	
	var showMorph = new Fx.Morph(element.getElement('img'), {duration: 1000, 
															 transition: Fx.Transitions.Back.easeOut,
															 onComplete : function() {
															  		$(document.body).setStyle('overflow', 'visible');
															  } });
			showMorph.start({	
				'height'  : height,
				'width'   : width,
				'display' : 'block',
				'opacity' : 1
			});
};

var hideIt = function(element) {
	hideDescriptions();
	
	var hideMorph = new Fx.Morph(element.getElement('img'), {duration: 350, 
															 transition: Fx.Transitions.Quad.easeOut, 
															 onComplete : function() {
															  		element.getElement('img').setStyle('display', 'none');											  		
															  		element.getParent().setStyle('display', 'none');
															  } 
															});
			hideMorph.start({	
				'height'  : 0,
				'width'   : 0,
				'opacity' : 0
			});
};