(function()
{
	var self = $();

	LotusNavigation = function(options)
	{
		var defaults = {};
		self = this;
		
		self.$options = $.extend(defaults, options);
		self.$state = {
			image: '#',
			page: '#',
			hash: '#'
		};
		
		if(location.hash)
		{
			self.$state = self.parseHash(location.hash.substring(1));
		}
	}

	LotusNavigation.prototype.initialize = function(lotus)
	{
		// Lotus handler
		self.$lotus = lotus;
		self.handleHashChange();
	}

	LotusNavigation.prototype.parseHash = function(hash)
	{
	    var _parts = hash.split('/');
		var _state = {
			i: '#',
			p: '#'
		};
		
		for(var i=0; i < _parts.length; i++)
		{
			var key = _parts[i];
			
			if(_state[key])
			{
				_state[key] = _parts[i + 1]
			}
		}
		
		var state = {
			image: _state['i'],
			page: _state['p'],
			hash: '#'
		};
		
		state.hash = self.getLocation(state);
		
		return state;
	}

	LotusNavigation.prototype.handleHashChange = function()
	{
		var state = self.$lotus.getLocalState();
		
		if(state.hash != self.$state.hash)
		{
			self.$state = state;
			self.$lotus.loadState(self.$state);
		}
	}
	
	LotusNavigation.prototype.setSelectedImage = function(image)
	{
		self.$state.image = image.attr('base');
	}
	
	LotusNavigation.prototype.setCurrentPage = function(page)
	{
		self.$state.page = Math.max(1, parseInt(page));
	}
	
	LotusNavigation.prototype.getLocation = function(state)
	{
		var loc = '#';
		
		if(state.page != '#')
		{
			loc += 'p/' + state.page + '/';
		}
		
		if(state.image != '#')
		{
			loc += 'i/' + state.image + '/';
		}
		
		return loc;
	}
	
	LotusNavigation.prototype.updateLocation = function()
	{
		var loc = self.getLocation(self.$state);
		location.href = loc;
		
		//self.handleHashChange();
	}
	
	LotusNavigation.prototype.getState = function()
	{
		return self.$state;
	}
	
})();
