var qCount = 0;
var gCount = 0;
var lCount = 0;
var maxI = 0;
var fieldInfo = new Array();
var maxA = new Array();
var ansInfo = new Array();
var fieldFilled = new Array();
var actionGroups = new Array();
var actionListserves = new Array();
var gloMaxFields = 100;
var gloBuffer = 5;
var defType = 'TX';

function initFieldInfo(maxIn) {
	var j,k,l;
	for (var i=0; i < maxIn; i++) {
		fieldInfo[i] = new Array('', '', 'TXT', '', 1, '', -3, '', 0, '', 0, '', 1);
		maxA[i] = 0;
		ansInfo[i] = new Array();
		for (j=0; j < 10; j++) {
			ansInfo[i][j] = new Array();
			for (k=0; k < 10; k++) ansInfo[i][j][k] = '';
		}
		fieldFilled[i] = false;
	}
	return true;
}

function reCounts() {
	qCount = 0;
	for (var i = 0; i < fieldInfo.length; i++) {
		qCount++;
		if (fieldInfo[i][2] != 'INS' && fieldInfo[i][2] != 'PAG' && fieldInfo[i][12] == 1) fieldInfo[i][8] = qCount;
		else {
			fieldInfo[i][8] = -1;
			qCount--;
		}
	}
	return true;
}

function loadActGroups(i, gID, gName) {
	gCount++;
	actionGroups[i] = new Array();
	actionGroups[i][0] = gID;
	actionGroups[i][1] = gName;
	return true;
}

function loadActListserves(i, lID, lName) {
	lCount++;
	actionListserves[i] = new Array();
	actionListserves[i][0] = lID;
	actionListserves[i][1] = lName;
	return true;
}

function loadQfield(i, qField, qQuestion, qType, qOpts, qRequiredBy, qID, qGroup, qDepth, qActions, qActive) {
	qCount++;
	fieldInfo[i] = new Array();
	fieldInfo[i][0] = qField; //"res" . ereg_replace("[0-9]", "", ereg_replace("[-_*^&%@!`~]", "", str_replace(" ", "", fieldInfo[i][1]))) . fieldInfo[i][2]; //database field name
	fieldInfo[i][1] = qQuestion;
	fieldInfo[i][2] = qType;
	fieldInfo[i][4] = qOpts;
	fieldInfo[i][5] = qRequiredBy;
	fieldInfo[i][6] = qID;
	fieldInfo[i][7] = qActions;
	if (qType != 'INS') fieldInfo[i][8] = qCount;
	else {
		fieldInfo[i][8] = -1;
		qCount--;
	}
	fieldInfo[i][9] = qGroup;
	fieldInfo[i][10] = qDepth;
	fieldInfo[i][12] = qActive;
	if (qField != '') {
		fieldFilled[i] = true;
		if (i >= maxI) maxI = i+1;
	}
	return true;
}

function loadAfield(i, aID, aAnswer, aWeight, aAction, aConds, aAction2, aConds2) {
	ansInfo[i][maxA[i]] = new Array();
	ansInfo[i][maxA[i]][0] = aID;
	ansInfo[i][maxA[i]][1] = aAnswer;
	ansInfo[i][maxA[i]][2] = aWeight;
	ansInfo[i][maxA[i]][3] = aAction;
	ansInfo[i][maxA[i]][4] = aConds;
	ansInfo[i][maxA[i]][5] = aAction2;
	ansInfo[i][maxA[i]][6] = aConds2;
	maxA[i]++;
	return true;
}

function pullDownQs(i, j, txt) {
	if (j == 1) {
		fieldInfo[i][j] = javaSafe(txt);
		if (maxI <= i) {
			for (var j = maxI; j <= i+gloBuffer; j++) {
				if (!fieldFilled[j]) {
					//alert('fieldDiv'+j+'');
					writeQformLine(('fieldDiv'+j+''), '-3', '', '', '', '', '', '', qCount, 0, j);
					//writeQCount('field'+j+'Cnt');
					fieldFilled[j] = true;
					qCount++;
				}
			}
			maxI = i+1;
		}
	}
	else if (j == 5) {
		//alert('fieldDiv'+j+': '+fieldInfo[i][j]);
		if (txt) fieldInfo[i][j] = 'All';
		else fieldInfo[i][j] = '';
		//alert('NOW fieldDiv'+j+': '+fieldInfo[i][j]);
	}
	else if (j == 12) {
		if (document.getElementById('TMPq'+i+'activeID').checked) fieldInfo[i][j] = 1;
		else fieldInfo[i][j] = 0;
		reCounts();
		writeQlines(gloMaxFields, gloBuffer);
	}
	else fieldInfo[i][j] = javaSafe(txt);
	return true;
}

function pullDownQPnType(i, txt) {
	if (txt == 'Points' && fieldInfo[i][4]%11 != 0) fieldInfo[i][4] *= 11;
	else if (fieldInfo[i][4]%11 == 0) fieldInfo[i][4] = fieldInfo[i][4]/11;
	return true;
}

function pullDownQacols(i, cols) {
	if (cols == 1 && fieldInfo[i][4]%17 != 0) fieldInfo[i][4] *= 17;
	else if (fieldInfo[i][4]%17 == 0) fieldInfo[i][4] = fieldInfo[i][4]/17;
	if (cols == 2 && fieldInfo[i][4]%19 != 0) fieldInfo[i][4] *= 19;
	else if (fieldInfo[i][4]%19 == 0) fieldInfo[i][4] = fieldInfo[i][4]/19;
	if (cols == 3 && fieldInfo[i][4]%23 != 0) fieldInfo[i][4] *= 23;
	else if (fieldInfo[i][4]%23 == 0) fieldInfo[i][4] = fieldInfo[i][4]/23;
	if (cols == 4 && fieldInfo[i][4]%29 != 0) fieldInfo[i][4] *= 29;
	else if (fieldInfo[i][4]%29 == 0) fieldInfo[i][4] = fieldInfo[i][4]/29;
	if (cols == 5 && fieldInfo[i][4]%31 != 0) fieldInfo[i][4] *= 31;
	else if (fieldInfo[i][4]%31 == 0) fieldInfo[i][4] = fieldInfo[i][4]/31;
	showQans(i);
	showQanswersA2D(i);
	return true;
}

function loadActionGroups(i, j) {
	var retVal = '<select name="TMPq'+i+'ans'+j+'Action2" onChange="pullDownA('+i+', '+j+', 5, this.value);" style="width: 80px;">';
	for (var g=0; g < gCount; g++) {
		retVal += '<option value="' + javaSafe(actionGroups[g][0]) + '"';
		if (ansInfo[i][j][5] == actionGroups[g][0]) retVal += ' SELECTED';
		retVal += '>' + javaSafe(actionGroups[g][1]) + '</option>';
	}
	retVal += '</select>';
	if (document.getElementById('TMPq'+i+'ans'+j+'ActionExpl')) document.getElementById('TMPq'+i+'ans'+j+'ActionExpl').innerHTML = retVal;
	return true;
}

function loadActionListserves(i, j) {
	var retVal = '<select name="TMPq'+i+'ans'+j+'Action2" onChange="pullDownA('+i+', '+j+', 5, this.value);" style="width: 80px;">';
	for (var l=0; l < lCount; l++) {
		retVal += '<option value="' + javaSafe(actionListserves[l][0]) + '"';
		if (ansInfo[i][j][5] == actionListserves[l][0]) retVal += ' SELECTED';
		retVal += '>' + javaSafe(actionListserves[l][1]) + '</option>';
	}
	retVal += '</select>';
	if (document.getElementById('TMPq'+i+'ans'+j+'ActionExpl')) document.getElementById('TMPq'+i+'ans'+j+'ActionExpl').innerHTML = retVal;
	return true;
}

function loadActionTag(i, j) {
	var retVal = '<input type="text" name="TMPq'+i+'ans'+j+'Action2" onKeyUp="pullDownA('+i+', '+j+', 5, this.value)" style="width: 80px"';
	retVal += ' value="'+ansInfo[i][j][5]+'">';
	if (document.getElementById('TMPq'+i+'ans'+j+'ActionExpl')) document.getElementById('TMPq'+i+'ans'+j+'ActionExpl').innerHTML = retVal;
	return true;
}

function pullDownA(i, j, a, txt) {
	ansInfo[i][j][a] = javaSafe(txt);
	if (a == 3) {
		if (txt == 'group') loadActionGroups(i, j);
		else if (txt == 'listserve') loadActionListserves(i, j);
		else if (txt == 'tag') loadActionTag(i, j);
	}
	return true;
}

function showQopts(i) {
	if (document.getElementById('TMPq'+i+'PopActs').style.left != '-2000px') document.getElementById('TMPq'+i+'PopActs').style.left = '-2000px';
	if (document.getElementById('TMPq'+i+'PopOpts').style.left == '200px') document.getElementById('TMPq'+i+'PopOpts').style.left = '-2000px';
	else {
		var retVal = '<table width=100% border=1 cellpadding=1 cellspacing=0>';
		retVal += '<tr><td colspan=2>Question Options</td><td style="text-align: right;"><a href="javascript:void(0)" onClick="document.getElementById(\'TMPq'+i+'PopOpts\').style.left=\'-2000px\';" style="color: #990000; text-decoration: none; font-weight: bold;">x</a></td></tr>';
		//retVal += '<tr><td colspan=2><b>Short Name for Reports</b></td></tr>';
		//retVal += '<tr><td colspan=2><input type="text" name="q' + i + 'short" value="' + fieldInfo[i][0].replace("q"+fieldInfo[i][6]+"", "") + '" style="width: 130px;" onKeyUp="pullDownQs(' + i + ', 0, this.value);">';
		retVal += '<tr><td><b>Question Group: </b></td><td colspan=2><input type="text" name="TMPq'+i+'group" value="' + fieldInfo[i][9] + '" style="width: 130px;" onKeyUp="pullDownQs(' + i + ', 9, this.value);"></td></tr>';
		retVal += '<tr><td colspan=3 style="text-align: left;"><input type="checkbox" id="TMPq'+i+'activeID" name="TMPq'+i+'active" value="1" onClick="pullDownQs(' + i + ', 12, this.value);"';
		if (fieldInfo[i][12] == 1) retVal += ' CHECKED';
		retVal += ' >&nbsp;<b>Question Is Active </b> - This Question is seen by the public.<br />Inactive Questions are hidden when filling out the survey,<br />but past responses are saved for export or to easily bring the question back later.</td></tr>';
		retVal += '</table>';
		document.getElementById('TMPq'+i+'PopOpts').innerHTML = retVal;
		document.getElementById('TMPq'+i+'PopOpts').style.left = '200px';
	}
	return true;
}

function showQansLines(i, aORb) {
	var retVal = '<table width=100% border=0 cellpadding=1 cellspacing=0>';
	for (var j = 0; j < 5; j++) {
		retVal += '<input type="hidden" name="TMPq'+i+'ans'+j+'ID" value="'+ansInfo[i][j][0]+'">';
		retVal += '<tr><td style="width: 100px;">';
			retVal += morlesTXTfield('editSurvey', 'TMPq'+i+'ans'+j+'Ans', ansInfo[i][j][1], 100, 100, 20, 'pullDownA('+i+', '+j+', 1, this.value)', '', '');
		retVal += '</td><td style="width: 30px; vertical-align: top;"><input type="text" name="TMPq'+i+'ans'+j+'Weight" value="' + ansInfo[i][j][2] + '" style="width: 30px;" onKeyUp="pullDownA('+i+', '+j+', 2, this.value);"></td>';
		retVal += '<td style="width: 85px; vertical-align: top;"><select name="TMPq'+i+'ans'+j+'Action" onChange="pullDownA('+i+', '+j+', 3, this.value);" style="width: 85px;">';
			retVal += '<option value=""';
			if (ansInfo[i][j][3] == '') retVal += ' SELECTED';
			retVal += '>No Action</option>';
			if (gCount > 0) {
				retVal += '<option value="group"';
				if (ansInfo[i][j][3] == 'group') retVal += ' SELECTED';
				retVal += '>Add To Group</option>';
			}
			if (lCount > 0) {
				retVal += '<option value="listserve"';
				if (ansInfo[i][j][3] == 'listserve') retVal += ' SELECTED';
				retVal += '>Add To List Serve</option>';
			}
			retVal += '<option value="tag"';
			if (ansInfo[i][j][3] == 'tag') retVal += ' SELECTED';
			retVal += '>Add A Tag/Flag</option>';
		retVal += '</select></td>';
		retVal += '<td style="vertical-align: top;"><div id="TMPq'+i+'ans'+j+'ActionExpl"> </div></td>';
		retVal += '</tr>';
		if (ansInfo[i][j][3] == 'group') setTimeout("loadActionGroups("+i+", "+j+")", 5);
		else if (ansInfo[i][j][3] == 'listserve') setTimeout("loadActionListserves("+i+", "+j+")", 5);
		else if (ansInfo[i][j][3] == 'tag') setTimeout("loadActionTag("+i+", "+j+")", 5);
	}
	retVal += '</table>';
	document.getElementById('TMPq'+i+'ans'+aORb).innerHTML = retVal;
	return true;
}

function getA2Dword(tot, opt) {
	if (tot < 4) {
		if (opt == 0) return 'Agree';
		else if (opt == 1) return 'Disagree';
		else if (opt == 2) return 'Neutral';
	}
	else {
		if (opt == 0) return 'Strongly Agree';
		else if (opt == 1) return 'Agree';
		else if (opt == 2) return 'Disagree';
		else if (opt == 3) return 'Strongly Disagree';
		else if (opt == 4) return 'Neutral';
	}
	return 'Neutral';
}

function getYNword(tot, opt) {
	if (opt == 0) return 'Yes';
	else if (opt == 1) return 'No';
	return 'Maybe';
}

function showQansLinesCols(i, qType, aORb) {
	var tot = 2;
	if (fieldInfo[i][4]%17 == 0) tot = 1;
	else if (fieldInfo[i][4]%19 == 0) tot = 2;
	else if (fieldInfo[i][4]%23 == 0) tot = 3;
	else if (fieldInfo[i][4]%29 == 0) tot = 4;
	else if (fieldInfo[i][4]%31 == 0) tot = 5;
	var currLabel = '';
	var currWeight = '';
	var retVal = '<table width=100% border=0 cellpadding=1 cellspacing=0>';
	for (var j = 0; j < tot; j++) {
		currLabel = ansInfo[i][j][1];
		currWeight = ansInfo[i][j][2];
		retVal += '<input type="hidden" name="TMPq'+i+'ans'+j+'ID" value="'+ansInfo[i][j][0]+'">';
		retVal += '<tr><td style="width: 100px;"><nobr>';
			if (qType == 'A2D') {
				retVal += getA2Dword(tot, j); // print label for label field
				if (currLabel == '') {
					if (tot < 4) {
						if (j == 0) currLabel = 'Agree';
						else if (j == 1) currLabel = 'Disagree';
						else currLabel = 'Neutral';
					}
					else { // 4 or 5 cols
						if (j == 0) currLabel = 'Strongly Agree';
						else if (j == 1) currLabel = 'Agree';
						else if (j == 2) currLabel = 'Disagree';
						else if (j == 3) currLabel = 'Strongly Disagree';
						else currLabel = 'Neutral';
					}
				}
				if (currWeight == '') {
					if (tot < 4) {
						if (j == 0) currWeight = 1;
						else if (j == 1) currWeight = -1;
						else currWeight = 0;
					}
					else { // 4 or 5 cols
						if (j == 0) currWeight = 2;
						else if (j == 1) currWeight = 1;
						else if (j == 2) currWeight = -1;
						else if (j == 3) currWeight = -2;
						else currWeight = 0;
					}
				}
			}
			else if (qType == 'YN' || qType == 'YNQ') {
				retVal += getYNword(tot, j);
				if (currLabel == '') {
					if (j == 0) currLabel = 'Yes';
					else if (j == 1) currLabel = 'No';
					else currLabel = 'Maybe';
				}
				if (currWeight == '') {
					if (j == 0) currWeight = 1;
					else if (j == 1) currWeight = -1;
					else currWeight = 0;
				}
			}
			retVal += '</nobr></td><td style="width: 80px;">';
			var textColors = new Array('#000000', '#FFFFFF');
			retVal += morlesTXTfield('editSurvey', 'TMPq'+i+'ans'+j+'Ans', currLabel, 80, 100, 20, 'pullDownA('+i+', '+j+', 1, this.value)', textColors[0], textColors[1]);
		retVal += '</td><td style="width: 30px; vertical-align: top;"><input type="text" name="TMPq'+i+'ans'+j+'Weight" value="' + currWeight + '" style="width: 30px;" onKeyUp="pullDownA('+i+', '+j+', 2, this.value);"></td>';
		retVal += '<td style="width: 85px; vertical-align: top;"><select name="TMPq'+i+'ans'+j+'Action" onChange="pullDownA('+i+', '+j+', 3, this.value);" style="width: 85px;">';
			retVal += '<option value=""';
			if (ansInfo[i][j][3] == '') retVal += ' SELECTED';
			retVal += '>No Action</option>';
			if (gCount > 0) {
				retVal += '<option value="group"';
				if (ansInfo[i][j][3] == 'group') retVal += ' SELECTED';
				retVal += '>Add To Group</option>';
			}
			if (lCount > 0) {
				retVal += '<option value="listserve"';
				if (ansInfo[i][j][3] == 'listserve') retVal += ' SELECTED';
				retVal += '>Add To List Serve</option>';
			}
			retVal += '<option value="tag"';
			if (ansInfo[i][j][3] == 'tag') retVal += ' SELECTED';
			retVal += '>Add A Tag/Flag</option>';
		retVal += '</select></td>';
		retVal += '<td style="vertical-align: top;"><div id="TMPq'+i+'ans'+j+'ActionExpl"> </div></td>';
		retVal += '</tr>';
		if (ansInfo[i][j][3] == 'group') setTimeout("loadActionGroups("+i+", "+j+")", 5);
		if (ansInfo[i][j][3] == 'listserve') setTimeout("loadActionListserves("+i+", "+j+")", 5);
	}
	retVal += '</table>';
	document.getElementById('TMPq'+i+'ans'+aORb).innerHTML = retVal;
	return true;
}

function showQanswers(i) {
	if (document.getElementById('TMPq'+i+'PopOpts').style.left!='-2000px') document.getElementById('TMPq'+i+'PopOpts').style.left='-2000px';
	if (document.getElementById('TMPq'+i+'PopActs').style.left == '200px') document.getElementById('TMPq'+i+'PopActs').style.left = '-2000px';
	else {
		var retVal = '<table width=100% border=0 cellpadding=1 cellspacing=0>';
		retVal += '<tr><td colspan=2>Question Answers</td><td colspan=2 style="text-align: right;"><a href="javascript:void(0)" onClick="document.getElementById(\'TMPq'+i+'PopActs\').style.left=\'-2000px\';" style="color: #990000; text-decoration: none; font-weight: bold;">x</a></td></tr>';
		retVal += '<tr><td style="width: 74px;">Answer</td><td style="width: 35px;"><select name="TMPq'+i+'ansWghType" style="border: 0px none; width: 58px;" onChange="pullDownQPnType('+i+', this.value);"><option value="Weight"';
		if (fieldInfo[i][4]%11 != 0) retVal += ' SELECTED';
		retVal += '>Weight</option><option value="Points"';
		if (fieldInfo[i][4]%11 == 0) retVal += ' SELECTED';
		retVal += '>Points</option></select></td><td style="width: 85px;">Action</td><td style="width: 80px;"> </td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans1" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans2" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans3" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans4" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans5" style="width: 100%;"> </div></td></tr>';
		retVal += '</table>';
		document.getElementById('TMPq'+i+'PopActs').innerHTML = retVal;
		showQansLines(i, '1');
		document.getElementById('TMPq'+i+'PopActs').style.left = '200px';
	}
	return true;
}

function showQanswersA2D(i) {
	if (document.getElementById('TMPq'+i+'PopOpts').style.left!='-2000px') document.getElementById('TMPq'+i+'PopOpts').style.left='-2000px';
	if (document.getElementById('TMPq'+i+'PopActs').style.left == '200px') document.getElementById('TMPq'+i+'PopActs').style.left = '-2000px';
	else {
		var tot = 2;
		if (fieldInfo[i][4]%23 == 0) tot = 3;
		else if (fieldInfo[i][4]%29 == 0) tot = 4;
		else if (fieldInfo[i][4]%31 == 0) tot = 5;
		var retVal = '<table width=100% border=0 cellpadding=1 cellspacing=0>';
		retVal += '<tr><td colspan=3><nobr>Agree - Disagree Answer Range: <select name="TMPq'+i+'ansA2D" style="width: 100px;" onChange="pullDownQacols('+i+', this.value); showQanswersA2D('+i+');"><option value="2"';
		if (fieldInfo[i][4]%19 == 0) retVal += ' SELECTED'; // 2 column question
		retVal += '>2 - Agree, Disagree</option><option value="3"';
		if (fieldInfo[i][4]%23 == 0) retVal += ' SELECTED'; // 3 column question
		retVal += '>3 - Agree, Neutral, Disagree</option><option value="4"';
		if (fieldInfo[i][4]%29 == 0) retVal += ' SELECTED'; // 4 column question
		retVal += '>4 - Strongly Agree, Agree, Disagree, Strongly Disagree</option><option value="5"';
		if (fieldInfo[i][4]%31 == 0) retVal += ' SELECTED'; // 5 column question
		retVal += '>5 - Strongly Agree, Agree, Neutral, Disagree, Strongly Disagree</option></select></nobr></td>';
		retVal += '<td style="text-align: right;"><a href="javascript:void(0)" onClick="document.getElementById(\'TMPq'+i+'PopActs\').style.left=\'-2000px\';" style="color: #990000; text-decoration: none; font-weight: bold;">x</a></td></tr>';
		retVal += '<tr><td style="width: 155px;">Answer</td><td style="width: 65px;">Report As</td><td style="width: 85px;">Action</td><td style="width: 80px;"> </td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans1" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans2" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans3" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans4" style="width: 100%;"> </div></td></tr>';
		retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans5" style="width: 100%;"> </div></td></tr>';
		retVal += '</table>';
		document.getElementById('TMPq'+i+'PopActs').innerHTML = retVal;
		showQansLinesCols(i, fieldInfo[i][2], '1');
		document.getElementById('TMPq'+i+'PopActs').style.left = '200px';
	}
	return true;
}

function showQanswersYN(i) {
	var tot = 2;
	if (fieldInfo[i][4]%23 == 0) tot = 3;
	var retVal = '<table width=100% border=0 cellpadding=1 cellspacing=0>';
	retVal += '<tr><td colspan=3><nobr>Yes - No Answer Range: <select name="TMPq'+i+'ansA2D" style="width: 150px;" onChange="pullDownQacols('+i+', this.value); showQanswersYN('+i+');"><option value="1"';
	if (fieldInfo[i][4]%17 == 0) retVal += ' SELECTED'; // 2 column question
	retVal += '>1 - Yes</option><option value="2"';
	if (fieldInfo[i][4]%19 == 0) retVal += ' SELECTED'; // 2 column question
	retVal += '>2 - Yes, No</option><option value="3"';
	if (fieldInfo[i][4]%23 == 0) retVal += ' SELECTED'; // 3 column question
	retVal += '>3 - Yes, No, Maybe</option></select></nobr></td>';
	retVal += '<td style="text-align: right;"><a href="javascript:void(0)" onClick="document.getElementById(\'TMPq'+i+'PopActs\').style.left=\'-2000px\';" style="color: #990000; text-decoration: none; font-weight: bold;">x</a></td></tr>';
	retVal += '<tr><td style="width: 155px;">Answer</td><td>Report As</td><td style="width: 85px;">Action</td><td style="width: 80px;"> </td></tr>';
	retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans1" style="width: 100%;"> </div></td></tr>';
	retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans2" style="width: 100%;"> </div></td></tr>';
	retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans3" style="width: 100%;"> </div></td></tr>';
	retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans4" style="width: 100%;"> </div></td></tr>';
	retVal += '<tr><td colspan=4><div id="TMPq'+i+'ans5" style="width: 100%;"> </div></td></tr>';
	retVal += '</table>';
	document.getElementById('TMPq'+i+'PopActs').innerHTML = retVal;
	showQansLinesCols(i, fieldInfo[i][2], '1');
	document.getElementById('TMPq'+i+'PopActs').style.left = '200px';
	if (document.getElementById('TMPq'+i+'PopOpts').style.left!='-2000px') document.getElementById('TMPq'+i+'PopOpts').style.left='-2000px';
	return true;
}

function showQans(i) {
	var retVal = '&nbsp;<a href="javascript:void(0)" onClick="showQanswers(' + i + ');">Answers&nbsp;&darr;</a>';
	if (fieldInfo[i][2] == 'MLD' || fieldInfo[i][2] == 'MLR' || fieldInfo[i][2] == 'MLC' || fieldInfo[i][2] == 'ML2') retVal = '&nbsp;<a href="javascript:void(0)" onClick="showQanswers(' + i + ');">Answers&nbsp;&darr;</a>';
	else if (fieldInfo[i][2] == 'YN' || fieldInfo[i][2] == 'YNQ') retVal = '&nbsp;<a href="javascript:void(0)" onClick="showQanswersYN(' + i + ');">Answers&nbsp;&darr;</a>';
	else if (fieldInfo[i][2] == 'A2D') retVal = '&nbsp;<a href="javascript:void(0)" onClick="showQanswersA2D(' + i + ');">Answers&nbsp;&darr;</a>';
	document.getElementById('q' + i + 'extraOptsLink').innerHTML = retVal;
	return true;
}

function hideQans(i) {
	document.getElementById('q' + i + 'extraOptsLink').innerHTML = '&nbsp;';
	return true;
}

function insertQ(indie, subEnd) {
	var prev = indie-1;
	var newQopts = 1;
	if (prev >= 0 && fieldInfo[prev][4]%13 == 0) {
		newQopts = newQopts*13;
		fieldInfo[prev][4] = fieldInfo[prev][4]/13;
	}
	if (indie < fieldInfo.length) {
		var k = 0;
		var l = 0;
		for (var j = maxI; j >= indie; j--) {
			//if (j == maxI) alert(j+', '+fieldInfo[j][0]+', '+fieldInfo[j][2]);
			fieldInfo[(1+j)] = new Array(); // if (!fieldInfo[(1+j)] || (1+j) >= fieldInfo.length)
			for (k = 0; k < 13; k++) if (fieldInfo[j]) fieldInfo[(1+j)][k] = fieldInfo[j][k];
			ansInfo[(1+j)] = new Array(); // if (!ansInfo[(1+j)] || (1+j) >= ansInfo.length)
			for (k = 0; k < 10; k++) {
				ansInfo[(1+j)][k] = new Array(); // if (!ansInfo[(1+j)] || (1+j) >= ansInfo.length)
				for (l = 0; l < 5; l++) if (ansInfo[j]) ansInfo[(1+j)][k][l] = ansInfo[j][k][l];
			}
		}
	}
	if (subEnd && newQopts%13 != 0) newQopts = newQopts*13;
	loadQfield(indie, ('fieldDiv'+indie+''), '', 'TX', newQopts, '', -3, '', 0, '', 1);
	maxI++;
	reCounts();
	writeQlines(gloMaxFields, gloBuffer);
	return true;
}

function pullDownQtype(i, txt) {
	fieldInfo[i][2] = txt;
	if (fieldInfo[i][2] == 'A2D') showQans(i);
	else if (fieldInfo[i][2] == 'YN' || fieldInfo[i][2] == 'MLD' || fieldInfo[i][2] == 'MLR' || fieldInfo[i][2] == 'MLC' || fieldInfo[i][2] == 'ML2') showQans(i);
	else if (fieldInfo[i][2] == 'YNQ') {
		insertQ((i+1), true);
		showQans(i);
	}
	else if (fieldInfo[i][2] == 'INS') {
		reCounts();
		writeQlines(gloMaxFields, gloBuffer);
	}
	else hideQans(i);
	return true;
}

function writeQCount(lineCountDiv, lineCount) {
	if (document.getElementById(lineCountDiv)) document.getElementById(lineCountDiv).innerHTML = lineCount;
	return true;
}

function writeQformLine(lineDiv, lineQID, lineField, lineExpanded, lineInitType, lineInitQues, lineInitReq, lineInitGroup, lineCount, depth, i) {
	//alert(lineDiv+', '+lineQID+', '+lineField+', '+lineExpanded+', '+lineInitType+', '+lineInitQues+', '+lineInitReq+', '+lineInitGroup+', '+lineCount+', '+depth+', '+i);
	if (document.getElementById(lineDiv)) {
		if (!lineInitType || lineInitType == '') lineInitType = 'TX';
		var retVal = '';
		retVal += '<div class="qPlus" onClick="insertQ(' + i + ', false);"> + </div>';
		retVal += '<div id="TMPq'+i+'PopOpts" class="qOpts"> </div>';
		retVal += '<div id="TMPq'+i+'PopActs" class="qOpts"> </div>';
		retVal += '<table border=0 cellpadding=0 cellspacing=0>';
		retVal += '<tr><td class="qTD" style="width: 15px; text-align: right;">';
			if (lineCount != -1) retVal += lineCount + '.';
		retVal += '</td><td class="qTD" style="width: 20px;">';
		if (lineCount != -1) {
			retVal += '<input type="checkbox" name="TMPfieldReq' + i + '" value="1"';
			if (lineInitReq != '') retVal += ' CHECKED';
			retVal += ' onClick="pullDownQs('+i+', 5, this.checked);">';
		}
		retVal += '</td><td class="qTD"><select name="q' + i + 'type" style="width: 100px; height: 20px;" onChange="pullDownQtype(' + i + ', this.value)">';
		retVal += '<option value="TX"';
		if (lineInitType == 'TX') retVal += ' SELECTED';
		retVal += '>Text</option>';
		retVal += '<option value="TXA"';
		if (lineInitType == 'TXA') retVal += ' SELECTED';
		retVal += '>Full-Width Text Area</option>';
		retVal += '<option value="RTE"';
		if (lineInitType == 'RTE') retVal += ' SELECTED';
		retVal += '>Full-Width Rich Text Area</option>';
		retVal += '<option value="MOR"';
		if (lineInitType == 'MOR') retVal += ' SELECTED';
		retVal += '>More<->Less Expanding Text Area</option>';
		retVal += '<option value="EMA"';
		if (lineInitType == 'EMA') retVal += ' SELECTED';
		retVal += '>E-mail Address</option>';
		retVal += '<option value="NUM"';
		if (lineInitType == 'NUM') retVal += ' SELECTED';
		retVal += '>Number</option>';
		retVal += '<option value="YN"';
		if (lineInitType == 'YN') retVal += ' SELECTED';
		retVal += '>Yes/No[/Maybe]</option>';
		retVal += '<option value="A2D"';
		if (lineInitType == 'A2D') retVal += ' SELECTED';
		retVal += '>Agree - Disagree Statement</option>';
		retVal += '<option value="MLD"';
		if (lineInitType == 'MLD') retVal += ' SELECTED';
		retVal += '>Multiple Choice Dropdown</option>';
		retVal += '<option value="MLR"';
		if (lineInitType == 'MLR') retVal += ' SELECTED';
		retVal += '>Multiple Choice Radio Buttons</option>';
		retVal += '<option value="MLC"';
		if (lineInitType == 'MLC') retVal += ' SELECTED';
		retVal += '>Multiple Choice Checkboxes</option>';
		retVal += '<option value="ML2"';
		if (lineInitType == 'ML2') retVal += ' SELECTED';
		retVal += '>Multiple Choice 2-List Selector</option>';
		retVal += '<option value="YNQ"';
		if (lineInitType == 'YNQ') retVal += ' SELECTED';
		retVal += '>Yes/No with Yes Dependent Sub-Questions</option>';
		retVal += '<option value="INS"';
		if (lineInitType == 'INS') retVal += ' SELECTED';
		retVal += '>Form Instructions (no response)</option>';
		retVal += '<option value="PAG"';
		if (lineInitType == 'PAG') retVal += ' SELECTED';
		retVal += '>Page Break in Form (no response)</option>';
		retVal += '</select></td><td style="padding: 0px; vertical-align: top;"><table border=0 cellpadding=0 cellspacing=0><tr>';
		retVal += '<td><img src="/images/spacer.gif" border=0 style="width: ' + ((25*depth)+1) + 'px; height: 20px;"></td>';
		retVal += '<td class="qTD">';
			var textColors = new Array('#000000', '#FFFFFF');
			if (fieldInfo[i][12] == 0) textColors = new Array('#666666', '#AAAAAA');;
			retVal += morlesTXTfield('editSurvey', 'TMPq'+i+'question', lineInitQues, 300, 150, 20, 'pullDownQs('+i+', 1, this.value)', textColors[0], textColors[1]);
		retVal += '</td><td class="qTD" style="padding-top: 4px;">';
			retVal += '&nbsp;<a href="javascript:void(0)" onClick="showQopts(' + i + ');">Options&nbsp;&darr;</a>&nbsp;&nbsp;&nbsp;';
		retVal += '</td><td class="qTD" style="padding-top: 4px; vertical-align: top;">';
			retVal += '<div id="q' + i + 'extraOptsLink" style="position: relative; padding: 0px;">';
				if (lineInitType == 'MLD' || lineInitType == 'MLR' || lineInitType == 'MLC' || lineInitType == 'ML2') retVal += '&nbsp;<a href="javascript:void(0)" onClick="showQanswers(' + i + ');">Answers&nbsp;&darr;</a>';
				else if (lineInitType == 'YN' || lineInitType == 'YNQ') retVal += '&nbsp;<a href="javascript:void(0)" onClick="showQanswersYN(' + i + ');">Answers&nbsp;&darr;</a>';
				else if (lineInitType == 'A2D') retVal += '&nbsp;<a href="javascript:void(0)" onClick="showQanswersA2D(' + i + ');">Answers&nbsp;&darr;</a>';
			retVal += '</div>';
		retVal += '</td></tr></table>';
		//for (var j = 1; j < 6; j++) retVal += '<tr><td><div id="' + lineDiv + '_' + j + '" style="position: relative; width: 100%; overflow: visible; vertical-align: top; border: 0px none;"> </div></td></tr>';
		//retVal += '</table>';
		document.getElementById(lineDiv).innerHTML = retVal;
	}
	return true;
}

function writeQlines(maxLines, extraLines) {
	var i = 0;
	var newCount = 1;
	var tmpDepth = 0;
	gloMaxFields = maxLines;
	gloBuffer = extraLines;
	//alert('maxI: '+maxI+', maxLines: '+maxLines+'..');
	for (i = 0; (i < maxLines && i < maxI && (fieldInfo[i] && fieldInfo[i][0])); i++) {
		//alert('i'+i+':'+fieldInfo[i][0]);
		writeQformLine(('fieldDiv'+i+''), fieldInfo[i][6], fieldInfo[i][0], 'Y', fieldInfo[i][2], fieldInfo[i][1], fieldInfo[i][5], fieldInfo[i][9], fieldInfo[i][8], tmpDepth, i)
		if (fieldInfo[i][2] == 'YNQ') tmpDepth++; // then next is first of this sub-group
		else if (fieldInfo[i][4]%13 == 0) tmpDepth--; // then this was the last of that sub-group
		//writeQCount('field'+i+'Cnt');
	}
	if (i > 0 && fieldInfo[(i-1)] && fieldInfo[(i-1)][8]) newCount = fieldInfo[(i-1)][8];
	tmpDepth = 0;
	newCount++;
	while (i < maxLines && i < maxI+extraLines) {
		//alert('fieldDiv'+i+'');
		writeQformLine(('fieldDiv'+i+''), '-3', defType, '', '', '', '', '', newCount, 0, i)
		//writeQCount('field'+i+'Cnt');
		fieldFilled[i] = true;
		newCount++;
		i++;
	}
	qCount = newCount;
	return true;
}

function submitDump() {
	var j,k;
	for (var i = 0; i < fieldInfo.length; i++) {
		eval("document.editSurvey.q"+i+"qID.value='"+fieldInfo[i][6]+"'");
		eval("document.editSurvey.q"+i+"type.value='"+fieldInfo[i][2]+"'");
		eval("document.editSurvey.q"+i+"name.value='"+fieldInfo[i][0]+"'");
		eval("document.editSurvey.q"+i+"question.value='"+fieldInfo[i][1]+"'");
		eval("document.editSurvey.q"+i+"depth.value='"+fieldInfo[i][10]+"'");
		eval("document.editSurvey.q"+i+"group.value='"+fieldInfo[i][9]+"'");
		eval("document.editSurvey.q"+i+"short.value='"+fieldInfo[i][0]+"'");
		eval("document.editSurvey.q"+i+"opts.value='"+fieldInfo[i][4]+"'");
		eval("document.editSurvey.q"+i+"active.value='"+fieldInfo[i][12]+"'");
		eval("document.editSurvey.fieldReq"+i+".value='"+fieldInfo[i][5]+"'");
		for (j = 0; j < 10; j++) {
			if (ansInfo[i][j] && ansInfo[i][j][1] != '') {
				eval("document.editSurvey.q"+i+"ans"+j+"ID.value='"+ansInfo[i][j][0]+"'");
				eval("document.editSurvey.q"+i+"ans"+j+"Ans.value='"+ansInfo[i][j][1]+"'");
				eval("document.editSurvey.q"+i+"ans"+j+"Weight.value='"+ansInfo[i][j][2]+"'");
				eval("document.editSurvey.q"+i+"ans"+j+"Action.value='"+ansInfo[i][j][3]+":"+ansInfo[i][j][5]+"'");
			}
		}
	}
	return true;
}


function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}