/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * The contents of this file are subject to the Netscape Public
 * License Version 1.1 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a copy of
 * the License at http://www.mozilla.org/NPL/
 * 
 * Software distributed under the License is distributed on an "AS
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * rights and limitations under the License.
 * 
 * The Original Code is Mozilla Communicator client code, released
 * March 31, 1998.
 * 
 * The Initial Developer of the Original Code is Netscape
 * Communications Corporation. Portions created by Netscape are
 * Copyright (C) 1998-1999 Netscape Communications Corporation. All
 * Rights Reserved.
 */

function GetFirstSelectedMsgFolder()
{
	var result = null;
	var selectedFolders = GetSelectedMsgFolders();
	if (selectedFolders.length > 0) {
		result = selectedFolders[0];
	}

	return result;
}

function MsgGetMessage() 
{
	var folders = GetSelectedMsgFolders();
	var compositeDataSource = GetCompositeDataSource("GetNewMessages");
	GetNewMessages(folders, compositeDataSource);
}

function MsgDeleteMessage(reallyDelete, fromToolbar)
{

	if(reallyDelete)
		dump("reallyDelete\n");
	var srcFolder = GetLoadedMsgFolder();
	var tree = GetThreadTree();
	// if from the toolbar, return right away if this is a news message
	// only allow cancel from the menu:  "Edit | Cancel / Delete Message"
	if (fromToolbar)
	{
		var folderResource = srcFolder.QueryInterface(Components.interfaces.nsIRDFResource);
		var uri = folderResource.Value;
		//dump("uri[0:6]=" + uri.substring(0,6) + "\n");
		if (uri.substring(0,6) == "news:/")
		{
			//dump("delete ignored!\n");
			return;
		}
	}
	dump("tree is valid\n");
	//get the selected elements

	var compositeDataSource = GetCompositeDataSource("DeleteMessages");
	var messages = GetSelectedMessages();

	SetNextMessageAfterDelete(null, true);
	DeleteMessages(compositeDataSource, srcFolder, messages, reallyDelete);
}

function MsgCopyMessage(destFolder)
{
	// Get the id for the folder we're copying into
    destUri = destFolder.getAttribute('id');
	destResource = RDF.GetResource(destUri);
	destMsgFolder = destResource.QueryInterface(Components.interfaces.nsIMsgFolder);

	var srcFolder = GetLoadedMsgFolder();
	var compositeDataSource = GetCompositeDataSource("Copy");
	var messages = GetSelectedMessages();

	CopyMessages(compositeDataSource, srcFolder, destMsgFolder, messages, false);
	
}

function MsgMoveMessage(destFolder)
{
	// Get the id for the folder we're copying into
    destUri = destFolder.getAttribute('id');
	destResource = RDF.GetResource(destUri);
	destMsgFolder = destResource.QueryInterface(Components.interfaces.nsIMsgFolder);
	
	var srcFolder = GetLoadedMsgFolder();
	var compositeDataSource = GetCompositeDataSource("Move");
	var messages = GetSelectedMessages();

	var srcResource = srcFolder.QueryInterface(Components.interfaces.nsIRDFResource);
	var srcUri = srcResource.Value;
	if (srcUri.substring(0,6) == "news:/")
	{
		CopyMessages(compositeDataSource, srcFolder, destMsgFolder, messages, false);
	}
	else
	{
		SetNextMessageAfterDelete(null, true);

		CopyMessages(compositeDataSource, srcFolder, destMsgFolder, messages, true);
	}	
}

function MsgNewMessage(event)
{
  var loadedFolder = GetFirstSelectedMsgFolder();
  var messageArray = GetSelectedMessages();

  if (event.shiftKey)
    ComposeMessage(msgComposeType.New, msgComposeFormat.OppositeOfDefault, loadedFolder, messageArray);
  else
    ComposeMessage(msgComposeType.New, msgComposeFormat.Default, loadedFolder, messageArray);
} 

function MsgReplyMessage(event)
{
  var loadedFolder = GetLoadedMsgFolder();
  var messageArray = GetSelectedMessages();

  dump("\nMsgReplyMessage from XUL\n");
  if (event && event.shiftKey)
    ComposeMessage(msgComposeType.Reply, msgComposeFormat.OppositeOfDefault, loadedFolder, messageArray);
  else
    ComposeMessage(msgComposeType.Reply, msgComposeFormat.Default, loadedFolder, messageArray);
}

function MsgReplyToAllMessage(event) 
{
  var loadedFolder = GetLoadedMsgFolder();
  var messageArray = GetSelectedMessages();

  dump("\nMsgReplyToAllMessage from XUL\n");
  if (event && event.shiftKey)
    ComposeMessage(msgComposeType.ReplyAll, msgComposeFormat.OppositeOfDefault, loadedFolder, messageArray);
  else
    ComposeMessage(msgComposeType.ReplyAll, msgComposeFormat.Default, loadedFolder, messageArray);
}

function MsgForwardMessage(event)
{

  dump("\nMsgForwardMessage from XUL\n");
  var forwardType = 0;
  try {
  	var forwardType = pref.GetIntPref("mail.forward_message_mode");
  } catch (e) {dump ("failed to retrieve pref mail.forward_message_mode");}
  
  if (forwardType == 0)
  	MsgForwardAsAttachment(event);
  else
  	MsgForwardAsInline(event);
}

function MsgForwardAsAttachment(event)
{
  var loadedFolder = GetLoadedMsgFolder();
  var messageArray = GetSelectedMessages();

  dump("\nMsgForwardAsAttachment from XUL\n");
  if (event && event.shiftKey)
    ComposeMessage(msgComposeType.ForwardAsAttachment,
                   msgComposeFormat.OppositeOfDefault, loadedFolder, messageArray);
  else
    ComposeMessage(msgComposeType.ForwardAsAttachment, msgComposeFormat.Default, loadedFolder, messageArray);
}

function MsgForwardAsInline(event)
{
  var loadedFolder = GetLoadedMsgFolder();
  var messageArray = GetSelectedMessages();

 dump("\nMsgForwardAsInline from XUL\n");
  if (event && event.shiftKey)
    ComposeMessage(msgComposeType.ForwardInline,
                   msgComposeFormat.OppositeOfDefault, loadedFolder, messageArray);
  else
    ComposeMessage(msgComposeType.ForwardInline, msgComposeFormat.Default, loadedFolder, messageArray);
}


function MsgEditMessageAsNew()
{
	var loadedFolder = GetLoadedMsgFolder();
	var messageArray = GetSelectedMessages();
    ComposeMessage(msgComposeType.Template, msgComposeFormat.Default, loadedFolder, messageArray);
}

function MsgHome(url)
{
  window.open( url, "_blank", "chrome,dependent=yes,all" );
}

function MsgNewFolder()
{
	var windowTitle = Bundle.GetStringFromName("newFolderDialogTitle");
	var preselectedFolder = GetFirstSelectedMsgFolder();

	CreateNewSubfolder("chrome://messenger/content/newFolderNameDialog.xul",windowTitle, preselectedFolder);
}


function MsgSubscribe()
{
	var windowTitle = Bundle.GetStringFromName("subscribeDialogTitle");
	var preselectedFolder = GetFirstSelectedMsgFolder();
	Subscribe(windowTitle, preselectedFolder);
}

function MsgSaveAsFile() 
{
	dump("\MsgSaveAsFile from XUL\n");
	var messages = GetSelectedMessages();
	if (messages && messages.length == 1)
	{
		SaveAsFile(messages[0]);
	}
}


function MsgSaveAsTemplate() 
{
	dump("\MsgSaveAsTemplate from XUL\n");
	var folder = GetLoadedMsgFolder();
	var messages = GetSelectedMessages();
	if (messages && messages.length == 1)
	{
		SaveAsTemplate(messages[0], folder);
	}
}

function MsgOpenNewWindowForFolder(folderUri)
{
	if(!folderUri)
	{
		var folder = GetLoadedMsgFolder();
		var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
		folderUri = folderResource.Value;
	}

	if(folderUri)
	{
		var layoutType = pref.GetIntPref("mail.pane_config");
		
		if(layoutType == 0)
			window.openDialog( "chrome://messenger/content/messenger.xul", "_blank", "chrome,all,dialog=no", folderUri );
		else
			window.openDialog("chrome://messenger/content/mail3PaneWindowVertLayout.xul", "_blank", "chrome,all,dialog=no", folderUri );
	}

}

function MsgOpenNewWindowForMessage(messageUri, folderUri)
{
	if(!messageUri)
	{
		var message = GetLoadedMessage();
		var messageResource = message.QueryInterface(Components.interfaces.nsIRDFResource);
		messageUri = messageResource.Value;
	}

	if(!folderUri)
	{
		var folder = GetLoadedMsgFolder();
		var folderResource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
		folderUri = folderResource.Value;
	}

	if(messageUri && folderUri)
	{
		window.openDialog( "chrome://messenger/content/messageWindow.xul", "_blank", "chrome,all,dialog=no", messageUri, folderUri );
	}


}

function CloseMailWindow() 
{
	dump("\nClose from XUL\nDo something...\n");
	window.close();
}

function MsgMarkMsgAsRead(markRead)
{
	var selectedMessages = GetSelectedMessages();
	var compositeDataSource = GetCompositeDataSource("MarkMessageRead");

	MarkMessagesRead(compositeDataSource, selectedMessages, markRead);
}

function MsgMarkAsFlagged(markFlagged)
{
	var selectedMessages = GetSelectedMessages();
	var compositeDataSource = GetCompositeDataSource("MarkMessageFlagged");

	MarkMessagesFlagged(compositeDataSource, selectedMessages, markFlagged);
}


function MsgMarkAllRead()
{
	var compositeDataSource = GetCompositeDataSource("MarkAllMessagesRead");
	var folder = GetLoadedMsgFolder();

	if(folder)
		MarkAllMessagesRead(compositeDataSource, folder);
}

function MsgMarkThreadAsRead()
{
	
	var messageList = GetSelectedMessages();
	if(messageList.length == 1)
	{
		var message = messageList[0];
		var compositeDataSource = GetCompositeDataSource("MarkThreadAsRead");

		MarkThreadAsRead(compositeDataSource, message);
	}

}

function MsgViewPageSource() 
{
	dump("MsgViewPageSource(); \n ");
	
	var messages = GetSelectedMessages();
	ViewPageSource(messages);
}

function MsgFind() {
    messenger.find();
}
function MsgFindAgain() {
    messenger.findAgain();
}

function MsgSearchMessages() {
    window.openDialog("chrome://messenger/content/SearchDialog.xul", "SearchMail", "chrome,resizable");
}

function MsgFilters() {
    window.openDialog("chrome://messenger/content/FilterListDialog.xul", "FilterDialog", "chrome");
}

function MsgViewAllHeaders() 
{
	pref.SetIntPref("mail.show_headers",2);
	MsgReload();
	return true;
}
function MsgViewNormalHeaders() 
{
	pref.SetIntPref("mail.show_headers",1);
	MsgReload();
	return true;
}
function MsgViewBriefHeaders() 
{
	pref.SetIntPref("mail.show_headers",0);
	MsgReload();
	return true;
}

function MsgReload() 
{
	ReloadMessage();
}

function MsgStop()
{
	StopUrls();
}

function MsgSendUnsentMsg() 
{
	var folder = GetFirstSelectedMsgFolder();
	if(folder)
	{
		SendUnsentMessages(folder);
	}
}

function MsgMarkByDate() {}
function MsgOpenAttachment() {}
function MsgUpdateMsgCount() {}
function MsgImport() {}
function MsgWorkOffline() {}
function MsgSynchronize() {}
function MsgGetSelectedMsg() {}
function MsgGetFlaggedMsg() {}
function MsgSelectThread() {}
function MsgSelectFlaggedMsg() {}
function MsgShowFolders(){}
function MsgFolderProperties() {}
function MsgShowLocationbar() {}
function MsgViewThreadsUnread() {}
function MsgViewWatchedThreadsUnread() {}
function MsgViewIgnoreThread() {}
function MsgViewAttachInline() {}
function MsgWrapLongLines() {}
function MsgIncreaseFont() {}
function MsgDecreaseFont() {}
function MsgShowImages() {}
function MsgRefresh() {}
function MsgViewPageInfo() {}
function MsgFirstUnreadMessage() {}
function MsgFirstFlaggedMessage() {}
function MsgGoBack() {}
function MsgGoForward() {}
function MsgAddSenderToAddressBook() {}
function MsgAddAllToAddressBook() {}
function MsgIgnoreThread() {}
function MsgWatchThread() {}
