/*****************************************//** Usable Forms 1.0, May 2003          **//** Written by ppk, www.quirksmode.org  **//** Instructions for use on my site     **//**                                     **//** You may use or change this script   **//** only when this copyright notice     **//** is intact.                          **//**                                     **//** If you extend the script, please    **//** add a short description and your    **//** name below.                         **//*****************************************/var relatedTag = 'TR';var compatible = (	document.getElementById && document.getElementsByTagName && document.createElement	&&	!(navigator.userAgent.indexOf('MSIE 5') != -1 && navigator.userAgent.indexOf('Mac') != -1)	);if (compatible)	document.write('<style>.accessibility{display: none}</style>');function prepareForm(){	if (!compatible) return;	var marker = document.createElement(relatedTag);	marker.style.display = 'none';	var x = document.getElementsByTagName(relatedTag);	var toBeRemoved = new Array;	for (var i=0;i<x.length;i++)	{		if (x[i].getAttribute('relation'))		{			var y = getAllFormFields(x[i]);			x[i].nestedRels = new Array;			for (var j=0;j<y.length;j++)			{				var rel = y[j].getAttribute('show');				if (!rel || rel == 'none') continue;				x[i].nestedRels.push(rel);			}			if (!x[i].nestedRels.length) x[i].nestedRels = null;			toBeRemoved.push(x[i]);		}	}	while (toBeRemoved.length)	{		var rel = toBeRemoved[0].getAttribute('relation');		if (!document.getElementById(rel))		{			var newMarker = marker.cloneNode(true);			newMarker.id = rel;			toBeRemoved[0].parentNode.replaceChild(newMarker,toBeRemoved[0]);		}		document.getElementById('waitingRoom').appendChild(toBeRemoved.shift());	}	document.onclick = arrangeFormFields;	var y = document.getElementsByTagName('input');	for (var i=0;i<y.length;i++)	{		if (y[i].checked && y[i].getAttribute('show'))			intoMainForm(y[i].getAttribute('show'))	}	var z = document.getElementsByTagName('select');		// Opera weird with hidden selects in quirks mode: selectedIndex = -1		for (var i=0;i<z.length;i++)	{		if (z[i].options[z[i].selectedIndex].getAttribute('show'))		{			z[i].onchange = arrangeFormFields;			intoMainForm(z[i].options[z[i].selectedIndex].getAttribute('show'))		}				}}function arrangeFormFields(e){	if (!e) var e = window.event;	var tg = (e.target) ? e.target : e.srcElement;	if (		!(tg.nodeName == 'SELECT' && e.type == 'change')		&&		!(tg.nodeName == 'INPUT' && tg.getAttribute('show'))	   ) return;	var toBeInserted = tg.getAttribute('show');	/* Why no switch statement? Because Netscape 3 gives an error message on encountering it,		and this script must degrade perfectly. */	if (tg.type == 'checkbox')	{		if (tg.checked)			intoMainForm(toBeInserted);		else			intoWaitingRoom(toBeInserted);	}	else if (tg.type == 'radio')	{		removeOthers(tg.form[tg.name],toBeInserted)		intoMainForm(toBeInserted);	}	else if (tg.type == 'select-one')	{		toBeInserted = tg.options[tg.selectedIndex].getAttribute('show');		removeOthers(tg.options,toBeInserted);		intoMainForm(toBeInserted);	}}function removeOthers(others,toBeInserted){	var toBeRemoved = new Array;	for (var i=0;i<others.length;i++)	{		var show = others[i].getAttribute('show');		if (show != toBeInserted)			toBeRemoved.push(show);	}	while (toBeRemoved.length)		intoWaitingRoom(toBeRemoved.shift());}function gatherElements(name){	var Elements = new Array;	var x = document.getElementsByTagName(relatedTag);	for (var i=0;i<x.length;i++)		if (x[i].getAttribute('relation') == name)			Elements.push(x[i]);	return Elements;}function intoWaitingRoom(name){	if (name == 'none') return;	var Elements = gatherElements(name);	if (isInWaitingRoom(Elements[0])) return;	while (Elements.length)	{		if (Elements[0].nestedRels)			for (var i=0;i<Elements[0].nestedRels.length;i++)				intoWaitingRoom(Elements[0].nestedRels[i]);		document.getElementById('waitingRoom').appendChild(Elements.shift())	}}function intoMainForm(name){	if (name == 'none') return;	var Elements = gatherElements(name);	if (!isInWaitingRoom(Elements[0])) return;	var insertPoint = document.getElementById(name);	while (Elements.length)		insertPoint.parentNode.insertBefore(Elements.shift(),insertPoint)}function isInWaitingRoom(obj){	while(obj.nodeName != 'BODY')	{		obj=obj.parentNode;		if (obj.id == 'waitingRoom')			return true;	}	return false;}function getAllFormFields(node){	var allFormFields = new Array;	var x = node.getElementsByTagName('input');	for (var i=0;i<x.length;i++)		allFormFields.push(x[i]);	var y = node.getElementsByTagName('option');	for (var i=0;i<y.length;i++)		allFormFields.push(y[i]);	return allFormFields;}// push and shift for IE5function Array_push() {	var A_p = 0	for (A_p = 0; A_p < arguments.length; A_p++) {		this[this.length] = arguments[A_p]	}	return this.length}if (typeof Array.prototype.push == "undefined") {	Array.prototype.push = Array_push}function Array_shift() {	var A_s = 0	var response = this[0]	for (A_s = 0; A_s < this.length-1; A_s++) {		this[A_s] = this[A_s + 1]	}	this.length--	return response}if (typeof Array.prototype.shift == "undefined") {	Array.prototype.shift = Array_shift}
