if(!window.LB) LB = {};
LB.reveal = function()
{
	var priv = this;
	var effect = 'slide';
	var speed = 'slow';
	var toInit = {
		radioSets: []
	};
	function show(el,callback)
	{
		if(!el.lb_revealing)
		{
			if(!callback) callback = function(){ };
			el.lb_revealing = true;
			switch(effect)
			{
				case 'slide':
					$(el).slideDown(speed,function(){ el.lb_revealing = false; callback(); });
					break;
				case 'fade':
					$(el).fadeIn(speed,function(){ el.lb_revealing = false; callback(); });
					break;
				case 'combo':
					$(el).show(speed,function(){ el.lb_revealing = false; callback(); });
					break;
				case 'none':
					$(el).css('display','');
					el.lb_revealing = false;
					callback();
			}
			consequences(el,el.lb_visible = true);
		}
		return el;
	}
	function hide(el,callback)
	{
		if(!el.lb_hiding)
		{
			if(!callback) callback = function(){ };
			el.lb_hiding = true;
			switch(effect)
			{
				case 'slide':
					$(el).slideUp(speed,function(){ el.lb_hiding = false; callback(); });
					break;
				case 'fade':
					$(el).fadeOut(speed,function(){ el.lb_hiding = false; callback(); });
					break;
				case 'combo':
					$(el).hide(speed,function(){ el.lb_hiding = false; callback(); });
					break;
				case 'none':
					$(el).css('display','none');
					el.lb_hiding = false;
					callback();
			}
			consequences(el,el.lb_visible = false);
		}
		return el;
	}
	function linkClick(e)
	{
		var t = document.getElementById(this.lb_target);
		if(t.lb_visible) hide(t);
		else
		{
			if(this.lb_radioSets)
			{
				var visible;
				var sets = this.lb_radioSets;
				for(var i=0; i<sets.length; i++)
				{
					visible = $(sets[i]).filter(function(){ return document.getElementById(this.lb_target).lb_visible; });
					if(visible.length > 0) visible.each(function(){ hide(document.getElementById(this.lb_target)); });	
				}
			}
			show(t);
		}
		return false;
	}
	function consequences(el,visible)
	{
		
	}
	var pub = {
		initialize: function(){
			var i, target;
			var rs = toInit.radioSets;
			for(i=0; i<rs.length; i++) jQuery(rs[i]).each(function(){ if(!this.lb_radioSets) this.lb_radioSets = []; this.lb_radioSets[this.lb_radioSets.length] = rs[i]; });
			var hash = location.hash.substr(1);
			jQuery('a[@rel=reveal], a[@rel=hide]').each(function(){
				if(this.lb_target = this.href.split('#')[1])
				{
					var target = document.getElementById(this.lb_target);
					if(this.rel.toLowerCase()=='reveal' && !/(^|\W)viewdefault(\W|$)/i.test(target.className))
					{
						target.style.display = 'none';
						target.lb_visible = false;
					}
					else target.lb_visible = true;
				}
			}).click(linkClick);
			
			if(target = document.getElementById(hash)) show(target);
		},
		radioSet: function(q){
			toInit.radioSets[toInit.radioSets.length] = q;
		},
		effect: function(f){
			switch(f){
				case 'slide': case 'fade': case 'none': case 'combo':
					effect = f;
					return pub;
			}
			alert('LetterBlock Reveal effect set to invalid value \''+f+'\'.');
			return pub;
		},
		speed: function(s){
			speed = s;
			return pub;
		}
	};
	return pub;
}();

jQuery(LB.reveal.initialize);
