/*

Display a portfolio
Eelko Potters
version 0.5
***************************************************************************************************/

var portfolio = new Portfolio();
var repository = new Repository(portfolio);

var controller = new Controller(portfolio, repository);

var stage = null;


window.onload = function() {

	stage = new Stage(portfolio, navigator);	
	controller.stage = stage;
	controller.windowLoaded();

};


/**************************************************************************************************/


/*
Class Controller

Main application flow
***************************************************************************************************/
function Controller(portfolio, repository) {

	this.siteRoot = "/";

	this.portfolio = portfolio;
	this.repository = repository;
	
	this.stage = null;
	this.navigator = null;
	
	this.firstRun = true;
	
	this.filters = new Object();


	// Step 1
	this.windowLoaded = function() {
	
		this.siteRoot = this.getSiteRoot();
		this.debug("Site root: " + this.siteRoot);
		
		this.debug("Controller 1: Window loaded");
		
		this.stage.prepare();
		
		this.navigator = new Navigator(portfolio);
		
		if (window.editor) {
			this.editor = window.editor;
			this.editor.prepare();
		}
		
		this.repository.loadData();
		
		

	};
	

	// Step 2: the XML data has been loaded
	this.dataLoaded = function() {
	
		this.debug("Controller 2: XML data loaded");
		
		if (!this.firstRun) {
			this.storeFilters();
		}
		
		this.repository.deSerialize();
	};
	
	
	// Step 3: the portfolio is filled with the data from the XML
	this.dataDeserialized = function() {
	
		this.debug("Contoller 3: XML data deserialized");
		
		this.stage.progressbar.display = new ProgressBar("progress-bar-01", 480, 
				"Bezig met laden van afbeeldingen", controller.portfolio.items.length);
		
		
		if (this.firstRun) {
		
			this.stage.loadThumbnails();
			
		} else {
		
			this.stage.reloadThumbnails();
		}
		
	};
	
	
	// Step 4a: all item thumbnails are all loaded
	this.thumbnailsLoaded = function() {
	
		this.debug("Controller 4a: Thumbnails loaded");
	
		this.stage.displayThumbnails();
		
		if (this.navigator) {
			this.navigator.prepare();
		} else {
			debug("No navigator object created");
		}
		
		this.stage.cover.hide();
		this.stage.progressbar.hide();
		
		this.firstRun = false;
		
	};
	
	// Step 4b: all item thumbnails are reloaded
	this.thumbnailsReloaded = function() {
	
		this.debug("Controller 4b: Thumbnails reloaded");
	
		this.stage.displayThumbnails();
		
		if (this.navigator) {
			this.navigator.prepare();
		}
		
		this.loadFilters();
		
	};
	
	this.dataStored = function() {
		this.debug("Controller: Data stored");
		return true;
	};
	
	
	this.storeFilters = function() {
	
		for (var i = 0; i < this.portfolio.index.labels.length; i++) {
		
			var label = this.portfolio.index.labels[i];
			var filterMenu = this.navigator.filter.menus[label];
			
			this.filters[label] = filterMenu.selectedValue;
			
			
			this.debug("Filter stored: " + label + " - " + this.filters[label]);
		}
		
		this.debug("Filters stored");

	};
	
	
	
	this.loadFilters = function() {	
	
		for (var i = 0; i < this.portfolio.index.labels.length; i++) {
		
			var label = this.portfolio.index.labels[i];
			var filterMenu = this.navigator.filter.menus[label];

			filterMenu.isPreview = false;			
			filterMenu.selectedValue = this.filters[label];
			
			
			this.debug("Filter loaded: " + filterMenu.label + " - " + filterMenu.selectedValue);

		}
		
		
		this.navigator.rebuildSelection();
		this.stage.displayThumbnails(true);
		this.navigator.updateMenus();
		
		this.debug("Filters loaded");
		
	};

	

	// Show debug information
	this.debug = function(message) {	
		if (window.console) {			
			// Safari only
			window.console.log(message);		
		} else if (window.dump) {		
			// Firefox only
			window.dump(message);		
		} else {
			return true;
		}
		return true;
	};
	
	
	
	this.getSiteRoot = function() {
		var sep = "/";
		var urlParts = location.href.split(sep);
		var tmp = sep;
		for (var i = 3; i < urlParts.length - 1; i++) {
			tmp += urlParts[i] + sep
		}
		return tmp;
	};
	
	



}
/**************************************************************************************************/


