home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 May / PCWK5A99.ISO / Linuxwld / linuxwld.exe / ParaChat.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-05-31  |  19.3 KB  |  1,023 lines

  1. import java.applet.Applet;
  2. import java.awt.BorderLayout;
  3. import java.awt.Button;
  4. import java.awt.CardLayout;
  5. import java.awt.Checkbox;
  6. import java.awt.Color;
  7. import java.awt.Component;
  8. import java.awt.Container;
  9. import java.awt.Dimension;
  10. import java.awt.Event;
  11. import java.awt.FlowLayout;
  12. import java.awt.Font;
  13. import java.awt.Graphics;
  14. import java.awt.List;
  15. import java.awt.Panel;
  16. import java.awt.TextArea;
  17. import java.awt.TextField;
  18. import java.awt.Toolkit;
  19. import java.io.BufferedInputStream;
  20. import java.io.DataInputStream;
  21. import java.io.FilterInputStream;
  22. import java.io.IOException;
  23. import java.net.MalformedURLException;
  24. import java.net.URL;
  25. import java.net.URLConnection;
  26. import java.util.Enumeration;
  27. import java.util.Hashtable;
  28. import java.util.Properties;
  29. import java.util.StringTokenizer;
  30.  
  31. public class ParaChat extends Applet {
  32.    private Applet applet;
  33.    TextField pUserInputEdit;
  34.    TextField pStatusBar;
  35.    TextField pInfoText;
  36.    boolean tryTunnel = true;
  37.    TextArea pUserMultiLineInput;
  38.    Button pSendBtn;
  39.    boolean bMultiLine = true;
  40.    boolean heartbeat = false;
  41.    boolean beating = false;
  42.    boolean showJoinLeave = true;
  43.    boolean directSaveToServer = true;
  44.    ChatRenderer pChatText;
  45.    Hashtable renderers4From = new Hashtable();
  46.    List pUsersBox;
  47.    Button pConnectBtn;
  48.    Button pAboutBtn;
  49.    Button pFaqBtn;
  50.    Button pSurfBtn;
  51.    Button pBigWinBtn;
  52.    Button pWhoisBtn;
  53.    BigWindow bigWin;
  54.    Checkbox pSingleUserBtn;
  55.    Checkbox pIgnoreUser;
  56.    Panel pLogosPanel;
  57.    uPresProxy pLowerPanel;
  58.    uPresProxy pUpperPanel;
  59.    uPresProxy[] buttons;
  60.    String VERSION = "2.06.02";
  61.    boolean init_complete;
  62.    String entryBeep;
  63.    String partBeep;
  64.    URL faqURL;
  65.    Panel basePanel;
  66.    Panel northPanel;
  67.    Panel centerPanel;
  68.    Panel eastPanel;
  69.    Panel southPanel;
  70.    Panel buttonPanel;
  71.    Panel statusPanel;
  72.    Panel checkBoxPanel;
  73.    ConnectPanel connectPanel;
  74.    Panel chatPanel;
  75.    CardLayout centerCard;
  76.    protected String realName;
  77.    protected String nickName;
  78.    protected String emailAddr;
  79.    protected String serverName;
  80.    protected String passwd;
  81.    String serverPort;
  82.    String channelName;
  83.    String httpPort;
  84.    protected ChatSession session;
  85.    public static final int DISCONNECTED = 0;
  86.    public static final int CONNECTING = 1;
  87.    public static final int CONNECTED = 2;
  88.    int status;
  89.    private String recordURL = "/connected.cgi";
  90.    private boolean mouse_is_down = false;
  91.    private URL selectedURL;
  92.    private URL logoutURL;
  93.    private Hashtable loadedCommands = new Hashtable();
  94.    private Hashtable ignoreList = new Hashtable();
  95.    private boolean bAutoLogin = false;
  96.    private boolean bUnicodeNick = false;
  97.    private String connectAlg;
  98.    Color bgColor;
  99.    Color fgColor;
  100.    protected boolean doPanels = true;
  101.    protected MsgTable xtab;
  102.    Properties props;
  103.    boolean connected = false;
  104.    long lastConnect;
  105.  
  106.    String getProperty(String var1) {
  107.       if (this.props == null) {
  108.          this.props = new Properties();
  109.          String var2 = this.applet.getParameter("XPROPS");
  110.          if (var2 != null) {
  111.             try {
  112.                URL var3 = new URL(this.applet.getCodeBase(), var2);
  113.                URLConnection var4 = var3.openConnection();
  114.                var4.setDoInput(true);
  115.                DataInputStream var5 = new DataInputStream(var4.getInputStream());
  116.                BufferedInputStream var6 = new BufferedInputStream(var5);
  117.                this.props.load(var6);
  118.                ((FilterInputStream)var6).close();
  119.                ((FilterInputStream)var5).close();
  120.             } catch (Exception var7) {
  121.             }
  122.          }
  123.       }
  124.  
  125.       String var8 = ((Applet)this).getParameter(var1);
  126.       return var8 == null ? (String)this.props.get(var1) : var8;
  127.    }
  128.  
  129.    public void init() {
  130.       this.applet = this;
  131.       this.complete_init();
  132.    }
  133.  
  134.    public void start() {
  135.       if (this.pLowerPanel != null) {
  136.          this.pLowerPanel.start();
  137.       }
  138.  
  139.       if (this.pUpperPanel != null) {
  140.          this.pUpperPanel.start();
  141.       }
  142.  
  143.    }
  144.  
  145.    public void stop() {
  146.       if (this.pLowerPanel != null) {
  147.          this.pLowerPanel.stop();
  148.       }
  149.  
  150.       if (this.pUpperPanel != null) {
  151.          this.pUpperPanel.stop();
  152.       }
  153.  
  154.    }
  155.  
  156.    public void complete_init() {
  157.       this.xtab = new MsgTable(this);
  158.       this.serverName = this.getProperty(this.xtab.translate("ServerName"));
  159.       if (this.serverName == null) {
  160.          this.serverName = ((Applet)this).getCodeBase().getHost();
  161.       }
  162.  
  163.       this.serverPort = this.getProperty(this.xtab.translate("ServerPort"));
  164.       this.httpPort = this.getProperty(this.xtab.translate("HTTPPort"));
  165.       if (this.httpPort == null && this.serverPort != null) {
  166.          this.httpPort = Integer.toString(Integer.parseInt(this.serverPort) + 100);
  167.       }
  168.  
  169.       this.channelName = this.getProperty(this.xtab.translate("Channel"));
  170.       this.bMultiLine = this.getProperty(this.xtab.translate("MULTILINEINPUT")) != null;
  171.       this.heartbeat = this.getProperty(this.xtab.translate("HEARTBEAT")) != null;
  172.       this.showJoinLeave = this.getProperty(this.xtab.translate("NOJOINMSG")) == null;
  173.       this.directSaveToServer = this.getProperty(this.xtab.translate("NODSTS")) == null;
  174.       boolean var1 = this.getProperty(this.xtab.translate("NOPRIVATE")) != null;
  175.       boolean var2 = this.getProperty(this.xtab.translate("NOUSERINFO")) != null;
  176.       boolean var3 = this.getProperty(this.xtab.translate("NOFLOAT")) != null;
  177.       boolean var4 = this.getProperty(this.xtab.translate("NOSURF")) != null;
  178.       boolean var5 = this.getProperty(this.xtab.translate("NOABOUT")) != null;
  179.       boolean var6 = this.getProperty(this.xtab.translate("LOGINONLOAD")) != null;
  180.       this.nickName = this.getProperty(this.xtab.translate("NICKNAME"));
  181.       this.realName = this.getProperty(this.xtab.translate("REALNAME"));
  182.       this.emailAddr = this.getProperty(this.xtab.translate("EMAILADDR"));
  183.       this.passwd = this.getProperty(this.xtab.translate("PASSWORD"));
  184.       String var7 = this.getProperty(this.xtab.translate("BGCOLOR"));
  185.       String var8 = this.getProperty(this.xtab.translate("FGCOLOR"));
  186.       this.connectAlg = this.getProperty(this.xtab.translate("CONNECTALG"));
  187.       if (this.connectAlg == null) {
  188.          this.connectAlg = "t";
  189.       }
  190.  
  191.       String var9 = this.getProperty(this.xtab.translate("RENDERER"));
  192.       if (var9 == null) {
  193.          var9 = "ChatPanel";
  194.       }
  195.  
  196.       this.bUnicodeNick = this.getProperty(this.xtab.translate("UNICODENICK")) != null;
  197.       String var10 = this.getProperty(this.xtab.translate("FAQURL"));
  198.       this.faqURL = null;
  199.       if (var10 != null) {
  200.          try {
  201.             this.faqURL = new URL(this.getProperty(this.xtab.translate("FAQURL")));
  202.          } catch (Exception var19) {
  203.          }
  204.       } else {
  205.          try {
  206.             this.faqURL = new URL(this.xtab.translate("http://parachat.webpage.com/faq.htm"));
  207.          } catch (Exception var18) {
  208.          }
  209.       }
  210.  
  211.       if (this.nickName != null && !this.isShortAlphaNum(this.nickName)) {
  212.          this.nickName = null;
  213.          System.out.println("Illegal Nick Name for Autologin");
  214.       }
  215.  
  216.       this.bAutoLogin = this.nickName != null;
  217.       if (this.realName == null) {
  218.          this.realName = "";
  219.       }
  220.  
  221.       if (this.emailAddr == null) {
  222.          this.emailAddr = "";
  223.       }
  224.  
  225.       if (this.nickName == null) {
  226.          this.nickName = "";
  227.       }
  228.  
  229.       if (this.passwd == null) {
  230.          this.passwd = "";
  231.       }
  232.  
  233.       if (var7 == null) {
  234.          var7 = "D2FFD2";
  235.       }
  236.  
  237.       try {
  238.          this.bgColor = new Color(Integer.parseInt(var7, 16));
  239.       } catch (NumberFormatException var17) {
  240.          this.bgColor = new Color(210, 255, 210);
  241.       }
  242.  
  243.       try {
  244.          this.fgColor = new Color(Integer.parseInt(var8, 16));
  245.       } catch (NumberFormatException var16) {
  246.          this.fgColor = Color.black;
  247.       }
  248.  
  249.       ((Component)this).setBackground(this.bgColor);
  250.       ((Component)this).setForeground(this.fgColor);
  251.       ((Component)this).setFont(new Font("Dialog", 0, 12));
  252.  
  253.       try {
  254.          this.pChatText = (ChatRenderer)Class.forName(var9).newInstance();
  255.       } catch (Exception var15) {
  256.          System.out.println("**FATAL ERROR :" + var15 + " while loading " + var9);
  257.       }
  258.  
  259.       this.pChatText.setApplet(this);
  260.       this.pUserInputEdit = new TextField("");
  261.       this.pUserInputEdit.setFont(new Font("Dialog", 0, 11));
  262.       this.pUserInputEdit.setForeground(Color.red);
  263.       this.pUserInputEdit.setBackground(Color.white);
  264.       this.pUserMultiLineInput = new TextArea(2, 50);
  265.       this.pUserMultiLineInput.setFont(new Font("Dialog", 0, 11));
  266.       this.pUserMultiLineInput.setForeground(Color.red);
  267.       this.pUserMultiLineInput.setBackground(Color.white);
  268.       this.pSendBtn = new Button(this.xtab.translate("Send"));
  269.       this.pSendBtn.setFont(new Font("Dialog", 1, 11));
  270.       this.pUsersBox = new List(0, false);
  271.       this.pUsersBox.setFont(new Font("Dialog", 0, 10));
  272.       this.pUsersBox.setForeground(Color.green);
  273.       this.pUsersBox.setBackground(Color.black);
  274.       this.pStatusBar = new TextField(this.xtab.translate("NOT CONNECTED"));
  275.       this.pStatusBar.setForeground(Color.red);
  276.       this.pStatusBar.setBackground(Color.black);
  277.       this.pStatusBar.setEditable(false);
  278.       this.pInfoText = new TextField("");
  279.       this.pInfoText.setForeground(Color.red);
  280.       this.pInfoText.setBackground(Color.black);
  281.       this.pInfoText.setEditable(false);
  282.       this.pConnectBtn = new Button(this.xtab.translate("Connect!"));
  283.       this.pConnectBtn.setFont(new Font("Dialog", 1, 11));
  284.       this.pAboutBtn = new Button(this.xtab.translate("About"));
  285.       this.pAboutBtn.setFont(new Font("Dialog", 1, 11));
  286.       if (var5) {
  287.          this.pAboutBtn.hide();
  288.       }
  289.  
  290.       this.pSurfBtn = new Button(this.xtab.translate("Surf!"));
  291.       this.pSurfBtn.setFont(new Font("Dialog", 1, 11));
  292.       if (var4) {
  293.          this.pSurfBtn.hide();
  294.       }
  295.  
  296.       this.pFaqBtn = new Button(this.xtab.translate("F.A.Q"));
  297.       this.pFaqBtn.setFont(new Font("Dialog", 1, 11));
  298.       if (this.faqURL == null) {
  299.          this.pFaqBtn.hide();
  300.       }
  301.  
  302.       this.pBigWinBtn = new Button(this.xtab.translate("Float"));
  303.       this.pBigWinBtn.setFont(new Font("Dialog", 1, 11));
  304.       if (var3) {
  305.          this.pBigWinBtn.hide();
  306.       }
  307.  
  308.       this.pLowerPanel = new uPresProxy(this, this.doPanels ? new Dimension(500, 60) : new Dimension(0, 0));
  309.       this.pLogosPanel = new Panel();
  310.       this.pLowerPanel.setForeground(this.fgColor);
  311.       this.pLowerPanel.setBackground(this.bgColor);
  312.       this.pLogosPanel.setForeground(this.fgColor);
  313.       this.pLogosPanel.setBackground(this.bgColor);
  314.       this.buttons = new uPresProxy[4];
  315.       this.pUpperPanel = new uPresProxy(this, this.doPanels ? new Dimension(325, 60) : new Dimension(0, 0));
  316.       this.pUpperPanel.setForeground(this.fgColor);
  317.       this.pUpperPanel.setBackground(this.bgColor);
  318.       this.pSingleUserBtn = new Checkbox(this.xtab.translate("Private Chat"));
  319.       if (var1) {
  320.          this.pSingleUserBtn.hide();
  321.       }
  322.  
  323.       this.pSingleUserBtn.setFont(new Font("Dialog", 1, 11));
  324.       this.pSingleUserBtn.setForeground(this.fgColor);
  325.       this.pSingleUserBtn.setBackground(this.bgColor);
  326.       this.pSingleUserBtn.disable();
  327.       this.pIgnoreUser = new Checkbox(this.xtab.translate("Ignore User"));
  328.       this.pIgnoreUser.setFont(new Font("Dialog", 1, 11));
  329.       this.pIgnoreUser.setForeground(this.fgColor);
  330.       this.pIgnoreUser.setBackground(this.bgColor);
  331.       this.pIgnoreUser.disable();
  332.       this.pWhoisBtn = new Button(this.xtab.translate("User Info"));
  333.       this.pWhoisBtn.setFont(new Font("Dialog", 1, 11));
  334.       this.pWhoisBtn.disable();
  335.       if (var2) {
  336.          this.pWhoisBtn.hide();
  337.       }
  338.  
  339.       this.status(0);
  340.       this.basePanel = new Panel();
  341.       this.basePanel.setLayout(new BorderLayout(2, 2));
  342.       ((Container)this).setLayout(new BorderLayout(4, 4));
  343.       ((Container)this).add("Center", this.basePanel);
  344.       this.northPanel = new Panel();
  345.       this.northPanel.setLayout(new BorderLayout(2, 2));
  346.       this.northPanel.add("West", this.pUpperPanel);
  347.       this.buttonPanel = new Panel();
  348.       this.buttonPanel.setLayout(new FlowLayout(1, 3, 3));
  349.       this.buttonPanel.add(this.pConnectBtn);
  350.       this.buttonPanel.add(this.pAboutBtn);
  351.       this.buttonPanel.add(this.pSurfBtn);
  352.       this.buttonPanel.add(this.pFaqBtn);
  353.       this.buttonPanel.add(this.pBigWinBtn);
  354.       this.northPanel.add("East", this.buttonPanel);
  355.       this.eastPanel = new Panel();
  356.       this.checkBoxPanel = new Panel();
  357.       this.checkBoxPanel.setLayout(new BorderLayout());
  358.       this.checkBoxPanel.add("North", this.pSingleUserBtn);
  359.       this.checkBoxPanel.add("South", this.pIgnoreUser);
  360.       this.eastPanel.setLayout(new BorderLayout(2, 2));
  361.       this.eastPanel.add("North", this.pWhoisBtn);
  362.       this.eastPanel.add("South", this.checkBoxPanel);
  363.       this.eastPanel.add("Center", this.pUsersBox);
  364.       this.southPanel = new Panel();
  365.       this.southPanel.setLayout(new BorderLayout(2, 2));
  366.       this.statusPanel = new Panel();
  367.       this.statusPanel.setLayout(new BorderLayout());
  368.       this.statusPanel.add("East", this.pInfoText);
  369.       this.statusPanel.add("Center", this.pStatusBar);
  370.       this.southPanel.add("South", this.statusPanel);
  371.       this.southPanel.add("West", this.pLowerPanel);
  372.       this.southPanel.add("Center", this.pLogosPanel);
  373.       this.centerPanel = new Panel();
  374.       this.centerCard = new CardLayout();
  375.       this.centerPanel.setLayout(this.centerCard);
  376.       Panel var11 = new Panel();
  377.       ((Container)var11).setLayout(new BorderLayout());
  378.       if (this.bMultiLine) {
  379.          ((Container)var11).add("Center", this.pUserMultiLineInput);
  380.          ((Container)var11).add("East", this.pSendBtn);
  381.       } else {
  382.          ((Container)var11).add("Center", this.pUserInputEdit);
  383.       }
  384.  
  385.       this.chatPanel = new Panel();
  386.       this.chatPanel.setLayout(new BorderLayout(2, 2));
  387.       this.chatPanel.add("Center", (Component)this.pChatText);
  388.       this.chatPanel.add("South", var11);
  389.       this.connectPanel = new ConnectPanel(this);
  390.       this.centerPanel.add("chat", this.chatPanel);
  391.       this.centerPanel.add("connect", this.connectPanel);
  392.       ((Component)this).setFont(new Font("Dialog", 0, 12));
  393.       this.basePanel.add("North", this.northPanel);
  394.       this.basePanel.add("East", this.eastPanel);
  395.       this.basePanel.add("South", this.southPanel);
  396.       this.basePanel.add("Center", this.centerPanel);
  397.       if (this.serverPort == null || this.channelName == null) {
  398.          this.serverPort = this.channelName = "BAD_PARAMETERS";
  399.       }
  400.  
  401.       this.channelName = this.channelName.trim();
  402.       if (this.channelName.charAt(0) != '#') {
  403.          this.channelName = "#" + this.channelName;
  404.       }
  405.  
  406.       this.pUserInputEdit.setText(this.xtab.translate("Type HERE"));
  407.       ((Applet)this).resize(((Container)this).getLayout().preferredLayoutSize(this));
  408.       this.selectedURL((URL)null);
  409.       this.showConnectionControls();
  410.       this.init_complete = true;
  411.       ((Container)this).layout();
  412.       String var12 = "scripts/" + this.channelName.substring(1) + "/start_lp.ups";
  413.       this.pLowerPanel.readPresentation(this.scriptExists(var12) ? var12 : "scripts/default_lp.ups");
  414.       uPresProxy var13 = this.pLowerPanel;
  415.       (new Thread(var13)).start();
  416.       if (this.doPanels) {
  417.          this.buttons[0] = new uPresProxy(this, new Dimension(88, 31));
  418.          this.buttons[0].readPresentation("scripts/button1.btn");
  419.          var13 = this.buttons[0];
  420.          (new Thread(var13)).start();
  421.          this.pLogosPanel.add(this.buttons[0]);
  422.          this.pLogosPanel.layout();
  423.          ((Container)this).layout();
  424.       }
  425.  
  426.       String var21 = "scripts/" + this.channelName.substring(1) + "/start_up.ups";
  427.       this.pUpperPanel.readPresentation(this.scriptExists(var21) ? var21 : "scripts/default_up.ups");
  428.       uPresProxy var14 = this.pUpperPanel;
  429.       (new Thread(var14)).start();
  430.       if (var6 && this.bAutoLogin) {
  431.          this.doConnect();
  432.       }
  433.  
  434.    }
  435.  
  436.    public Dimension minimumSize() {
  437.       return new Dimension(600, 350);
  438.    }
  439.  
  440.    public String channelSimpleName() {
  441.       return this.channelName == null ? null : this.channelName.substring(1);
  442.    }
  443.  
  444.    public boolean handleEvent(Event var1) {
  445.       if (var1.target == this.pUsersBox && var1.id == 701) {
  446.          this.pIgnoreUser.setState(this.toBeIgnored(this.selectedUser()));
  447.          return false;
  448.       } else if (var1.target == this.pChatText && var1.id == 502) {
  449.          this.testForURL(this.pChatText.getSelectedText());
  450.          return super.handleEvent(var1);
  451.       } else if (var1.target != this.pUserInputEdit || var1.id != 401 || var1.key != 13 && var1.key != 10) {
  452.          return super.handleEvent(var1);
  453.       } else {
  454.          String var2 = this.pUserInputEdit.getText();
  455.          this.pUserInputEdit.setText("");
  456.          this.executeLine(var2);
  457.          var1.key = 32;
  458.          return super.handleEvent(var1);
  459.       }
  460.    }
  461.  
  462.    protected void executeLine(String var1) {
  463.       var1 = var1.trim();
  464.  
  465.       try {
  466.          if ((var1.charAt(0) == ':' || var1.charAt(0) == '*') && isAlphaNum(var1.charAt(1))) {
  467.             this.handleDirective(var1.substring(1));
  468.             return;
  469.          }
  470.  
  471.          if (this.session != null) {
  472.             if (this.pSingleUserBtn.getState() && this.selectedUser() != null) {
  473.                String var2 = this.selectedUser();
  474.                this.toUser(this.xtab.translate("TO ") + var2 + "> " + var1);
  475.                this.session.userSaid(var2, var1);
  476.                return;
  477.             }
  478.  
  479.             this.toUser(this.nickName + "> " + var1);
  480.             this.session.userSaid(var1);
  481.             return;
  482.          }
  483.       } catch (Exception var3) {
  484.       }
  485.  
  486.    }
  487.  
  488.    public void floatBigWin() {
  489.       this.bigWin = new BigWindow(this, "ParaChat Floating Window");
  490.       this.bigWin.setBackground(this.bgColor);
  491.       this.bigWin.setForeground(this.fgColor);
  492.       Object var1 = null;
  493.  
  494.       try {
  495.          Dimension var2 = Toolkit.getDefaultToolkit().getScreenSize();
  496.          var4 = new Dimension(var2.width * 3 / 4, var2.height * 3 / 4);
  497.       } catch (Exception var3) {
  498.          var4 = new Dimension(600, 450);
  499.       }
  500.  
  501.       this.bigWin.resize(var4);
  502.       this.bigWin.show();
  503.       this.pBigWinBtn.setLabel(this.xtab.translate("Unfloat"));
  504.    }
  505.  
  506.    public final String floatMode() {
  507.       return this.bigWin == null ? "off" : "on";
  508.    }
  509.  
  510.    public void unfloatBigWin() {
  511.       if (this.bigWin != null && this.bigWin.unfloat()) {
  512.          this.bigWin = null;
  513.          this.pBigWinBtn.setLabel(this.xtab.translate("Float"));
  514.       }
  515.  
  516.    }
  517.  
  518.    public void setLogoutURL(URL var1) {
  519.       this.logoutURL = var1;
  520.    }
  521.  
  522.    public void cruiseTo(URL var1) {
  523.       this.cruiseTo(var1, "ParaChatSurf");
  524.    }
  525.  
  526.    public void cruiseTo(URL var1, String var2) {
  527.       if (var1 != null) {
  528.          ((Applet)this).showStatus(this.xtab.translate("Cruising to document: ") + var1);
  529.  
  530.          try {
  531.             ((Applet)this).getAppletContext().showDocument(var1, var2);
  532.          } catch (Exception var3) {
  533.             System.out.println("failed to fire up site " + var1);
  534.          }
  535.       }
  536.    }
  537.  
  538.    public boolean action(Event var1, Object var2) {
  539.       if (var1.target != this.pSendBtn) {
  540.          if (var1.target == this.pConnectBtn) {
  541.             if (this.status() == 2) {
  542.                this.session.doQuit((StringTokenizer)null);
  543.                this.msgDisconnect(this.xtab.translate("you logged off"));
  544.                this.cruiseTo(this.logoutURL, "_blank");
  545.                return true;
  546.             } else {
  547.                if (this.bAutoLogin) {
  548.                   this.doConnect();
  549.                } else {
  550.                   this.showConnectionControls();
  551.                }
  552.  
  553.                return true;
  554.             }
  555.          } else {
  556.             if (var1.target == this.pAboutBtn) {
  557.                this.toUser("\nParaChat Version " + this.VERSION + "\n(c) Paralogic Software Corporation 1996, 1997, 1998\n" + "http://www.paralogic.com\n" + "2140 Peralta Blvd Suite 109, Fremont CA 94536, U.S.A.\n");
  558.             } else if (var1.target == this.pFaqBtn) {
  559.                this.cruiseTo(this.faqURL);
  560.             } else if (var1.target == this.pSurfBtn) {
  561.                try {
  562.                   this.testForURL(this.pChatText.getSelectedText());
  563.                } catch (Exception var4) {
  564.                }
  565.  
  566.                this.cruiseTo(this.selectedURL);
  567.             } else if (var1.target == this.pBigWinBtn) {
  568.                if (this.bigWin == null) {
  569.                   this.floatBigWin();
  570.                } else {
  571.                   this.unfloatBigWin();
  572.                }
  573.             } else if (var1.target == this.pIgnoreUser) {
  574.                if (this.pIgnoreUser.getState()) {
  575.                   this.ignore(this.selectedUser());
  576.                } else {
  577.                   this.unIgnore(this.selectedUser());
  578.                }
  579.             } else if (var1.target == this.pWhoisBtn) {
  580.                String var5 = this.selectedUser();
  581.                if (var5 != null) {
  582.                   this.session.whois(var5);
  583.                }
  584.             }
  585.  
  586.             return false;
  587.          }
  588.       } else if (this.session == null) {
  589.          return false;
  590.       } else {
  591.          StringTokenizer var3 = new StringTokenizer(this.pUserMultiLineInput.getText(), "\n\r");
  592.          this.pUserMultiLineInput.setText("");
  593.  
  594.          while(var3.hasMoreTokens()) {
  595.             this.executeLine(var3.nextToken());
  596.          }
  597.  
  598.          return true;
  599.       }
  600.    }
  601.  
  602.    private boolean scriptExists(String var1) {
  603.       String var2 = urlGet(this.applet.getCodeBase(), var1);
  604.       return var2 != null && !var2.startsWith("<HTML");
  605.    }
  606.  
  607.    public static boolean isAlphaNum(char var0) {
  608.       return var0 >= 'a' && var0 <= 'z' || var0 >= 'A' && var0 <= 'Z' || var0 >= '0' && var0 <= '9';
  609.    }
  610.  
  611.    public boolean isShortAlphaNum(String var1) {
  612.       int var2 = var1.length();
  613.       if (var2 > 18) {
  614.          return false;
  615.       } else {
  616.          if (!this.bUnicodeNick) {
  617.             for(int var3 = 0; var3 < var2; ++var3) {
  618.                if (!isAlphaNum(var1.charAt(var3))) {
  619.                   return false;
  620.                }
  621.             }
  622.          }
  623.  
  624.          return var1.trim().length() > 0;
  625.       }
  626.    }
  627.  
  628.    public void ignore(String var1) {
  629.       if (var1 != null) {
  630.          this.ignoreList.put(var1, new Object());
  631.       }
  632.  
  633.    }
  634.  
  635.    public void unIgnore(String var1) {
  636.       if (var1 != null) {
  637.          this.ignoreList.remove(var1);
  638.       }
  639.  
  640.    }
  641.  
  642.    public Enumeration getIgnoreList() {
  643.       return this.ignoreList.keys();
  644.    }
  645.  
  646.    protected boolean toBeIgnored(String var1) {
  647.       return this.ignoreList.containsKey(var1);
  648.    }
  649.  
  650.    public void selectedURL(URL var1) {
  651.       this.selectedURL = var1;
  652.       if (var1 != null) {
  653.          this.pSurfBtn.enable();
  654.       } else {
  655.          this.pSurfBtn.disable();
  656.       }
  657.  
  658.       ((Applet)this).showStatus(this.xtab.translate("Surf URL: ") + var1);
  659.    }
  660.  
  661.    protected void handleDirective(String var1) {
  662.       if (var1 != null) {
  663.          StringTokenizer var2 = new StringTokenizer(var1, ";\n");
  664.  
  665.          while(var2.hasMoreTokens()) {
  666.             this.handleSingleDirective(var2.nextToken());
  667.          }
  668.       }
  669.  
  670.    }
  671.  
  672.    protected void handleSingleDirective(String var1) {
  673.       StringTokenizer var2 = new StringTokenizer(var1);
  674.       String var3 = var2.nextToken().trim();
  675.       this.handleSingleDirective(var3, var2, false);
  676.    }
  677.  
  678.    protected void handleSingleDirective(String var1, StringTokenizer var2, boolean var3) {
  679.       if (this.loadedCommands.get(var1) == null && !var3) {
  680.          this.toUser(this.xtab.translate("Please wait while we load code to execute the command: ") + var1);
  681.       }
  682.  
  683.       Executable var4;
  684.       try {
  685.          var4 = (Executable)Class.forName(var1).newInstance();
  686.       } catch (Exception var7) {
  687.          if (!var3) {
  688.             this.toUser(this.xtab.translate("Could not dynamically load code for command: ") + var1 + "\nProbable Cause: " + var7);
  689.          }
  690.  
  691.          return;
  692.       }
  693.  
  694.       this.loadedCommands.put(var1, new Object());
  695.  
  696.       try {
  697.          var4.execute(var2, this);
  698.       } catch (Exception var6) {
  699.          if (!var3) {
  700.             this.toUser("Command '" + var1 + "' generated exception " + var6);
  701.          }
  702.  
  703.       }
  704.    }
  705.  
  706.    public ChatRenderer getChatText(String var1) {
  707.       return var1 == null ? this.pChatText : (ChatRenderer)this.renderers4From.get(var1);
  708.    }
  709.  
  710.    public void setChatText(ChatRenderer var1) {
  711.       this.chatPanel.remove((Component)this.pChatText);
  712.       this.chatPanel.add("Center", (Component)var1);
  713.       this.pChatText = var1;
  714.       this.chatPanel.invalidate();
  715.       this.chatPanel.validate();
  716.       ((Component)this).repaint();
  717.    }
  718.  
  719.    public TextField getUserInputText() {
  720.       return this.pUserInputEdit;
  721.    }
  722.  
  723.    public void paint(Graphics var1) {
  724.       super.paint(var1);
  725.    }
  726.  
  727.    public void status(int var1) {
  728.       this.status = var1;
  729.       switch (this.status) {
  730.          case 0:
  731.             this.pStatusBar.setText(this.xtab.translate("NOT CONNECTED"));
  732.             return;
  733.          case 1:
  734.             this.pStatusBar.setText(this.xtab.translate("CONNECTING: ") + this.serverName);
  735.             return;
  736.          case 2:
  737.             this.pStatusBar.setText(this.xtab.translate("CONNECTED: ") + this.channelName + "@" + this.serverName);
  738.             return;
  739.          default:
  740.             this.pStatusBar.setText(this.xtab.translate("STATUS UNKNOWN"));
  741.       }
  742.    }
  743.  
  744.    public void setChannel(String var1) {
  745.       this.channelName = var1;
  746.       this.status(2);
  747.    }
  748.  
  749.    public int status() {
  750.       return this.status;
  751.    }
  752.  
  753.    private void enableUserControls() {
  754.       this.pSingleUserBtn.enable();
  755.       this.pIgnoreUser.enable();
  756.       this.pWhoisBtn.enable();
  757.       this.hideConnectionControls();
  758.    }
  759.  
  760.    protected void hideConnectionControls() {
  761.       this.centerCard.show(this.centerPanel, "chat");
  762.       this.pConnectBtn.enable();
  763.    }
  764.  
  765.    protected void showConnectionControls() {
  766.       if (!this.bAutoLogin) {
  767.          this.unfloatBigWin();
  768.          this.centerCard.show(this.centerPanel, "connect");
  769.          this.pConnectBtn.disable();
  770.          this.connectPanel.display();
  771.       }
  772.  
  773.    }
  774.  
  775.    public static String urlGet(URL var0, String var1) {
  776.       try {
  777.          URL var2 = new URL(var0, var1);
  778.          URLConnection var3 = var2.openConnection();
  779.          var3.setDoInput(true);
  780.          var3.setDoOutput(true);
  781.          var3.setDefaultUseCaches(false);
  782.          var3.setUseCaches(false);
  783.          DataInputStream var4 = new DataInputStream(var3.getInputStream());
  784.          String var5 = var4.readLine();
  785.          ((FilterInputStream)var4).close();
  786.          return var5;
  787.       } catch (MalformedURLException var6) {
  788.          System.out.println("Warning: \"" + var1 + "\" is not a URL");
  789.          return null;
  790.       } catch (IOException var7) {
  791.          return null;
  792.       }
  793.    }
  794.  
  795.    private void disableUserControls() {
  796.       this.pSingleUserBtn.disable();
  797.       this.pIgnoreUser.disable();
  798.       this.pWhoisBtn.disable();
  799.    }
  800.  
  801.    public void msgConnect() {
  802.       urlGet(((Applet)this).getCodeBase(), this.recordURL + "?nick=" + this.nickName + "&channel=" + this.channelName.substring(1));
  803.       this.status(2);
  804.       this.pConnectBtn.enable();
  805.       this.pSingleUserBtn.enable();
  806.       this.pIgnoreUser.enable();
  807.       this.pWhoisBtn.enable();
  808.       this.hideConnectionControls();
  809.       this.session.setCreatorURL(((Applet)this).getDocumentBase().toString());
  810.       this.session.joinChannel(this.channelName);
  811.       this.pConnectBtn.setLabel(this.xtab.translate("Log off!"));
  812.    }
  813.  
  814.    public void msgDisconnect(String var1) {
  815.       this.session = null;
  816.       this.clearUserNames();
  817.       this.status(0);
  818.       this.pConnectBtn.setLabel(this.xtab.translate("Connect!"));
  819.       this.pConnectBtn.enable();
  820.       this.pSingleUserBtn.disable();
  821.       this.pIgnoreUser.disable();
  822.       this.pWhoisBtn.disable();
  823.       this.toUser(this.xtab.translate("Disconnected:"));
  824.       this.toUser(var1);
  825.    }
  826.  
  827.    public boolean doConnect() {
  828.       this.doConnect(this.connectPanel.getNick(), this.connectPanel.getReal(), this.connectPanel.getEmail(), this.connectPanel.getPasswd());
  829.       return this.connected;
  830.    }
  831.  
  832.    public void doConnect(String var1, String var2, String var3, String var4) {
  833.       long var5 = System.currentTimeMillis();
  834.       if (this.lastConnect == 0L) {
  835.          this.handleDirective(this.getProperty("ONCONNECT"));
  836.       }
  837.  
  838.       if (var5 - this.lastConnect < 5000L) {
  839.          System.out.println("Double click on connect button? Ignored.");
  840.       } else {
  841.          this.lastConnect = var5;
  842.          this.status(1);
  843.          this.pSingleUserBtn.disable();
  844.          this.pIgnoreUser.disable();
  845.          this.pWhoisBtn.disable();
  846.          if (this.session != null) {
  847.             this.session.disconnect();
  848.             this.session = null;
  849.          }
  850.  
  851.          this.nickName = var1;
  852.          this.emailAddr = var3;
  853.          this.passwd = var4;
  854.          this.realName = var2 + "[" + var3 + "] from " + ((Applet)this).getDocumentBase();
  855.          this.connected = false;
  856.          this.session = new ChatSession();
  857.          this.session.init(this, var1, this.passwd, this.realName, this.connectAlg, this.getProperty("UNICODE") != null);
  858.  
  859.          try {
  860.             int var7 = Integer.parseInt(this.serverPort);
  861.             int var8 = Integer.parseInt(this.httpPort);
  862.             this.connected = this.session.connect(var1, this.passwd, this.realName, this.serverName, var7, var8, this.connectAlg, this.getProperty("UNICODE") != null);
  863.          } catch (Exception var9) {
  864.             ((Throwable)var9).printStackTrace();
  865.             this.toUser("Connection to " + this.serverName + ":" + this.serverPort + " failed. " + var9);
  866.          }
  867.  
  868.          if (!this.connected) {
  869.             this.session.disconnect();
  870.             this.msgDisconnect("Could not connect to server " + this.serverName + ":" + this.serverPort);
  871.             this.toUser("Sorry, network connection failed. Please try again later.");
  872.             this.session = null;
  873.          } else {
  874.             if (this.heartbeat && !this.beating) {
  875.                this.handleSingleDirective("heartbeat", (StringTokenizer)null, true);
  876.             }
  877.  
  878.          }
  879.       }
  880.    }
  881.  
  882.    public void addRenderer4From(String var1, ChatRenderer var2) {
  883.       this.renderers4From.put(var1, var2);
  884.    }
  885.  
  886.    public void removeRenderer4From(String var1, Object var2) {
  887.       if (this.renderers4From.get(var1) == var2) {
  888.          this.renderers4From.remove(var1);
  889.       }
  890.  
  891.    }
  892.  
  893.    public synchronized void toUser(String var1) {
  894.       this.toUser(this.pChatText, var1);
  895.    }
  896.  
  897.    public synchronized void toUser(ChatRenderer var1, String var2) {
  898.       var1.appendTextWithWrap(var2, true);
  899.    }
  900.  
  901.    public synchronized void toUser(String var1, String var2, String var3) {
  902.       ChatRenderer var4 = null;
  903.       if (var2.equals(this.nickName)) {
  904.          var4 = (ChatRenderer)this.renderers4From.get(var1);
  905.       }
  906.  
  907.       if (var4 == null) {
  908.          var4 = this.pChatText;
  909.       }
  910.  
  911.       var4.appendTextWithWrap(var1, var2, var3, true);
  912.    }
  913.  
  914.    public void testForURL(String var1) {
  915.       String var2 = var1.toLowerCase();
  916.       String var3 = "";
  917.       int var4 = var2.indexOf("http://");
  918.       if (var4 < 0) {
  919.          var4 = var2.indexOf("www.");
  920.          var3 = "http://";
  921.       }
  922.  
  923.       if (var4 > 0 && var1.charAt(var4 - 1) == '[') {
  924.          int var5 = var1.indexOf(93, var4);
  925.          if (var5 > 0) {
  926.             this.testForURL(var1.substring(var5 + 1));
  927.             return;
  928.          }
  929.       }
  930.  
  931.       if (var4 >= 0) {
  932.          int var9 = var1.indexOf(32, var4);
  933.          int var6 = var1.indexOf(10, var4);
  934.          if (var6 > 0 && var6 < var9) {
  935.             var9 = var6;
  936.          }
  937.  
  938.          var6 = var1.indexOf(44, var4);
  939.          if (var6 > 0 && var6 < var9) {
  940.             var9 = var6;
  941.          }
  942.  
  943.          if (var9 < 0) {
  944.             var3 = var3 + var1.substring(var4);
  945.          } else {
  946.             var3 = var3 + var1.substring(var4, var9);
  947.          }
  948.  
  949.          try {
  950.             this.selectedURL(new URL(var3.trim()));
  951.          } catch (Exception var7) {
  952.          }
  953.       }
  954.    }
  955.  
  956.    public String selectedUser() {
  957.       String var1 = this.pUsersBox.getSelectedItem();
  958.       if (var1 == null) {
  959.          return null;
  960.       } else {
  961.          return "@*+:".indexOf(var1.charAt(0)) < 0 ? var1 : var1.substring(1);
  962.       }
  963.    }
  964.  
  965.    public void clearUserNames() {
  966.       this.pUsersBox.clear();
  967.  
  968.       while(this.pUsersBox.countItems() > 0) {
  969.          this.pUsersBox.delItem(0);
  970.       }
  971.  
  972.    }
  973.  
  974.    public void setUserNames(String var1) {
  975.       StringTokenizer var2 = new StringTokenizer(var1);
  976.       this.clearUserNames();
  977.  
  978.       while(var2.hasMoreTokens()) {
  979.          this.addUser(var2.nextToken());
  980.       }
  981.  
  982.    }
  983.  
  984.    public void addUser(String var1) {
  985.       for(int var2 = 0; var2 < this.pUsersBox.countItems(); ++var2) {
  986.          String var3 = this.pUsersBox.getItem(var2);
  987.          int var4 = var3.compareTo(var1);
  988.          if (var4 >= 0) {
  989.             if (var4 == 0) {
  990.                return;
  991.             }
  992.  
  993.             if (var4 > 0) {
  994.                this.pUsersBox.addItem(var1, var2);
  995.             }
  996.  
  997.             return;
  998.          }
  999.       }
  1000.  
  1001.       this.pUsersBox.addItem(var1);
  1002.    }
  1003.  
  1004.    public void partUser(String var1) {
  1005.       for(int var2 = 0; var2 < this.pUsersBox.countItems(); ++var2) {
  1006.          String var3 = this.pUsersBox.getItem(var2);
  1007.          int var4 = var3.compareTo(var1);
  1008.          if (var4 >= 0) {
  1009.             if (var4 == 0) {
  1010.                this.pUsersBox.delItem(var2);
  1011.             }
  1012.  
  1013.             return;
  1014.          }
  1015.       }
  1016.  
  1017.    }
  1018.  
  1019.    public String getAuthInfo() {
  1020.       return this.nickName + ":" + this.passwd;
  1021.    }
  1022. }
  1023.