/* URLController 1.0 - 2011.04.28
/*
/* Created by Luca Pillonel
/* copyright www.oxima.ch
--------------------------------------*/

var URLController = new Class({

	options : {
		pageURL : '/works-detail/',
		extention : '.html'
	},
	
	initialize : function(){
		this.currentURL = new URI();
		
		this.restorePage();
		
		this.scanURL.periodical(100, this);
	},
	
	restorePage : function(){
		var page = new URI(window.location).get('fragment').split('/')[0];
		
		//Nothing to restore
		if(!page.length) return false;
		
		//get a .work with <a> containing page
		var workLink = document.body.getElement('.work a[href*="'+page+'"]');
		
		//no element found'
		if(!workLink) return false;
		
		//get Work element
		workDetailController = new WorkDetailController(workLink.getParent('.work'));
	},
	
	getIndex : function(){
		if(typeof workDetailController != 'undefined')
			return workDetailController.targetThumb.getAllPrevious().length;
		
		return 0;
	},
	
	scanURL : function(){
		//check if url has changed
		var newURL = new URI(window.location);
		
		if(newURL.toString() == this.currentURL.toString()) return;
		
		//console.log('something to do', typeof workDetailController);
		
		if(typeof workDetailController != 'undefined') {
			//controller & fragment => go to thumb
			if(newURL.get('fragment') && newURL.get('fragment') != 'index') {
				//check if page is before or after
				var position = this.getNewPagePosition(newURL.get('fragment'));
				
				if(position == 'previous')
					$('work-previous').fireEvent('click');
				else if(position == 'next')
					$('work-next').fireEvent('click');
			}
			
			//controller & no fragment => close controller
			else {
				workDetailController.closeDetail();
			}
		} else {
			//no controller & fragment => open work
			if(typeof workDetailController == 'undefined') {
				this.restorePage();
			}
			//no controller and no fragment => do nothing
		}
	},
	
	getNewPagePosition : function(newPage){
		if(workDetailController.targetThumb.getPrevious('*[class~="page_'+ newPage +'"]'))
			return 'previous';
		else if(workDetailController.targetThumb.getNext('*[class~="page_'+ newPage +'"]'))
			return 'next';
		return false;
	},
	
	setPage : function(fragment){
		//clean fragment
		fragment = fragment.replace(this.options.pageURL, '').replace(this.options.extention, '');
		if(fragment != this.currentURL.get('fragment'))
			this.currentURL.set('fragment', fragment).go();
	},
	
	setImage : function(fragment){
		return;
		
		//get fragment
		var currFragment = this.currentURL.get('fragment');
		//remove all after '/' and append image
		var fragment = currFragment.split('/')[0] + '/' + fragment;
		
		this.currentURL.set('fragment', fragment).go();
	}
});
