@SuppressWarnings("unchecked")
	private void initGUI()
	{
		// C O M P O N E N T S ---------------------------------------------
		this.jcbState = new JComboBox<ImageIcon>(EzimImage.icoStates);
		this.jcbState.setEditable(false);
		this.jcbState.addItemListener
		(
			new ItemListener()
			{
				public void itemStateChanged(ItemEvent evtTmp)
				{
					if (ItemEvent.SELECTED == evtTmp.getStateChange())
						EzimMain.this.jcbState_StateChanged();
				}
			}
		);
		this.jcbState.setToolTipText(EzimLang.ClickToChangeState);

		this.etfStatus = new EzimTextField
		(
			new EzimPlainDocument(EzimNetwork.maxAckLength)
			, EzimContact.STATUS_DEFAULT
			, 1
			, false
		);
		this.etfStatus.setEnabled(false);
		this.etfStatus.addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent evtTmp)
				{
					EzimMain.this.etfStatus_ActionPerformed();
				}
			}
		);
		this.etfStatus.addMouseListener
		(
			new MouseListener()
			{
				public void mouseClicked(MouseEvent evtTmp)
				{
					EzimMain.this.etfStatus_MouseClicked();
				}

				public void mouseEntered(MouseEvent evtTmp)
				{
				}

				public void mouseExited(MouseEvent evtTmp)
				{
				}

				public void mousePressed(MouseEvent evtTmp)
				{
				}

				public void mouseReleased(MouseEvent evtTmp)
				{
				}
			}
		);
		this.etfStatus.addFocusListener
		(
			new FocusListener()
			{
				public void focusGained(FocusEvent evtTmp)
				{
				}

				public void focusLost(FocusEvent evtTmp)
				{
					EzimMain.this.etfStatus_FocusLost();
				}
			}
		);
		this.etfStatus.setToolTipText(EzimLang.ClickToChangeStatus);

		this.jlstContacts = new JList<EzimContact>
		(
			EzimContactList.getInstance()
		);
		this.jlstContacts.setCellRenderer(new EzimContactListRenderer());
		this.jlstContacts.setSelectionMode
		(
			ListSelectionModel.MULTIPLE_INTERVAL_SELECTION
		);
		this.jlstContacts.setTransferHandler
		(
			EzimContactTransferHandler.getInstance()
		);
		this.jlstContacts.setDragEnabled(true);
		this.jlstContacts.addMouseListener
		(
			new MouseListener()
			{
				public void mouseClicked(MouseEvent evtTmp)
				{
					if
					(
						evtTmp.getButton() == MouseEvent.BUTTON1
						&& evtTmp.getClickCount() > 1
					)
					{
						EzimMain.this.jlstContacts_MouseDblClicked();
					}
				}

				public void mouseEntered(MouseEvent evtTmp)
				{
				}

				public void mouseExited(MouseEvent evtTmp)
				{
				}

				public void mousePressed(MouseEvent evtTmp)
				{
				}

				public void mouseReleased(MouseEvent evtTmp)
				{
				}
			}
		);

		this.jspContacts = new JScrollPane(this.jlstContacts);
		this.jspContacts.setPreferredSize(new Dimension(1, 100));

		this.jbtnMsg = new JButton(EzimImage.icoButtons[0]);
		this.jbtnMsg.setPreferredSize(new Dimension(32, 32));
		this.jbtnMsg.setToolTipText(EzimLang.SendMessageToContact);
		this.jbtnMsg.addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent evtTmp)
				{
					EzimMain.this.jbtnMsg_ActionPerformed();
				}
			}
		);

		this.jbtnFtx = new JButton(EzimImage.icoButtons[1]);
		this.jbtnFtx.setPreferredSize(new Dimension(32, 32));
		this.jbtnFtx.setToolTipText(EzimLang.SendFileToContact);
		this.jbtnFtx.addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent evtTmp)
				{
					EzimMain.this.jbtnFtx_ActionPerformed();
				}
			}
		);

		this.jbtnRfh = new JButton(EzimImage.icoButtons[2]);
		this.jbtnRfh.setPreferredSize(new Dimension(32, 32));
		this.jbtnRfh.setToolTipText(EzimLang.RefreshContactList);
		this.jbtnRfh.addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent evtTmp)
				{
					EzimMain.this.jbtnRfh_ActionPerformed();
				}
			}
		);

		this.jbtnPlz = new JButton(EzimImage.icoButtons[3]);
		this.jbtnPlz.setPreferredSize(new Dimension(32, 32));
		this.jbtnPlz.setToolTipText(EzimLang.PlazaOfSpeech);
		this.jbtnPlz.addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent evtTmp)
				{
					EzimMain.this.jbtnPlz_ActionPerformed();
				}
			}
		);

		this.jbtnPrefs = new JButton(EzimImage.icoButtons[4]);
		this.jbtnPrefs.setPreferredSize(new Dimension(32, 32));
		this.jbtnPrefs.setToolTipText(EzimLang.Prefs);
		this.jbtnPrefs.addActionListener
		(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent evtTmp)
				{
					EzimMain.this.jbtnPrefs_ActionPerformed();
				}
			}
		);

		this.jlblAbout = new JLabel(EzimImage.icoLblAbout);
		this.jlblAbout.setPreferredSize(new Dimension(16, 16));
		this.jlblAbout.addMouseListener
		(
			new MouseListener()
			{
				public void mouseClicked(MouseEvent evtTmp)
				{
					EzimMain.this.jlblAbout_MouseClicked();
				}

				public void mouseEntered(MouseEvent evtTmp)
				{
				}

				public void mouseExited(MouseEvent evtTmp)
				{
				}

				public void mousePressed(MouseEvent evtTmp)
				{
				}

				public void mouseReleased(MouseEvent evtTmp)
				{
				}
			}
		);

		this.jpnlBase = new JPanel();
		this.add(this.jpnlBase);

		// L A Y O U T -----------------------------------------------------
		GroupLayout glBase = new GroupLayout(this.jpnlBase);
		this.jpnlBase.setLayout(glBase);

		glBase.setAutoCreateGaps(true);
		glBase.setAutoCreateContainerGaps(true);

		GroupLayout.SequentialGroup hGrp = glBase.createSequentialGroup();

		hGrp.addGroup
		(
			glBase.createParallelGroup()
				.addGroup
				(
					glBase.createSequentialGroup()
						.addComponent
						(
							this.jcbState
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
						.addComponent
						(
							this.etfStatus
							, GroupLayout.DEFAULT_SIZE
							, GroupLayout.PREFERRED_SIZE
							, Short.MAX_VALUE
						)
				)
				.addGroup
				(
					glBase.createSequentialGroup()
						.addComponent
						(
							this.jspContacts
							, GroupLayout.DEFAULT_SIZE
							, GroupLayout.PREFERRED_SIZE
							, Short.MAX_VALUE
						)
				)
				.addGroup
				(
					glBase.createSequentialGroup()
						.addComponent
						(
							this.jbtnMsg
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
						.addComponent
						(
							this.jbtnFtx
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
						.addComponent
						(
							this.jbtnRfh
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
						.addComponent
						(
							this.jbtnPlz
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
						.addComponent
						(
							this.jbtnPrefs
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
				)
				.addGroup
				(
					glBase.createSequentialGroup()
						.addContainerGap
						(
							0
							, Short.MAX_VALUE
						)
						.addComponent
						(
							this.jlblAbout
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
							, GroupLayout.PREFERRED_SIZE
						)
				)
		);

		glBase.setHorizontalGroup(hGrp);

		GroupLayout.SequentialGroup vGrp = glBase.createSequentialGroup();

		glBase.linkSize
		(
			SwingUtilities.VERTICAL
			, this.jcbState
			, this.etfStatus
		);

		vGrp.addGroup
		(
			glBase.createParallelGroup(Alignment.BASELINE)
				.addComponent
				(
					this.jcbState
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
				.addComponent
				(
					this.etfStatus
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
		);

		vGrp.addGroup
		(
			glBase.createParallelGroup(Alignment.BASELINE)
				.addComponent
				(
					this.jspContacts
					, GroupLayout.DEFAULT_SIZE
					, GroupLayout.PREFERRED_SIZE
					, Short.MAX_VALUE
				)
		);

		vGrp.addGroup
		(
			glBase.createParallelGroup(Alignment.BASELINE)
				.addComponent
				(
					this.jbtnMsg
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
				.addComponent
				(
					this.jbtnFtx
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
				.addComponent
				(
					this.jbtnRfh
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
				.addComponent
				(
					this.jbtnPlz
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
				.addComponent
				(
					this.jbtnPrefs
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
		);

		vGrp.addGroup
		(
			glBase.createParallelGroup(Alignment.BASELINE)
				.addComponent
				(
					this.jlblAbout
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
					, GroupLayout.PREFERRED_SIZE
				)
		);

		glBase.setVerticalGroup(vGrp);

		// W I N D O W   L I S T E N E R -----------------------------------
		this.addWindowListener(this);

		// T R A Y   I C O N -----------------------------------------------
		if (SystemTray.isSupported()) this.initTrayIcon();
		else this.tiMain = null;
	}