
MSGSRC_OUTGOING  = 1;
MSGSRC_SPAM      = 2;
MSGSRC_CISS      = 3;
MSGSRC_MAILDEPOT = 4;

var MailViewer = {
	MsgSrc: "",
	MsgID: "",
	MsgMS: "",
	DisableAttachments: false,
	AttachmentList: null,

	InitDialog: function() {
  	jQuery("#MailDialog").dialog({
	    autoOpen: false,
  		draggable: true,
	  	resizable: true,
  		height: 700,
	  	width: 1000,
  		modal: true,
			resize: function(event, ui) { MailViewer.HandleResize(); }
	  });
	},
	
	Show: function() {
		jQuery("#MailDialog").dialog('open');
	},
	
	Close: function() {
		jQuery("#MailDialog").dialog('close');
	},

	OpenMsg: function(Src, ID, MailSealer, DisableAttachments) {
		MailViewer.MsgSrc = Src;  			// Message Source
		MailViewer.MsgID = ID;					// Message ID
		MailViewer.MsgMS = MailSealer;	// Use the crypto Message (only for Message source MailDepot)
		MailViewer.DisableAttachments = DisableAttachments;  // Disable attachment download

		MailViewer.Clear();
		MailViewer.Show();
		MailViewer.StartLoading();

		MailViewer.LoadMessageHeader();
		
		jQuery("#mailviewer-messagebody").block({ message:null, overlayCSS:{opacity:0.1, cursor:'not-allowed'} });
	},
	
	ShowHeaders: function(event) {
		jQuery("#all-headers").show();
		jQuery("#more-headers").removeClass("show-headers");
		jQuery("#more-headers").addClass("hide-headers");
		jQuery("#more-headers").unbind('click'); 
		jQuery("#more-headers").click(MailViewer.HideHeaders);
		MailViewer.HandleResize();
		return false;
	},
	
	HideHeaders: function(event) {
		jQuery("#all-headers").hide();
		jQuery("#more-headers").removeClass("hide-headers");
		jQuery("#more-headers").addClass("show-headers");
		jQuery("#more-headers").unbind('click'); 
		jQuery("#more-headers").click(MailViewer.ShowHeaders);
		MailViewer.HandleResize();
		return false;
	},
	
	StartLoading: function() {
//		this.SetHtmlBody('<p align="center">Loading message. Please Wait ...</p>');	
	},
	
	HandleResize: function() {
		var height = 250;
		var isAttachmentListVisible = jQuery('#attachment-list-container').is(':visible');

		height = jQuery("#MailDialog").height() - jQuery("#MailViewerInputPanel").height() - 30;
		if (isAttachmentListVisible) { 
			height = height - jQuery("#attachment-list-container").height() - 5;
		}
		jQuery("#mailviewer-messagebody-canvas").height(height);
		
		jQuery("#bodyIframe").height(height);
		jQuery("#bodyIframe").width(jQuery("#mailviewer-messagebody-canvas").width());
	},
	
	LoadMessageHeader: function() {
		var _callback = {
						success: function(result) {
							MailViewer.SetHeader(result.MessageHeader);
							MailViewer.LoadMessageAttachmentList();
						},
						failure: function(error) {
							ErrorHandler(error);
						}
				};
	
		switch(MailViewer.MsgSrc) {
			case MSGSRC_OUTGOING:
			case MSGSRC_SPAM:
			case MSGSRC_CISS:
				var service = new Spamfinder(serviceURL, Session.SessionID);
				service.GetMessageHeader(MailViewer.MsgID, true, _callback);
				break;
			case MSGSRC_MAILDEPOT:
				var service = new MailDepot(serviceURL, Session.SessionID);
				service.GetMessageHeader(MailViewer.MsgID, true, MailViewer.MsgMS, _callback);
				break;
		}
	},
	
	LoadMessageAttachmentList: function() {
		var _callback = {
						success: function(result) {
							MailViewer.SetAttachmentList(result.AttachmentList);
							MailViewer.LoadMessageBody();
						},
						failure: function(error) {
							ErrorHandler(error);
						}
				};

		switch(MailViewer.MsgSrc) {
			case MSGSRC_OUTGOING:
			case MSGSRC_SPAM:
			case MSGSRC_CISS:
				var service = new Spamfinder(serviceURL, Session.SessionID);
				service.GetMessageAttachmentList(MailViewer.MsgID, _callback);
				break;
			case MSGSRC_MAILDEPOT:
				var service = new MailDepot(serviceURL, Session.SessionID);
				service.GetMessageAttachmentList(MailViewer.MsgID, MailViewer.MsgMS, _callback);
				break;
		}
	},

	LoadMessageHtmlBody: function() {
		var _callback = {
						success: function(result) {
							if (result.HtmlBody == '') {
								MailViewer.LoadMessageTextBody();
							} else {
								MailViewer.SetHtmlBody(result.HtmlBody);
							}
						},
						failure: function(error) {
							EndLoading();
							ErrorHandler(error);
						}
				};

		switch(MailViewer.MsgSrc) {
			case MSGSRC_OUTGOING:
			case MSGSRC_SPAM:
			case MSGSRC_CISS:
				var service = new Spamfinder(serviceURL, Session.SessionID);
				service.GetMessageHtmlBody(MailViewer.MsgID, _callback);
				break;
			case MSGSRC_MAILDEPOT:
				var service = new MailDepot(serviceURL, Session.SessionID);
				service.GetMessageHtmlBody(MailViewer.MsgID, MailViewer.MsgMS, _callback);
				break;
		}
	},

	LoadMessageTextBody: function() {
		var _callback = {
						success: function(result) {
							MailViewer.SetTextBody(result.TextBody);
						},
						failure: function(error) {
							ErrorHandler(error);
						}
				};

		switch(MailViewer.MsgSrc) {
			case MSGSRC_OUTGOING:
			case MSGSRC_SPAM:
			case MSGSRC_CISS:
				var service = new Spamfinder(serviceURL, Session.SessionID);
				service.GetMessageTextBody(MailViewer.MsgID, _callback);
				break;
			case MSGSRC_MAILDEPOT:
				var service = new MailDepot(serviceURL, Session.SessionID);
				service.GetMessageTextBody(MailViewer.MsgID, MailViewer.MsgMS, _callback);
				break;
		}
	},
	
	LoadMessageBody: function() {
	  var src = '/mail.php?sid=' + Session.SessionID + '&mid=' + MailViewer.MsgID;
	  jQuery("#bodyIframe").src(src);  
	},

	ClearMessageBody: function() {
	  var src = '/mail.php?blank=1';
	  jQuery("#bodyIframe").src(src);  
	},
	
	SetHeader: function(MessageHeader) {
		var Header = '';
		var Line = '';
		var idx = '';
		var Tag = '';
		var Value = '';
		var HeaderLines = MessageHeader.split('\r\n');
		
		for (i = 0; i < HeaderLines.length; i++) {
			Line = HeaderLines[i];
			idx = Line.indexOf(':');
			if (idx > 0) {
				Tag = jQuery.trim(Line.substring(0, idx));
				Value = jQuery.trim(Line.substring(idx + 1));
				Value = Value.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
				
				if (Tag.toUpperCase() == 'SUBJECT') { jQuery("#Subject").html(Value); }
				if (Tag.toUpperCase() == 'FROM')    { jQuery("#From").html(Value); }
				if (Tag.toUpperCase() == 'TO')      { jQuery("#To").html(Value); }
				if (Tag.toUpperCase() == 'DATE')    { jQuery("#Date").html(Value); }
//					if (Tag.toUpperCase() == 'DATE')    { jQuery('<tr><td class="header-title">Date:</td><td>' + Value + '</td></tr>').appendTo('#mailviewer-headers-table'); }
			}
			
			Header = Header + '<font class="bold">' + Tag + ': </font>' + Value + '<br>';
		}
		
		jQuery("#headers-source").html(Header);

		this.HandleResize(); 
	},
	
	SetAttachmentList: function(AttachmentList) {
		this.AttachmentList = AttachmentList;
		var Text = '';
		var url = '#';
		for (i = 0; i < AttachmentList.length; i++) {
			if (AttachmentList[i].ContentID == '') {
			  if (!(MailViewer.DisableAttachments)) {
				  var url = '/download.php?sid=' + Session.SessionID + '&mid=' + this.MsgID + '&fid=' + AttachmentList[i].Filename;
				} 				
				Text = Text + '<li><a class="attdl" href="' + url + '">' + AttachmentList[i].Filename + ' (' + bytesToSize(AttachmentList[i].Size, 2) + ')</a></li>';
			}
		}
		
		if (Text == '') {
			jQuery("#attachment-list-container").hide();
		} else {
			jQuery("#attachment-list-container").show();
			jQuery("#attachment-list").html(Text);
		}
		
		if (MailViewer.DisableAttachments) {
		  jQuery(".attdl").click(function() { jAlert(_('The download of attachments was disabled by the administrator.'), _('Information')); return false; });
		}	
		
		this.HandleResize(); 
	},
	
	Clear: function() {
		this.HideHeaders(null);
		
		jQuery("#Subject").html('n/a');
		jQuery("#From").html('n/a');
		jQuery("#To").html('n/a');
		jQuery("#Date").html('n/a');

		this.SetHeader('');
		this.ClearMessageBody();
		jQuery("#attachments-source").html('');
	}
}

