var MailDepotFrame = {
	Name: "MailDepotFrame",
  SelectedListRows: new Array(),
	QueryType: -1, // 0 = Simple ; 1 = Advanced Query ; 2 = Advanced Fulltext Query
	Query: { NewQuery: false, 
					 QueryFilter: {
		        	FullTextQuery: "",
							EmailAddress: "",
							AddressSearchMode: 0,
							Subject: "",
							Attachment: "",
							DateFrom: '1800-01-01',
							DateTo: '1800-01-01',
							UseArchiveTime: false,
							IncSpamDetected: false,
							IncVirusDetected: false },
					 DeputyAddress: "",		
					 Page: 0,
					 Rows: 1,
					 SortField: "",
					 SortDirection: ""},
 
  InitFrame: function() {
 	  MailDepotFrame.CreateMailDepotList();	
    jQuery("#MailDepotListPanel").contextMenu({menu: 'MailDepotListMenu'}, MailDepotFrame.HandleMailDepotListMenu);
		jQuery("#MailDepotListPanel").disableContextMenuItems(null);
		
    jQuery("#MailDepotSimpleSearch").click(function(){MailDepotFrame.CreateQueryForm(0);});
    jQuery("#MailDepotAdvancedSearch").click(function(){MailDepotFrame.CreateQueryForm(1);});
    jQuery("#MailDepotQueryForm").submit(MailDepotFrame.SubmitMailDepotQuery);
		
		MailDepotFrame.CreateQueryForm(0);  // Simple Query
	},

  ShowFrame: function() {
		jQuery('#MailDepotFrame').show();
		MailDepotFrame.OnFrameResize();
		
		// Load list if empty
		var count = jQuery("#MailDepotList").getGridParam('reccount');
		if ((count == null) || (count == 0)) {
		  MailDepotFrame.SubmitMailDepotQuery();
		}	
		
		SetWindowKeyPressHandler(MailDepotFrame.OnKeyPress);
  },

  HideFrame: function() {
    jQuery('#MailDepotFrame').hide();
  },

	OnLogoff: function() {
		jQuery("#MailDepotList").clearGridData();	  	  	  	  
	},
	
	OnKeyPress: function(event) {
		switch (event.keyCode) {
			case 116:
				MailDepotFrame.SubmitMailDepotQuery();
				return false;
				break;
		}
	},
	
  OnFrameResize: function() {
		var listWidth = jQuery("#MailDepotInputPanel").width();
		var listHeight = Layout.state.container.innerHeight - Layout.state.north.size - Layout.state.south.size;

    listHeight = listHeight - jQuery("#MailDepotInputPanel").height() - jQuery('#MailDepotListPager').height() - 40;
    jQuery("#MailDepotList").setGridWidth(listWidth, false); 
    jQuery("#MailDepotList").setGridHeight(listHeight); 

    MailDepotFrame.CreateDeputyList();	
  },

  CreateQueryForm: function(QueryType) {
		switch(QueryType) {
			case 0:
    		MailDepotFrame.CreateSimpleQueryForm();
			  break;
			case 1:
    		MailDepotFrame.CreateAdvancedQueryForm();
			  break;
			case 2:
    		MailDepotFrame.CreateAdvancedFulltextQueryForm();
			  break;
		}
	},

  CreateSimpleQueryForm: function() {
    jQuery(".AdvancedQuery").hide();
    jQuery(".SimpleQuery").show();
    MailDepotFrame.QueryType = 0;
		MailDepotFrame.OnFrameResize();
	},

  CreateAdvancedQueryForm: function() {
    jQuery(".SimpleQuery").hide();
    jQuery(".AdvancedQuery").show();
		
		jQuery("#MailDepotQueryDateRange").daterangepicker({
					dateFormat: "yy-mm-dd",
					rangeStartTitle: _('Start date'),
					rangeEndTitle: _('End date'),
					nextLinkText: _('Next'),
					prevLinkText: _('Prev'),
					doneButtonText: _('Done'),
					presetRanges: [
            {text: _('Last 30 days'), dateStart: '-30 days', dateEnd: 'Today' },
            {text: _('Last 3 months'), dateStart: '-3 months', dateEnd: 'Today' },
            {text: _('Last year'), dateStart: '-1 year', dateEnd: 'Today' }
                        ],
					presets: {dateRange:_('Date Range')},
					rangeSplitter: 'to',
				 	onOpen:function(){  }, 
				  onClose: function(){  }
				 });
		
		if (jQuery("#MailDepotQueryDateRange").val() == '') {
			var dateFrom = Date.today().addMonths(-1).toString("yyyy-MM-dd");
		  var dateTo = Date.today().toString("yyyy-MM-dd");
		  jQuery("#MailDepotQueryDateRange").val(dateFrom + ' to ' + dateTo);
		}
		
    MailDepotFrame.QueryType = 1;
		MailDepotFrame.OnFrameResize();
	},

  CreateAdvancedFulltextQueryForm: function() {
    MailDepotFrame.QueryType = 2;
	},

  CreateDeputyList: function() {
    var DeputyList = document.getElementById("MailDepotDeputyList");
		BuildDeputyDropDown(DeputyList);
		jQuery("#MailDepotDeputyList").msDropDown();
		switch(MailDepotFrame.QueryType) {
			case 0: jQuery("#MailDepotDeputyList").width(document.getElementById("MailDepotQuery").offsetWidth);
			  break;
			case 1: jQuery("#MailDepotDeputyList").width(document.getElementById("MailDepotQueryAttachment").offsetWidth);
			  break;
			case 2: jQuery("#MailDepotDeputyList").width(document.getElementById("MailDepotQuery").offsetWidth);
			  break;
		}
		document.getElementById("MailDepotDeputyList").refresh(); 
	},

  CreateMailDepotList: function() {
    jQuery("#MailDepotList").jqGrid({
			datatype: MailDepotFrame.GetGridData,
			height: 250,
			colNames:['', _('Message ID'), '', _('Subject'), _('Sender'), _('Recipients'), _('Message Time'), _('Size'), _('Attachments'), _('MS'), _('Archive Time'), '', '', '', ''],
			colModel:[
				{name:'image',index:'image', width:20, formatter:MailDepotFrame.ImageFormatter, sortable:false},
				{name:'id',index:'id', width:100},
				{name:'direction',index:'direction', width:20, formatter:MailDepotFrame.DirectionFormatter},
				{name:'subject',index:'subject', width:400},
				{name:'sender',index:'sender', width:250},
				{name:'recipients',index:'recipients', width:250},
				{name:'date',index:'date', width:120, formatter:"date", formatoptions:{srcformat:"Y-m-d\TH:i:s", newformat:"Y-m-d H:i:s"}},
				{name:'size',index:'size', width:100, formatter:byteFormater},
				{name:'attachments',index:'attachments', width:200},
				{name:'ms',index:'ms', width:20, formatter:MailDepotFrame.MailSealerFormatter},
				{name:'archiveTime',index:'archiveTime', width:120, formatter:"date", formatoptions:{srcformat:"Y-m-d\TH:i:s", newformat:"Y-m-d H:i:s"}},
				{name:'imported',index:'imported', width:20, hidden:true},
				{name:'location',index:'location', width:20, hidden:true},
				{name:'virusDetected',index:'virusDetected', width:20, hidden:true},
				{name:'spamDetected',index:'spamDetected', width:20, hidden:true}
				],
			imgpath: gridimgpath,
			pager: jQuery('#MailDepotListPager'),
			autoencode: true,
			viewrecords: true,
			multiselect: false,
			rowNum:30, 
			sortname: 'date',
			sortorder: 'desc',
			onSelectRow: MailDepotFrame.OnSelectRow,
			onSelectAll: MailDepotFrame.OnSelectAll,
			onRightClickRow: MailDepotFrame.OnRightClickRow,
			ondblClickRow: MailDepotFrame.OnDblClickRow
    }); 
  },

	ImageFormatter: function (cellvalue, options, rowObject) {
    var ImageSrc = '<img src="/gui/images/icons/index.png">';

    // Idx 13 = VirusDetected
    // Idx 14 = SpamDetected

    if (rowObject[13] > 0) { 
		  ImageSrc = '<img src="/gui/images/icons/index_warning.png">';
		}
    else if (rowObject[14] > 0) { 
		  ImageSrc = '<img src="/gui/images/icons/index_delete.png">';
		}
		
		return ImageSrc;
	},

	DirectionFormatter: function (cellvalue, options, rowObject) {
    // Idx  2 = Direction
    // Idx 11 = Imported
	  switch (parseInt(rowObject[11])) {
			case 2:
        return '<img src="/gui/images/icons/outlook.png">';
			  break;
			case 3:
        return '<img src="/gui/images/icons/exchange.png">';
			  break;
			default: 	
			  if (parseInt(rowObject[2]) == 0) {
          return '<img src="/gui/images/icons/mail_outgoing.png">';
				}
			  else if (parseInt(rowObject[2]) == 1) {
          return '<img src="/gui/images/icons/mail_incoming.png">';
				}
	  }
  },

  MailSealerFormatter: function (cellvalue, options, rowObject) {
   // do something here
	  if (cellvalue) {
      return '<img src="/gui/images/icons/lock.png">';
		} else {
      return '';
	  }
  },
	
	BeginLoading: function() {
	  jQuery("#lui_MailDepotList, #load_MailDepotList").show(); 
	},

	EndLoading: function() {
		jQuery("#lui_MailDepotList, #load_MailDepotList").hide(); 
	},
	
	GetGridData: function(pdata) {
		if (jQuery('#MailDepotFrame').is(':hidden')) {
			return;
		}
		
    MailDepotFrame.BeginLoading();

		MailDepotFrame.Query.Page = pdata.page;
		MailDepotFrame.Query.Rows = pdata.rows;
		MailDepotFrame.Query.SortField = pdata.sidx;
  	MailDepotFrame.Query.SortDirection = pdata.sord;
		
    var service = new MailDepot(serviceURL, Session.SessionID);

    service.QueryMailDepot(MailDepotFrame.Query,
      {
        success: MailDepotFrame.QueryMailDepot,
				failure: function(error) {
					MailDepotFrame.EndLoading();
					ErrorHandler(error);
				}
      }
    );
	},
	
  HandleMailDepotListMenu: function(action, el, pos) {
		switch(action) {
			case 'Preview':
	  	  if (MailDepotFrame.SelectedListRows.length == 1) {
          var ID = jQuery("#MailDepotList").getCell(MailDepotFrame.SelectedListRows[0], 'id');
          MailDepotFrame.OpenMessage(ID);
				}	
			  break;
			case 'Deliver':
    		MailDepotFrame.DeliverMessage();
			  break;
			case 'SaveMessage':
	  	  if (MailDepotFrame.SelectedListRows.length == 1) {
					if (Session.GroupPolicy.MailDepotRules.DisableSaveMessage) {
						jAlert(_('Message download was disabled by the administrator.'), _('Information'));
					} else {
						var MsgID = jQuery("#MailDepotList").getCell(MailDepotFrame.SelectedListRows[0], 'id');
						var service = new MailDepot(serviceURL, Session.SessionID);
					  service.GetMessageHeader(MsgID, true, false, {
							success: function(result) {
								DownloadFile('/download.php?sid=' + Session.SessionID + '&mid=' + MsgID + '&fid=message.eml');
							},
							failure: function(error) {
								ErrorHandler(error);
							}
						});
					}
				}	
			  break;
		}
	},

  SubmitMailDepotQuery: function() {
	  if (jQuery('#lui_MailDepotList').is(':visible')) {
			jAlert(_('A query is already in progress. Please wait...'), _('Information'));
			return false;
		}
	
	  MailDepotFrame.Query.NewQuery = true;
	
		// Clear QueryFilter
		MailDepotFrame.Query.QueryFilter.EmailAddress = '';
		MailDepotFrame.Query.QueryFilter.AddressSearchMode = 0;
		MailDepotFrame.Query.QueryFilter.Subject = '';
		MailDepotFrame.Query.QueryFilter.Attachment = '';
		MailDepotFrame.Query.QueryFilter.DateFrom = '1800-01-01';
		MailDepotFrame.Query.QueryFilter.DateTo = '1800-01-01';
		MailDepotFrame.Query.QueryFilter.UseArchiveTime = false;
		MailDepotFrame.Query.QueryFilter.IncSpamDetected = false;
		MailDepotFrame.Query.QueryFilter.IncVirusDetected = false;
		MailDepotFrame.Query.QueryFilter.FullTextQuery = ''; 

		switch(MailDepotFrame.QueryType) {
			case 0:
			  if (document.getElementById("MailDepotQuery").value == '') {
  		     MailDepotFrame.Query.QueryFilter.DateFrom = Date.parse('-' + Session.UserProfile.DefaultArchiveDisplayPeriode + ' days');
     		  MailDepotFrame.Query.QueryFilter.DateTo = Date.parse('+5 days');
				}	
			
			  var SearchFieldIdx = document.getElementById("SimpleQuerySearchField").selectedIndex;
			  switch(SearchFieldIdx) {
			    case 0:
					  MailDepotFrame.Query.QueryFilter.EmailAddress = document.getElementById("MailDepotQuery").value;
						MailDepotFrame.Query.QueryFilter.AddressSearchMode = 0;
						break;
			    case 1:
					  MailDepotFrame.Query.QueryFilter.EmailAddress = document.getElementById("MailDepotQuery").value;
						MailDepotFrame.Query.QueryFilter.AddressSearchMode = 1;
						break;
			    case 2:
					  MailDepotFrame.Query.QueryFilter.EmailAddress = document.getElementById("MailDepotQuery").value;
						MailDepotFrame.Query.QueryFilter.AddressSearchMode = 2;
						break;
			    case 3:
					  MailDepotFrame.Query.QueryFilter.Subject = document.getElementById("MailDepotQuery").value;
						break;
			    case 4:
					  MailDepotFrame.Query.QueryFilter.Attachment = document.getElementById("MailDepotQuery").value;
						break;
			    case 5:
					  MailDepotFrame.Query.QueryFilter.FullTextQuery = document.getElementById("MailDepotQuery").value;
						break;
				}
			  break;
			case 1:
				MailDepotFrame.Query.QueryFilter.EmailAddress = document.getElementById("MailDepotQueryEmailAddress").value;
				MailDepotFrame.Query.QueryFilter.AddressSearchMode = document.getElementById("AdvancedQueryEmailAddressField").selectedIndex;
				MailDepotFrame.Query.QueryFilter.Subject = document.getElementById("MailDepotQuerySubject").value;
				MailDepotFrame.Query.QueryFilter.Attachment = document.getElementById("MailDepotQueryAttachment").value;
				
				var dates = jQuery("#MailDepotQueryDateRange").val().split(' to ');
				MailDepotFrame.Query.QueryFilter.DateFrom = dates[0];
				if (dates.length > 1) {
  				MailDepotFrame.Query.QueryFilter.DateTo = dates[1];
				} else {
  				MailDepotFrame.Query.QueryFilter.DateTo = dates[0];
				}
				MailDepotFrame.Query.QueryFilter.UseArchiveTime = document.getElementById("UseArchiveDateCheckBox").checked;
				MailDepotFrame.Query.QueryFilter.IncSpamDetected = document.getElementById("IncludeSpamCheckBox").checked;
				MailDepotFrame.Query.QueryFilter.IncVirusDetected = document.getElementById("IncludeVirusesCheckBox").checked;
			  break;
			case 2:
			  break;
		}

		var idx = document.getElementById("MailDepotDeputyList").selectedIndex;
		if (idx == 0) {
      MailDepotFrame.Query.DeputyAddress = '';
		} else {
      MailDepotFrame.Query.DeputyAddress = document.getElementById("MailDepotDeputyList").options[idx].text;
		}
 
		jQuery("#MailDepotList").setGridParam({page:1}).trigger("reloadGrid");
		return false;
  },

  QueryMailDepot: function(result) {
		var GridData = { total: 0,
		                 page: 0,
										 records: 0,
										 rows: new Array()
									 };
		                
		MailDepotFrame.Query.NewQuery = false;
		
		GridData.total = result.QueryResult.TotalPages;
		GridData.page = result.QueryResult.Page;
		GridData.records = result.QueryResult.Records;
		
	  jQuery("#MailDepotList").clearGridData();
	  for (i = 0; i < result.QueryResult.Rows.length; i++) {
			Recipients = '';
  	  for (j = 0; j < result.QueryResult.Rows[i].Recipients.length; j++) {
				if (Recipients == '') {
    			Recipients = result.QueryResult.Rows[i].Recipients[j];
				}  else {
    			Recipients = Recipients + ", " + result.QueryResult.Rows[i].Recipients[j];
				}
			}

			Attachments = '';
  	  for (j = 0; j < result.QueryResult.Rows[i].Attachments.length; j++) {
				if (Attachments == '') {
    			Attachments = result.QueryResult.Rows[i].Attachments[j];
				}  else {
    			Attachments = Attachments + ", " + result.QueryResult.Rows[i].Attachments[j];
				}
			}

      var row = {id: 0,
			       cell: new Array()
			      };

      row.id = i;
			row.cell[0] = result.QueryResult.Rows[i].ID;
			row.cell[1] = result.QueryResult.Rows[i].ID;
			row.cell[2] = result.QueryResult.Rows[i].Direction;
			row.cell[3] = result.QueryResult.Rows[i].Subject;
			row.cell[4] = result.QueryResult.Rows[i].Sender;
			row.cell[5] = Recipients;
			row.cell[6] = result.QueryResult.Rows[i].Date;
			row.cell[7] = result.QueryResult.Rows[i].Size;
			row.cell[8] = Attachments;
			row.cell[9] = result.QueryResult.Rows[i].MailSealer;
			row.cell[10] = result.QueryResult.Rows[i].ArchiveTime;
			row.cell[11] = result.QueryResult.Rows[i].Imported;
			row.cell[12] = result.QueryResult.Rows[i].Location;
			row.cell[13] = result.QueryResult.Rows[i].VirusDetected;
			row.cell[14] = result.QueryResult.Rows[i].SpamDetected;

      GridData.rows[i] = row;
	  }
	  
    JsonGridData = YAHOO.util.Lang.JSON.stringify(GridData);
		var thegrid = jQuery("#MailDepotList")[0]; 
    thegrid.addJSONData(eval("("+JsonGridData+")")); 
    MailDepotFrame.EndLoading();
  },

	UpdateMenuItems: function() {
	  jQuery("#MailDepotListMenu").disableContextMenuItems(null);
	  if (MailDepotFrame.SelectedListRows.length == 1) {
		  jQuery("#MailDepotListMenu").enableContextMenuItems('#Preview,#Deliver,#SaveMessage');
		}
	},
	
	OnSelectAll: function(aRowids, status) {
	  MailDepotFrame.SelectedListRows = jQuery("#MailDepotList").getGridParam('selarrrow');
		MailDepotFrame.UpdateMenuItems();
	},
	
  OnSelectRow: function(rowid, status) {
	  if (jQuery("#MailDepotList").getGridParam('multiselect')) {
		  MailDepotFrame.SelectedListRows = jQuery("#MailDepotList").getGridParam('selarrrow');
		} else {
		  MailDepotFrame.SelectedListRows[0] = jQuery("#MailDepotList").getGridParam('selrow');
		}		
		MailDepotFrame.UpdateMenuItems();
	},
	
  OnRightClickRow: function(rowid, iRow, iCol) {
	  if (MailDepotFrame.SelectedListRows.length == 0) {
		  jQuery("#MailDepotList").setSelection(rowid, true);
		}	
  },

  OnDblClickRow: function(rowid, iRow, iCol) {
    var ID = jQuery("#MailDepotList").getCell(rowid, 'id');
    MailDepotFrame.OpenMessage(ID);
  },
	
  OpenMessage: function(ID) {
	  if (Session.GroupPolicy.MailDepotRules.DisablePreview) {
			jAlert(_('Message preview was disabled by the administrator.'), _('Information'));
		} else {
			MailViewer.OpenMsg(MSGSRC_MAILDEPOT, ID, false, Session.GroupPolicy.MailDepotRules.DisableAttachmentsInPreview);
		}	
	},
	
  DeliverMessage: function() {
	  if (MailDepotFrame.SelectedListRows.length == 1) {
      var ID = jQuery("#MailDepotList").getCell(MailDepotFrame.SelectedListRows[0], 'id');
      var service = new MailDepot(serviceURL, Session.SessionID);
		
			service.DeliverArchivedMessage(ID, '', false,
			{
					success: function() { jAlert(_('Message successfully delivered.')); },
					failure: ErrorHandler
			});
		}	
	}
}
