function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function doOnLoad()
{
	if (document.getElementById(ID_BACKGROUND_BLOCKER))
	{
		resizeBackgroundBlocker();
		window.onresize = resizeBackgroundBlocker;
	}
	if (self.pageOnLoad)
	{
		self.pageOnLoad();	
	}
	if (window.showAlertPopup)
	{
		window.showAlertPopup();
	}
}

function doCheckSubmit(url,target)
{
	if (!validateForm())
	{
		return;
	}
	doSubmit(url,target);
}

function doSubmit(url,target)
{
	form = document.forms[0];
	if (target)
	{
		form.target = target;
	}
	if (url)
	{
		form.action = url;
	}
	form.submit();
}

function selectMessageFolder(strFolder, strUrl)
{
	if (document.forms[0].selected_folder)
	{
		document.forms[0].selected_folder.value = strFolder;
		doSubmit(strUrl);
	}
}

function refreshMessages()
{
	document.forms[0].action="messages.jsp";
	document.forms[0].submit();	
}

function moveSelectedMessages()
{
	showElement(ID_BACKGROUND_BLOCKER);
	refreshDialogPosition("moveMessagesDialog");
	document.getElementById("moveMessagesDialog").style.visibility="visible";
	setElementZIndex("moveMessagesDialog", BACKGROUND_BLOCKER_ZINDEX+1);
	
	
}

function cancelMoveSelectedMessages()
{
	document.getElementById("moveMessagesDialog").style.visibility="hidden";	
	hideElement(ID_BACKGROUND_BLOCKER);
}

function confirmMoveSelectedMessages()
{
	var strNewFolderName = "", strNewFolderLabel = "";
	if ( document.moveMessagesDialogForm.new_folder.value.length>0 )
	{
		strNewFolderLabel = strNewFolderName = document.moveMessagesDialogForm.new_folder.value;
		// check that the folder name is not invalid
		if (!validateNameField("Folder name", strNewFolderName, 2, 32, INVALID_NAME_REGEXP, ""))
		{
			return false;
		}
	}
	else
	{
		strNewFolderName = document.moveMessagesDialogForm.existing_folder.options[document.moveMessagesDialogForm.existing_folder.selectedIndex].value;
		strNewFolderLabel = document.moveMessagesDialogForm.existing_folder.options[document.moveMessagesDialogForm.existing_folder.selectedIndex].text;
	}
	// count the selected messages
	var nSelected = 0;
	var strSelectedList = "";	
	if (document.forms['mainForm'].selected_messages)
	{
		var selections = document.forms['mainForm'].selected_messages;
		var nSelections = (selections.length>0)?selections.length:1;
		for (var i=0;i<nSelections;i++)
		{
			var thisSelection = (nSelections==1) ? selections : selections[i];
			if (thisSelection.checked)
			{
				nSelected++;
				strSelectedList += "~" + thisSelection.value;
			}
		}
		
		if (nSelected==0)
		{
			alert("You must select one or more messages to move.");
			return false;
		}
		if (!confirm("Are you sure you want to move " + nSelected + " message(s)\nto the folder \"" + strNewFolderLabel + "\"?"))
		{
			return false;
		}
		
		showElement(ID_BACKGROUND_BLOCKER);
		showElement(ID_WORKING_IN_PROGRESS_BAR);
		hideDropdownBoxesForForm('moveMessagesDialogForm');
		setElementZIndex("moveMessagesDialog", BACKGROUND_BLOCKER_ZINDEX-1);
		Ajax.submitRequest(
			"ajaxMoveMessages.jsp",
			"move_to=" + escape(strNewFolderName) + "&message_ids=" + strSelectedList,
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				if (results.errorCode==0)
				{
					refreshMessages();
				} else
				{
					handleAjaxResult(results);
					setElementZIndex("moveMessagesDialog", BACKGROUND_BLOCKER_ZINDEX+1);
					showDropdownBoxesForForm('moveMessagesDialogForm');
					//hideElement(ID_BACKGROUND_BLOCKER);
				}
			},
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				handleAjaxResult(results);
				setElementZIndex("moveMessagesDialog", BACKGROUND_BLOCKER_ZINDEX+1);
				showDropdownBoxesForForm('moveMessagesDialogForm');
			}
		);
	}
	
	return false;
}

function deleteSelectedMessages()
{
	var nSelected = 0;
	var strSelectedList = "";	
	if (document.forms['mainForm'].selected_messages)
	{
		var selections = document.forms['mainForm'].selected_messages;
		var nSelections = (selections.length>0)?selections.length:1;
		for (var i=0;i<nSelections;i++)
		{
			var thisSelection = (nSelections==1) ? selections : selections[i];
			if (thisSelection.checked)
			{
				nSelected++;
				strSelectedList += "~" + thisSelection.value;
			}
		}
		
		if (nSelected==0)
		{
			alert("You must select one or more messages to delete.");
			return;
		}
		if (!confirm("Are you sure you want to delete " + nSelected + " message(s)?"))
		{
			return;
		}
		
		showElement(ID_BACKGROUND_BLOCKER);
		showElement(ID_WORKING_IN_PROGRESS_BAR);
		Ajax.submitRequest(
			"ajaxDeleteMessages.jsp",
			"message_ids=" + strSelectedList,
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				if (results.errorCode==0)
				{
					refreshMessages();
				} else
				{
					handleAjaxResult(results);
					hideElement(ID_BACKGROUND_BLOCKER);
				}
			},
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				handleAjaxResult(results);
			}
		);
	}
}

function undeleteSelectedMessages()
{
	var nSelected = 0;
	var strSelectedList = "";	
	if (document.forms['mainForm'].selected_messages)
	{
		var selections = document.forms['mainForm'].selected_messages;
		var nSelections = (selections.length>0)?selections.length:1;
		for (var i=0;i<nSelections;i++)
		{
			var thisSelection = (nSelections==1) ? selections : selections[i];
			if (thisSelection.checked)
			{
				nSelected++;
				strSelectedList += "~" + thisSelection.value;
			}
		}
		
		if (nSelected==0)
		{
			alert("You must select one or more messages to restore.");
			return;
		}
		if (!confirm("Are you sure you want to restore " + nSelected + " message(s) to your inbox?"))
		{
			return;
		}
		
		showElement(ID_BACKGROUND_BLOCKER);
		showElement(ID_WORKING_IN_PROGRESS_BAR);
		Ajax.submitRequest(
			"ajaxUndeleteMessages.jsp",
			"message_ids=" + strSelectedList,
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				if (results.errorCode==0)
				{
					refreshMessages();
				} else
				{
					handleAjaxResult(results);
					hideElement(ID_BACKGROUND_BLOCKER);
				}
			},
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				handleAjaxResult(results);
			}
		);
	}
}

function markAsReadSelectedMessages()
{
	var nSelected = 0;
	var strSelectedList = "";	
	if (document.forms['mainForm'].selected_messages)
	{
		var selections = document.forms['mainForm'].selected_messages;
		var nSelections = (selections.length>0)?selections.length:1;
		for (var i=0;i<nSelections;i++)
		{
			var thisSelection = (nSelections==1) ? selections : selections[i];
			if (thisSelection.checked)
			{
				nSelected++;
				strSelectedList += "~" + thisSelection.value;
			}
		}
		
		if (nSelected==0)
		{
			alert("You must select one or more messages to update.");
			return;
		}
		if (!confirm("Are you sure you want to mark " + nSelected + " message(s) as read?"))
		{
			return;
		}
		
		showElement(ID_BACKGROUND_BLOCKER);
		showElement(ID_WORKING_IN_PROGRESS_BAR);
		Ajax.submitRequest(
			"ajaxMarkAsReadMessages.jsp",
			"message_ids=" + strSelectedList,
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				if (results.errorCode==0)
				{
					refreshMessages();
				} else
				{
					handleAjaxResult(results);
					hideElement(ID_BACKGROUND_BLOCKER);
				}
			},
			function(results) {
				hideElement(ID_WORKING_IN_PROGRESS_BAR);
				handleAjaxResult(results);
				hideElement(ID_BACKGROUND_BLOCKER);
			}
		);
	}
}

function refreshDialogPosition(id) {

	var nTop, nLeft;
	nLeft = (document.body.scrollWidth>document.body.clientWidth ? document.body.scrollWidth : document.body.clientWidth);
	nTop = (document.body.scrollHeight>document.body.offsetHeight ? document.body.scrollHeight-2 : document.body.offsetHeight);
	
	setElementStyle(id, "top", ((nTop)/2)-200);
	setElementStyle(id, "left", ((nLeft)/2)-230);
}


function viewMessage(nMessageId)
{
	showElement(ID_BACKGROUND_BLOCKER);
	showElement(ID_WORKING_IN_PROGRESS_BAR);

	refreshDialogPosition("viewMessagesDialog");

	Ajax.submitRequest(
		"ajaxViewMessage.jsp",
		"message_id=" + nMessageId,
		function(results) {
			hideElement(ID_WORKING_IN_PROGRESS_BAR);
			if (results.errorCode==0 && results.message)
			{
				document.getElementById("viewMessagesDialogSender").innerHTML = (results.message.sender ? results.message.sender : "(none)");
				document.getElementById("viewMessagesDialogSent").innerHTML = (results.message.sent ? results.message.sent : "(none)");
				document.getElementById("viewMessagesDialogSubject").innerHTML = (results.message.subject ? results.message.subject : "(none)");

				var ifrm = document.getElementById("viewMessageDialogIFrame");
				ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
				ifrm.document.open();
				ifrm.document.write(results.message.body ? "<div style='font-size:11px; font-family:arial, sans-serif;'>" + results.message.body + "</div>" : "(none)");
				ifrm.document.close();
				showElement("viewMessagesDialog");
				setElementZIndex("viewMessagesDialog", BACKGROUND_BLOCKER_ZINDEX+1);
				
				// Set message to read in the table.
				var img = document.getElementById("readStatusImage" + nMessageId);
				if (img)
				{
					var oldSrc = img.src.substring(0,1+img.src.lastIndexOf("/"));
					img.src = oldSrc + "statusRead.gif";	
				}
				var row = document.getElementById("messageItem" + nMessageId);
				if (row)
				{
					row.className='messageItemRead';
				}
			
			} else
			{
				handleAjaxResult(results);
				hideElement(ID_BACKGROUND_BLOCKER);
			}
		},
		function(results) {
			hideElement(ID_WORKING_IN_PROGRESS_BAR);
			handleAjaxResult(results);
			hideElement(ID_BACKGROUND_BLOCKER);
		}
	);
}

function closeViewSelectedMessages()
{
	hideElement("viewMessagesDialog");
	hideElement(ID_BACKGROUND_BLOCKER);
}

function toggleAllMessages()
{
	toggleMessageSelection(-1);
}

function updateMessageButtons(nSelected)
{
	if (nSelected==0)
	{
		if (document.getElementById("undeleteSelectedMessagesButton"))
		{
			setInputDisabled("undeleteSelectedMessagesButton", true);
		}
		else
		{
			setInputDisabled("deleteSelectedMessagesButton", true);	
		}
		setInputDisabled("markAsReadSelectedMessagesButton", true);
		setInputDisabled("moveSelectedMessagesButton", true);
	}
	else
	{
		if (document.getElementById("undeleteSelectedMessagesButton"))
		{
			setInputDisabled("undeleteSelectedMessagesButton", false);
		}
		else
		{
			setInputDisabled("deleteSelectedMessagesButton", false);
			setInputDisabled("markAsReadSelectedMessagesButton", false);
			setInputDisabled("moveSelectedMessagesButton", false);
		}	
	}	
}

function selectAndViewMessage(nMessageId)
{
	if (document.forms['mainForm'].selected_messages)
	{
		var selections = document.forms['mainForm'].selected_messages;
		var nSelections = (selections.length>0)?selections.length:1;
		for (var i=0;i<nSelections;i++)
		{
			var thisSelection = (nSelections==1) ? selections : selections[i];
			if (thisSelection.value==nMessageId)
			{
				var bChecked = thisSelection.checked;
				thisSelection.checked = true;
				var oMessageRow = document.getElementById("messageItem" + nMessageId);
				if (oMessageRow)
				{
					var strMessageRowClass = oMessageRow.className;
					if (strMessageRowClass.indexOf(" highlighted")<0)
					{
						oMessageRow.className = strMessageRowClass + " highlighted";	
					}
				}
			}
			else
			{
				var bChecked = thisSelection.checked;
				thisSelection.checked = false;
				var oMessageRow = document.getElementById("messageItem" + thisSelection.value);
				if (oMessageRow)
				{
					var strMessageRowClass = oMessageRow.className;
					if (strMessageRowClass.indexOf(" highlighted")>=0)
					{
						oMessageRow.className = strMessageRowClass.substring(0,strMessageRowClass.indexOf(" highlighted"));
					}
				}
			}
		}
	}
	updateMessageButtons(1);
	viewMessage(nMessageId);
}

function toggleMessageSelection(nMessageId)
{
	if (document.forms['mainForm'].selected_messages)
	{
		var nSelected = 0;
		var selections = document.forms['mainForm'].selected_messages;
		var nSelections = (selections.length>0)?selections.length:1;
		for (var i=0;i<nSelections;i++)
		{
			var thisSelection = (nSelections==1) ? selections : selections[i];
			var bChecked = thisSelection.checked;
		
			if (thisSelection.value==nMessageId || nMessageId<0)
			{
				thisSelection.checked = !bChecked;
				var oMessageRow = document.getElementById("messageItem" + thisSelection.value);
				if (oMessageRow)
				{
					var strMessageRowClass = oMessageRow.className;
					if (!bChecked)
					{
						strMessageRowClass += " highlighted";
						nSelected++;
					}
					else
					{
						if (strMessageRowClass.indexOf(" highlighted")>=0)
						{
							strMessageRowClass = strMessageRowClass.substring(0,strMessageRowClass.indexOf(" highlighted"));
						}
					}
					oMessageRow.className = strMessageRowClass;
				}
			}
			else
			{
				if (bChecked) {nSelected++;}
			}
		}
		updateMessageButtons(nSelected);
	}	
}

function showAlertMessage(strMessage)
{
	if (strMessage.length>0)
	{
		alert(strMessage);	
	}	
}

var arrMonthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var arrDayNames = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var nMonth = (new Date()).getMonth();
var nYear = getCurrentYear( (new Date()).getYear() );

function setCalendarNextMonth(nMaxMonth,nMaxYear)
{
	if (++nMonth>=12)
	{
		nMonth=0;
		nYear++;
	}
	if (document.getElementById("uiCalendarMonth") && document.getElementById("uiCalendarFrame"))
	{
		document.getElementById("uiCalendarMonth").innerHTML = arrMonthNames[nMonth] + ", " + nYear;
		document.getElementById("uiCalendarFrame").src = "innerCalendar.jsp?month=" + nMonth + "&year=" + nYear + "&t=" + (new Date().getTime());
	}
	
}

function setCalendarPreviousMonth(nMinMonth,nMinYear)
{
	if (--nMonth<0)
	{
		nMonth=11;
		nYear--;
	}
	if (document.getElementById("uiCalendarMonth") && document.getElementById("uiCalendarFrame"))
	{
		document.getElementById("uiCalendarMonth").innerHTML = arrMonthNames[nMonth] + ", " + nYear;
		document.getElementById("uiCalendarFrame").src = "innerCalendar.jsp?month=" + nMonth + "&year=" + nYear + "&t=" + (new Date().getTime());
	}
}


function editCalendarNotes(nDayOfWeek, nDate, strNotes)
{
	var popupDiv = document.getElementById("calendarPopupDiv");
	var textDiv = document.getElementById("calendarPopupText");
	if (popupDiv)
	{
		popupDiv.style.visibility = "hidden";	
		var strText = "<div style='text-align:center; padding:3px;'><strong>Add Notes:<br/>" + arrDayNames[nDayOfWeek] + ", " + nDate + " " +
			arrMonthNames[nMonth] + " " + nYear + "</strong></div>";
			
		strText += "<form style='padding:0;margin:0;' action=innerCalendar.jsp method=get><center>" +
			"<textarea id=userCalendarNoteEditor name=notes class=calendarNotesEditor>";
		
		var strFinishing = "</textarea></center><div class=uiUserCalendarControls>";
		strFinishing += "<input type=hidden name=action value='saveNotes'>";
		strFinishing += "<input type=hidden name=date value='" + nDate + "'>";
		strFinishing += "<input type=hidden name=month value='" + nMonth + "'>";
		strFinishing += "<input type=hidden name=year value='" + nYear + "'>";
		
		strFinishing += "<a href='javascript:saveCalendarNotes()'>Save</a>";
		strFinishing += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:hideCalendarPopup()'>Cancel</a>";
		strFinishing += "</div></form>";
		
		textDiv.innerHTML = strText + strNotes + strFinishing;
		popupDiv.style.visibility = "visible";
	}
}

function saveCalendarNotes()
{
	// check for any invalid characters
	var strVal = document.forms[0].notes.value;
	for (var i=0;i<strVal.length;i++)
	{
		var c = strVal.charCodeAt(i);
		if (c<32 || c>126 || c==34)
		{
			alert("Sorry, your Note contains invalid characters. Special characters\nincuding new lines, tabs and double quotes are not allowed.\nPlease remove any invalid characters and try again.");
			return;
		}
	}
	
	document.forms[0].submit();	
}

function showCalendarPopup(nDayOfWeek, nDate, strEvents, strNotes)
{
	var popupDiv = document.getElementById("calendarPopupDiv");
	var textDiv = document.getElementById("calendarPopupText");
	if (popupDiv)
	{
		var strText = "<div style='text-align:center; padding:3px;'><strong>Notes:<br/>" + arrDayNames[nDayOfWeek] + ", " + nDate + " " +
			arrMonthNames[nMonth] + " " + nYear + "</strong></div>";
		var strFinishing = "<div class=uiUserCalendarControls>";
		var strFormNotes = "";
		strFinishing += "<a href=\"javascript:editCalendarNotes(" + nDayOfWeek + "," + nDate + " ,&quot;" + strNotes + "&quot;)\">";
		if (!strNotes || strNotes.length==0)
		{
			strFinishing += "Add Note</a>";
		}
		else
		{
			strFormNotes = "<div class=uiUserCalendarNote>" + strNotes +"</div>";
			strFinishing += "Edit Note</a>";
		}
		strFinishing += "&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:hideCalendarPopup()'>Close</a>";
		strFinishing += "</div>";
		
		textDiv.innerHTML = strText + "<div class='uiUserCalendarNoteDiv'>" + strEvents + strFormNotes + "</div>" + strFinishing;
		popupDiv.style.visibility = "visible";
	}
}

function hideCalendarPopup()
{
	if (document.getElementById("calendarPopupDiv"))
	{
		document.getElementById("calendarPopupDiv").style.visibility="hidden";
	}
}

function getCurrentYear(nYear)
{
	return (nYear<1900)?(nYear+1900):nYear;	
}

function resizeBackgroundBlocker()
{
	var nWidth, nHeight;
	nWidth = (document.body.scrollWidth>document.body.clientWidth ? document.body.scrollWidth : document.body.clientWidth);
	nHeight = (document.body.scrollHeight>document.body.offsetHeight ? document.body.scrollHeight-2 : document.body.offsetHeight);
	document.getElementById("backgroundBlocker").style.width = nWidth;
	document.getElementById("backgroundBlocker").style.height = nHeight;
	setElementStyle(ID_WORKING_IN_PROGRESS_BAR, "width", nWidth);
	setElementStyle(ID_WORKING_IN_PROGRESS_BAR, "height", nHeight);
}

function setInputDisabled(eleId, bDisabled)
{
	var ele = (typeof eleId == 'object') ? eleId : document.getElementById(eleId);
	if (ele && (ele.tagName.toLowerCase()=='input' || ele.tagName.toLowerCase()=='button') && ele.disabled!=bDisabled)
	{
		ele.disabled = bDisabled;
		if (ele.type=='image')
		{
			setElementClassName(eleId, ele.name+(bDisabled?'Disabled':''));
		}
	}
}

function setElementClassName(eleId, strClassName)
{
	var ele = document.getElementById(eleId);
	if (ele) ele.className = strClassName;
}
