


<!--

/*****************************************/
/** 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.                         **/
/**									**/
/** Modified 12/31/2003 by ctfb, www.elandia.com  
/** 					
/** Notes: integrated object/browser detection with
/**			previous scripts.
/**			made relatedTag an array to be able to
/**			use more than tag as a relation.  Solved
/**			problem of multiple nested checkboxes
/** 			with same relation displaying hidden 
/**			elements in the wrong location
/**			
/*****************************************/

var relatedTag = new Array;
relatedTag[0] = 'TR'
relatedTag[1] = 'TBODY';



function prepareForm()
{
	var marker = new Array;
	for (var q=0;q<relatedTag.length;q++)
	{
		marker[q] = document.createElement(relatedTag[q]);
		marker[q].style.display = 'none';

		var x = document.getElementsByTagName(relatedTag[q]);
		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[q].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'))
		}			
	}
	return true;
}


function arrangeFormFields(e)
{

	e = (e) ? e : event;
	var tg = (e.target) ? e.target : e.srcElement;
	var bMoveMessages = false;
	if(bVerifying && (tg.type == 'checkbox' || tg.type == 'radio')) 
		{bMoveMessages = true;}
	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)
		setContacts(tg);
		intoMainForm(toBeInserted);
		arrangeContacts(tg);
	}
	else if (tg.type == 'select-one')
	{
		toBeInserted = tg.options[tg.selectedIndex].getAttribute('show');
		removeOthers(tg.options,toBeInserted);
		intoMainForm(toBeInserted);
	}
	if(bMoveMessages){bMoveMessages = false; setErrMsgCoords(tg);}
}

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;
	for (var q=0;q<relatedTag.length; q++)
	{
		var x = document.getElementsByTagName(relatedTag[q]);
		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 (Elements[0] == null) return;
	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 (Elements[0] == null) return;
	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
}

/***************************************************
/		functions for compatable browsers
/**************************************************/

/***************************************************
/		function setContacts(elem)
/
/**************************************************/

function setContacts(elem){
	
	intoWaitingRoom('showButtons');
	if(elem.id == '_jbl1'){
		con.tbodys[2].setAttribute("relation", "showResidential")
		con.tbodys[3].setAttribute("relation", "showResidential")
		setException(false);
	}
	if(elem.id == '_jbl2'){ 
		con.tbodys[1].setAttribute("relation", "showCommercial")
		con.tbodys[2].setAttribute("relation", "showCommercial")	
		con.tbodys[3].setAttribute("relation", "showCommercial")	
		setException(true);
	}
	intoMainForm('showButtons');
}

/***************************************************
/		function setException(bool)
/
/**************************************************/

function setException(bool){

	fields['cnt_name'].exceptionValue = bool;
	fields['cnt_mphone'].exceptionValue = bool;
	fields['cpn_cname'].exceptionValue = bool;	
	
}

/***************************************************
/		function arrangeContacts(elem)
/
/**************************************************/
function arrangeContacts(elem){

	if(elem.name == 'request_type'){	
		copyZip(elem);
	}
}

/***************************************************
/		functions for all browsers
/**************************************************/

/***************************************************
/		changeState(obj, checked)
/
/**************************************************/

function changeState(obj, checked){

	var state = (checked) ? 'block' : 'none';
	obj.style[ds] = state;
}

/***************************************************
/		copyZip()
/
/**************************************************/

function copyZip(){

	if(document.getElementById('sla_zip'))
	{
		var zip = document.getElementById('sla_zip');
		var zipcode = document.getElementById('zipcode');
		zip.value = zipcode.value
		if(zipcode.value != zipContainer)  zipContainer = zipcode.value;		
	}
}

/***************************************************
/		getParent(node, tagName)
/
/**************************************************/

function getParent(node, tagName){

	tagName = tagName.toUpperCase();
	var testNode = node.parentNode;
	while(testNode){
		if(testNode.tagName == tagName && testNode.id != ""){
			return testNode;
		}
		if(testNode.tagName == 'TABLE'){
			return false;
		}
		testNode = testNode.parentNode;
	}
	return false;
}

/***************************************************
/		functions for !compatable browsers
/**************************************************/


/***************************************************
/		function preparePlanB()
/
/**************************************************/

function preparePlanB(){ /* displays tables & tbodys */

/*
	var x, y, tmp = "";
	for(x in tables){
		tmp += x + "  " + tables[x].id + "<br>\n"
		for(y in tables[x].tbodys){
			tmp += "\t&nbsp;&nbsp;" + y + "  " + tables[x].tbodys[y].id + "<br>\n"
		}
	}
	alert(tmp);
*/

	for(var i=0;i<tableLen-1;i++){
		var t = tables[i].getElementsByTagName('TBODY');
		for(var j=0;j<t.length;j++){
			var r = t[j].getElementsByTagName('TR');
			if(r.length == 1) {};
			for(var k=0;k<r.length; k++){
				if(r[k].getAttribute('id') && r[k].getAttribute('relation')){
					r[k].style[ds] = n;
				}
			}
			if(t[j].getAttribute('id') && t[j].getAttribute('relation')){
				t[j].style[ds] = n;
			}
		}
	}

	document.onclick = getClick;
	est.tbodys[1].style[ds] = n;
	if(!bLighting){
		proj.tbodys[2].style[ds] = n;
		proj.tbodys[6].style[ds] = n;	
	}

	con.tbodys[0].style[ds] = n;
	con.tbodys[1].style[ds] = n;
	con.tbodys[2].style[ds] = n;
	con.tbodys[3].style[ds] = n;

}

/***************************************************
/		function getClick(e)
/
/**************************************************/

function getClick(e){

	e=(e)?e:((window.event)?window.event:"")
	if(e){
		var elem=getTargetElement(e)
		if(elem){
			e.cancelBubble=true;
			if(e.stopPropagation) e.stopPropagation();
			var bMoveMessages = false;
			if(bVerifying && (elem.type == 'checkbox' || elem.type == 'radio')) {bMoveMessages = true;}
			if(elem.type == 'radio'){
				if(elem.name == 'request_type') {showContacts(elem);}
				if(elem.name == 'where_find_us') {est.tbodys[1].style[ds] = (elem.id == '_wfu7') ? b : n;}
				if(elem.name == 'theme') {proj.tbodys[6].style[ds] = (elem.id == '_tds6') ? b : n;}
			}
			if(elem.type == 'checkbox'){
				if(elem.name == 'product_type' && elem.id == '_spn23') proj.tbodys[2].style[ds] = (elem.checked) ? b : n;
			}	
			if(bMoveMessages){
				setErrMsgCoords(elem);
				btn.style[ds] = n;
				btn.style[ds] = b;
			}
		}
	}
}

/***************************************************
/		function showContacts(elem)
/
/**************************************************/

function showContacts(elem){

	con.style[ds] = b;
		
	con.tbodys[0].style[ds] = n;
	con.tbodys[1].style[ds] = n;
	con.tbodys[2].style[ds] = n;
	con.tbodys[3].style[ds] = n;
	
	if(elem.id == '_jbl1'){
		con.tbodys[0].style[ds] = b;
		con.tbodys[2].style[ds] = b;
		con.tbodys[3].style[ds] = b;
		setException(false);
	}
	if(elem.id == '_jbl2'){ 
		con.tbodys[1].style[ds] = b;
		con.tbodys[2].style[ds] = b;
		con.tbodys[3].style[ds] = b;
		setException(true);
	}
	btn.style[ds] = n;	
	btn.style[ds] = b;	
	copyZip();		
}




//-->


