var Strozzis = {
	currentrequest: '',
	pagecache: '',
	tplsection: 'main',
	currentpos: false,
	currentactive: false,
	pagehidden: false,
	hideDelay: false,
	preloaders: [],
	getCacheContainer: function()
	{
		if (!(c = $(this.pagecache)))
			c = $(document.body.appendChild(new Element('div', {'id': this.pagecache})));
		
		return c;
	},
	getCached: function(page)
	{
		return (this.getCacheContainer().retrieve(page, false));
	},
	getUrl: function()
	{
		var url = location.href.split("#");
		return (url[1] || null);
	},
	getCookie: function(name)
	{
		var value;
		$H(document.cookie.toString().toQueryParams(';')).each(function(pair) {
			if (pair.key.toString().gsub(' ', '') == name) {
				value = pair.value;
				return true;
			}
		});
		return (value || false);
	},
	setCookie: function(name, value)
	{
		var date = new Date();
		date.setTime(date.getTime()+86400000);
		var expires = "; expires="+date.toGMTString();
		document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=" + Page.options.root
	},
	divertLinks: function(container)
	{
		$(container).select('a.internal-link').each(function(el) {
			el.observe('click',  Strozzis.onLinkClick);
		});
	},
	initPage: function()
	{		
		this.divertLinks('container');
		this.divertLinks('colophon');
		
		new PeriodicalExecuter(this.observeBackButton.bind(this), 2);
		
		AudioPlayer.embed("audioplayer", {soundFile: Page.options.templateroot+"audio/strozzis.mp3"});  
		
		Strozzis.startPlayer.bind(this).delay(2);
	},
	startPlayer: function()
	{
		
		if (this.getCookie('stopplayer') == '1')
			this.pausePlayer('audioplayer');
		else
			this.openPlayer('audioplayer');
	},
	handleRequestPageReply: function(response, cache)
	{
		$('container').setStyle({'cursor':'auto'});
		
		if (cache != false)
			this.setCached(this.currentrequest, response);
		
		this.setUrl(this.currentrequest);
		
		this.currentactive = this.currentrequest;
		this.currentrequest = '';
		//$('audiocontrol').insert('<br />load complete, updating bg');
		if (response.bg)
			this.updateBackground(response.bg);
		$('content').update(response.content);
		$('menu').update(response.menu);
		
		//$('audiocontrol').insert('<br />load complete, diverting links');
		this.divertLinks('container');
		this.divertLinks('colophon');
	},
	observeBackButton: function()
	{
		if (this.currentactive && this.getUrl() != this.currentactive)
			this.requestPage(this.getUrl());
	},
	onLinkClick: function(event)
	{
		event.stop();
		var p = this.href.gsub(new RegExp(".+"+Page.options.root), '').gsub(".html", '');
		Strozzis.requestPage(p);
		
	},
	preLoad: function()
	{
		if (page = this.getUrl()) {
			location.href = Page.options.root+page+'.html';
			return;
		}
			
		document.observe('dom:loaded', Strozzis.initPage.bindAsEventListener(Strozzis));
	},
	requestPage: function(page)
	{
		var page = page.sub(/[\w]{2}\//, '');
		
		this.currentrequest = page;
		
		if (cached = this.getCached(page))
			return this.handleRequestPageReply(cached, false);

		$('container').setStyle({'cursor':'wait'});
		
		//$('audiocontrol').insert('<br />loading...');

		Page.get(page, {
			sections: ['bg','content','menu'],
			onComplete: this.handleRequestPageReply.bind(this)
		});
	},
	setCached: function(page, content)
	{
		this.getCacheContainer().store(page, content);
	},
	setUrl: function(url)
	{
		location.href = '#' + url;
	},
	updateBackground: function(newbg)
	{
		try {
			/*this.oldbg = $('background').clone(true);
			$('container').insertBefore(this.oldbg, $('main'));*/
			/*alert((this.container.down('img').src.gsub(new RegExp(".+"+Page.options.root), '')));
			alert(newbg);*/
			if (this.container.down('img') && newbg.match(this.container.down('img').src.gsub(new RegExp(".+"+Page.options.root), ''))) return;
			
			//$('audiocontrol').insert('<br />placing image');
			$('background').update(newbg);
			//$('audiocontrol').insert('<br />cancelling scroll');
			if (this.scroll)
				this.scroll.cancel();
			/*this.oldbg.fade({
				afterFinish: function() {
					this.oldbg.remove();
					this.initScroll();
				}.bind(this)
			});*/
			//(function() { Strozzis.initScroll('background', true) }.delay(3));
			//$('audiocontrol').insert('<br />initialising scroll');
			Strozzis.initScroll('background');
		} catch (e) { }
	},
	initScroll: function(container, noappear)
	{
		this.container = $(container);
		
		var img = this.container.down('img');
		if (img) {
			this.img = img;
			if (!noappear)
				this.img.hide();
				
			//$('audiocontrol').insert('<br />preloading image');
			//$('audiocontrol').insert('<br />source: ' + img.src);
			if (this.preloaders[img.src]) {
				//$('audiocontrol').insert('<br />preloader already exists');
				this.scrollImage();
				return;
			}
			var d = new Date();
			this.preloaders[img.src] = new Image();
			this.preloaders[img.src].src = img.src+"?"+d.getTime();
			this.preloaders[img.src].onload = this.scrollImage.bind(this);
			//alert(this.preloaders[img.src].onload);
			//$('audiocontrol').insert('<br />preloading setup');
		}
	},
	scrollImage: function()
	{
		try {
			//$('audiocontrol').insert('<br />preparing scroll');
			
			if (!this.img) return;
			
			if (!this.img.visible())
				this.img.appear();
		
			
			//$('audiocontrol').insert('<br />resetting image position');
			
			this.img.setStyle({left:0});
			
			//$('audiocontrol').insert('<br />starting scroll');
			
			this.scroll = new Effect.Move(this.img, Object.extend({ 
				x: (-1*(this.img.getWidth()-this.container.getWidth())), 
				mode: 'relative', 
				duration: 70, 
				transition: Effect.Transitions.linear, 
				afterFinish: this.scrollImage.bind(this)
			}, (window.StrozzisImageScrollOptions || {})));
		} catch (e) { }
	},
	pausePlayer: function(player)
	{
		try {
			AudioPlayer.close(player);
			$('pause').hide();
			$('play').show();
			this.setCookie('stopplayer', '1');
		} catch (e) { }
	},
	openPlayer: function(player)
	{
		try {
			AudioPlayer.open(player);
			$('play').hide();
			$('pause').show();
			this.setCookie('stopplayer', '0');
		} catch (e) { }
	}
};

Strozzis.pagecache = 'page-cache-'+Date();

