var trace = function(toTrace)
{
	$('#status').html(toTrace +'<br />' + $('#status').html());
};
var trim = function (str, charList)
{
	var defaultList = [0x20, 0x09, 0x0A, 0x0D, 0x00, 0x0B];

	if(charList)
	{
		for(var t = 0; t < charList.length; t++)
		{
			charList[t] = isNaN(charList[t]) ? charList[t].charCodeAt(0) : charList[t];
		}
	}
	charList = charList ? charList : defaultList;

	for(var i = 0; i < charList.length; i++)
	{
		if(str.length == 0 || str == NaN || str == '')
		{
			return '';
		}
		if(inArray(str.charCodeAt(0), charList))
		{
			str = str.substr(1);
		}
		if(inArray(str.charCodeAt((str.length-1)), charList))
		{
			str = str.substr(0, str.length-1);
		}
	}
	return str;
};

var inArray = function(myValue, myArray)
{
	for(var x in myArray)
	{
		if (myValue == myArray[x]) return true;
	}
	return false;
};


jQuery.fn.clippable = function()
{
	var uri2Anchor = function()
	{
		var parts = this.href.split('/');
		var hash = parts.pop();
		
		parts.push(parts.pop() +'#' +hash);
		this.href = parts.join('/');
	};

	var getPrevious = function()
	{
		var current = location.hash.substr(1);
		
		var prevDiv = $('img.' +current).parent().parent().prev();
		
		var prev = $(prevDiv).find('img').attr('class');

		if(! prev) prev = $(".thumb:last").find('img').attr('class');

		return prev;
	};
		
	var getNext = function()
	{
		var current = location.hash.substr(1);
		
		var nextDiv = $('img.' +current).parent().parent().next();
		
		var next = $(nextDiv).find('img').attr('class');

		if(! next) next = $(".thumb:first").find('img').attr('class');

		return next;
	};
		
	var showPrevious = function()
	{
		var prev = getPrevious();
		
		location.hash = '#' +prev;
		
		var prevAddress = gallery.getAddress(window.location);
		
		jQuery.get(prevAddress, releaseCallback);
	};
		
	var showNext = function(e)
	{
		var next = getNext();
		
		location.hash = '#' +next;
		
		var nextAddress = gallery.getAddress(window.location);
		
		jQuery.get(nextAddress, releaseCallback);
	};
		
	var positionHandler = function(leftAction, rightAction, e)
	{
		var position = $('#posterFrame img').position();
		var width = $('#posterFrame img').width();

		var active = Math.floor(width/100 *20);
		var clickX = e.pageX -position.left;
		
		var isLeft = clickX < active;
		var isRight = clickX > width - active;
		
		if(isLeft) leftAction(e);
		if(isRight) rightAction(e);
	};
		
	var showHand = function()
	{
		$('#posterFrame').css('cursor', 'pointer');
	};
	var releaseCallback = function(data)
	{
		$('#gallery').css('display', 'none');
		$('#posterFrame').replaceWith(data);
		$('#content').css('opacity', '0');
		$('#posterFrame').css('display', 'block');
		
		var fadeCallback = function()
		{
			var posterRelease = function(e)
			{
				positionHandler(showPrevious, showNext, e);
			};
			$('#posterFrame').bind('click',posterRelease);

			var onMouseMove = function(e)
			{
				$('#posterFrame').css('cursor', 'default');
				positionHandler(showHand, showHand, e);
			};
			$('#posterFrame').bind("mousemove", onMouseMove);
		
		};
		gallery.fadeIn(fadeCallback);
	};

	var onRelease = function(e)
	{		
		var address = gallery.getAddress(this);
		
		jQuery.get(address, releaseCallback);
	};
		
	var myBind = function()
	{
		jQuery(this).bind("click", onRelease);
		jQuery(this).each(uri2Anchor);
	};
	
	return this.each(myBind);
};
gallery = new function() {

	this.onDomReady = function()
	{
		if(isIE) return;
		
		$('#content').css('opacity', '0');
		
		$('body').append('<div id="status" style="position:absolute; top:10px;"></div>');
		$('#status').css('position', 'absolute');
		$('#status').css('top', '0');
		
		if(gallery.isIndex())
		{
			$('#gallery .thumb a').clippable();
			$('#content').append('<div id="posterFrame"></div>');
			$('#posterFrame').css('display', 'none');
			
			var current = location.hash.substr(1);
			
			if(current) $('img.' +current).trigger('click');
		}
	};

	this.fadeIn = function(callback)
	{
		var a = {opacity: 1};
		
		$('#content').animate(a, callback);
	};

	this.getAddress = function(el)
	{
		var pathName = trim(el.pathname, ['/']);
	
		var parts = pathName.split('/');
		var year = parts.pop();

		parts = parts.concat(['ajax', year, el.hash.substr(1)]);
		parts.unshift(trim(el.hostname, ['/']));

		var address = el.protocol +'//' +parts.join('/');
		
		return address;
	};
		
	this.isIndex = function()
	{
		var here = location.protocol +'//' +location.host + location.pathname;
	
		here = here.substr(siteUrl.length +1);
		
		var segments = here.split('/');
		
		var isIndex = segments.length == 1;
		
		return isIndex;
	};
};

$(window).load(gallery.fadeIn); 
$(document).bind('ready', gallery.onDomReady);
