/* */
ddList = document.getElementsByTagName("DD");
for (i=0;i<ddList.length;i++) {
	ddList[i].style.display = "none";
}

function documentRegister(tag,effect,func,ev,exclusive)
{
	document.toRegister[document.toRegister.length] = {
		tag:tag,
		effect:effect,
		func:func,
		event:ev,
		exclusive:exclusive
	};
}

function doRegister(n)
{
	if(!n) n = document;
	var t, y;
	var r = document.toRegister;
	for(var x=0; x<r.length; x++)
	{
		t = n.getElementsByTagName(r[x].tag);
		if(r[x].tag=='*' && t.length==0) t = document.all;
		for(y=0; y<t.length; y++)
		{
			if(!r[x].effect || hasClassName(t[y],"Fsp."+r[x].effect) || hasClassName(t[y],r[x].effect) || t[y].className.indexOf("Fsp."+r[x].effect+":") > -1 || t[y].className.indexOf("Fsp."+r[x].effect+".") > -1)
			{
				if(r[x].event == 'load')
				{
					t[y].load = r[x].func;
					t[y].load({ currentTarget:t[y] });
				}
				else
				{
					addEventHandler(t[y],r[x].event,r[x].func,r[x].exclusive);
				}
			}
		}
	}
}

function addEventHandler(el,ev,func,exclusive)
{
	if(exclusive)
	{
		if(eval("el.on"+ev+" = func;")) return true;
		else return false;
	}
	else
	{
		if(el.addEventListener)
		{
			el.addEventListener(ev,func,false);
			return true;
		}
		else if(el.attachEvent)
		{
			return el.attachEvent("on"+ev, func);
		}
		else return false;
	}
}

function dumpProps(obj)
{
	var str, p, i, val;
	i = 0;
	str='';
	for(p in obj)
	{
		val = ''+eval('obj.'+p);
		val = val.substring(0,300);
		str += p+' = '+val+'\n';
		if(i++==15){ alert(str); str=''; i=0; }
	}
	alert(str);
}

function fspImageToolbarRemoval()
{
	this.setAttribute('galleryimg','false');
}

function addClassName(el,newClass)
{
	var ary = el.className.split(' ');
	var x=0;
	while(x<ary.length && ary[x]!=newClass) x++;
	if(x<ary.length) return false;
	else
	{
		ary[ary.length] = newClass;
		el.className = ary.join(' ');
		return true;
	}
}

function removeClassName(el,oldClass)
{
	var ary = el.className.split(' ');
	var className = new Array();
	for(var x=0; x<ary.length; x++) if(ary[x]!=oldClass) className[className.length] = ary[x];
	if(ary.length==className.length) return false;
	else
	{
		el.className = className.join(' ');
		return true;
	}
}

function replaceClassName(el,oldClass,newClass)
{
	var ary = el.className.split(' ');
	var x = 0;
	while(x<ary.length && ary[x]!=oldClass) x++;
	if(x<ary.length)
	{
		el.className = ary.join(' ');
		return true;
	}
	else return false;
}

function hasClassName(el,searchClass)
{
	var ary = el.className.split(' ');
	var x = 0;
	while(x<ary.length && ary[x]!=searchClass && ary[x].substr(0,ary[x].search(":"))!=searchClass) x++;
	return (x<ary.length);
}

document.toRegister = new Array();
document.register = documentRegister;
document.fspUpdate = doRegister;

addEventHandler(window,'load',function(){ doRegister(); },false);

document.register('img',null,fspImageToolbarRemoval,'load',false);

/* */

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 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);