/* Script: Evaluations (evals.js) */
/* Used for managing conditional containers on the evaluations page. */

var cond = new Array();
var condrg = new Array();
var rg = new Array(); /* Array of Rating Grid Values ( comp , item , val , item , val ... ) */

function registerConditional( comp , obj , vals ) {
	cond[cond.length] = new Array(
		comp	,
		obj		,
		vals
	);
};

function registerRGConditional( comp , obj , vars , vals ) {
	condrg[condrg.length] = new Array(
		comp	,
		obj		,
		vars	,
		vals
	);
};

function checkConditional( comp , val ) {
	var d;
	for (var i = 0; i < cond.length; ++i) {
		if (cond[i][0] == comp) {
			d = false;
			for (var u = 0; u < cond[i][2].length; ++u) {
				if (cond[i][2][u] == val) {
					Element.show( $(cond[i][1]) );
					d = true;
					break;
				}
			}

			if (!d) {
				Element.hide( $(cond[i][1]) );
			}
		}
	}
};

function checkRGConditional( comp , item , val ) {
	// Update the value
	var n = -1;
	for (var i = 0; i < rg.length; ++i) {
		if (rg[i][0] == comp) {
			n = i;
			break;
		}
	}
	if (n < 0) {
		n = rg.length;
		rg[n] = new Array( comp , item , val );
	}
	else {
		var u = false;
		for (var i = 1; i < rg[n].length; i += 2) {
			if (rg[n][i] == item) {
				rg[n][i + 1] = val;
				u = true;
				break;
			}
		}
		if (!u) {
			var ia = rg[n].length;
			rg[n][ia] = item;
			rg[n][ia + 1] = val;
		}
	}

	// Check the conditional values
	var d, curvar, curval;
	for (var i = 0; i < condrg.length; ++i) {
		if (condrg[i][0] == comp) {
			d = false;
			for (var v = 0; v < condrg[i][2].length; ++v) {
				curvar = condrg[i][2][v];

				for (var u = 1; u < rg[n].length; u += 2) {
					if (rg[n][u] == curvar) {
						curval = rg[n][u + 1];
						break;
					}
				}

				for (var u = 0; u < condrg[i][3].length; ++u) {
					if (condrg[i][3][u] == curval) {
						Element.show( $(condrg[i][1]) );
						d = true;
						break;
					}
				}
			}

			if (!d) {
				Element.hide( $(condrg[i][1]) );
			}
		}
	}
};

var r = true;

function evalNeedField(fld) {
	if (fld.attributes) {
		var rel = false;
		for (var i = 0; i < fld.attributes.length; ++i) {
			if (fld.attributes[i].nodeName.toLowerCase() == 'rel') rel = fld.attributes[i].nodeValue;
		}
		if (rel) {
			var cmd = rel.substring(0,3);
			if (cmd == 'dep') {
				if (!($F(rel.substring(4)))) return false;
			}

			if (cmd == 'opt') {
				return false;
			}

			if (cmd == 'any') {
				var prts = rel.split(',');
				for (var i = 1; i < prts.length; ++i) {
					if ($F(prts[i])) {
						return false;
					}
				}
			}
		}
	}

	var par = fld.parentNode;
	while (par) {
		if (par.id) {
			if (par.id == 'evalfrm') {
				break;
			}
		}

		if (par.style) {
			if (par.style.display == 'none') {
				return false;
			}
		}

		par = par.parentNode;
	}
	return true;
};

function evalHighlightField(fld,v) {
	var par = fld.parentNode;
	while (par) {
		if (par.id) {
			if (par.id == 'evalfrm') {
				break;
			}
		}

		if (par.className) {
			if (par.className == 'evalobj') {
				if (v) {
					par.style.background = '#ffeeaa';
				}
				else {
					par.style.background = '#ffffff';
				}
				break;
			}
		}

		par = par.parentNode;
	}
	return;
};

function evalVerifyForm() {
	// Must be a modern browser
	if (!(document.getElementById)) return true;

	//var cont = $('evalcont');
	var form = $('evalfrm');
	if (form) {
		// Clear past ones
		var el = document.getElementsByClassName('evalobj');
		for (var i = 0; i < el.length; ++i) {
			el[i].style.background = '#ffffff';
		}

		var fel = document.forms['evalfrm'].elements;
		var hf = false, err = false;
		for (var i = 0; i < fel.length; ++i) {
			hf = false;
			if (evalNeedField(fel[i])) {
				if (fel[i].type == 'text' || fel[i].type == 'textarea') {
					if (fel[i].value == '') {
						hf = true;
					}
				}
				else if (fel[i].type == 'select-one') {
					if (!(fel[i].selectedIndex > 0)) {
						hf = true;
					}
				}
				else if (fel[i].type == 'radio') {
					if (document.forms['evalfrm'].elements[fel[i].name]) {
						hf = true;
						for (var u = 0; u < document.forms['evalfrm'].elements[fel[i].name].length; ++u) {
							if (document.forms['evalfrm'].elements[fel[i].name][u].checked) {
								hf = false;
							}
						}
					}
				}
			}
			if (hf) {
				err = true;
				evalHighlightField(fel[i], true);
			}
		}
	}

	if (err) {
		alert('Please be sure to answer all questions. Ones you missed will be highlihgted in yellow.');
		return false;
	}

	return true;
};