/*
Reveal/Hide
Requires fsp.js

Created 2004-2006 by Joshua Paine <http://letterblock.com/>
Links are appreciated. Telling me when you use this is really appreciated.
Nothing is required: I hereby place the code contained in this file in
the public domain and disclaim any and all proprietary rights to it.

See <http://demo.fairsky.us/javascript/reveal_hide.html>
*/

var gViewRadios = new Array();
var gViewDisableHiddenFields = false;

function globalViewSetup()
{
	var d;
	if(document.getElementsByName && (d = document.getElementsByName('Fsp.View.DisableHiddenFields')) && (d = d[0]) && d.content.toLowerCase()=='true') gViewDisableHiddenFields = true;
}

function clickReveal(e)
{
	var id = revealHideGetId(this);
	var n = document.getElementById(id);
	if(n)
	{
		if(n.style.display!='none')
		{
			this.hideTarget = clickHide;
			this.hideTarget();
		}
		else
		{
			revealRadio(n);
			n.style.display = '';  // changed 'block' to ''
			disableFields(n);
			viewChain(n);
			togglePropagate(n);
		}
	}
	return false;
}

function clickHide(e)
{
	var id = revealHideGetId(this);
	var n = document.getElementById(id);
	if(n)
	{
		n.style.display = 'none';
		disableFields(n);
		viewChain(n);
		togglePropagate(n);
	}
	return false;
}

function viewChain(n)
{
	var c;
	if(n.style.display == 'none' && n.viewChain)
	{
		for(var x=0; x<n.viewChain.length; x++)
		{
			c = n.viewChain[x];
			if(c.style.display != 'none')
			{
				c.style.display = 'none';
				disableFields(c);
				viewChain(c);
				togglePropagate(c);
			}
		}
	}
	else if(n.viewChain)
	{
		for(var x=0; x<n.viewChain.length; x++)
		{
			c = n.viewChain[x];
			if(c.style.display=='none') // changed form of question to test for 'none' instead of !'block'
			{
				c.style.display = ''; // changed 'block' to ''
				disableFields(c);
				revealRadio(c);
				viewChain(c);
				togglePropagate(c);
			}
		}
	}
	viewOppose(n);
}

function viewOppose(n)
{
	var c;
	if(n.style.display == 'none' && n.viewOppose)
	{
		for(var x=0; x<n.viewOppose.length; x++)
		{
			c = n.viewOppose[x];
			if(c.style.display=='none') // changed form of question to test for 'none' instead of !'block'
			{
				c.style.display = ''; // changed 'block' to ''
				disableFields(c);
				viewChain(c);
				togglePropagate(c);
			}
		}
	}
	else if(n.viewOppose)
	{
		for(var x=0; x<n.viewOppose.length; x++)
		{
			c = n.viewOppose[x];
			if(c.style.display!='none')
			{
				c.style.display = 'none';
				disableFields(c);
				revealRadio(c);
				viewChain(c);
				togglePropagate(c);
			}
		}
	}
}

/*
function revealRadio(n)
{
	var radio, x;
	if(n.visRadio)
	{
		radio = gViewRadios[n.visRadio];
		for(x=0; x<radio.length; x++)
		{
			if(n!=radio[x] && radio[x].style.display != 'none')
			{
				radio[x].style.display = 'none';
				disableFields(radio[x]); 
				viewChain(radio[x]);
				togglePropagate(radio[x]);
			}
		}
	}
}
*/

function revealRadio(n)
{
	var i, radio, x;
	if(n.visRadios)
	{
		for(i=0; i<n.visRadios.length; i++)
		{
			radio = gViewRadios[n.visRadios[i]];
			for(x=0; x<radio.length; x++)
			{
				if(n!=radio[x] && radio[x].style.display != 'none')
				{
					radio[x].style.display = 'none';
					disableFields(radio[x]); 
					viewChain(radio[x]);
					togglePropagate(radio[x]);
				}
			}
		}
	}
}

function loadReveal()
{
	var id, winId, n;
	id = revealHideGetId(this);
	winId = revealHideGetId(window.location);;
	if(n = document.getElementById(id))
	{
		if(id==winId || n.className.indexOf('Fsp.ViewDefault')!=-1)
		{
			n.style.display = ''; // changed 'block' to ''
			disableFields(n);
			viewChain(n);
			togglePropagate(n);
		}
		else
		{
			n.style.display = 'none';
			disableFields(n);
			viewChain(n);
			togglePropagate(n);
		}
	}
}

function loadViewChain()
{
	var c, id, t;
	c = this.className;
	id = /ViewChain:(\S+)\b/.exec(c);
	if(id && id[1])
	{
		id = id[1];
		t = document.getElementById(id); 
		if(t) 
		{
			if(!t.viewChain) t.viewChain = new Array();
			t.viewChain[t.viewChain.length] = this;
		}
	}
}

function loadViewOppose()
{
	var c, id, t;
	c = this.className;
	id = /ViewOppose:(\S+)\b/.exec(c);
	if(id && id[1])
	{
		id = id[1];
		t = document.getElementById(id); 
		if(t) 
		{
			if(!t.viewOppose) t.viewOppose = new Array();
			t.viewOppose[t.viewOppose.length] = this;
		}
	}
}

function loadViewRadio()
{
	var c, re, radio, r, str;
	c = this.className;
	re = /ViewRadio:(\S+)\b/g;
	while(radio = re.exec(c))
	{
		radio = radio[1];
		if(!gViewRadios[radio]) gViewRadios[radio] = new Array();
		r = gViewRadios[radio];
		r[r.length] = this;
		this.visRadio = radio;
		if(!this.visRadios) this.visRadios = new Array();
		this.visRadios[this.visRadios.length] = radio;
	}
}

function revealHideGetId(a)
{
	var pound, id;
	pound = a.href.indexOf('#');
	id = a.href.substring(pound+1);
	return id;
}

function viewToggleClick(e)
{
	var n, bs;
	if(!e || !e.currentTarget) n = window.event.srcElement;
	else n = e.currentTarget;
	if(n.name && document.getElementsByName)
	{
		bs = document.getElementsByName(n.name);
		for(x = 0; x<bs.length; x++)
		{
			bs[x].viewToggle();
		}
	}
	else
	{
		n.viewToggle = viewToggle;
		n.viewToggle();
	}
}

function viewToggleLoad()
{
	var id, n;
	id = /ViewToggle:(\S+)\b/.exec(this.className);
	if(id && id[1] && (n = document.getElementById(id[1])))
	{
		this.viewToggleId = id[1];
		this.viewToggleNode = n;
		this.viewToggleReverse = (this.className.indexOf('ViewToggle.Reverse') > -1);
		if(!n.viewToggles) n.viewToggles = new Array();
		n.viewToggles[n.viewToggles.length] = this;
		this.viewToggle = viewToggle;
		this.viewToggle();
	}
}

function viewToggle()
{
	if(this.viewToggleId)
	{
		var reverse = this.viewToggleReverse;
		var n = this.viewToggleNode;
		if(n)
		{
			if((this.checked || reverse) && !(this.checked && reverse))
			{
				revealRadio(n);
				n.style.display = ''; // changed 'block' to ''
				disableFields(n);
				viewChain(n);
			}
			else
			{
				n.style.display = 'none';
				disableFields(n);
				viewChain(n);
			}
		}
	}
}

function togglePropagate(n)
{
	var t, vis, e;
	if(t = n.viewToggles)
	{
		vis = (n.style.display!='none'); // changed to test for !'none' instead of 'block'
		for(var x=0; x<t.length; x++)
		{
			if((vis || t[x].viewToggleReverse) && !(vis && t[x].viewToggleReverse))
				t[x].checked = true;
			else
				t[x].checked = false;
			e = new Object;
			e.currentTarget = t[x];
			viewToggleClick(e);
		}
	}
}

function disableFields(n)
{
	var t, f, x, y, disabled;
	if(gViewDisableHiddenFields)
	{
		if(n.style.display != 'none') disabled = false; // changed test to !'none' from 'block'
		else disabled = true;
		t = new Array('input','select','textarea');
		for(x = 0; x< t.length; x++)
		{
			f = n.getElementsByTagName(t[x]);
			for(y=0; y<f.length; y++)
			{
				f[y].disabled = disabled;
			}
		}
	}
}

document.register('body',null,globalViewSetup,'load',false);
document.register('*','ViewChain',loadViewChain,'load',false);
document.register('*','ViewOppose',loadViewOppose,'load',false);
document.register('*','ViewRadio',loadViewRadio,'load',false);
document.register('a','Reveal',clickReveal,'click',true);
document.register('a','Reveal',loadReveal,'load',false);
document.register('a','Hide',clickHide,'click',true);
document.register('input','ViewToggle',viewToggleClick,'click',false);
document.register('input','ViewToggle',viewToggleLoad,'load',false);