package org.buzztroll.mud;

import java.lang.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class
PreferencesPanel
    extends JPanel
    implements ActionListener
{
    protected JTextField urlViewerCmdTF;
    protected JButton backgroundButton;
    
    public
    PreferencesPanel()
    {
        super();

        JPanel                                  tempP = new JPanel();
        JPanel                                  tempP2 = new JPanel();

        tempP.setLayout(new GridLayout(6, 1));
        tempP2.setLayout(new GridLayout(6, 1));

        urlViewerCmdTF = new JTextField("");

	backgroundButton = new JButton("background");
        backgroundButton.addActionListener(this);

        tempP.add(new JLabel("URL Viewer Cmd Line:"));
	tempP.add(new JLabel("Background Color:"));

        tempP2.add(urlViewerCmdTF);
	tempP2.add(backgroundButton);

        this.setLayout(new BorderLayout(5, 5));
        this.add("West", tempP);
        this.add("Center", tempP2);
    }

    public Node
    createDoc(
        Document                                doc)
            throws Exception
    {
        int                                     ctr;

        Element preferencesE = doc.createElement("preferences");

	Element backgroundE = doc.createElement("background");
        backgroundE.setAttribute("red",
				 new Integer(getBackgroundColor().getRed()).toString());
        backgroundE.setAttribute("green",
				 new Integer(getBackgroundColor().getGreen()).toString());
        backgroundE.setAttribute("blue",
				 new Integer(getBackgroundColor().getBlue()).toString());
        preferencesE.appendChild(backgroundE);

        Element urlviewerE = doc.createElement("urlviewer");

        urlviewerE.setAttribute("cmd", this.urlViewerCmdTF.getText());

        preferencesE.appendChild(urlviewerE);
  
        return preferencesE;
    }

    public void
    parse(
        Document                                doc)
    {
        int                                     ctr;
        Node                                    n;
        Node                                    nj;

	String urlViewerCmd = null;;
	String                                  redS = "";
        String                                  greenS = "";
        String                                  blueS = "";

	this.backgroundButton.setBackground(Color.black);

        Element rootE = doc.getDocumentElement();

        n = rootE.getFirstChild();
        while(n != null)
        {   
            if(Node.ELEMENT_NODE == n.getNodeType())
            {
                Element e = (Element)n;

                if(e.getTagName().equals("preferences"))
                {
                    nj = n.getFirstChild();
                    while(nj != null)
                    {
                        if(Node.ELEMENT_NODE == nj.getNodeType())
                        {
                            Element ej = (Element)nj;

                            if(ej.getTagName().equalsIgnoreCase("urlviewer"))
			    {
                                urlViewerCmd = ej.getAttribute("cmd");
                            }
                            else if(ej.getTagName().equals("background"))
                            {
				redS = ej.getAttribute("red");
                                greenS = ej.getAttribute("green");
                                blueS = ej.getAttribute("blue");

                                Color c = new Color(
						    new Integer(redS).intValue(),
						    new Integer(greenS).intValue(),
						    new Integer(blueS).intValue());
				this.backgroundButton.setBackground(c);
                            }
                        }
                        nj = nj.getNextSibling();
                    }
                } 
            }
            n = n.getNextSibling();
        }

        this.urlViewerCmdTF.setText(urlViewerCmd);
    }

    public String
    getUrlViewerCmd() 
    {
        return this.urlViewerCmdTF.getText();
    }

    public Color 
    getBackgroundColor() 
    {
	return this.backgroundButton.getBackground();
    }

    public void
    reset()
    {
        urlViewerCmdTF.setText("");
    }

    public void
	actionPerformed(
        ActionEvent                         e)
    {
        if (e.getSource() == backgroundButton)
        {
            Color c = JColorChooser.showDialog(this, "Pick Color",
					       backgroundButton.getBackground());
            backgroundButton.setBackground(c);
        }
    } 
}