var MailDepot2Frame = {
	Name: "MailDepot2Frame",
    SelectedListRows: new Array(),
	Query: { NewQuery: false, 
			 QueryString: "",
			 Storages: new Array(),
			 Categories: new Array(),
			 States: new Array(),
			 DeputyAddresses: new Array(),
			 IncludeDeleted: false,
			 MaxResults: 10000,
			 MaxResponseTime: 30000,
			 Page: 0,
			 Rows: 1,
			 SortField: "",
			 SortDirection: ""},
 
  InitFrame: function() {
 	  MailDepot2Frame.CreateMailDepot2List();	
		jQuery("#MailDepot2ListPanel").contextMenu({menu: 'MailDepot2ListMenu'}, MailDepot2Frame.HandleMailDepot2ListMenu);
		jQuery("#MailDepot2ListPanel").disableContextMenuItems(null);
		
		jQuery("#MailDepot2QueryForm").submit(MailDepot2Frame.SubmitMailDepot2Query);
	},

  ShowFrame: function() {
		jQuery('#MailDepot2Frame').show();
		MailDepot2Frame.OnFrameResize();
		
		SetWindowKeyPressHandler(MailDepot2Frame.OnKeyPress);
		MailDepot2Frame.CreateDeputyList();	
  },

  HideFrame: function() {
    jQuery('#MailDepot2Frame').hide();
  },

	OnLogoff: function() {
		jQuery("#MailDepot2List").clearGridData();	  	  	  	  
	},
	
	OnKeyPress: function(event) {
		switch (event.keyCode) {
			case 116:
				MailDepot2Frame.SubmitMailDepot2Query();
				return false;
				break;
		}
	},
	
  OnFrameResize: function() {
		var listWidth = jQuery("#MailDepot2InputPanel").width();
		var listHeight = Layout.state.container.innerHeight - Layout.state.north.size - Layout.state.south.size;

    listHeight = listHeight - jQuery("#MailDepot2InputPanel").height() - jQuery('#MailDepot2ListPager').height() - 40;
    jQuery("#MailDepot2List").setGridWidth(listWidth, false); 
    jQuery("#MailDepot2List").setGridHeight(listHeight); 

  },

  CreateDeputyList: function() {
		var DeputyList = document.getElementById("MailDepot2DeputyList");
	
		var service = new CoreService(serviceURL, Session.SessionID);
		service.GetLocalRecipientList(0,
		{
			success: function(result) {
			    jQuery("#MailDepot2DeputyList").dropdownchecklist("destroy"); 
				BuildAddressListDropDown(DeputyList, result.LocalRecipients);
				var dd_params = { icon : {
										placement : 'right',
										toOpen : 'ui-icon-arrowthick-1-s',
										toClose : 'ui-icon-arrowthick-1-n'
									}, width: 100, maxDropHeight: 200 };
				dd_params.width = document.getElementById("MailDepot2Query").offsetWidth - 7;
				dd_params.maxDropHeight = Layout.state.container.innerHeight - 300;
				jQuery("#MailDepot2DeputyList").dropdownchecklist(dd_params); 
				MailDepot2Frame.ExecuteDefaultQuery();
			},
			failure: ErrorHandler
		  }
		);
	},

  CreateMailDepot2List: function() {
    jQuery("#MailDepot2List").jqGrid({
			datatype: MailDepot2Frame.GetGridData,
			height: 250,
			colNames:['', _('Message ID'), '', _('Subject'), _('Sender'), _('Recipients'), _('Message Time'), _('Size'), _('Attachments'), _('MS'), _('Archive Time'), '', '', '', '', '', ''],
			colModel:[
				{name:'image',index:'image', width:20, formatter:MailDepot2Frame.ImageFormatter, sortable:false},
				{name:'id',index:'id', width:100},
				{name:'direction',index:'direction', width:20, formatter:MailDepot2Frame.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:MailDepot2Frame.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:'storageGUID',index:'storageGUID', width:20, hidden:true},
				{name:'virusDetected',index:'virusDetected', width:20, hidden:true},
				{name:'spamDetected',index:'spamDetected', width:20, hidden:true},
				{name:'directionValue',index:'directionValue', width:20, hidden:true},
				{name:'encryptionValue',index:'encryptionValue', width:20, hidden:true}
				],
			imgpath: gridimgpath,
			pager: jQuery('#MailDepot2ListPager'),
			autoencode: true,
			viewrecords: true,
			multiselect: false,
			rowNum:30, 
			sortname: 'date',
			sortorder: 'desc',
			onSelectRow: MailDepot2Frame.OnSelectRow,
			onSelectAll: MailDepot2Frame.OnSelectAll,
			onRightClickRow: MailDepot2Frame.OnRightClickRow,
			ondblClickRow: MailDepot2Frame.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 = MessageType
	  switch (parseInt(rowObject[11])) {
			case 3:
        return '<img src="/gui/images/icons/outlook.png">';
			  break;
			case 4:
        return '<img src="/gui/images/icons/exchange.png">';
			  break;
			default: 	
			  switch (parseInt(rowObject[2])) {
				case 1:
          return '<img src="/gui/images/icons/mail_outgoing.png">';
				  break;
				case 2:
          return '<img src="/gui/images/icons/mail_incoming.png">';
				  break;
				default: 	
        return '<img src="/gui/images/icons/exchange.png">';
			}
	  }
  },

  MailSealerFormatter: function (cellvalue, options, rowObject) {
   // do something here
	  if (cellvalue > 0) {
      return '<img src="/gui/images/icons/lock.png">';
		} else {
      return '';
	  }
  },
	
	BeginLoading: function() {
	  jQuery("#lui_MailDepot2List, #load_MailDepot2List").show(); 
	},

	EndLoading: function() {
		jQuery("#lui_MailDepot2List, #load_MailDepot2List").hide(); 
	},
	
	GetGridData: function(pdata) {
		if (jQuery('#MailDepot2Frame').is(':hidden')) {
			return;
		}
		
    MailDepot2Frame.BeginLoading();

		MailDepot2Frame.Query.Page = pdata.page;
		MailDepot2Frame.Query.Rows = pdata.rows;
		MailDepot2Frame.Query.SortField = pdata.sidx;
		MailDepot2Frame.Query.SortDirection = pdata.sord;
		
		var service = new MailDepot2(serviceURL, Session.SessionID);

		service.QueryMailDepot(MailDepot2Frame.Query,
			{
				success: MailDepot2Frame.QueryMailDepot2,
				failure: function(error) {
					MailDepot2Frame.EndLoading();
					ErrorHandler(error);
				}
			}
		);
	},
	
  HandleMailDepot2ListMenu: function(action, el, pos) {
		switch(action) {
			case 'Preview':
	  	  if (MailDepot2Frame.SelectedListRows.length == 1) {
          var ID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'id');
          MailDepot2Frame.OpenMessage(ID);
				}	
			  break;
			case 'Deliver':
    		MailDepot2Frame.DeliverMessage();
			  break;
			case 'SaveMessage':
	  	  if (MailDepot2Frame.SelectedListRows.length == 1) {
					if (Session.GroupPolicy.MailDepotRules.DisableSaveMessage) {
						jAlert(_('Message download was disabled by the administrator.'), _('Information'));
					} else {
						var ID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'id');
						var Direction = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'directionValue');
						var Encryption = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'encryptionValue');
						var StorageGUID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'storageGUID');

						var ActionIdx = 1; // Original Message
						if (Encryption != 0)
						{
							switch (Direction)
							{
								case "1":
									ActionIdx = 1;   // Outgoing, we will show the original message
									break;
								case "2":
									ActionIdx = 2;   // Incoming, we will show the decrypted message
									break;
							}
						}

						var service = new MailDepot2(serviceURL, Session.SessionID);
					  service.ExtractOriginalMail(StorageGUID, ID, ActionIdx, {
							success: function(result) {
								DownloadFile('/download.php?file=' + result.MailFilename);
							},
							failure: function(error) {
								ErrorHandler(error);
							}
						});
					}
				}	
			  break;
		}
	},

  ExecuteDefaultQuery: function() {
                // Only load list if empty
                var count = jQuery("#MailDepot2List").getGridParam('reccount');
                if ((count == null) || (count == 0)) {
                  MailDepot2Frame.SubmitMailDepot2Query();
                }
  },

  SubmitMailDepot2Query: function() {
	  if (jQuery('#lui_MailDepotList').is(':visible')) {
			jAlert(_('A query is already in progress. Please wait...'), _('Information'));
			return false;
		}
	
	    MailDepot2Frame.Query.NewQuery = true;

	    var queryInput = jQuery.trim(document.getElementById("MailDepot2Query").value);

	if (queryInput != "") {
        	var QueryString = MailDepot2Frame.GetQueryString(queryInput);
        } else {
        	var QueryString = MailDepot2Frame.GetDefaultQueryString();
	}

        MailDepot2Frame.Query.QueryString = QueryString;
		
		// --- End Build Query String ----
		
		var selector = document.getElementById("MailDepot2DeputyList");
		var k = 0;
		MailDepot2Frame.Query.DeputyAddresses.length = 0;  // Clear array
		for(i=0; i < selector.options.length; i++ ) {
            if (selector.options[i].selected && (selector.options[i].value != "")) {
			  MailDepot2Frame.Query.DeputyAddresses[k] = selector.options[i].value;
			  k++;
            }
        }
 
		jQuery("#MailDepot2List").setGridParam({page:1}).trigger("reloadGrid");
		return false;
  },

  GetQueryString: function(queryInput) {
                // --- Build Query String ----
                var QueryString = "";
                var WordExpression = "";
                var WordList = queryInput.split(" ");

                var ExpressionFields = new Array();
            var SearchFieldIdx = document.getElementById("SimpleQuery2SearchField").selectedIndex;
            switch(SearchFieldIdx) {
                        case 0:
                                        ExpressionFields[0] = "SUBJECT";
                                        ExpressionFields[1] = "SENDER";
                                        ExpressionFields[2] = "TO";
                                        ExpressionFields[3] = "CC";
                                        ExpressionFields[4] = "BCC";
                                        break;
                        case 1:
                                        ExpressionFields[0] = "SUBJECT";
                                        ExpressionFields[1] = "SENDER";
                                        break;
                        case 2:
                                        ExpressionFields[0] = "SUBJECT";
                                        ExpressionFields[1] = "TO";
                                        ExpressionFields[2] = "CC";
                                        ExpressionFields[3] = "BCC";
                                        break;
                        case 3:
                                        ExpressionFields[0] = "SUBJECT";
                                        break;
                        case 4:
                                        ExpressionFields[0] = "SENDER";
                                        break;
                        case 5:
                                        ExpressionFields[0] = "TO";
                                        ExpressionFields[1] = "CC";
                                        ExpressionFields[2] = "BCC";
                                        break;
                        case 6:
                                    ExpressionFields[0] = "BODY_TEXT";
                                        break;
                        case 7:
                                        ExpressionFields[0] = "ATTACHMENT_TEXT";
                                        ExpressionFields[1] = "ATTACHMENT_NAME";
                                        break;
                        case 8:
                                        ExpressionFields[0] = "SUBJECT";
                                        ExpressionFields[1] = "BODY_TEXT";
                                        ExpressionFields[2] = "SENDER";
                                        ExpressionFields[3] = "TO";
                                        ExpressionFields[4] = "CC";
                                        ExpressionFields[5] = "ATTACHMENT_TEXT";
                                        ExpressionFields[6] = "ATTACHMENT_NAME";
                                        break;
                }

                for(i = 0; i < WordList.length; i++){
                  if (jQuery.trim(WordList[i]) == "")
                    continue;

                  for(j = 0; j < ExpressionFields.length; j++){
                if (j == 0) {
              WordExpression = ExpressionFields[j] + ":" + WordList[i];
                        } else {
                          WordExpression = WordExpression + " OR " + ExpressionFields[j] + ":" + WordList[i];
                        }
                  }

          if (i == 0) {
            QueryString = "(" + WordExpression + ")";
                  } else {
                        QueryString = QueryString + " AND (" + WordExpression + ")";
                  }
	}
        return QueryString;
  },

  GetDefaultQueryString: function() {
	var QueryString = "";

	var dateFrom = new Date().addDays(-1 * Session.UserProfile.DefaultArchiveDisplayPeriode).toString("yyyyMMddHHmmss");
	var dateTo = new Date().toString("yyyyMMddHHmmss");

	QueryString = "DATE:[" + dateFrom + " TO " + dateTo + "]";

	return QueryString;
  },
  
  QueryMailDepot2: function(result) {
		var GridData = { total: 0,
		                 page: 0,
						 records: 0,
						 rows: new Array()
						};
		                
		MailDepot2Frame.Query.NewQuery = false;
		
		GridData.total = result.QueryResult.TotalPages;
		GridData.page = result.QueryResult.Page;
		GridData.records = result.QueryResult.Records;
		
	  jQuery("#MailDepot2List").clearGridData();
	  
	  if (result.QueryResult.Rows == null) {
	    MailDepot2Frame.EndLoading();
	    return;
	  }	
	  
	  for (i = 0; i < result.QueryResult.Rows.length; i++) {

	  Recipients = '';

	  if (result.QueryResult.Rows[i].ToRecipients != null) {
    	for (j = 0; j < result.QueryResult.Rows[i].ToRecipients.length; j++) {
		if (Recipients == '') {
    		Recipients = result.QueryResult.Rows[i].ToRecipients[j];
		}  else {
    		Recipients = Recipients + ", " + result.QueryResult.Rows[i].ToRecipients[j];
		}
	    }
	  }

	  if (result.QueryResult.Rows[i].CcRecipients != null) {
  	    for (j = 0; j < result.QueryResult.Rows[i].CcRecipients.length; j++) {
		if (Recipients == '') {
    		Recipients = result.QueryResult.Rows[i].CcRecipients[j];
		}  else {
    		Recipients = Recipients + ", " + result.QueryResult.Rows[i].CcRecipients[j];
		}
	    }
      }
	  
      Attachments = '';

	  if (result.QueryResult.Rows[i].Attachments != null) {
  	    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].Encryption;
			row.cell[10] = result.QueryResult.Rows[i].ArchiveTime;
			row.cell[11] = result.QueryResult.Rows[i].MessageType;
			row.cell[12] = result.QueryResult.Rows[i].StorageGUID;
			//row.cell[13] = result.QueryResult.Rows[i].VirusDetected;
			//row.cell[14] = result.QueryResult.Rows[i].SpamDetected;
			row.cell[15] = result.QueryResult.Rows[i].Direction;
			row.cell[16] = result.QueryResult.Rows[i].Encryption;

      GridData.rows[i] = row;
	  }
	  
    JsonGridData = YAHOO.util.Lang.JSON.stringify(GridData);
		var thegrid = jQuery("#MailDepot2List")[0]; 
    thegrid.addJSONData(eval("("+JsonGridData+")")); 
    MailDepot2Frame.EndLoading();
  },

	UpdateMenuItems: function() {
	  jQuery("#MailDepot2ListMenu").disableContextMenuItems(null);
	  if (MailDepot2Frame.SelectedListRows.length == 1) {
		  jQuery("#MailDepot2ListMenu").enableContextMenuItems('#Preview,#Deliver,#SaveMessage');
		}
	},
	
	OnSelectAll: function(aRowids, status) {
	  MailDepot2Frame.SelectedListRows = jQuery("#MailDepot2List").getGridParam('selarrrow');
		MailDepot2Frame.UpdateMenuItems();
	},
	
  OnSelectRow: function(rowid, status) {
	  if (jQuery("#MailDepot2List").getGridParam('multiselect')) {
		  MailDepot2Frame.SelectedListRows = jQuery("#MailDepot2List").getGridParam('selarrrow');
		} else {
		  MailDepot2Frame.SelectedListRows[0] = jQuery("#MailDepot2List").getGridParam('selrow');
		}		
		MailDepot2Frame.UpdateMenuItems();
	},
	
  OnRightClickRow: function(rowid, iRow, iCol) {
	  if (MailDepot2Frame.SelectedListRows.length == 0) {
		  jQuery("#MailDepot2List").setSelection(rowid, true);
		}	
  },

  OnDblClickRow: function(rowid, iRow, iCol) {
    var ID = jQuery("#MailDepot2List").getCell(rowid, 'id');
    MailDepot2Frame.OpenMessage(ID);
  },
	
  OpenMessage: function(ID) {
	  if (MailDepot2Frame.SelectedListRows.length == 1) {
	  if (Session.GroupPolicy.MailDepotRules.DisablePreview) {
			jAlert(_('Message preview was disabled by the administrator.'), _('Information'));
		} else {
          var ID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'id');
          var Direction = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'directionValue');
          var Encryption = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'encryptionValue');
    	  var StorageGUID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'storageGUID');

          var ActionIdx = 1; // Original Message
          if (Encryption != 0)
          {
            switch (Direction)
            {
	      case "1":
                ActionIdx = 1;   // Outgoing, we will show the original message
                break;
              case "2":
                ActionIdx = 2;   // Incoming, we will show the decrypted message
                break;
            }	
          }
	      MailViewer2.OpenMsg(StorageGUID, ID, ActionIdx, Session.GroupPolicy.MailDepotRules.DisableAttachmentsInPreview);
		}	
	}
	},
	
  DeliverMessage: function() {
	  if (MailDepot2Frame.SelectedListRows.length == 1) {

          var ID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'id');
          var Direction = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'directionValue');
          var Encryption = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'encryptionValue');
          var StorageGUID = jQuery("#MailDepot2List").getCell(MailDepot2Frame.SelectedListRows[0], 'storageGUID');

          var ActionIdx = 1; // Original Message
          if (Encryption != 0)
          {
            switch (Direction)
            {
              case "1":
                ActionIdx = 1;   // Outgoing, we will show the original message
                break;
              case "2":
                ActionIdx = 2;   // Incoming, we will show the decrypted message
                break;
            }
          }

      var service = new MailDepot2(serviceURL, Session.SessionID);
		
			service.DeliverOriginalMail(StorageGUID, ID, ActionIdx, "",
			{
					success: function() { jAlert(_('Message successfully delivered.')); },
					failure: ErrorHandler
			});
		}	
	}
}



