/**
 * Translates the form from TABLE tags into DIV tags.
 * - 2009/06/18 Accepts Radio buttons
 * - 2009/06/18 Place quickDivForm() beneath form tag to skip waiting on browser onLoad event.
 * - 2009/06/30 Executes divFormOnComplete() at script end if available.
 * - 2009/08/27 Now adds "holdsSelect", "holdsInput", "holdsRadio" to the containing DIV's class name.
 * - 2009/11/09 Now supports checkbox and textareas
 * - 2009/11/09 Now adds "holdsCheckbox", "holdsTextarea" to the containing DIV's class name.
 */

var divForm = new function () {
	var formTag, footNote, formElements;
	function init() {
		if (divForm.alreadyRan) {
			return;
		}
		divForm.alreadyRan = true;
		getLeadFormTag();
		getFootNote();
		var footNoteDiv = document.createElement('div');
		footNoteDiv.className = "footNote";
		formTag.appendChild(footNoteDiv);
		var footNoteReqSpan = document.createElement('span');
		footNoteReqSpan.className = "required";
		footNoteReqSpan.appendChild(document.createTextNode(footNote.symbol));
		footNoteDiv.appendChild(footNoteReqSpan);
		footNoteDiv.appendChild(document.createTextNode(footNote.description));
		formElements = {
			labels: [],
			elements: []
		};
		var TDs = formTag.getElementsByTagName('td');
		for (var i = 0; i < TDs.length; i++) {
			if (TDs[i].className == "formtext") {
				formElements.labels[formElements.labels.length] = {
					isRequired: (TDs[i].innerHTML.indexOf(footNote.symbol) != -1),
					txt: TDs[i].getElementsByTagName('b')[0].innerHTML
				};
			} else if (TDs[i].className == "formelement") {
				var elementTag = (TDs[i].getElementsByTagName("input")[0] || TDs[i].getElementsByTagName("select")[0] || TDs[i].getElementsByTagName("textarea")[0]);
				if (elementTag.nodeName == "SELECT" || elementTag.nodeName == "TEXTAREA") formElements.elements[formElements.elements.length] = TDs[i].getElementsByTagName(elementTag.nodeName)[0];
				else {
					switch (elementTag.type) {
					case "text":
						formElements.elements[formElements.elements.length] = TDs[i].getElementsByTagName(elementTag.nodeName)[0];
						break;
					case "radio":
						formElements.elements[formElements.elements.length] = [
							[],
							[]];
						var nodes = TDs[i].getElementsByTagName(elementTag.nodeName);
						var nodesLength = nodes.length;
						for (x = 0; x < nodesLength; x++) {
							formElements.elements[formElements.elements.length - 1][0][x] = String(TDs[i].getElementsByTagName("font")[x].innerHTML).replace(/&nbsp;/g, "");
							formElements.elements[formElements.elements.length - 1][1][x] = TDs[i].getElementsByTagName("input")[x];
						}
						break;
					case "checkbox":
						formElements.elements[formElements.elements.length] = [
							[],
							[]];
						var nodes = TDs[i].getElementsByTagName(elementTag.nodeName);
						var nodesLength = nodes.length;
						for (x = 0; x < nodesLength; x++) {
							formElements.elements[formElements.elements.length - 1][0][x] = String(TDs[i].getElementsByTagName("font")[x].innerHTML).replace(/<[\w\s=\"\'\/]*>+\s/g,"");
							formElements.elements[formElements.elements.length - 1][1][x] = TDs[i].getElementsByTagName("input")[x];
						}
						break;
					}
				}
			}
		}
		for (var i = 0; i < formElements.labels.length; i++) {
			var divTag = document.createElement('div');
			divTag.id = "q" + (i + 1);
			divTag.className = "qContainer";
			formTag.appendChild(divTag);
			var labelTag = document.createElement('label');
			divTag.appendChild(labelTag);
			if (formElements.labels[i].isRequired) {
				divTag.className += " isRequired";
				var spanTag = document.createElement('span');
				labelTag.appendChild(spanTag);
				spanTag.appendChild(document.createTextNode(footNote.symbol));
			}
			if ( !! (formElements.elements[i].length) && !formElements.elements[i].nodeName) {
				if (formElements.elements[i][1][0].type == "checkbox") divTag.className += " holdsCheckbox";
				else divTag.className += " holdsRadio";
			} else {
				divTag.className += " holds"+String(formElements.elements[i].nodeName).substr(0,1)+String(formElements.elements[i].nodeName).substr(1).toLowerCase();
			}
			labelTag.appendChild(document.createTextNode(formElements.labels[i].txt));
			if ( !! (formElements.elements[i].length) && !formElements.elements[i].nodeName) {
				var subDivTag = document.createElement('div');
				divTag.appendChild(subDivTag);
				subDivTag.id = "sub_" + subDivTag.parentNode.id;
				subDivTag.className = "sub_qContainer";
				
				for (var x = 0; x < formElements.elements[i].length; x++) {
					
					if (!formElements.elements[i][0][x]) continue; // If this is from a 'checkbox', this will be undefined and break the code so SKIP IT!!!
					
					var subLabelTag = document.createElement('label');
					
					if (formElements.elements[i][1][x].type == "checkbox") { //checkbox
						subDivTag.appendChild(formElements.elements[i][1][x]);
						subDivTag.appendChild(subLabelTag);
						subLabelTag.appendChild(document.createTextNode(formElements.elements[i][0][x]));
						formElements.elements[i][1][x].id = (formElements.elements[i][1][x].id || formElements.elements[i][1][x].name + String(x));
						formElements.elements[i][1][x].className += " " + String(formElements.elements[i][1][x].type);
						subLabelTag.setAttribute("for", formElements.elements[i][1][x].id);						
					} else if (formElements.elements[i][1][x].type == "radio") { // radio button
						subDivTag.appendChild(subLabelTag);
						subLabelTag.appendChild(document.createTextNode(formElements.elements[i][0][x]));
						subDivTag.appendChild(formElements.elements[i][1][x]);
						formElements.elements[i][1][x].id = (formElements.elements[i][1][x].id || formElements.elements[i][1][x].name + String(x));
						formElements.elements[i][1][x].className += " " + String(formElements.elements[i][1][x].type);
						subLabelTag.setAttribute("for", formElements.elements[i][1][x].id);
					}
				}
			} else {
				divTag.appendChild(formElements.elements[i]);
				formElements.elements[i].id = (formElements.elements[i].id || formElements.elements[i].name);
				labelTag.setAttribute("for", formElements.elements[i].id);
			}
		}
		divTag = document.createElement('div');
		divTag.id = "submitContainer";
		formTag.appendChild(divTag);
		if (formTag.getElementsByTagName("input")[0].className == "btnSubmit") {
			var submitBtn = formTag.getElementsByTagName("input")[0];
			divTag.appendChild(submitBtn);
			submitBtn.setAttribute("src", "images/btn_submit.gif");
		} else {}
		var scriptTags = formTag.getElementsByTagName('script');
		for (var i = 0; i < scriptTags.length; i++) formTag.appendChild(scriptTags[i]);
		removeTable();
		try {
			divFormOnComplete();
		} catch(errors) {}
	}
	function getLeadFormTag() {
		formTag = document.getElementsByTagName('form');
		for (var x = 0; x < formTag.length; x++) {
			if (formTag[x].getAttribute("name") == "LeadSystem") {
				formTag = formTag[x];
				formTag.id = formTag.name;
				return;
			}
		}
	}
	function getFootNote() {
		var fnTxt = formTag.getElementsByTagName('font')[0].innerHTML;
		footNote = {
			symbol: '*',
			description: "Indicates required field."
		};
	}
	function removeTable() {
		var trashDiv = document.createElement('div');
		formTag.appendChild(trashDiv);
		var trashTable = formTag.getElementsByTagName('table')[0];
		trashDiv.appendChild(trashTable);
		trashDiv.innerHTML = "";
		formTag.removeChild(trashDiv);
	}
	if (window.addEventListener) window.addEventListener("load", init, false);
	else if (window.attachEvent) window.attachEvent("onload", init);
	window.quickDivForm = init;
}