pixlFamily = {
	groupsToAutoOpen : [],
	location : null,
	projectsToAutoOpen : [],
	
	addGroupToAutoOpen : function(group) {
		this.groupsToAutoOpen.push(group);
	},
	
	addProjectToAutoOpen : function(project) {
		this.projectsToAutoOpen.push(project);
	},
	
	autoOpenGroups : function() {
		for (var i = 0; i < this.groupsToAutoOpen.length; i++) {
			this.toggleGroup(this.groupsToAutoOpen[i]);
		}
	},
	
	autoOpenProjects : function() {
		for (var i = 0; i < this.projectsToAutoOpen.length; i++) {
			this.toggleProject(this.projectsToAutoOpen[i], "intro", true);
		}
	},
	
	closeAllProjects : function() {
		for (var i = 0; i < this.projects.length; i++) {
			project = $(this.projects[i]);
			
			if (project.css("display") == "block" && this.getProjectState(project)) {
				this.closeProject(project);
			}
		}
	},
	
	closeProject : function(project) {
		this.toggleProject(project, "intro", true);
	},
	
	closeVideoPlayer : function() {
		$.unblockUI({fadeOut : 0});
	},
	
	getClientName : function(clientSlug) {
		return this.clients.find(".client_" + clientSlug).text();
	},
	
	getPlaylist : function(playlistSlug) {
	  $.getJSON("/playlists/show.js", {slug : playlistSlug}, function(data, textStatus) {
	    pixlFamily.setFeedHeader(data.name);
	    playlistProjects = data.projectIds.split(",");
	    
	    for (i = 0; i < playlistProjects.length; i++) {
	      playlistProjects[i] = ".project_id_" + playlistProjects[i];
	    }
	    
	    pixlFamily.projects.slideUp(200);
	    $(playlistProjects.join(",")).slideDown(200);
    });
	},
	
	getProjectState : function(project) {
		return !project.hasClass("contracted");
	},
	
	init : function() {
		this.clients = $("#clients");
		this.filter = $("#filter");
		this.feedHeader = $("#feed_header h2");
		this.projects = $(".project").addClass("contracted");
		this.search = $("#search");
		
		this.setFeedHeader("News + Projects");
	},
	
	listProjects : function(condition) {
		this.projects.filter(condition).slideDown(200);
		this.projects.filter(":not(" + condition + ")").slideUp(200);
	},
	
	openAllProjects : function() {
		for (var i = 0; i < this.projects.length; i++) {
			project = $(this.projects[i]);
			
			if (project.css("display") == "block" && !this.getProjectState(project)) {
				this.toggleProject(project, "intro", true);
			}
		}
	},
	
	resetSearch : function() {
		this.search.attr("value", "search");
	},
	
	scrollToTop : function() {
		$.scrollTo($("html"), 400);
	},
	
	searchProjects : function(query) {
		$.getJSON("/search.js", {query : query}, function(data, textStatus) {
			projects = pixlFamily.projects;
			
			matching = [];
			notMatching = [];
			
			projects.each(function() {
				project = $(this);
				
				match = false;
				
				for (i = 0; i < data.length; i++) {
					if (project.hasClass("project_id_" + data[i])) {
						matching.push(project);
						
						match = true;
					}
				}
				
				if (!match) {
					notMatching.push(project);
				}
			});
			
			for (i = 0; i < matching.length; i++) {
				matching[i].slideDown(200);
			}
			
			for (i = 0; i < notMatching.length; i++) {
				notMatching[i].slideUp(200);
			}
		});
	},
	
	setFeedHeader : function(feedHeader) {
		this.feedHeader.text(feedHeader);
	},
	
	setLocation : function(_location) {
		pixlFamily.location = _location;
		window.location = "/#" + pixlFamily.location;
	},
	
	setSelectedNavLink : function(link) {
	  $("#navigation a.selected").removeClass("selected");
	  
	  link.addClass("selected");
	},
	
	setProjectState : function(project, state) {
		project.removeClass(state ? "contracted" : "expanded");
		project.addClass(state ? "expanded" : "contracted");
	},
	
	toggleGroup : function(group) {
		state = group.hasClass("contracted");
		
		group.removeClass(state ? "contracted" : "expanded");
		group.addClass(state ? "expanded" : "contracted");
		
		group.find(".content").slideToggle(200);
		
		return state;
	},
	
	toggleProject : function(project, mode, ignoreSetLocation) {
		if (mode != "full") {
			this.toggleProjectState(project);
		}
		
		projectLink = project.find("a.title").attr("href");
		
		switch (mode) {
			case "intro" :
				project.find(".container").load(projectLink, function(event) {
					$(this).slideToggle(200);
				});
				
				break;
			case "full" :
				project.find(".more").slideToggle(200);
				
				break;
		}
		
		if (!ignoreSetLocation) {
			if (!this.getProjectState(project)) {
				this.setLocation(this.currentFilter || "/both");
			} else {
				this.trackClick(projectLink + (mode == "full" ? "/more" : ""));
				this.setLocation(projectLink);
			}
		}
	},
	
	trackClick : function(link) {
		if (pageTracker) {
			pageTracker._trackPageview(link);
		}
	},
	
	toggleProjectState : function(project) {
		this.setProjectState(project, !this.getProjectState(project));
	},
	
	updateAction : function() {
		hash = window.location.hash.split("/");
		
		switch (hash[1]) {
			case "both" :
				this.listProjects(".project");
				feedHeader = "News + Projects";
				
				this.setSelectedNavLink($("#filter_both"));
				
				break;
			case "clients" :
				clientSlug = hash.reverse()[0];
				this.listProjects(".client_" + clientSlug);
				feedHeader = this.getClientName(clientSlug);
				
				this.setSelectedNavLink($("#navigation li.client_" + clientSlug + " a"));
				
				break;
			case "news" :
				this.listProjects(".type_news");
				feedHeader = "News";
				
				this.setSelectedNavLink($("#filter_news"));
				
				break;
			case "playlists" :
			  this.getPlaylist(hash[2]);
			  
			  break;
			case "projects" :
				if (hash[2] == undefined) {
					this.listProjects(".type_project");
					
					this.setSelectedNavLink($("#filter_projects"));
				} else {
					this.toggleProject(this.projects.filter(".project_slug_" + hash[2]), "intro");
					
					return;
				}
				
				feedHeader = "Projects";
				
				break;
			case "search" :
				this.searchProjects(hash.slice(2, hash.length).join("/"));
				feedHeader = "Search";
				
				break;
		}
		
		this.currentFilter = window.location.hash;
		this.currentFilter = this.currentFilter.substring(1, this.currentFilter.length);
		pixlFamily.setLocation(this.currentFilter);
		
		this.setFeedHeader(feedHeader);
		this.scrollToTop();
		
		if (hash[1] != "search" && hash[1] != "both") {
			pixlFamily.trackClick(this.currentFilter);
		}
	}
}

$(document).ready(function() {
	pixlFamily.init();
	
	// Setup search
	pixlFamily.search.keyup(function() {
		pixlFamily.setLocation('/search/' + this.value);
		
		pixlFamily.currentFilter = window.location.hash;
		pixlFamily.updateAction();
		//pixlFamily.searchProjects(this.value);
	}).keydown(function(event) {
		if (event.keyCode == 13) {
			event.preventDefault();
		}
	}).focus(function() {
		if(this.value == this.defaultValue) {
			this.value = "";
		}
	}).blur(function() {
		if(this.value == "") {
			pixlFamily.resetSearch();
		}
	});
	
	// Setup navigation
	$("#navigation div.group h2").click(function(event) {
		var group = $(this).parent();
		
		if (pixlFamily.toggleGroup(group)) {
			pixlFamily.trackClick("/" + group.find("h2").text().toLowerCase());
		}
	}).hover(function() {
		$(this).addClass("hover");
	}, function() {
		$(this).removeClass("hover");
	});
	
	// About us
	$("#navigation a.group").click(function(event) {
	  var href = $(this).attr("href");
		window.location.hash = href;
		
		pixlFamily.listProjects(".project_slug_" + href.split("/").reverse()[0]);
		pixlFamily.updateAction();
		
		event.preventDefault();
	});
	
	// Setup filters
	pixlFamily.filter.find("a").click(function(event) {
		event.preventDefault();
		
		href = $(event.currentTarget).attr("href");
		
		if (href == "/clients") {
			return;
		}
		
		pixlFamily.resetSearch();
		pixlFamily.setLocation(href);
		pixlFamily.updateAction();
	});
	
	// Setup projects
	pixlFamily.projects.find("a.title").click(function(event) {
		event.preventDefault();
		
		pixlFamily.toggleProject($(this).parent(), "intro");
	});
	
	// Setup open all/close all
	pixlFamily.feedHeader.parent().find("span").click(function(event) {
		target = $(event.currentTarget);
		
		if (target.text() == "open all") {
			pixlFamily.openAllProjects();
		} else if (target.text() == "close all") {
			pixlFamily.closeAllProjects();
		}
	});
	
	// Setup watch film
	$(".watch_film a").live("click", function(event) {
		event.preventDefault();
		
		$.blockUI({
			message : '<div id="movie_container"></div>',
			fadeIn : 0,
			centerY : 0,
			css : {
				background : "#fff",
				border : 0,
				height : "432px",
				width : "768px",
				top:  ($(window).height() - 432) /2 + 'px', 
                left: ($(window).width() - 768) /2 + 'px'
			},
			overlayCSS : {
				cursor : "default"
			}
		});
		
		$('.blockOverlay').click(pixlFamily.closeVideoPlayer);
		
		swfobject.embedSWF($(this).attr("href"), "movie_container", "768", "432", "9.0.0", "/flash/expressInstall.swf", null, {allowFullscreen : "true"});
		
		pixlFamily.trackClick($(event.target).parents(".project").find("a.title").attr("href") + "/film");
	});
	
	// Setup read more
	pixlFamily.projects.find(".read_more").live("click", function() {
		pixlFamily.toggleProject($(this).parents(".project"), "full");
	});
	
	// Check the current url
	if (window.location.hash != "") {
		pixlFamily.updateAction();
	} else {
		pixlFamily.autoOpenProjects();
	}
	
	// Watch the address
	$.address.change(function(event) {
		newLocation = window.location.hash;
		newLocation = newLocation.substring(1, newLocation.length);
		
		if (pixlFamily.location != null && pixlFamily.location != newLocation) {
			pixlFamily.updateAction();
		}
	});
	
	$("#navigation a").click(function() {
	  pixlFamily.setSelectedNavLink($(this));
	});
	
	pixlFamily.autoOpenGroups();
});
