/*
	Copy Right Mark Qian 1998, All rights reserved
 */

import java.awt.*;
import java.applet.*;

import coopro;
import cootank;
public class coochat extends Applet
{
	public void init()
	{
		
	
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		setLayout(null);
		setSize(547,451);
		setBackground(new Color(12632256));
		try {
		ClassLoader cl = Class.forName("coopro").getClassLoader();
		coopro1 = (coopro) java.beans.Beans.instantiate(cl, "coopro");
		coopro1.setDataDir("/users/u2/markqian/data/coopro");
		coopro1.setPopup(false);
		coopro1.setLoginTitle("CooChat");
		coopro1.setLayout(null);
		coopro1.setBounds(0,0,528,384);
		coopro1.setBackground(new Color(12632256));
		add(coopro1);
		coopro1.start();
		} catch (Exception e) { }
		try {
		ClassLoader cl = Class.forName("cootank").getClassLoader();
		cootank1 = (cootank) java.beans.Beans.instantiate(cl, "cootank");
		cootank1.setOpenButtonText("Chat as Fishes");
		cootank1.setScreenW(400);
		cootank1.setScreenH(500);
		cootank1.setLinkPeriod(-1);
		cootank1.setImageFile("/users/u2/markqian/data/cootank/imagefile2");
		cootank1.setTankCGI("http://www.coolshare.com/my-cgi-bin/cootank.cgi");
		cootank1.setLinkFile("/users/u2/markqian/data/cootank/linkfile");
		cootank1.setSoundFile("sound/bubble.au");
		cootank1.setLayout(null);
		cootank1.setBounds(312,384,180,48);
		cootank1.setBackground(new Color(12632256));
		add(cootank1);
		cootank1.start();
		} catch (Exception e) { }
		label1 = new java.awt.Label("To see how you and others chat in an ");
		label1.setBounds(36,384,240,24);
		label1.setFont(new Font("Dialog", Font.BOLD, 13));
		add(label1);
		label2 = new java.awt.Label("aquarium tank,  click at this button:");
		label2.setBounds(48,408,240,24);
		label2.setFont(new Font("Dialog", Font.BOLD, 13));
		add(label2);
		//}}
	
		//{{REGISTER_LISTENERS
		SymCPActionEvent aSymCPActionEvent = new SymCPActionEvent();
		coopro1.addCPActionEventListener(aSymCPActionEvent);
		SymCTActionEvent aSymCTActionEvent = new SymCTActionEvent();
		cootank1.addCTActionEventListener(aSymCTActionEvent);
		//}}
	}
	
	//{{DECLARE_CONTROLS
	coopro coopro1;
	cootank cootank1;
	java.awt.Label label1;
	java.awt.Label label2;
	//}}
	

	//Also allow CooChat to be run as an application
	static public void main(String args[])
	{
		int w = 550;
		int h = 450;
		coochat applet = new coochat();
		applet.init();
        
        
		Frame appFrame = new Frame("CooCoo Pro");
		appFrame.setLayout(null);
		appFrame.setBackground(new Color(12632256));
		java.awt.Panel panel1 = new java.awt.Panel();
		panel1.setLayout(null);
		panel1.add(applet);  
		applet.move(0,0);
		appFrame.add(panel1);
        
		appFrame.pack();
		appFrame.show();

        
		panel1.reshape(0, 5, w+5,h+35);        
		appFrame.reshape(50, 50, w+15,h+50);
 	}

	class SymCPActionEvent extends CPActionEventAdapter
	{
		public void noticeUserLogin(java.util.EventObject event)
		{
			Object object = event.getSource();
			if (object == coopro1)
				coopro1_noticeUserLogin(event);
		}

		public void noticeUserSwitchRoom(java.util.EventObject event)
		{
			Object object = event.getSource();
			if (object == coopro1)
				coopro1_noticeUserSwitchRoom(event);
		}

		public void noticeUserLogout(java.util.EventObject event)
		{
			Object object = event.getSource();
			if (object == coopro1)
				coopro1_noticeUserLogout(event);
		}

		public void noticeUpdateUser(java.util.EventObject event)
		{
			Object object = event.getSource();
			if (object == coopro1)
				coopro1_noticeUpdateUser(event);
		}

		public void noticeChatIn(java.util.EventObject event)
		{
			Object object = event.getSource();
			if (object == coopro1)
				coopro1_noticeChatIn(event);
		}
	}

	//Perform talking
	void coopro1_noticeChatIn(java.util.EventObject event)
	{
		coopevt e = (coopevt) event;

		int id = cootank1.getInt(e.textField[1], -1);
		int r = -1;
		if (id>-1)

		//Talk. Please see doc of tank bean for more info about its interface
    		r = cootank1.talk(id, e.textField[3], "");
	    		
	}

	//Update user info
	void coopro1_noticeUpdateUser(java.util.EventObject event)
	{
		coopevt e = (coopevt) event;
		updateTank(e.textField[1]);
	}
	

	//Update tank
	void updateTank(String tt)
	{	   
		String name, email, id;
		    
		//Calling tank bean to remove all objects. -2 means "all". 
		//Please see doc of tank bean for more info about its interface
		cootank1.deleteObject(-2);

		int i=0;
		String s = "";
		for (; s!=null; i++)
		{
 	        
			s = getField(tt, "^!^", i);
			if (s==null || s.equals(""))
			continue;	        
	        
			if ((name =getField(s, "^#^", 0))==null)
			{
				System.err.println("Fail to parse name of "+ i);
				continue;
			}
			if ((email =getField(s, "^#^", 1))==null)
			{
				System.err.println("Fail to parse email of "+ i);
				continue;
	       		}
			if ((id =getField(s, "^#^", 2))==null)
	        	{
				System.err.println("Fail to parse id of "+ i);
				continue;
			}
	       

	        	String tmp;
            		if ((tmp =getField(s, "^#^", 3))==null)
	        	{
	            		System.err.println("Fail to parse type of "+ i);
	            		continue;
	        	}
	        		
	        	int type  = cootank1.getInt(tmp, 0);

			//Add a tank object. Please see doc of tank bean for more info about its interface
	        	int r = cootank1.addObject(type+cootank1.IMG_SHELL, i, name, "mailto:"+email);	
           
	    }
	}




	//Get field for a tank object	
	String getField(String s, String d, int whichField)
    	{	          
        		          
        	int p = s.indexOf(d);
	        int i;
        	for (i=0; p>-1 && i<whichField; i++)
	        {
        	    s = s.substring(p+d.length(),s.length());           
	            if (s.equals(""))
        	        break;
	            p = s.indexOf(d);
        	}
	        if (i==whichField && p>-1)
        	    return s.substring(0,p);
        	else
	            return null;        
	}
    


	class SymCTActionEvent extends CTActionEventAdapter
	{
		public void noticeEnter(java.util.EventObject event)
		{
			Object object = event.getSource();
			if (object == cootank1)
				cootank1_noticeEnter(event);
		}
	}

	void cootank1_noticeEnter(java.util.EventObject event)
	{
		coopro1.updateList();
	}

	void coopro1_noticeUserLogout(java.util.EventObject event)
	{
		coopro1.updateList();
	}

	void coopro1_noticeUserSwitchRoom(java.util.EventObject event)
	{
		coopro1.updateList();
	}

	void coopro1_noticeUserLogin(java.util.EventObject event)
	{
		coopro1.updateList();
	}
}
