// Model Layer - one model to rule them all™ 

var SiteModel = new Class({
	initialize: function(data_obj, path) {
		window.Model = this;

		this.numImages = data_obj.items.length;
		this.path = path;
		this.ports = [];
		this.lands = [];
		this.items = [];
		this.home_shots = [];
		this.loadedItem = null;
		this.loadedItemId = 0;
		this.loadedItemPos = 0;
		this.virgin = true;
		
		this.process_data(data_obj.items);
	},
	
	process_data: function(data) {
		data.each(function(item, i) {
			var n_item = new Hash({
				before: item.id+"_before.jpg",
				after: item.id+"_after.jpg",
				thumb: item.id+"_thumb.jpg",
				portrait: false,
				home: true,
				retouching: "Steve Payne"
			}).merge(item);
			
			n_item.set('before_url', this.path+n_item.get('before'))
			n_item.set('after_url', this.path+n_item.get('after'))
			n_item.set('thumb_url', this.path+n_item.get('thumb'))
			
			n_item.get('portrait') == true ? (this.ports.push(n_item)) : (this.lands.push(n_item));
		}, this)
		this.items.merge(this.lands.copy().extend(this.ports.copy()));
		this.home_shots = this.lands.filter(function(item){ return item.get("home") != false; });	
	},
	
	get_item: function(id) {
		this.items.each(function(item,i){
			if (item.get('id') == id) { this._matched = item; }
		}, this)
		return this._matched;
	},
	
	get_random: function() 	{ return this.home_shots.getRandom(); },
	get_first: function() 	{ return this.items[0]; },
	get_last: function() 	{ return this.items.getLast(); },
	get_next: function() 	{ return this.items[(this.loadedItemPos +1) % this.items.length]; },
	get_prev: function() 	{ return this.items[(this.loadedItemPos + -1 + this.items.length) % this.items.length]; },
	
	load: function(id) 		{ this.load_images(this.get_item(id)); },
	load_random: function() { this.load_images(this.get_random()); },
	load_first: function() 	{ this.load_images(this.get_first()); },
	load_last: function() 	{ this.load_images(this.get_last()); },
	load_next: function(e) 	{ 
		new Event(e).preventDefault(); 
		this.load_images(this.get_next()); 
	},
	load_prev: function(e) 	{ 
		new Event(e).preventDefault();  
		this.load_images(this.get_prev()); 
	},
	
	load_images: function(item) {
		if (this.loadedItem && (item.get("portrait") == this.loadedItem.get("portrait"))) {
			this.next_is_change = false;
		} else {
			this.next_is_change = true;
		}
		this.fireEvent('loadStart');
		this.loadedItem = item;
		this.loadedItemId = item.get('id');
		this.loadedItemPos = this.items.indexOf(item);
		
		var loaded = new Asset.images(images = [
			item.get('before_url'),
			item.get('after_url')
			], {onComplete: function() { this.fireEvent('loadFinish'); this.virgin = false; }.bind(this)
		});
	}
});

SiteModel.implement(new Events);

window.loadedAssetLength +=1;