Utility = {
	arrayToTable: function (data) {
		hasHeader = false;
		if(is_array(data) && data[0] != undefined) {
			str = '<table border="0" cellpadding="0" cellspacing="0">';
			for(var i in data) {
				if(is_array(data[i])) {
					if(!hasHeader) {
						str += Utility.objToHeader(data[i]);
						hasHeader = true;
					}
					str += Utility.objToRow(data[i]);
				} else {
					str += '<tr><td style="border:1px solid #999999" valign="top" align="center">'+data[i]+'</td></tr>';
				}
			}
			str += '</table>';
			return str;
		} else if(data) { // the top node must be an object instead. Just write the object portion.
			str = '<table border="0" cellpadding="0" cellspacing="0">';
			str += Utility.objToHeader(data);
			str += Utility.objToRow(data);
			str += '</table>';
			return str;
		}
		return null;
	},
	
	objToHeader: function(v) {
		if(is_array(v)) {
			keys = array_keys(v);
			str = '<tr>';
			for(var i in keys) {
				str += '<td style="border:1px solid #999999;font-weight:bold;" align="center" valign="top">'+keys[i]+'</td>';
			}
			str += '</tr>';
			return str;
		}
		return '<tr><td style="border:1px solid #999999;font-weight:bold;" align="center" valign="top">'+v+'</td></tr>';
	},
	
	objToRow: function(v) {
		if(is_array(v)) {
			str = '<tr>';
			for(var i in v) {
				str += '<td style="border:1px solid #999999;" valign="top" align="center">'+(is_array(v[i]) ? Utility.arrayToTable(v[i]) : v[i])+'</td>';  // recurse here.
			}
			str += '</tr>';
			return str;
		}
		return '<tr><td style="border:1px solid #999999;font-weight:bold;" align="center" valign="top">'+v+'</td></tr>';
	},
	
	arrayToOptions: function(list,value) {
		str = '';
		for(var i in list) {
			var selected = (value==i || value==list[i] ? 'selected':'');
			str += '<option value="'+i+'" '+selected+'>'+list[i]+'</option>';
		}
		return str;
	}
}