var _visible = false;
var _redirect = false;

var showPage = null;
var showPicture = null;

var indexOpen = false;
var indexOpenKey = null;
var playing = false;
var playTimer = null;
var imageData = {};
var loadCounter = {};

var speed = 800;
var _visible = false;
var _redirect = false;
var content = {};

var videoOpen = false;

var e_control = null;
var e_next = null;
var e_prev = null;
var e_play = null;
var e_stop = null;
var e_index = null;
var e_description = null;
var e_video = null;
var e_running = null;
var e_pictureIndex = null;
var e_pictureCount = null;

var _scale = 1;

var scrolling = false;
var scrollStart = 30;
var scrollEnd = 1;
var scrollModifier = 5;
var scrollTime = 0;
var scrollDelta = 2;
var scrollIndex = false;


$(document).ready(function(){
	
	if (_redirect)
		return;
	$('body').disableTextSelect();
	$('#center').hide();
	$('noscript').remove();
	$('body script').remove();
	
	$('.menu a').click(function() { return href(this); });

	e_control = $('#e_control');
	e_next = $('#e_next').click(function() { if (!indexOpen) href(this); return false; });
	e_prev = $('#e_prev').click(function() { if (!indexOpen) href(this); return false; });
		
	e_index = $('#e_index').click(function(){ return href(this); });
	e_description = $('#e_description').click(function(){ return href(this); });
	e_video = $('#e_video').click(function(){ return href(this); });
	e_play = $('#e_play').show().click(function() { play(); });
	e_stop = $('#e_stop').click(function() { stop(); });
	e_running = $('#e_running');
	e_pictureIndex = $('#e_pictureindex');
	e_pictureCount = $('#e_picturecount')
	
	$(jQuery.browser.mozilla ? window : "body").keydown(function(e) {
		switch(e.keyCode)
		{
			case 37: if (content[showPage]._type == 2) e_prev.click(); break;
			case 39: if (content[showPage]._type == 2)e_next.click(); break;
			case 33: case 36: if (content[showPage]._type == 2)$.historyLoad(showPage + '/1'); break;
			case 34: case 35: if (content[showPage]._type == 2)$.historyLoad(showPage + '/' + galleryData[showPage][1].length);  break;
			case 13: if (content[showPage]._type == 2) { if (playing) stop(); else play(); } break;
		}
	});
		
	$.historyInit(show, "/");	
	
	$(window).resize(function(){
		resizeImages();
	});
	resizeImages();
});


function href(e)
{
	if ($(e).hasClass('disable'))
		return;
	var hash = e.href;
	if (hash.indexOf('#') == -1)
	{
		if (hash.substring(7) == 'http;//')
		{
			hash = hash.substring(7);
			hash = 'http://' + hash.replace(root, root + '#');
		}
		else
			hash = hash.replace(root, root + '#');
	}
	hash = hash.replace(/^.*#/, '');
	$.historyLoad(hash);
	return false;
}

//----------------------------------------------------------------------------------------------------


function createPage(page)
{
	if (content[page] || pageData[page] === undefined)
		return;
		
	content[page] = $('<div id="' + page + '" class="rightcolumn" style="display:none;"></div>');
	
	content[page]._content = $('<div class="content2"></div>')
		.appendTo(content[page]);
		
	content[page]._page = $('<div class="page">' + pageData[page] + '</div>')
		.appendTo(content[page]._content);
		
	content[page]._scrollUp = $('<div class="scrollup">UP</div>')
		.mouseover(function() {	scroll(this); })
		.mouseout(function() {endscroll(this); })
		.appendTo(content[page]);
		
	content[page]._scrollDown = $('<div class="scrolldown">DOWN</div>')
		.mouseover(function() {	scroll(this); })
		.mouseout(function() {endscroll(this); })
		.appendTo(content[page]);
	
	content[page]
		.height(Math.round(700 * _scale)).width(Math.round(700 * _scale))
		.appendTo('#main');

	content[page]._visible = false;
	content[page]._type = 1;
}


function createGallery(page)
{
	if (content[page] || galleryData[page] === undefined)
		return;
		
	loadCounter[page] = galleryData[page][1].length;
	
	content[page] = $('<div id="' + page + '" class="rightpicture" style="display:none;"></div>');
	
	if (galleryData[page][0]) {
		
		content[page]._description = $('<div id="description_' + page + '" class="description"></div>')
				.hide()
				.appendTo(content[page]);
		
		content[page]._content = $('<div class="content2"></div>')
			.appendTo(content[page]._description);
			
		content[page]._page = $('<div class="page">' + galleryData[page][0] + '</div>')
			.appendTo(content[page]._content);
			
		content[page]._scrollUp = $('<div class="scrollup">UP</div>')
			.mouseover(function() {	scroll(this); })
			.mouseout(function() {endscroll(this); })
			.appendTo(content[page]._description);
			
		content[page]._scrollDown = $('<div class="scrolldown">DOWN</div>')
			.mouseover(function() {	scroll(this); })
			.mouseout(function() {endscroll(this); })
			.appendTo(content[page]._description);
	}
	else
		content[page]._description = null;
		
	if (galleryData[page][2]) {
		content[page]._video = $('<div id="video_' + page + '" class="description"><iframe id="iframe_' + page + '" src="http://player.vimeo.com/video/' + galleryData[page][2] + '?title=0&amp;byline=0&amp;portrait=0&amp;color=97C6C9" width="' + Math.round(700 * _scale) + '" height="' + Math.round(700 * _scale * 0.5625) + '" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></div>')
				.hide()
				.appendTo(content[page]);
	}
	
	content[page]._index = $('<div id="index_' + page + '" class="index"></div>');
	content[page]._indexContent = $('<div class="content2"></div>').appendTo(content[page]._index);
	content[page]._indexPage = $('<div class="page"></div>').appendTo(content[page]._indexContent);
	content[page]._indexScrollUp = $('<div class="scrollup">UP</div>')
			.mouseover(function() {	scroll(this); })
			.mouseout(function() {endscroll(this); })
			.appendTo(content[page]._index);
			
	content[page]._indexScrollDown = $('<div class="scrolldown">DOWN</div>')
			.mouseover(function() {	scroll(this); })
			.mouseout(function() {endscroll(this); })
			.appendTo(content[page]._index);
	
	content[page]._pic = [];
	for(var index = 0; index < galleryData[page][1].length; index++)
	{
		content[page]._pic[index] = {};
		
		content[page]._pic[index].div = $('<div id="' + page + '_' + (index+1) + '" class="picdiv">')
			.hide()
			.appendTo(content[page])
			.click(function(){ 
				var pos = this.id.lastIndexOf('_');
				var k = this.id.substring(0, pos);
				var i = this.id.substring(pos + 1);
				$.historyLoad(k + "/" + (i < galleryData[k][1].length ? parseInt(i) + 1 : i));
				return false;
			 });
			 
		content[page]._pic[index].img = $(new Image());
		
		content[page]._pic[index].img
			.prependTo(content[page]._pic[index].div)
			.width(Math.round(galleryData[page][1][index][1] * _scale * 0.7))
			.height(Math.round(galleryData[page][1][index][2] * _scale * 0.7))
			.attr('src', root + 'files/gallery/pic_' + galleryData[page][1][index][0] + '.jpg');
			

		$('<img id="thumb_' + page + '_' + (index+1) + '" src="' + root + 'files/gallery/tn_' + galleryData[page][1][index][0] + '.jpg">')
			.appendTo(content[page]._indexPage)
			.click(function() {
				var pos = this.id.lastIndexOf('_');
				$.historyLoad(this.id.substring(6, pos) + "/" + this.id.substring(pos + 1));
				return false;
			});
	}
	
	content[page]._index
		.hide()
		.appendTo(content[page]);
		
	content[page]
		.height(Math.round(700 * _scale))
		.width(Math.round(700 * _scale))
		.appendTo('#main');
	content[page]._visible = false;
	content[page]._type = 2;
}


function show(key)
{
	if (!key)
		key = initPage ? initPage : initAlbum;
		
	var k = key.split('/');
	if (k.length < 2)
		k[1] = null;
		
	if (k[0] == showPage && k[1] == showPicture)
		return;
		
	if (content[k[0]] === undefined)
	{
		createGallery(k[0]);
		createPage(k[0]);
	}
	
	changePage(k[0], k[1]);
}


function changePage(page, picture)
{
	if (!_visible)
	{
		$('#center').fadeIn(speed);
		showPage = null;
	}
	
	if ((showPage != page || picture == "index" || picture == "video" || !picture) && playing)
		stop();
	
	if (picture != "index" && picture != "video")
	{
		if (content[page]._type == 2 && (!parseInt(picture) || picture < 1))
		{
			if (galleryData[page][0])
				picture = null;
			else
				picture = 1;
		}
		if (content[page]._type == 2 && picture > galleryData[page][1].length)
			picture = galleryData[page][1].length;
	}
	
	if (showPage && content[showPage]._type == 2)
	{
		if (showPage == page)
			picHide(showPage, showPicture);
		else
			_hide = [showPage, showPicture];
	}
	else
		_hide = null;
		
	if (content[page]._type == 2)
		picShow(page, picture);

	if (page != showPage)
	{
		if (content[page]._type == 1 && (!showPage || content[showPage]._type == 2))
			e_control.fadeOut(speed);
			
		if (content[page]._type == 2 && (!showPage || content[showPage]._type == 1))
		{
			if (galleryData[page][0])
				e_description.show();
			else
				e_description.hide();
				
			if (galleryData[page][2])
				e_video.show();
			else
				e_video.hide();
				
			e_control.fadeIn(speed);
		}
			
		if (content[page]._type == 2 && showPage && content[showPage]._type == 2)
		{
			if (galleryData[page][0] && !galleryData[showPage][0])
				e_description.fadeIn(speed);
			if (!galleryData[page][0] && galleryData[showPage][0])
				e_description.fadeOut(speed);
				
			if (galleryData[page][2] && !galleryData[showPage][2])
				e_video.fadeIn(speed);
			if (!galleryData[page][2] && galleryData[showPage][2])
				e_video.fadeOut(speed);
		}
		
		initScroller(page, true);
		
		if (showPage)
			content[showPage].fadeOut(speed, function() { picHide(); });
		
		content[page].fadeIn(speed);
	}
	
	$('#works a').removeClass('selected');
	$('#l_' + page).addClass('selected');
	
	if (content[page]._type == 2)
	{
		e_pictureCount.html((galleryData[page][1].length < 10 ? '0' : '') + galleryData[page][1].length);

		var p = isNaN(parseInt(picture)) ? 0 : parseInt(picture);
		
		videoOpen = false;
		if (picture != "index" && picture != "video")
		{
			e_pictureIndex.html((p < 10 ? '0' : '') + p);
			
			var min = galleryData[page][1] ? 0 : 1;
			
			if (galleryData[page][1].length)
				e_play.removeClass('disable');
			else
				e_play.addClass('disable');
			
			if (p <= min)
				e_prev.addClass('disable').attr('href', root + page);
			else
				e_prev.removeClass('disable').attr('href', root + page + '/' + (p - 1));
				
			if (p >= galleryData[page][1].length)
				e_next.addClass('disable').attr('href', root + page + '/' + galleryData[page][1].length);
			else
				e_next.removeClass('disable').attr('href', root + page + '/' + (p + 1));
		}
		else if (picture == "video") 
		{
			e_prev.addClass('disable');
			e_next.addClass('disable');
			e_play.addClass('disable');
			videoOpen = true;
			if (playing)
				stop();
		}
	}
	
	showPage = page;
	showPicture = picture;

	$('.menu a').removeClass('selected');
	$('#l_' + showPage).addClass('selected');
	document.title = 'EMANUELE LAMI PHOTOGRAPHY | ' + $('#l_' + showPage).html();
	
	_visible = true;
}


//----------------------------------------------------------------------------------------------------


function picShow(page, picture)
{
	if (!content[page]._pic.length)
		return;
		
	if (picture == "index")
	{
		openIndex(page);
		return;
	}
		
	if (picture == "video")
		pic = content[page]._video;
	else if (picture || !content[page]._description)
		pic = content[page]._pic[picture - 1].div;
	else
		pic = content[page]._description;
	
	if (showPage != page)
		pic.show();
	else
		pic.fadeIn(speed);

	e_index.attr('href', root + page + '/index');
	e_video.attr('href', root + page + '/video');
	e_description.attr('href', root + page);
}


function picHide(page, picture)
{
	if (page == undefined)
	{
		if (!_hide)
			return;
			
		page = _hide[0];
		picture = _hide[1];
	}

	if (picture == 'index') 
	{
		closeIndex(page);
		return;
	}
	
	if (picture == 'video')
		pic =  content[page]._video;
	else if (picture || !content[page]._description)
		pic = content[page]._pic[picture - 1].div;
	else
		pic = content[page]._description;
	
	if (_hide)
		pic.hide();
	else
		pic.fadeOut(speed);

	_hide = null;
}

//----------------------------------------------------------------------------------------------------



function openIndex(page)
{
	if (playing)
		stop();
		
	content[page]._index.fadeIn(speed);
	
	if (!showPicture)
		e_index.attr('href', root + page);
	else if (showPicture != 'index')
		e_index.attr('href', root + page + '/' + showPicture);
		
	e_prev.addClass('disable');
	e_next.addClass('disable');
	e_play.addClass('disable');
	
	indexOpen = true;
}

function closeIndex(page)
{
	if (_hide)
		content[page]._index.hide();
	else
		content[page]._index.fadeOut(speed);
		
	_hide = null;
		
	e_prev.removeClass('disable');
	e_next.removeClass('disable');
	e_play.removeClass('disable');
	
	indexOpen = false;
}


//----------------------------------------------------------------------------------------------------


function play()
{
	if (indexOpen || videoOpen || playing)
		return;
		
	e_play.hide();
	e_stop.show();
	e_running.show();
	
	if (playTimer)
		clearTimeout(playTimer);
	if (showPicture)
		playTimer = setTimeout('playNext();', 2000);
	else
		playNext();
	playing = true;
}

function playNext()
{
	e_next.click();
	if (showPicture < galleryData[showPage][1].length)
	{
		if (playTimer)
			clearTimeout(playTimer);
		playTimer = setTimeout('playNext();', 5000);
	}
	else
		stop();
}

function stop()
{
	if (!playing)
		return;

	e_play.show();
	e_stop.hide();
	e_running.hide();
	
	if (playTimer)
		clearTimeout(playTimer);
	
	playTimer = null;
	playing = false;
}


//----------------------------------------------------------------------------------------------------


function scroll(elm) {
	
	scrolling = true;
	scrollTime = scrollStart;
	scrollIndex = false;
	
	var p = $(elm).parent();
	if (p.attr('class') == 'description')
		p = p.parent();
		
	if (p.attr('class') == 'index') 
	{
		p = p.parent();
		scrollIndex = true;
	}
	
	doScroll(p.attr('id'), $(elm).hasClass('scrollup'));
}


function doScroll(page, up) {
	
	if (!scrolling)
		return;
		
	var _page, _content;
	
	if (scrollIndex) {
		_page = content[page]._indexPage;
		_content = content[page]._indexContent;
	}
	else
	{
		_page = content[page]._page;
		_content = content[page]._content;
	}
		
	var scrollPos = _content.scrollTop();
	var maxscroll = _page.height() - _content.height();
	
	scrollPos += up ? -scrollDelta : scrollDelta;
	
	if (scrollPos > maxscroll) {
		scrollPos = maxscroll;
		scrolling = false;
	}
	
	if (scrollPos < 0) {
		scrollPos = 0;
		scrolling = false;
	}
	
	_content.scrollTop(scrollPos);

	if (scrolling)
		setTimeout(function() { doScroll(page,up) }, scrollTime);
		
	if (scrollTime > scrollEnd)
		scrollTime -= scrollModifier;
}


function endscroll(elm) {
	scrolling = false;	
}


//----------------------------------------------------------------------------------------------------


function resizeImages()
{
	_scale = Math.min(($(window).width() - 280) / 700, ($(window).height() - 120) / 700);
	if (_scale > 1.5) _scale = 1.5;
	if (_scale < 0.6) _scale = 0.6;
	
	for(var page in content)
		if (content[page]._type == 2)
		{
			for (var index = 0; index < galleryData[page][1].length; index++)
				content[page]._pic[index].img.width(Math.round(galleryData[page][1][index][1] * _scale * 0.7)).height(Math.round(galleryData[page][1][index][2] * _scale * 0.7));
		}
		
	$('#leftcolumn').height(Math.round(700 * _scale));
	$('#center').width(300 + Math.round(700 * _scale));
	$('.index, .description').height(Math.round(700 * _scale)).width(Math.round(700 * _scale));
	$('.rightpicture, .rightcolumn').height(Math.round(700 * _scale)).width(Math.round(700 * _scale));
	
	$('iframe').attr('width', Math.round(700 * _scale)).attr('height', Math.round(700 * _scale * 0.5625));
	
	$('.rightcolumn').each(function() {
		initScroller(this.id, false);
	});
	
	$('.rightpicture').each(function() {
		initScroller(this.id, false);
	});
}


function initScroller(page, reset) 
{
	if (content[page]._type == 1 || content[page]._description) {

		var hidden = (content[page].css('display') == 'none');
		var hidden2 = content[page]._description && (content[page]._description.css('display') == 'none');
		
		
		if (hidden)
			content[page].show();
			
		if (hidden2)
			content[page]._description.show();
	
		content[page]._page.width(content[page]._content.width());
		
		
		if (content[page]._page.height() > content[page]._content.height()) 
		{
			content[page]._page.width(content[page]._content.width() - 55);
			content[page]._scrollUp.show();
			content[page]._scrollDown.show();
		}
		else 
		{
			content[page]._scrollUp.hide();
			content[page]._scrollDown.hide();
		}
		
		if (reset)
			content[page]._content.scrollTop(0);
		
		if (hidden)
			content[page].hide();
			
		if (hidden2)
			content[page]._description.hide();
	
	}
	
	if (content[page]._type == 2) {
		
		var hidden = (content[page].css('display') == 'none');
		var hidden2 = (content[page]._index.css('display') == 'none');
		
		if (hidden)
			content[page].show();
			
		if (hidden2)
			content[page]._index.show();
	
		content[page]._indexPage.width(content[page]._indexContent.width());
		
		if (content[page]._indexPage.height() > content[page]._indexContent.height()) 
		{
			content[page]._indexPage.width(content[page]._indexContent.width() - 55);
			content[page]._indexScrollUp.show();
			content[page]._indexScrollDown.show();
		}
		else 
		{
			content[page]._indexScrollUp.hide();
			content[page]._indexScrollDown.hide();
		}
			
		if (reset)
			content[page]._indexContent.scrollTop(0);
		
		if (hidden)
			content[page].hide();
			
		if (hidden2)
			content[page]._index.hide();
	}
}

//----------------------------------------------------------------------------------------------------


function UnCryptMailto( s )
{
	var n = 0;
	var r = "";
	for( var i = 0; i < s.length; i++)
	{
	    n = s.charCodeAt( i );
	    if( n >= 8364 )
	    {
	        n = 128;
	    }
	    r += String.fromCharCode( n - 1 );
	}
	return r;
}

function linkTo_UnCryptMailto( s )
{
	location.href=UnCryptMailto( s );
}

