$(window).addEvents({
	domready: function() {
		SliderNav.init();
		
		var path = window.location.href.replace(host, '');
		if (path.indexOf('#') != 0)
			location.href = '/#/' + path.replace(/\?.*/, '');
		else {
			var tmp = path.split('/');
			if (tmp.length > 1 && $('page-' + tmp[1])) {
				new Fx.Scroll('container', { duration: 0 }).toElement('page-' + tmp[1]);
				
				$('menu').getElements('a').removeClass('on');
				var a = $('menu').getElement('a[href=/' + tmp[1] + ']');
				if (a)
					a.addClass('on');
					
				if (tmp[1] == 'virtual-tour')
					$('flashcontent').setStyle('display', 'block');
				else if (tmp[1] == 'video-gallery')
					$('page-video-gallery').getElement('div.left div').setStyle('display', 'block');
			}
		}
		
		// form login support
		if ($('form-login')) {
			$('form-login').getElements('input').addEvents({
				focus: function() {
					if (this.name == 'email' && this.value == 'email') this.value = '';
					if (this.name == 'passwd' && this.value == 'password') this.value = '';
				},
				blur: function() {
					if (this.name == 'email' && this.value == '') this.value = 'email';
					if (this.name == 'passwd' && this.value == '') this.value = 'password';
				},
				keydown: function(event) {
					if (event.code == 13) {
						$('form-login').send();
						event.stop();
					}
				}
			});
			$('form-login').set('send', {
				onRequest: function() {
					$('form-login').getElement('a.submit').set('text', 'please wait...');
				},
				onComplete: function(t) {
					$('form-login').getElement('a.submit').set('text', 'sign in');
					if (t) alert(t);
					else location.href = '/admin';
				},
				url: '/login'
			});
			$('form-login').getElement('a.submit').addEvent('click', function(event) {
				$('form-login').send();
				event.stop();
			});
			
			$('form-fpass').getElements('input').addEvents({
				keydown: function(event) {
					if (event.code == 13) {
						$('form-fpass').send();
						event.stop();
					}
				}
			});
			$('form-fpass').set('send', {
				onRequest: function() {
					$('form-fpass').getElement('a.submit').set('text', 'please wait...');
				},
				onComplete: function(t) {
					$('form-fpass').getElement('a.submit').set('text', 'send password');
					if (t) alert(t);
					else {
						$('fpass').setStyle('display', 'none');
						$('login').setStyle('display', 'block');
						alert('An e-mail containing your password has been sent to your e-mail address!');
					}
				},
				keydown: function(event) {
					if (event.code == 13)
						$('form-fpass').send();
				},
				url: '/forgotten-password'
			});
			$('form-fpass').getElement('a.submit').addEvent('click', function(event) {
				$('form-fpass').send();
				event.stop();
			});
		}
	}
});

// login form support
// menu support
var SliderNav = {};
SliderNav.curr = null;
SliderNav.fx = null;
SliderNav.fxFunc = function(flag) {
	if (!$('flashcontent')) return;
	if (SliderNav.curr.get('href') == '/virtual-tour')
		$('flashcontent').setStyle('display', 'block');
	else if (SliderNav.curr.get('href') == '/video-gallery')
		$('page-video-gallery').getElement('div.left div').setStyle('display', 'block');
};

SliderNav.init = function() {
	$('container').scrollLeft = 0;
	SliderNav.fx = new Fx.Scroll('container', { duration: 2000, transition: 'expo:out', fps: 100, onComplete: SliderNav.fxFunc, link: 'cancel' });
	
	var as = $(document.body).getElements('a[rel=nav]');
	as.removeEvents('click');
	as.addEvent('click', function(event) {
		var a = $(event.target);
		if (a.tagName != 'A')
			a = a.getParent('a');
		$('menu').getElements('a').removeClass('on');
		SliderNav.curr = a;
		
		var href = a.get('href');
		var page = 'page-' + href.substr(1, href.indexOf('/', 1) != -1 ? href.indexOf('/', 1) - 1 : href.length);
		if (!$(page)) return;
		SliderNav.fx.toElement($(page));
		
		var a_ = $('menu').getElement('a[href=' + a.get('href') + ']');
		if (a_) {
			a_.addClass('on');
			a_.blur();
		}
		
		window.location.href = host + '#' + a.get('href');
		$('flashcontent').setStyle('display', 'none');
		$('page-video-gallery').getElement('div.left div').setStyle('display', 'none');
		
		event.stop();
	});
};

// photo gallery support
var PhotoGalleryNav = {};
PhotoGalleryNav.init = function(ajax) {
	var path = location.href.replace(host + '#/', '');
	var pathItems = path.split('/');
	
	// load right album or nav by ajax
	if (!ajax) {
		if (pathItems.length >= 5) {
			new Request.HTML({
				update: 'page-photo-gallery',
				url: '/' + path,
				onRequest: function() { $('page-photo-gallery').set('html', '<div class=cont-scroll>Loading...</div>'); }
			}).get();
			return;
		}
		else if (pathItems[1] == 'events')
			new Request.HTML({
				update: 'pg-nav',
				url: '/' + path + '?ignore=1',
				onRequest: function() { $('pg-nav').set('html', '<div class=cont-scroll>Loading...</div>'); }
			}).get();
	}
	// name of the album (sm or event)
	if (pathItems.length >= 5) {
		this.album = '';
		for (var i = 1; i <= 4; i++)
			this.album += '/' + pathItems[i];
		this.album = this.album.substr(1);
	}
	else
		this.album = 'stan-mansion';
	
	// rewind album to top on page reload
	$('album').scrollTop = 0;
	
	// create photo scrolling support fx
	this.fx = new Fx.Scroll('album', { duration: 'long', link: 'cancel' });

	// thumbs and number links initialisation
	this.thumbs = $$('#page-photo-gallery div.photo-nav-no p');
	this.linksNo = $$('#page-photo-gallery div.photo-nav-no a');
	// handle number click and hover
	this.linksNo.addEvents({
		click: this.eventClickNo.bind(this),
		mouseenter: this.eventMouseenterNo.bind(this),
		mouseleave: this.eventMouseleaveNo.bind(this)
	});
	
	// init large photo prev next controls
	this.largeControls = $('page-photo-gallery').getElements('img.nav');
	this.largePos = $('album').getPosition();
	this.largeSize = $('album').getSize();
	// the state of the large nav (1 - prev, 2 - next)
	this.largeState = 0;
	// flags to know if any extremity of the photo array has benn reached
	this.largePrevNext = [!this.linksNo[0].hasClass('on'), !this.linksNo[this.linksNo.length - 1].hasClass('on')];
	$('album').addEvents({
		mouseenter: this.eventMouseenterLarge.bind(this),
		mousemove: this.eventMousemoveLarge.bind(this),
		mouseleave: this.eventMouseleaveLarge.bind(this),
		click: this.eventClickLarge.bind(this)
	});
	this.largeControls.addEvents({
		click: PhotoGalleryNav.eventClickLarge.bind(this),
		mouseleave: this.eventMouseleaveLarge.bind(this)
	});
	
	// show right photo on page load
	if ((pathItems[1] == 'stan-mansion' && pathItems.length == 3) || (pathItems[1] == 'events' && pathItems.length == 6)) {
		this.fx.toElement('p' + pathItems[pathItems.length - 1]);
		this.linksNo.removeClass('on');
		this.linksNo[pathItems[pathItems.length - 1] - 1].addClass('on');
	};
	
	// glider no nav
	if ($('page-photo-gallery').getElement('.gl')) {
		$('page-photo-gallery').getElement('.gl').scrollLeft = 0;
		$('page-photo-gallery').getElement('.gl-right').addEvent('click', function(event) {
			var scrollSize = $('page-photo-gallery').getElement('.gl').getSize().x;
			var cont = $('page-photo-gallery').getElement('.gl');
			if (cont.scrollLeft + scrollSize >= cont.getScrollSize().x - scrollSize)
				this.setStyle('display', 'none');
			$('page-photo-gallery').getElement('.gl-left').setStyle('display', 'block');
			new Fx.Scroll(cont).start(cont.scrollLeft + scrollSize, 0);
		});
		$('page-photo-gallery').getElement('.gl-left').addEvent('click', function(event) {
			var scrollSize = $('page-photo-gallery').getElement('.gl').getSize().x;
			var cont = $('page-photo-gallery').getElement('.gl');
			if (cont.scrollLeft - scrollSize <= 0)
				this.setStyle('display', 'none');
			$('page-photo-gallery').getElement('.gl-right').setStyle('display', 'block');
			new Fx.Scroll(cont).start(cont.scrollLeft - scrollSize, 0);
		});
	}
};

// click on number
PhotoGalleryNav.eventClickNo = function(event) {
	var a = $(event.target);
	a.blur();
			
	this.linksNo.removeClass('on');
	a.addClass('on');
	
	this.fx.toElement('p' + a.get('text'));
	
	window.location.href = host + '#/photo-gallery/' + this.album + '/' + a.get('text');
	
	event.stop();
};

// mousenter number
PhotoGalleryNav.eventMouseenterNo = function(event) {
	var a = $(event.target);
	
	var pos = a.getPosition('main-wrapper');
	var size = a.getSize();
	//console.log(pos);
	
	var thumb = this.thumbs[a.get('text') - 1];
	thumb.setStyle('display', 'block');
	
	var sizeCont = thumb.getSize();
	thumb.setStyles({ 
		left: pos.x - Math.round(sizeCont.x / 2 - size.x / 2),
		top: pos.y - sizeCont.y - 2
	});
};

// mouseleave number
PhotoGalleryNav.eventMouseleaveNo = function(event) {
	var a = $(event.target);
	this.thumbs[a.get('text') - 1].setStyle('display', 'none');
};

// mouseenter large photo (nav)
PhotoGalleryNav.eventMouseenterLarge = function(event) {
	this.largePrevNext = [!this.linksNo[0].hasClass('on'), !this.linksNo[this.linksNo.length - 1].hasClass('on')];
	this.largeState = event.page.y - this.largePos.y < this.largeSize.y / 2 ? 1 : 2;
	if (!this.largePrevNext[this.largeState - 1]) {
		$('album').setStyle('cursor', 'auto');
		return;
	}
	
	$('album').setStyle('cursor', 'pointer');
	this.largeControls[this.largeState - 1].setStyle('display', 'block');
};

// mousemove large photo (nav)
PhotoGalleryNav.eventMousemoveLarge = function(event) {
	var state = event.page.y - this.largePos.y < this.largeSize.y / 2 ? 1 : 2;
	if (state != this.largeState) {
		this.largeState = state;
		this.largeControls.setStyle('display', 'none');
		$('album').setStyle('cursor', 'auto');
		
		if (!this.largePrevNext[this.largeState - 1])
			return;
		
		$('album').setStyle('cursor', 'pointer');
		this.largeControls[this.largeState - 1].setStyle('display', 'block');
	}
};

// mouseleave large photo (nav)
PhotoGalleryNav.eventMouseleaveLarge = function(event) {
	if ($(event.relatedTarget) && $(event.relatedTarget).hasClass('nav')) return;
	this.largeControls.setStyle('display', 'none');
};

// click large photo (nav)
PhotoGalleryNav.eventClickLarge = function(event) {
	if (!this.largePrevNext[this.largeState - 1])
		return;
	
	var idx;
	for (var idx = 0; idx < this.linksNo.length; idx++)
		if (this.linksNo[idx].hasClass('on'))
			break;
	idx = this.largeState == 1 ? idx - 1 : idx + 1;
	this.linksNo.removeClass('on');
	this.linksNo[idx].addClass('on');
	
	this.fx.toElement('p' + (idx + 1));
	
	this.largePrevNext = [!this.linksNo[0].hasClass('on'), !this.linksNo[this.linksNo.length - 1].hasClass('on')];
	if (!this.largePrevNext[this.largeState - 1]) {
		this.largeControls.setStyle('display', 'none');
		$('album').setStyle('cursor', 'auto');
	}
		
	window.location.href = host + '#/photo-gallery/' + this.album + '/' + (idx + 1);
};

// virtual tour support
var VirtualTourNav = {};
VirtualTourNav.init = function(layout) {
	$('page-virtual-tour').getElement('div.left').scrollTop = 0;
	
	this.currFl = 2;
	this.currIdx = 3;
	this.layout = layout;
	
	$$('#page-virtual-tour map area').addEvents({
		mouseenter: this.mouseEnter.bind(this),
		mouseleave: this.mouseLeave.bind(this),
		click: this.click.bind(this)
	});
};

VirtualTourNav.mouseEnter = function(event) {
	var t = event.target;
	
	var fl = t.id.replace(/vt-fl|-\d/g, '');
	var idx = t.id.replace(/vt-fl\d-/, '');
	
	$('vt-floor' + fl).set('src', '/images/vt/fl' + fl + '-' + idx + '.gif');
};

VirtualTourNav.mouseLeave = function(event) {
	var t = event.target;
	
	var fl = t.id.replace(/vt-fl|-\d/g, '');
	var idx = t.id.replace(/vt-fl\d-/, '');
	
	$('vt-floor' + fl).set('src', '/images/vt/fl' + (this.currFl == fl ? this.currFl + '-' + this.currIdx : fl + '-main') + '.gif');
};

VirtualTourNav.click = function(event) {
	var t = event.target;
	
	if (this.currFl != null)
		$('vt-floor' + this.currFl).set('src', '/images/vt/fl' + this.currFl + '-main.gif');
	this.currFl = t.id.replace(/vt-fl|-\d/g, '');
	this.currIdx = t.id.replace(/vt-fl\d-/, '');
	$('vt-floor' + this.currFl).set('src', '/images/vt/fl' + this.currFl + '-' + this.currIdx + '.gif');
	
	if (t.hasClass('pano')) {
		$('flashcontent').set('html', 'We have detected that your Flash Player is either missing or not fully up to date.<br>For the best viewing experience please click on the icon below to install<a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Adobe\'s Latest Flash Player</a>.');
		GliderNav.glide($('page-virtual-tour').getElement('div.left'), 'vt-glider-pano');
		this.buildSwfObject(this.currFl, this.currIdx);
	}
	else {
		$('flashcontent').set('html', '');
		GliderNav.glide($('page-virtual-tour').getElement('div.left'), 'vt-glider' + this.currFl + '-' + this.currIdx);
	}
	$('vt-title').set('html', (this.currFl == 1 ? 'First' : 'Second') + ' floor: <strong>' + t.title + '</strong>');
	$('vt-text').set('html', $('vt-text' + this.currFl + '-' + this.currIdx).get('html'));
	new AutoScroller('vt-text', this.layout, 2);
	
	event.stop();
};

VirtualTourNav.buildSwfObject = function(fl, idx) {
	var so = new SWFObject('/flash/panosalado/ModuleLoader.swf?xml=PanoSalado' + fl + '_' + idx + '.xml', 'pano', '455', '300', '9', '#ffffff');
	so.addParam('base', '/flash/panosalado/');
	so.addParam('allowFullScreen', 'true');
	so.addParam('allowScriptAccess', 'sameDomain');
	so.write('flashcontent');
};

// glide support
var GliderNav = {};
GliderNav.glide = function(parent, to) {
	if (!parent.retrieve('fx')) parent.store('fx', new Fx.Scroll(parent, { duration: 'long', link: 'cancel' }));
	
	var fx = parent.retrieve('fx');
	fx.toElement(to);
};

// future events nav support
var PageItemNav = new Class({
							
	initialize: function(page, short, layout) {
		this.page = page;
		this.short = short;
		this.layout = layout;
		
		var path = location.href.replace(host + '#/', '');
		var pathItems = path.split('/');
		if (pathItems[0] == this.page && pathItems.length == 3)
			this.itemFocus(pathItems[2]);
	
		$$('#page-' + this.page + ' a[rel!=nav]').addEvent('click', this.itemClick.bind(this));
	},
	
	itemClick: function(event) {
		var a = $(event.target);
		this.itemFocus(a.get('rel'));
		
		window.location.href = '#' + a.get('href');
		
		event.stop();
	},
	
	itemFocus: function(itemId) {
		if (!$(this.short + '-curr-title' + itemId)) return;
		
		$('page-' + this.page).getElement('div.right-band').getElement('td.title').set('html', $(this.short + '-curr-title' + itemId).get('html'));
		$(this.short + '-text').set('html', $(this.short + '-curr-desc' + itemId).get('html'));
		new AutoScroller(this.short + '-text', this.layout, 2);
		
		if ($(this.short + '-glider-main')) {
			if ($(this.short + '-glider' + itemId))
				GliderNav.glide($('page-' + this.page).getElement('div.left'), this.short + '-glider' + itemId);
			else
				GliderNav.glide($('page-' + this.page).getElement('div.left'), this.short + '-glider-main');
		}
		else {
			$('page-' + this.page).getElements('div.left p').setStyle('display', 'none');
			$(this.short + '-cont' + itemId).setStyle('display', 'block');
		}
	}
	
});

// terms and conditions support
var TermsCondNav = {};
TermsCondNav.init = function() {
	$$('#tc-text a').addEvent('click', this.click.bind(this));
};

TermsCondNav.click = function(event) {
	var t = event.target;
	
	GliderNav.glide($('page-terms-and-conditions').getElement('div.left'), 'tc-glider' + t.rel);
	
	event.stop();
};
