import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
import java.io.*;
import java.awt.Window.*;
import java.net.*;

class Serverchat extends JFrame implements ActionListener,Runnable

{
	Color color = Color.blue;
    String s,tete,tete1;
    ServerSocket Sserver;
	Socket SSoket;
	BufferedReader br;
	BufferedWriter bw;
	
	//------------panel----------
	JPanel panel = new JPanel();
	JPanel panel2 = new JPanel();
	//------------TextArea-------
	List  ta = new List();
	
	JTextArea tfiled = new JTextArea(3,30);
	//------------ScrollBar-------
	JScrollPane sp = new JScrollPane(ta);
	JScrollPane sp1 = new JScrollPane(tfiled);
	//------------TollBar----------
	JToolBar tools = new JToolBar();
	String names[] ={"1","2" };
	JComboBox fontsize = new JComboBox(names);

	ImageIcon asave1 =new ImageIcon("pic/save.gif");
	JButton save1 = new JButton(asave1); 
	
ImageIcon tsize =new ImageIcon("pic/bullets.gif");
	JButton tsize1 = new JButton(tsize); 
	
	ImageIcon acolor1 =new ImageIcon("pic/fg.gif");
	JButton color1 = new JButton(acolor1);
	
	JButton gemy =new JButton("Gemy Color");
	ImageIcon psend1 =new ImageIcon("pic/se.gif");
	JButton psend =new JButton(psend1);
		//============MenuBar=========
	JMenuBar menu = new JMenuBar();
	//===========File Menu========
	JMenu file = new JMenu("File");
	//----------MenuItem-------


	JMenuItem save = new JMenuItem("Save");

	JMenuItem exit = new JMenuItem("Exit");
	
	
	//=========Font Menu========
	JMenu font = new JMenu("Font");
	//----------MenuItem-------
	JMenuItem size = new JMenuItem("Size");
	JMenuItem fcolor = new JMenuItem("Font Color");
	
	JMenu help = new JMenu("Help");
	//----------MenuItem-------
	JMenuItem about = new JMenuItem("About");
	//-------------------End Menu-----------------
	public void run()
	{
		try{SSoket.setSoTimeout(1);}catch(Exception e){}
		while (true)
		{
			try{
			ta.addItem(br.readLine());
			}catch (Exception h){}
		}
	}
	
	
	Serverchat(String nn)
	{
	super (nn);
	
		setupGui();
		psend.addActionListener(this);

			addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
	});
	try{
			Sserver = new ServerSocket(100);
			
			SSoket=Sserver.accept();
			br = new BufferedReader(new InputStreamReader(
					SSoket.getInputStream()));
			bw = new BufferedWriter(new OutputStreamWriter(
					SSoket.getOutputStream()));
						File out=new File("output.txt");
						FileWriter  fw=null;
		PrintWriter pw=null;
			fw=new FileWriter(out);
			pw=new PrintWriter(fw);
			String s;
		while((s=br.readLine())!=null)
		{
			pw.println(s);
			pw.flush();
		}
		br.close();
		fw.close();
		pw.close();
	
			/*bw.write("Hello")*/;bw.newLine();bw.flush();
			 Thread th;
			 th = new Thread(this);
			 th.start();
			 
			
		}catch(Exception e){}
	}
	public void actionPerformed ( ActionEvent e)
	{
		 /*if (e.getSource().equals(button2))
			 System.exit(0);
		 else{*/try{
			 bw.write(tfiled.getText());
			 String mywrite=tfiled.getText();
			 ta.addItem(mywrite);
			  System.out.println(mywrite);
			 bw.newLine();bw.flush();
			 tfiled.setText("");
			 }catch(Exception m){}
		 
				  
	}

	
	
	private void setupGui()
	{
		//ta.disable();
		
		fontsize.setMaximumRowCount(2);
		fontsize.setBounds(1,2,3,4);
		//fontsize.setBackground(color.BLACK);
		//============container=============
		Container c = getContentPane();
		
		
		c.setLayout(new BorderLayout());
		panel.setLayout(new BorderLayout());
		//===============Menu Items============
		menu.add(file);
		
		menu.add(font);
		menu.add(help);
	//------------file-------------------	
	
		file.add(save);
		
		file.add(exit);
	
		//------------font------------------
		font.add(size);
		font.add(fcolor);
				//------------help------------------
		help.add(about);
		//------------tools------------------
		tools.add(save1);
		tools.add(fontsize);
		tools.add(color1);
		tools.add(gemy);
		
		//****************************************************
		
		
		
about.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				JOptionPane.showMessageDialog(null,"tank you");
				}
			});
			
			color1.addActionListener(new ActionListener() {
            public void actionPerformed( ActionEvent e )
            {
               color =
                  JColorChooser.showDialog( Serverchat.this,
                     "Choose a color", color );

               if ( color == null )
                  color = Color.lightGray;

              
               tfiled.setForeground(color);
               tfiled.repaint();
            }
         }
      );
      
      fcolor.addActionListener(new ActionListener() {
            public void actionPerformed( ActionEvent e )
            {
               color =
                  JColorChooser.showDialog( Serverchat.this,
                     "Choose a color", color );

               if ( color == null )
                  color = Color.lightGray;

              
               tfiled.setForeground(color);
               tfiled.repaint();
            }
         }
      );
      //tool.getDefaultToolkit();
		exit.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				JOptionPane.showConfirmDialog(null,"Do you really want to exit!");
			System.exit(0);
				}
			});
	tsize1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				tfiled.setFont(new Font("Tahoma",Font.ITALIC,14));
				}
			});		
	gemy.setBounds(500,500,70,30);
   
    
    
    s= gemy.getActionCommand();
    gemy.addActionListener(new ActionListener()
{
	 public void actionPerformed(ActionEvent e)
      {
      	if( s.equals("Gemy Color"))
	ta.setBackground(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255)));
}	
	});	

	
		save1.addActionListener(new ActionListener() 
			{		
	   public void actionPerformed(ActionEvent e) {
		JFileChooser chooser= new JFileChooser();
	    Frame frame = new Frame();
	   
        FileDialog fileDialog = new FileDialog(frame);
	    
	    fileDialog.setMode(FileDialog.SAVE);
	    fileDialog.show();
	    tete=fileDialog.getDirectory();
	    tete1=fileDialog.getFile();
	    System.out.println(tete+tete1);
	    try{
 File file =new File(tete+tete1);
    
    file.createNewFile();
    
   
    // Write to File   
    FileOutputStream filelow = new FileOutputStream(file);
    
    DataOutputStream datahigh= new DataOutputStream(filelow);
    String infile[]=ta.getItems();
   // datahigh.writeUTF(infile);
     }

     catch(IOException i)
       {
         i.printStackTrace();	

       }

				}
			});
			
		
		save.addActionListener(new ActionListener() 
			{		
	   public void actionPerformed(ActionEvent e) {
		JFileChooser chooser= new JFileChooser();
	    Frame frame = new Frame();
	   
        FileDialog fileDialog = new FileDialog(frame);
	    
	    fileDialog.setMode(FileDialog.SAVE);
	    fileDialog.show();
	    tete=fileDialog.getDirectory();
	    tete1=fileDialog.getFile();
	    System.out.println(tete+tete1);
	    try{
 File file =new File(tete+tete1);
    
    file.createNewFile();
    
   
    // Write to File   
    FileOutputStream filelow = new FileOutputStream(file);
    
    DataOutputStream datahigh= new DataOutputStream(filelow);
   String infile[]=ta.getItems();
    //datahigh.writeUTF(infile);
     }

     catch(IOException i)
       {
         i.printStackTrace();	

       }

				}
			});
		//****************************************************
		
	c.add("Center" ,new JScrollPane(ta));
		c.add("North" ,panel);
		c.add("South" ,panel2);
		panel.add("North" ,menu);
		panel.add("South" ,tools);
		panel2.add("East" ,sp1);
		panel2.add("West" ,psend);
	//========================	
setSize(500,500);
//setVisible(true);

		
		}
		
		
		public static void main(String[]arg)
		{
		Serverchat z = new Serverchat("Gamal Chat");
	}
	
	
	
	
	
	
	}