// Controller Layer - portfolio contoller

var PortfolioController = new Class({
	initialize: function() {
		window.PortfolioController = this;
		this.registerInterest();
		
		this.controls = $('controls');
		this.controls_cover = $$('controls .cover');
		this.titel = $$('#info_panel .title');
		this.credit = $$('#info_panel .credit');
		this.retouch = $$('#info_panel .retouching');
		
		this.loadedItem = null;

		this.control_setup();
		this.setupKeyboard();
		this.update_info(Model.loadedItem);
		this.check_portraits();
		
		Picker.create_picker_grid(Model.items)
	},
	
	registerInterest: function() {
		Model.addEvent('loadStart', this.hide_controls.bind(this));
		Model.addEvent('loadFinish', this.show_controls.bind(this));
		Model.addEvent('loadFinish', this.loadFinish.bind(this));
		Picker.addEvent('pickerCreated', this.setup_picker.bind(this))
	},
	
	check_portraits: function() {
		if (Model.ports.length > 0)
			$$('#image_chooser .info').toggleClass("hidden");
	},
	
	update_info: function(item) {
		this.titel.setHTML(item.get('title'));
		this.credit.setHTML(item.get('credit'));
		this.retouch.setHTML("Retouching by "+item.get('retouching'));
	},
	
	setup_picker: function() {
		Picker.grid.getElement('ul').getChildren().each(function(li,i){
			li.getElement('a').addEvent('click', PortfolioController.load_item.bindWithEvent(PortfolioController))
		}.bind(this));
	},
	
	control_setup: function() {
		this.controls.getChildren().each(function(li, i) {
			var hit = li.getFirst();
			switch(li.getProperty('class')) {
				case 'l1': hit.addEvent("click", Model.load_prev.bindWithEvent(Model)); break;
				case 'l2': hit.addEvent("click", Panel.toggle_before.bindWithEvent(Panel)); break;
				case 'l3': hit.addEvent("click", Panel.toggle_after.bindWithEvent(Panel)); break;
				case 'l4': hit.addEvent("click", Panel.toggle_before.bindWithEvent(Panel,true)); break;
				case 'l5': hit.addEvent("click", Panel.toggle_hints.bindWithEvent(Panel)); break;
				case 'l6': hit.addEvent("click", Model.load_next.bindWithEvent(Model)); break;
			}
		}.bind(this));
		
		Panel.hints.getChildren()[Panel.hints.getChildren().length-1].addEvent("click", Panel.toggle_hints.bindWithEvent(Panel));
	},
	
	setupKeyboard: function() {
		window.addEvent("keyup", this.handleKeyUp.bindWithEvent(this));
	},
	
	handleKeyUp: function(e) {
		if (!Panel.busy) {
			switch(e.key) {
				case 'left':
				case 'p': Model.load_prev();					break;
				case 'right':
				case 'n': Model.load_next();						break;
				case 'h': Panel.toggle_hints(); 			break;
				case 'b': Panel.toggle_before(); 			break;
				case 'a': Panel.toggle_after();  			break;
				case 's': Panel.toggle_after(e,true); 	break;
				case 'c': PanelController.viewState = (PanelController.viewState + 1) % 3;
					switch(PanelController.viewState) {
						case 0: Panel.toggle_before(); 		break;
						case 1: Panel.toggle_after();  		break;
						case 2: Panel.toggle_after(e,true);break; }
				break;

				default:
					switch(e.code) {
						case 188: Model.load_prev(); 		break;
						case 190: Model.load_next(); 			break;
						case 191: Panel.toggle_hints(); break; }
				break;
			};			
		}
	},
	
	load_item: function(e) {
		e.preventDefault();
		Model.load($(e.target).getParent().getProperty('id').substr(1));
	},
	
	hide_controls: function() {
		this.controls_cover.removeClass('hidden');
	},
	
	show_controls: function() {
		this.controls_cover.addClass('hidden');	
	},
	
	loadFinish: function() {
		if(this.loadedItem)
			$("i"+this.loadedItem).toggleClass('selected');
		this.loadedItem = Model.loadedItemId;
		this.update_info(Model.loadedItem);
		$("i"+this.loadedItem).toggleClass('selected');
		$('content').removeClass("portrait");
		if (Model.loadedItem.get('portrait') == true) $('content').addClass("portrait");
	}
});

window.loadedAssetLength +=1;
