jQuery(document).ready(function($){

		var speed = 1000, $wall = $('#portfolio .items'),
		// Masonry settings
		masonryOptions = {
			itemSelector: '.box:not(.invis)',
			animate: true,
			animationOptions: {
            duration: speed,
            queue: false}
        };
		
		$wall.imagesLoaded(function(){
			
			$wall.masonry(masonryOptions);

			// Filter portfolio based on hash
			var hash = document.URL.split('#')[1];
			if(hash == undefined){
				hash = 'all';
			}
			
			// Create array of filters from link text
			var filter = [];
			$('#filtering-nav a').each(function(){
				fhash = $(this).text().replace(" ", "-").toLowerCase();
				if(fhash != 'all'){
					filter.push(fhash);
				}
			});

			if(jQuery.inArray(hash, filter) > '-1'){
				// set masonry options animate to false
				masonryOptions.animate = false;
				// hide boxes that don't match the filter class
				$wall.children().not('.'+hash).toggleClass('invis').hide();
			}

			// run masonry again
			$wall.masonry(masonryOptions);
			$wall.animate({opacity: 1},1000);
			
			$('#filtering-nav li').removeClass('active');
			$('#filtering-nav a[rel^='+hash+']').parent().addClass('active');
		});
		
	// Portfolio filter
	$('#filtering-nav a').click(function(e){
		var hash = $(this).text().replace(" ", "-").toLowerCase();
		var c = '.'+hash;
		if(hash == 'all'){
			// show all hidden boxes
			$wall.children('.invis').toggleClass('invis').fadeIn(speed);
		} else {
			// show hidden boxes
			$wall.children(c+'.invis').toggleClass('invis').fadeIn(speed);
			// hide visible boxes 
			$wall.children().not(c).not('.invis').toggleClass('invis').fadeOut(speed);
		}
		
		$wall.masonry({animate: true});
		
		$('#filtering-nav li').removeClass('active');
		$(this).parent().addClass('active');
		location.hash = hash;
		e.preventDefault();
	});
});

$.fn.imagesLoaded = function(a){
	var 
	b=this.find("img"),
	c=[],
	d=this,
	e=b.length;
	
	if(!b.length){
		a.call(this);
		return this
	}
	b.one("load error",function(){
		--e===0&&(e=b.length,b.one("load error",function(){
			--e===0&&a.call(d)}).each(function(){
				this.src=c.shift()
			})
		)}
	).each(function(){
		c.push(this.src),this.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="
	});
	return this
};
