jQuery(document).ready(function($){
	var numOnPage = 8;
	var numPages = 0;
	var page = 0;
	var links = null;
	var categories = null;
	var selectSubcategory = false;
	
	$.getJSON('/portfolio/categories', null, function(data, textStatus){
		categories = data;
		var $tabs = $('ul.tabs');
		$tabs.empty().append($('<li><a href="/portfolio/">All</a></li>'));
		for (var index in categories){
			$tabs.append($('<li><a href="/portfolio/C' + index.replace(/^.*=/, '') + '">' + index.replace(/=.*$/, '') + '</a></li>'));
		}
		$tabs.find('li').addClass('active').removeClass('active').eq('0').addClass('active');
		$tabs.find('li:last').addClass('last-child');
		$tabs.find('li:first').addClass('first-child');
		
		$('ul.tabs a').click(function(){
			$('ul.tabs li').removeClass('active');
			$(this).parent().addClass('active');
			var category = getCategory(this);
			$.getJSON('/portfolio/thumbs/C' + category, null, function(data, textStatus){
				links = data['links'];
				updateLinks(links, 0);
				updateSubcategories();
			});
			return false;
		});

		var url_category = window.location['pathname'].replace(/^.*\/C/, '');
		url_category = ((url_category == '/portfolio/' || url_category == '/portfolio')?'':url_category);
		if (url_category){
			for (category in categories){
				if (category.replace(/^.*=/, '') == url_category){
					$('ul.tabs a[href$=C' + category.replace(/^.*=/, '') + ']').click();
				}else{
					if (categories[category]){
						for (subcategory in categories[category]){
							if (subcategory.replace(/^.*=/, '') == url_category){
								selectSubcategory = url_category;
								$('ul.tabs a[href$=C' + category.replace(/^.*=/, '') + ']').click();
							}
						}
					}
				}
			}
		}else{
			$('ul.tabs a:eq(0)').click();
		}
	});

	$('body').append($('<div id="loading">loading</div>').bind('ajaxSend', function(){
		$(this).show();
	}).bind('ajaxComplete', function(){
		$(this).fadeOut('fast');
	}));
	
	function getCategory (link) {
		var category = $(link).attr('href').replace(/^.*\/C/, '');
		return ((category == '/portfolio/')?'':category);
	}
	
	function updateSubcategories () {
		var $subcats = $('div.sub_cats');
		var category = $('ul.tabs li.active a').text();
		var category_id = getCategory($('ul.tabs li.active a'));
		$subcats.empty();
		if (category == 'All'){
			return;
		}
		for (index in categories[ucwords(category) + '=' + category_id]){
			$subcats.append($('<a href="/portfolio/C' + index.replace(/^.*=/, '') + '" />').append(index.replace(/=.*$/, '')));
		}
		$subcats.find('a:first').addClass('first-child');

		$subcats.find('a').click(function(){
			$('div.sub_cats a').removeClass('active');
			$(this).addClass('active');
			var category = getCategory(this);

			$.getJSON('/portfolio/thumbs/C' + category, null, function(data, textStatus){
				links = data['links'];
				updateLinks(links, 0);
			});
			return false;
		});
		// debugger;
		if (selectSubcategory !== false){
			$subcats.find('a[href$=C' + selectSubcategory + ']').click();
			selectSubcategory = false;
		}
	}
	
	function updateLinks (links, page) {
		var $thumbs = $('ul.thumbs');
		$thumbs.empty();
		for (var count = 0; (count < numOnPage) && (count + (page * numOnPage) < links.length); count++){
			$thumbs.append($('<li />').append(links[count + (page * numOnPage)]));
		}
		
		numPages = Math.ceil(links.length / numOnPage);
		var $next_prev = $('div.next_prev');
		$next_prev.empty();
		if (numPages > 1){
			if (page != 0){
				$next_prev.append($('<a class="last-child" href="#">&laquo;</a>'));
			}
			for (var count = 0; count < numPages; count++){
				if (count == page){
					$next_prev.append($('<b>' + (count + 1) + '</b>'));
				}else{
					$next_prev.append($('<a href="#">' + (count + 1) + '</a>'));
				}
			}
			if (page + 1 < numPages){
				$next_prev.append($('<a class="first-child" href="#">&raquo;</a>'));
			}
		}
		
		$next_prev.find('a').click(function(){
			if ($(this).text() == "«"){
				page = (page - 1 < 0)?0:(page - 1);
			}else if($(this).text() == "»"){
				page = (page + 1 >= numPages)?(numPages - 1):(page + 1);
			}else{
				page = (parseInt($(this).text()) - 1);
			}
			updateLinks(links, page);
			return false;
		});
	}
	
	function ucwords( str ) {  
	    // Uppercase the first character of every word in a string    
	    //   
	    // version: 810.1317  
	    // discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_ucwords  

	    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)  
	    // +   improved by: _argos  
	    // +   bugfixed by: Onno Marsman  
	    // *     example 1: ucwords('kevin van zonneveld');  
	    // *     returns 1: 'Kevin Van Zonneveld'  
	    // *     example 2: ucwords('HELLO WORLD');  
	    // *     returns 2: 'HELLO WORLD'  
	    return (str+'').replace(/^(.)|\s(.)/g, function ( $1 ) { return $1.toUpperCase ( ); } );  
	}
});