function updateSum(qnum,numQparts){
	var frmEle = document.forms['form1'].elements;
	var inameBase = 'q' + qnum + '_';
	if (frmEle[inameBase + 'sum']){
		var sum = 0;
		for (var i = 0; i <= numQparts; i++){
			if (frmEle[inameBase + i]){
				var tmpVal = frmEle[inameBase + i].value;
				if (tmpVal.length > 0)
					sum += parseInt(tmpVal,10);
			}
		}
		frmEle[inameBase + 'sum'].value = sum;
	}
}
var rankCompleteWording = 'Ranking Complete'; // this can be overridden for other languages
function updateRank(qnum,numQparts){
	var frmEle = document.forms['form1'].elements;
	var inameBase = 'q' + qnum + '_';
	if (frmEle[inameBase + 'ranknums'] && frmEle[inameBase + 'extr']){
		var highestRank = parseInt(frmEle[inameBase + 'extr'].value,10);
		var rankNumUsed = new Array();
		for (var i = 1; i <= highestRank; i++)
			rankNumUsed[i] = false;
		for (var i = 0; i <= numQparts; i++){
			if (frmEle[inameBase + i]){
				var tmpVal = frmEle[inameBase + i].value;
				if (tmpVal.length > 0){
					tmpVal = parseInt(tmpVal,10);
					if (tmpVal > 0)
						rankNumUsed[tmpVal] = true;
				}
			}
		}
		var nums = "";
		var d = "";
		for (var i = 1; i <= highestRank; i++){
			if (!rankNumUsed[i]){
				nums += d + i;
				d = ", ";
			}
		}
		if (nums.length == 0)
			nums = rankCompleteWording;
		frmEle[inameBase + 'ranknums'].value = nums;
	}
}
