var CissQueueFrame = {
	Name: "CissQueueFrame",
  SelectedListRows: new Array(),
	Query: {NewQuery: false, QueryString: "", QueryType: 1, Page: 0, Rows: 1, SortField: "", SortDirection: ""},

  InitFrame: function() {
 	  CissQueueFrame.CreateCissQueueList();	
    jQuery("#CissQueueListPanel").contextMenu({menu: 'CissQueueListMenu'}, CissQueueFrame.HandleCissQueueListMenu);
		jQuery("#CissQueueListPanel").disableContextMenuItems(null);
		jQuery("#CissQueueQueryForm").submit(CissQueueFrame.SubmitCissQueueQuery);
	},

  ShowFrame: function() {
		jQuery('#CissQueueFrame').show();
		CissQueueFrame.OnFrameResize();
		
		// Load list if empty
		var count = jQuery("#CissQueueList").getGridParam('reccount');
		if ((count == null) || (count == 0)) {
		  CissQueueFrame.SubmitCissQueueQuery();
		}	
		
		SetWindowKeyPressHandler(CissQueueFrame.OnKeyPress);
  },

  HideFrame: function() {
    jQuery('#CissQueueFrame').hide();
  },

	OnKeyPress: function(event) {
		switch (event.keyCode) {
			case 116:
				CissQueueFrame.SubmitCissQueueQuery();
				return false;
				break;
		}
	},
	
	OnLogoff: function() {
		jQuery("#CissQueueList").clearGridData();	  	  	  
	},
	
  OnFrameResize: function() {
		var listWidth = jQuery("#CissQueueInputPanel").width();
		var listHeight = Layout.state.container.innerHeight - Layout.state.north.size - Layout.state.south.size;
		listHeight = listHeight - jQuery("#CissQueueInputPanel").height() - jQuery('#CissQueueListPager').height() - 40;
		
    jQuery("#CissQueueList").setGridWidth(listWidth, false); 
    jQuery("#CissQueueList").setGridHeight(listHeight);
		
		CissQueueFrame.CreateDeputyList();	
	},

  CreateDeputyList: function() {
    var DeputyList = document.getElementById("CissQueueDeputyList");
		BuildDeputyDropDown(DeputyList);
		jQuery("#CissQueueDeputyList").msDropDown();
    jQuery("#CissQueueDeputyList").width(document.getElementById("CissQueueQuery").offsetWidth);
		document.getElementById("CissQueueDeputyList").refresh(); 
	},

  CreateCissQueueList: function() {
    jQuery("#CissQueueList").jqGrid({
			datatype: CissQueueFrame.GetGridData,
			height: 250,
			colNames:['', '', _('Message ID'), _('Subject'), _('Sender'), _('Recipients'), _('Date'), _('Size')],
			colModel:[
				{name:'recipientID',index:'recipientID', width:20, hidden:true},
				{name:'image',index:'image', width:20, formatter:CissQueueFrame.ImageFormatter},
				{name:'messageID',index:'messageID', width:100},
				{name:'subject',index:'subject', width:500},
				{name:'sender',index:'sender', width:300},
				{name:'recipients',index:'recipients', width:300},
				{name:'date',index:'date', width:200, sorttype:"date", formatter:"date", formatoptions:{srcformat:"Y-m-d\TH:i:s", newformat:"Y-m-d H:i:s"}},
				{name:'size',index:'size', width:100, sorttype:"integer", formatter:byteFormater}
				],
			imgpath: gridimgpath,
			pager: jQuery('#CissQueueListPager'),
			autoencode: true,
			viewrecords: true,
			multiselect: true,
			rowNum:30, 
			sortname: 'date',
			sortorder: 'desc',
			onSelectRow: CissQueueFrame.OnSelectRow,
			onSelectAll: CissQueueFrame.OnSelectAll,
			onRightClickRow: CissQueueFrame.OnRightClickRow,
			ondblClickRow: CissQueueFrame.OnDblClickRow
    }); 
  },

	ImageFormatter: function (cellvalue, options, rowObject) {
    return '<img src="/gui/images/icons/mail_preferences.png">';
	},

	BeginLoading: function() {
	  jQuery("#lui_CissQueueList, #load_CissQueueList").show(); 
	},

	EndLoading: function() {
		jQuery("#lui_CissQueueList, #load_CissQueueList").hide(); 
	},
	
	GetGridData: function(pdata) {
		if (jQuery('#CissQueueFrame').is(':hidden')) {
			return;
		}
		
		CissQueueFrame.BeginLoading; 
		
		CissQueueFrame.Query.Page = pdata.page;
		CissQueueFrame.Query.Rows = pdata.rows;
		CissQueueFrame.Query.SortField = pdata.sidx;
		CissQueueFrame.Query.SortDirection = pdata.sord;

    var service = new Spamfinder(serviceURL, Session.SessionID);

    service.QueryCissQueue(CissQueueFrame.Query,
      {
        success: CissQueueFrame.QueryCissQueue,
				failure: function(error) {
					CissQueueFrame.EndLoading();
					ErrorHandler(error);
				}
      }
    );
	},

  HandleCissQueueListMenu: function(action, el, pos) {
		switch(action) {
			case 'Deliver':
    		CissQueueFrame.DeliverSelectedCissMails(0);
			  break;
			case 'DeliverWLAddress':
    		CissQueueFrame.DeliverSelectedCissMails(1);
			  break;
			case 'DeliverWLDomain':
    		CissQueueFrame.DeliverSelectedCissMails(2);
			  break;
			case 'Delete':
    		CissQueueFrame.DeleteSelectedCissMails();
			  break;
			case 'Preview':
	  	  if (CissQueueFrame.SelectedListRows.length == 1) {
          var ID = jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[0], 'messageID');
          CissQueueFrame.OpenMessage(ID);
				}	
			  break;
		}
	},

  SubmitCissQueueQuery: function() {
	  if (jQuery('#lui_CissQueueList').is(':visible')) {
			jAlert(_('A query is already in progress. Please wait...'), _('Information'));
			return false;
		}
	
	  CissQueueFrame.Query.NewQuery = true;
		CissQueueFrame.Query.QueryString = document.getElementById("CissQueueQuery").value;
		CissQueueFrame.Query.QueryType = document.CissQueueQueryForm.CissQueryType.selectedIndex + 1;

		var idx = document.getElementById("CissQueueDeputyList").selectedIndex;
		if (idx == 0) {
      CissQueueFrame.Query.DeputyAddress = '';
		} else {
      CissQueueFrame.Query.DeputyAddress = document.getElementById("CissQueueDeputyList").options[idx].text;
		}

		jQuery("#CissQueueList").setGridParam({page:1}).trigger("reloadGrid");
		return false;
  },

  QueryCissQueue: function(result) {
		var GridData = { total: 0,
		                 page: 0,
										 records: 0,
										 rows: new Array()
									 };
		
		CissQueueFrame.Query.NewQuery = false;
		
		GridData.total = result.QueryResult.TotalPages;
		GridData.page = result.QueryResult.Page;
		GridData.records = result.QueryResult.Records;
		
	  jQuery("#CissQueueList").clearGridData();
	  for (i = 0; i < result.QueryResult.Rows.length; i++) {
      var row = {id: 0,
			       cell: new Array()
			      };

      row.id = i;
			row.cell[0] = result.QueryResult.Rows[i].RecipientID;
			row.cell[1] = '';
			row.cell[2] = result.QueryResult.Rows[i].MessageID;   
			row.cell[3] = result.QueryResult.Rows[i].Subject;
			row.cell[4] = result.QueryResult.Rows[i].Sender;
			row.cell[5] = result.QueryResult.Rows[i].Recipient;
      row.cell[6] = result.QueryResult.Rows[i].Date;
			row.cell[7] = result.QueryResult.Rows[i].Size;

      GridData.rows[i] = row;
	  }
	  
    JsonGridData = YAHOO.util.Lang.JSON.stringify(GridData);
		var thegrid = jQuery("#CissQueueList")[0]; 
    thegrid.addJSONData(eval("("+JsonGridData+")")); 
		
		CissQueueFrame.EndLoading(); 
  },

	UpdateMenuItems: function() {
	  jQuery("#CissQueueListMenu").disableContextMenuItems(null);
	  if (CissQueueFrame.SelectedListRows.length == 1) {
		  jQuery("#CissQueueListMenu").enableContextMenuItems('#Preview');
		}

	  if (CissQueueFrame.SelectedListRows.length >= 1) {
		  jQuery("#CissQueueListMenu").enableContextMenuItems('#Deliver,#Delete');
			if (!(Session.GroupPolicy.SpamfinderFilterListsRules.DisableAWL)) {
				jQuery("#CissQueueListMenu").enableContextMenuItems('#DeliverWLAddress');
			}
			if (!(Session.GroupPolicy.SpamfinderFilterListsRules.DisableDWL)) {
				jQuery("#CissQueueListMenu").enableContextMenuItems('#DeliverWLDomain');
			}
		}
	},
	
	OnSelectAll: function(aRowids, status) {
	  CissQueueFrame.SelectedListRows = jQuery("#CissQueueList").getGridParam('selarrrow');
		CissQueueFrame.UpdateMenuItems();
	},
	
  OnSelectRow: function(rowid, status) {
	  CissQueueFrame.SelectedListRows = jQuery("#CissQueueList").getGridParam('selarrrow');
		CissQueueFrame.UpdateMenuItems();
	},

  OnRightClickRow: function(rowid, iRow, iCol) {
	  if (CissQueueFrame.SelectedListRows.length == 0) {
		  jQuery("#CissQueueList").setSelection(rowid, true);
		}	
  },

  OnDblClickRow: function(rowid, iRow, iCol) {
    var ID = jQuery("#CissQueueList").getCell(rowid, 'messageID');
    CissQueueFrame.OpenMessage(ID);
  },
	
  OpenMessage: function(ID) {
	  if (Session.GroupPolicy.SpamfinderRules.DisablePreview) {
			jAlert(_('Message preview was disabled by the administrator.'), _('Information'));
		} else {
			MailViewer.OpenMsg(MSGSRC_CISS, ID, false, Session.GroupPolicy.SpamfinderRules.DisableAttachmentsInPreview);
		}	
	},

//-------------------------------------------------------------------------------------------------

  DeliverSelectedCissMails: function(action) {
    var service = new Spamfinder(serviceURL, Session.SessionID);
		
		var RecipientIDs = '';
		for (i=0 ; i < CissQueueFrame.SelectedListRows.length ; i++) {
		  if (RecipientIDs == '') {
		    RecipientIDs = jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[i], 'recipientID'); 
			} else {
			  RecipientIDs = RecipientIDs + ',' + jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[i], 'recipientID'); 
			}

			switch(action) {
			  case 1:  // Add address to Whitelist
       		var address = jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[i], 'sender');		
					if (address.length > 3) {
					  CissQueueFrame.AddAddressToWhitelist(address);
					}
				  break;
			  case 2:  // Add domain to Whitelist
       		var domain = GetDomainFromAddress(jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[i], 'sender'));		
					if (domain.length > 1) {
					  CissQueueFrame.AddDomainToWhitelist(domain);
					}
				  break;
			}
		}

    service.DeliverMessageForRecipient(RecipientIDs,
		{
				success: function(result) {
					jQuery("#CissQueueList").trigger("reloadGrid");
					jAlert(_('Selected mails delivered successfully.'), _('Information'));
				},
				failure: function(error) {
					CissQueueFrame.EndLoading();
					ErrorHandler(error);
				}
		});
	},

//-------------------------------------------------------------------------------------------------

  AddAddressToWhitelist: function(address) {
		var service = new Spamfinder(serviceURL, Session.SessionID);
		var Entry = {ID:-1,
								 SenderAddress:address,
								 ValidTo:Date.parse('2099-12-31'),
								 Action:0,
								 UserID:Session.UserID,
								 Description:''
								}; 
		service.SaveAddressListEntry(Entry, false,
		{
				success: function() {},
				failure: ErrorHandler
		});
	},	

//-------------------------------------------------------------------------------------------------

  AddDomainToWhitelist: function(domain) {
		var service = new Spamfinder(serviceURL, Session.SessionID);
		var Entry = {ID:-1,
								 SenderDomain:domain,
								 ValidTo:Date.parse('2099-12-31'),
								 Action:0,
								 UserID:Session.UserID,
								 Description:''
								}; 
		service.SaveDomainListEntry(Entry,
		{
				success: function() {},
				failure: ErrorHandler
		});
	},	
	
//-------------------------------------------------------------------------------------------------

  DeleteSelectedCissMails: function() {
	  if (Session.GroupPolicy.SpamfinderRules.DisableDeletingMessages) {
			jAlert(_('Message deletion was disabled by the administrator.'), _('Information'));
			return;
		}	
	
		jConfirm(_('Do you want to delete the selected items ?'), _('Confirmation'),
		function(r) {
		  if (r) {
				var service = new Spamfinder(serviceURL, Session.SessionID);
				var RecipientIDs = '';
				for (i=0 ; i < CissQueueFrame.SelectedListRows.length ; i++) {
					if (RecipientIDs == '') {
						RecipientIDs = jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[i], 'recipientID'); 
					} else {
						RecipientIDs = RecipientIDs + ',' + jQuery("#CissQueueList").getCell(CissQueueFrame.SelectedListRows[i], 'recipientID'); 
					}
				}

				service.DeleteRecipientFromMessage(RecipientID,
				{
					success: function(result) {
						jQuery("#CissQueueList").trigger("reloadGrid");
						jAlert(_('Selected mails deleted successfully.'), _('Information'));
					},
					failure: function(error) {
						CissQueueFrame.EndLoading();
						ErrorHandler(error);
					}
				});
			}
		});
	}
}
