// tables for dispatching events from app window (parent)

var _dvec = new Array;
var _dispverb = new Array(
		"msend", "mattach", "mattachfile", "mview", "mreply", "mreplyreplyall", "mreplyall",
		"mforward", "mcopybody", "msave", "save", "new", "choose", "edit", "delete", "refresh",
		"emailsend", "emaillist", 
		"mcompose", "mreplylist", "mreplyalllist", "mforwardlist", "mdelete", "mdeletethis",
		"mmarkread", "prev", "pagetool", "next", "import", "export", "exit", "mfolder", "mgo", "mmove",
		"mprev", "mnext", "mmakefolder", "logout", "domview"
);

_dvec["choose"] = 			new PrimitiveObject('type', "choose", 'enable', '0', 'function', 'pageChoose()');
_dvec["delete"] = 			new PrimitiveObject('type', "delete", 'enable', '0', 'function', 'pageDelete()');
_dvec["domview"] =			new PrimitiveObject('type', "domview", 'enable', '0', 'function', 'viewDOM()');
_dvec["edit"] = 			new PrimitiveObject('type', "edit", 'enable', '0', 'function', 'pageChange()');
_dvec["emaillist"] =		new PrimitiveObject('type', "emaillist", 'enable', '0');
_dvec["emailsend"] =		new PrimitiveObject('type', "emailsend", 'enable', '0');
_dvec["exit"] = 			new PrimitiveObject('type', "exit", 'enable', '0', 'function', 'cancel()');
_dvec["export"] = 			new PrimitiveObject('type', "export", 'enable', '0', 'function', 'pageExport()');
_dvec["import"] = 			new PrimitiveObject('type', "import", 'enable', '0', 'function', 'pageImport()');
_dvec["logout"] =	 		new PrimitiveObject('type', "logout", 'enable', '0', 'function', 'appLogout()');
_dvec["mattach"] =	 		new PrimitiveObject('type', "mattach", 'enable', '0', 'function', 'mailAttach()');
_dvec["mattachfile"] =		new PrimitiveObject('type', "mattachfile", 'enable', '0', 'function', 'mailAttachFile()');
_dvec["mcompose"] = 		new PrimitiveObject('type', "mcompose", 'enable', '0', 'function', 'mailCompose()');
_dvec["mcopybody"] = 		new PrimitiveObject('type', "mcopybody", 'enable', '0', 'function', 'mailCopybody()');
_dvec["mdeletethis"] =		new PrimitiveObject('type', "mdeletethis", 'enable', '0', 'function', 'mailDeletethis()');
_dvec["mdelete"] =			new PrimitiveObject('type', "mdelete", 'enable', '0', 'function', 'mailDelete()');
_dvec["mgo"] =				new PrimitiveObject('type', "mgo", 'enable', '0');
_dvec["mfolder"] =			new PrimitiveObject('type', "mfolder", 'enable', '0');
_dvec["mforward"] =			new PrimitiveObject('type', "mforward", 'enable', '0', 'function', 'mailForward()');
_dvec["mforwardlist"] =		new PrimitiveObject('type', "mforwardlist", 'enable', '0', 'function', 'mailForwardlist()');
_dvec["mmakefolder"] =		new PrimitiveObject('type', "mmakefolder", 'enable', '0', 'function', 'mailMakefolder()');
_dvec["mmarkread"] =		new PrimitiveObject('type', "mmarkread", 'enable', '0', 'function', 'mailMarkread()');
_dvec["mmove"] =			new PrimitiveObject('type', "mmove", 'enable', '0');
_dvec["mnext"] =			new PrimitiveObject('type', "mnext", 'enable', '0', 'function', 'mailNext()');
_dvec["mprev"] =			new PrimitiveObject('type', "mprev", 'enable', '0', 'function', 'mailPrev()');
_dvec["mreply"] =			new PrimitiveObject('type', "mreply", 'enable', '0', 'function', 'mailReply()');
_dvec["mreplyall"] =		new PrimitiveObject('type', "mreplyall", 'enable', '0', 'function', 'mailReplyAll()');
_dvec["mreplyalllist"] =	new PrimitiveObject('type', "mreplyalllist", 'enable', '0', 'function', 'mailReplyAllList()');
_dvec["mreplylist"] =		new PrimitiveObject('type', "mreplylist", 'enable', '0', 'function', 'mailReplylist()');
_dvec["mreplyreplyall"] =	new PrimitiveObject('type', "mreplyreplyall", 'enable', '0', 'function', 'mailReplyReplyAll()');
_dvec["msave"] =			new PrimitiveObject('type', "msave", 'enable', '0', 'function', 'mailSave()');
_dvec["msend"] =			new PrimitiveObject('type', "msend", 'enable', '0', 'function', 'mailSend()');
_dvec["mview"] = 			new PrimitiveObject('type', "mview", 'enable', '0', 'function', 'mailView()');
_dvec["next"] = 			new PrimitiveObject('type', "next", 'enable', '0', 'function', 'pageNext()');
_dvec["new"] =				new PrimitiveObject('type', "new", 'enable', '0', 'function', 'pageAdd()');
_dvec["pagetool"] =			new PrimitiveObject('type', "pagetool", 'enable', '0');
_dvec["prev"] = 			new PrimitiveObject('type', "prev", 'enable', '0', 'function', 'pagePrev()');
_dvec["refresh"] = 			new PrimitiveObject('type', "refresh", 'enable', '0', 'function', 'refresh()');
_dvec["save"] = 			new PrimitiveObject('type', "save", 'enable', '0', 'function', 'pageSave()');

var _dispsave;

// table of delta between td.offsetWidth and <td width=""> by browser

var _viewTablepad = 24;		// padding-left + padding-right of a table column
var _hpad = new Array;
var _viewTableheading = false;

_hpad['IE4'] = _viewTablepad + 2;
_hpad['IE5'] = _viewTablepad + 2;
_hpad['IE6'] = _viewTablepad + 2;
_hpad['MOZ'] = _viewTablepad;
_hpad['IE4MAC'] = _viewTablepad + 2;
_hpad['IE5MAC'] = 0;
_hpad['MOZMAC'] = _viewTablepad;

// definition of bits for view status indicators

var _stat_mark 			= 1;
var _stat_visit 		= 2;
var _stat_save			= 4;
var _stat_delete 		= 8;
var _stat_unread	 	= 16;
var _stat_reply			= 32;
var _stat_forward		= 64;
var	_stat_importlayout	= 128;
var	_stat_importdata	= 256;

// highlighting stuff

var _lasthighlight	= null;
var _laststatus	= null;

// popup window stuff

var _popupWaitQueue = null;
var _popupWaitQueueState = 0;
var _poplistOpen = null;
var _popclass = "";
var _popTimer = null;
var _popDefaultWidth = (window.screen) ? parseInt((screen.availWidth * 0.667)) : 800;
var _popDefaultHeight = (window.screen) ? parseInt((screen.availHeight * 0.75)) : 600;

// misc.

_fConfirmSave		= false;
_addID				= 1;

//
// event handlers (new, save, etc)
//

function viewSetDispatch()
{
	var i;

	_dispsave = new Array;
	for(i = 0; i < _dispverb.length; i++)
		_dvec[_dispverb[i]].setProperty("enable", 0);
	
	for(i = 0; i < arguments.length; i++)
		if(typeof(_dvec[arguments[i]]) != "undefined")
		{
			_dvec[arguments[i]].setProperty("enable", 1);
			_dispsave[_dispsave.length] = arguments[i];
		}
	_dvec["domview"].setProperty("enable", 1);
	appSetToolbar(_dispverb, _dvec);
}

function viewEnableTool()
{
	for(var i = 0; i < arguments.length; i++)
		if(typeof(_dvec[arguments[i]]) != "undefined")
			_dvec[arguments[i]].setProperty("enable", 1);
}

function viewDisableTool()
{
	for(var i = 0; i < arguments.length; i++)
		if(typeof(_dvec[arguments[i]]) != "undefined")
			_dvec[arguments[i]].setProperty("enable", 0);
}

function viewDrawToolbar()
{
	_dvec["domview"].setProperty("enable", 1);
	appSetToolbar(_dispverb, _dvec);
}

function viewExtendDispatch()
{
	_dispsave.concat(arguments);
	viewSetDispatch(_dispsave);
}

function viewDefineTool(toolname, viewobj)
{
	_dvec[toolname] = viewobj;
	_dispverb.unshift(toolname);
}

function viewAdd(uri)
{
	var list = new Array;
	
	list[0] = "status_" + _addID++;
	viewPopupMany(uri, "add", "db_recordid", list);
}

function viewChange(uri)
{
	var list = new Array;

	list = viewBuildList();
	viewPopupMany(uri, "change", "db_recordid", list);
}

function viewChangethis(e, id)
{
	var list = new Array;

	list[0] = id;
	viewPopupMany(URIchange, "change", "db_recordid", list);
	viewClearStatus(id, _stat_mark, "mark");
	viewUnhighlight(e.parentNode, id)
}

function viewDelete(uri)
{
	var list = new Array;

	list = viewBuildList();
	viewPopupMany(uri, "delete", "db_recordid", list);
}

function viewPopupMany(uri, type, variable, list)
{
	viewPopupMany2(uri, type, variable, list, 0, 0);
}

function viewPopupMany2(uri, type, variable, list, maxX, maxY)
{
	_fConfirmSave = true;

	if(list.length == 0)
		return;

	var w = viewEnlargeWidth(maxX);
	var h = viewEnlargeHeight(maxY);
	
	for(var i = list.length - 1; i >= 0; i--)
	{
		if(_popupWaitQueue == null)
			_popupWaitQueue = new LinkedList;

		var items = _split(list[i]);
	
		var theuri = uri + "&" + variable + "=" + items[items.length - 1];
		theuri += "&viewStatusTag=" + list[i];
		var hwin = type + _popclass + list[i];
		var p = new PrimitiveObject("uri", theuri, "win", null, "hwin", hwin, "width", w, "height", h, "state", 0);
		
		_popupWaitQueue.addNodeAtHead(p);

		var t = viewOptimizeTop(h);
		var l = viewOptimizeLeft(w);
		var opt = "scrollbars,menubar,status,toolbar,resizable,width=" + w + ",height=" + h + ",top=" + t + ",left=" + l;
		p.setProperty("state", 1);
		var win = window.open("", p.getProperty("hwin"), opt);
		p.setProperty("win", win);
		win.moveTo(l, t);;
	}
	
	_popupWaitQueueState = 1;
	viewKickstartPopup();
}

function viewPopupManyx(uri, type, variable, list, slist, maxX, maxY)
{
	_fConfirmSave = true;

	if(list.length == 0)
		return;

	var w = viewEnlargeWidth(maxX);
	var h = viewEnlargeHeight(maxY);
	
	for(var i = list.length - 1; i >= 0; i--)
	{
		if(_popupWaitQueue == null)
			_popupWaitQueue = new LinkedList;

		var items = _split(list[i]);
	
		var theuri = uri + "&" + variable + "=" + items[items.length - 1];
		theuri += "&viewStatusTag=" + list[i];
		var hwin = type + _popclass + slist[i];
		var p = new PrimitiveObject("uri", theuri, "win", null, "hwin", hwin, "width", w, "height", h, "state", 0);
		
		_popupWaitQueue.addNodeAtHead(p);

		var t = viewOptimizeTop(h);
		var l = viewOptimizeLeft(w);
		var opt = "scrollbars,menubar,status,toolbar,resizable,width=" + w + ",height=" + h + ",top=" + t + ",left=" + l;
		p.setProperty("state", 1);
		var win = window.open("", p.getProperty("hwin"), opt);
		p.setProperty("win", win);
		win.moveTo(l, t);;
	}
	
	_popupWaitQueueState = 1;
	viewKickstartPopup();
}

function viewPopup(uri, type, maxX, maxY)
{
	var w = viewEnlargeWidth(maxX);
	var h = viewEnlargeHeight(maxY);
	
	var t = viewOptimizeTop(h);
	var l = viewOptimizeLeft(w);
	var opt = "scrollbars,menubar,status,toolbar,resizable,width=" + w + ",height=" + h + ",top=" + t + ",left=" + l;
	var win = window.open(uri, type, opt);
	win.moveTo(l, t);;
	return(win);
}

function viewStub()
{
	var html = '<html><body>this is a test</body></html>';
	return(html);
}

function viewKickstartPopup()
{
	if(_popupWaitQueue == null)
		return;
		
	if(_popupWaitQueueState > 0)
	{
		var p = _popupWaitQueue.getFirst();
		var win = p.getProperty("win");
		win.location.href = p.getProperty("uri");
		if(_popupWaitQueueState == 1)
		{
			_popupWaitQueueState = 2;
			win.focus();
		}

		_popupCurrent = p;
		_popupWaitQueue.dropNode(p);
	}

	if(_popTimer != null)
	{
		window.clearTimeout(_popTimer);
		_popTimer = null;
	}	

	if(_popupWaitQueue.getFirst() == null)
		_popupWaitQueue = null;
	else
		_popTimer = window.setTimeout("viewPopupTimer()", 4000);
}

function viewPopupTimer()
{
	_popTimer = null;
	viewKickstartPopup();
}

function viewPopupDeinit()
{
	p = _popupCurrent;

	if(_popTimer != null)
	{
		window.clearTimeout(_popTimer);
	}
	
	_popTimer = window.setTimeout("viewPopupTimer()", 50);
}

function viewDispatch(op)
{
	if(typeof(_dvec[op]) != "undefined")
		if(_dvec[op].getProperty("enable") == 1)
			eval(_dvec[op].getProperty("function"));
}

function viewDOM()
{
	var obj = window.prompt('Enter Object Name:','$("")');
	DOMViewerObj = eval(obj);
	window.open("/domviewer.html");
}

function viewRefresh()
{
	if(document.refresh)
		document.refresh.submit();
}

//
// popup window handling code
//

function viewBuildList()
{
	return(viewBuildListOf(_stat_mark));
}

function viewBuildObjectList(objlist)
{
	var list = new Array;
	var ret = new Array;
	
	list = viewBuildListOf(_stat_mark);
	for(var i = 0; i < list.length; i++)
		ret.push(objlist[list[i]]);

	return(ret);
}

function viewBuildListOf(status)
{
	var list = new Array;
	
	var theform = eval("document." + _listname);
	for(var i = 0; i < theform.elements.length; i++)
	{
		var name = theform.elements[i].name;
		if(name.substr(0, 7) == "status_" && (theform.elements[i].value & status))
		{
			list[list.length] = name;
		}
	}
	return(list);
}

function viewBuildTargetedList(key)
{
	return(viewBuildTargetedListOf(_stat_mark, key));
}

function viewBuildTargetedListOf(status, key)
{
	var templist = viewBuildListOf(status);
	var list = new Array;
	
	for(var i = 0; i < templist.length; i++)
	{
//		var items = templist[i].split('_');
//		if(items[0] == key)
//			list[list.length] = items[1];
		var items = _split(templist[i]);
		if(items[1] == key)
			list[list.length] = templist[i];
	}
	
	return(list);
}

function viewBuildDelimited(list)
{
	// internal use to AppView.js - don't call directly

	var str = "";
	for(var i = 0; i < list.length; i++)
	{
		if(str.length > 0)
			str += ";";
		var items = _split(list[i]);
		str += items[items.length - 1];
	}
	return(str);
}

function viewBuildDelimitedList()
{
	return(viewBuildDelimited(viewBuildList()));
}

function viewTranslateListDelimited(list, xlist)
{
	var str = "";

	for(var i = 0; i < list.length; i++)
	{
		if(str.length > 0)
			str += ";";

		var items = _split(list[i]);
		str += xlist[items[items.length - 1]];
	}
	
	return(str);
}

function viewBuildDelimitedListOf(status)
{
	return(viewBuildDelimited(viewBuildListOf(status)));
}

function _split(s)
{
	var items = s.split('_');
	var ret = new Array;
	
	for(var i = 0; i < items.length; i++)
	{
		if(items[i].length == 0 && i < items.length - 1)
			items[i + 1] = "_" + items[i + 1];
		else
			ret.push(items[i]);
	}
	
	return(ret);
}

function viewGetHandle(s)
{
	var stuff = _split(s);
	return(stuff[stuff.length - 1]);
}

// viewEnlarge functions utilized by *Popup* functions
// to set the window size.  on legacy platforms, will
// get 600x450 no matter what
// Passing "special" value of 0: 2/3(width)x3/4(height)
//                            1: half of those ^ in both dimensions
// Other values will be returned as-is, provided the window
// fits within the default 2/3(height)x3/4(height), if greater
// they will be reduced accordingly

function viewEnlargeWindow(maxX, maxY)
{
	if (window.screen)
	{
		var ty = screen.availHeight - ((IE4 || IE5 || IE6) ? window.screenTop : window.screenY) - 35;
		var tx = screen.availWidth - ((IE4 || IE5 || IE6) ? window.screenLeft : window.screenX) - 35;
		var limity = (screen.availHeight * 0.667);
		var limitx = (screen.availWidth * 0.667);
		if(maxY == 0 && ty > limity) ty = limity;
		if(maxX == 0 && tx > limitx) tx = limitx;
		window.resizeTo(tx, ty);
	}
}

function viewEnlargeWidth(maxX)
{
	var tx = 600;		// default to fitting within 640x480 if stupid browser
	if (window.screen)
	{
		tx = screen.availWidth - 100;
		if(maxX == 0 && tx > _popDefaultWidth) tx = _popDefaultWidth;
		if(maxX == 1 && tx > (_popDefaultWidth / 2)) tx = _popDefaultWidth / 2;
	}
	if(maxX > 1 && tx > maxX)
		tx = maxX;
	return(tx);
}

function viewEnlargeHeight(maxY)
{
	var ty = 450;		// default to fitting within 640x480 if stupid browser
	if (window.screen)
	{
		ty = screen.availHeight - 150;
		if(maxY == 0 && ty > _popDefaultHeight) ty = _popDefaultHeight;
		if(maxY == 1 && ty > (_popDefaultHeight / 2)) ty = _popDefaultHeight / 2;
	}
	if(maxY > 1 && ty > maxY)
		ty = maxY;
	return(ty);
}

function viewOptimizeTop(h)
{
	return(15);
}

function viewOptimizeLeft(w)
{
	var ret = 15;
	
	if (window.screen)
		ret = parseInt((screen.availWidth - w) / 2);

	return(ret);
}

var _viewFocus = true;

function viewFocus(id)
{
	if(_viewFocus)
	{
		_viewFocus = false;
		if(opener)
			if(opener.viewSetVisit)
				if(document.save)
					if(document.save.db_recordid.value != -1)
					{
						opener.viewSetVisit(id);
						opener.viewClearMark(id);
					}
					
	}
}

function viewFocus2()
{
	viewFocus();
}

function viewPageunload(win)
{
	if(_poplistOpen)
	{
		p = _poplistOpen.findNode("win", win);
		if(p)
			_poplistOpen.dropNode(p);
	}
}

function viewSetPopupClass(s)
{
	_popclass = s;
}

//
// list visuals - highlighting, glyph marking and status tracking
//

var _listname = 'save';

function viewSetListname(name)
{
	_listname = name;
}

function viewHighlight(e, id)
{
	var status = eval("document." + _listname + "." + id);
	e.className = "trs";
	_lasthighlight = e;
	_laststatus = status;
}	

function viewUnhighlight(e, id)
{
	if(_lasthighlight)
	{
		var classname = "trn";
		if(_laststatus)
			classname = (_laststatus.value & _stat_mark) ? "trm" : "trn";
		
		_lasthighlight.className = classname;
	}
	else		
		e.className = "trn";
}	

function viewXmark(id)
{
	var theform = eval("document." + _listname);
	for(var i = 0; i < theform.elements.length; i++)
	{
		var name = theform.elements[i].name;
		if(name.substr(0, 7) == "status_" && (theform.elements[i].value & _stat_mark))
			viewClearStatus(name, _stat_mark, "mark");
	}
//	alert(id);
	viewToggleStatus(id, _stat_mark, "mark");
}

function viewMark(id)
{
	viewToggleStatus(id, _stat_mark, "mark");
	viewClearStatus(id, _stat_visit, "visit");
	viewClearStatus(id, _stat_save, "save");
}

function viewCheck(id)
{
	var check = eval("document." + _listname + ".check_" + id);

	check.checked = ! check.checked;
	viewOnCheck(check, id);
}

function viewCheckAll(check)
{
	var list = new Array;
	
	var theform = eval("document." + _listname);
	for(var i = 0; i < theform.elements.length; i++)
	{
		var name = theform.elements[i].name;
		if(name.substr(0, 6) == "check_")
		{
			var id = name.substr(6, name.length - 6);
			var e = theform.elements[i].parentNode.parentNode;
			if(check.checked)
			{
				viewSetCheck(id);
				e.className = "trm";
			}
			else
			{
				viewClearCheck(id);
				e.className = "trn";
			}
		}
	}
}

function viewMirrorCheck()
{
	var list = new Array;
	
	var theform = eval("document." + _listname);
	for(var i = 0; i < theform.elements.length; i++)
	{
		var name = theform.elements[i].name;
		if(name.substr(0, 6) == "check_")
		{
			var id = name.substr(6, name.length - 6);
			var e = theform.elements[i].parentNode.parentNode;
			if(theform.elements[i].checked)
			{
				viewSetCheck(id);
				e.className = "trm";
			}
			else
			{
				viewClearCheck(id);
				e.className = "trn";
			}
		}
	}
}

function viewClearCheck(id)
{
	var check = eval("document." + _listname + ".check_" + id);

	check.checked = false;
	viewOnCheck(check, id);
}

function viewSetCheck(id)
{
	var check = eval("document." + _listname + ".check_" + id);

	check.checked = true;
	viewOnCheck(check, id);
}

function viewOnCheck(check, id)
{
	var status = eval("document." + _listname + ".status_" + id);
	var e = check.parentNode.parentNode;

	if(check.checked)
	{
		status.value |= _stat_mark;
		e.className = "trm";
	}
	else
	{
		status.value |= _stat_mark;
		status.value ^= _stat_mark;
		e.className = "trn";
	}
}

function viewComplete(win, id, op)
{
	if(op == "save")
	{
		viewClearStatus(id, _stat_mark, "mark");
		viewClearStatus(id, _stat_visit, "visit");
		viewSetStatus(id, _stat_save, "save");
	}
	
	if(op == "delete")
	{
		viewClearStatus(id, _stat_mark, "mark");
		viewClearStatus(id, _stat_visit, "visit");
		viewClearStatus(id, _stat_save, "save");
		viewSetStatus(id, _stat_delete, "delete");
	}

	// add code to count in here later 
}

function viewSetDelete(id)
{
	viewSetStatus(id, _stat_delete, "delete");
}

function viewClearDelete(id)
{
	viewClearStatus(id, _stat_delete, "delete");
}

function viewSetMark(id)
{
	viewSetStatus(id, _stat_mark, "mark");
}

function viewClearMark(id)
{
	viewClearStatus(id, _stat_mark, "mark");
}

function viewSetSave(id)
{
	viewSetStatus(id, _stat_save, "save");
}

function viewClearSave(id)
{
	viewClearStatus(id, _stat_save, "save");
}

function viewSetVisit(id)
{
	viewSetStatus(id, _stat_visit, "visit");
}

function viewClearVisit(id)
{
	viewClearStatus(id, _stat_visit, "visit");
}

function viewClearUnread(id)
{
	viewClearStatus(id, _stat_unread, "unread");
}

function viewSetReply(id)
{
	viewSetStatus(id, _stat_reply, "reply");
}

function viewSetForward(id)
{
	viewSetStatus(id, _stat_forward, "forward");
}

function viewSetStatus(id, bit, type)
{
	var glyph = "/images/glyph_" + type + ".gif";
	var status = eval("document." + _listname + "." + id);

	if(status)
	{
		status.value |= bit;
		var g = ref("g" + type + "_" + id);
		g.src = glyph;
	}
}

function viewClearStatus(id, bit, type)
{
	var glyph = "/images/glyph_blank.gif";
	var status = eval("document." + _listname + "." + id);

	if(status)
	{
		status.value |= bit;
		status.value ^= bit;
		var g = ref("g" + type + "_" + id);
		g.src = glyph;
	}
}

function viewToggleStatus(id, bit, type)
{
	var glyph = "/images/glyph_" + type + ".gif";
	var status = eval("document." + _listname + "." + id);

	if(status.value & bit)
	{
		status.value ^= bit;
		glyph = "/images/glyph_blank.gif";

//		if(bit == _stat_mark)
//		{
//			viewClearStatus(id, _stat_visit, "visit");
//			viewClearStatus(id, _stat_save, "save");
//		}
	}
	else
	{
		status.value |= bit;
	}

	if(type != "")
	{
		var g = ref("g" + type + "_" + id);
		g.src = glyph;
	}
}

function viewGenerateMessage(title, msg)
{
	var html = '<div class="msgtitle">' + title + '</div>';
	html += '<div class="warnmsg">' + msg + '</div>';
	
	return(html);
}

function viewGenerateWarning(title, msg)
{
	var html = '<div class="warntitle">' + title + '</div>';
	html += '<div class="warnmsg">' + msg + '</div>';
	
	return(html);
}

function ul(e)		{ e.style.textDecoration = "underline"; };
function unul(e)	{ e.style.textDecoration = "none"; };

