//**************************************************************************
//
//
//                       National Institute Of Standards and Technology
//                                     DTS Version 1.0
//         
//
//
// Ported to System.Xml by: Mizrahi Rafael rafim@mainsoft.com
// Mainsoft Corporation (c) 2003-2004
//
//**************************************************************************

using System;
using System.Xml;

namespace nist_dom
{
        public class XmlNodeArrayList : XmlNodeList
        {
            System.Collections.ArrayList _rgNodes;

            public XmlNodeArrayList (System.Collections.ArrayList rgNodes)
            {
                _rgNodes = rgNodes;
            }

            public override int Count { get { return _rgNodes.Count; } }

            public override System.Collections.IEnumerator GetEnumerator ()
            {
                return _rgNodes.GetEnumerator ();
            }

            public override XmlNode Item (int index)
            {
                // Return null if index is out of range. by  DOM design.
                if (index < 0 || _rgNodes.Count <= index)
                    return null;

                return (XmlNode) _rgNodes [index];
            }
        }

    public class testResults
	{
		public string name;
		public string description;
		public string expected;
		public string actual;
		public testResults(string name)
		{
			//      get the name of the calling function
			this.name     = name;
			//
			//      define some methods
			//
			//this.description = set_description();
			//this.expected = set_expected();
			//this.actual = set_actual();
			//        this.toString = set_toString;
		}
		public void set_description(string description) { this.description = description; }
		public void set_expected (string expected) { this.expected = expected;}
		public void set_actual (string actual) { this.actual = actual; }

		public void set_toString()
		{
			System.Console.WriteLine("name = "+this.name+"<br>");
			System.Console.WriteLine("Description = "+this.description+"<br>");
			System.Console.WriteLine("Expected Value = "+this.expected+"<br>");
			System.Console.WriteLine("Actual Value = "+this.actual+"<br>");
		}
	}

	/// <summary>
	/// Summary description for util.
	/// </summary>
	public class util
	{
		public static System.Xml.XmlDocument masterDoc = new System.Xml.XmlDocument();//"files/staff.xml"
		public static System.Xml.XmlDocument originalDoc = new System.Xml.XmlDocument();//"files/staff.xml"
		public static System.Xml.XmlDocument masterXML = new System.Xml.XmlDocument();//"files/staff.html"
		public static System.Xml.XmlDocument otherDoc = new System.Xml.XmlDocument();//"files/otherDoc.xml"
		public static System.Xml.XmlDocument HTMLDoc = new System.Xml.XmlDocument();//"files/staff.html"
		public static System.Xml.XmlDocument noDTDXMLObject = new System.Xml.XmlDocument();//"files/noDTDXMLfile.xml"

//		cWin = self.parent.viewer;
		//public static System.Xml.XmlDocument vdoc;			// = cWin.document;
        public static System.IO.StreamWriter vdoc = null;

//		dWin = self.parent.test;
		public static System.Xml.XmlDocument testdoc;		// = dWin.document;

//		fWin = self.parent.frameddoc;
		public static System.Xml.XmlDocument framesetdoc;	// = fWin.document;

//		oWin = self.parent.original;
		public static System.Xml.XmlDocument originaldoc;	// = oWin.document;
//
//		var Interfaces = new Object();
//
//		iform = parent.interfaces.selectInterface;
//		testInterface = iform.interface.options[iform.interface.selectedIndex].Value;
//		cform = parent.categories.selectCategory;
//		testCategory = cform.category.options[cform.category.selectedIndex].Value;
//
		public static string passColor = "#00FFFF";
		public static string failColor = "#FF0000";

//		public static System.Xml.XmlNode _node;
//        public static System.Xml.XmlAttributeCollection _attributes;
//        public static System.Xml.XmlNodeList _subNodes;

		static util()
		{
			try
			{
				//System.Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
				masterDoc.Load("Test/System.Xml/nist_dom/files/staff.xml");
				originalDoc.Load("Test/System.Xml/nist_dom/files/staff.xml");
				masterXML.Load("Test/System.Xml/nist_dom/files/staff.html");
				otherDoc.Load("Test/System.Xml/nist_dom/files/otherDoc.xml");
				HTMLDoc.Load("Test/System.Xml/nist_dom/files/staff.html");
				noDTDXMLObject.Load("Test/System.Xml/nist_dom/files/noDTDXMLfile.xml");
			}
			catch (System.Exception ex)
			{
				System.Console.WriteLine(ex.Message);
				System.Console.WriteLine(ex.StackTrace);
			}

		}

		// ***********************************************************************
		//     SUPPORTING ROUTINES AND DEFINITIONS
		//************************************************************************

        public static string SUCCESS = "Passed";
        public static string FAILED = "Failed";

		//
		// General defs.
		//
		public static string saved = "";
		public static int MAXEMPLOYEES = 5;
		public static int NODE = 1;
		public static int INDEXING = 2;
		public static string employee = "employee";
		public static string rootNode = "staff";
		public static string pass = "Passed";
		public static string fail = "Failed";
		public static int FIRST = 0;
		public static int SECOND = 1;
		public static int THIRD = 2;
		public static int FOURTH = 3;
		public static int FIFTH = 4;
		public static int SIXTH = 5;
		public static int SEVENTH = 6;
		public static int EIGHT = 7;
		public static int NINETH = 8;
		public static int TENTH = 9;
		public static int ELEVENTH = 10;
		public static int TWELVETH = 11;
		public static int THIRDTEENTH = 12;

		public static string BODY = "BODY";
		public static string TITLE = "TITLE";
		public static string H1 = "H1";
		public static string H2 = "H2";
		public static string H3 = "H3";
		public static string H4 = "H4";
		public static string H5 = "H5";
		public static string H6 = "H6";
		public static string BR = "BR";
		public static string TABLE = "TABLE";
		public static string IMG = "IMG";
		public static string OBJECT = "OBJECT";
		public static string FONT = "FONT";
		public static string BASEFONT = "BASEFONT";
		public static string MAP = "MAP";
		public static string AREA = "AREA";
		public static string P = "P";
		public static string OL = "OL";
		public static string UL = "UL";
		public static string DL = "DL";
		public static string HR = "HR";
		public static string HTML = "HTML";
		public static string HEAD = "HEAD";
		public static string LINK = "LINK";
		public static string META = "META";
		public static string BASE = "BASE";
		public static string FORM = "FORM";
		public static string SELECT = "SELECT";
		public static string OPTION = "OPTION";
		public static string Q = "Q";
		public static string BLOCKQUOTE = "BLOCKQUOTE";
		public static string COL = "COL";
		public static string COLGROUP = "COLGROUP";
		public static string PRE = "PRE";
		public static string DIV = "DIV";
		public static string INS = "INS";
		public static string DEL = "DEL";
		public static string DIR = "DIR";
		public static string APPLET = "APPLET";
		public static string OPTGROUP = "OPTGROUP";
		public static string SCRIPT = "SCRIPT";
		public static string PARAM = "PARAM";
		public static string ISINDEX = "ISINDEX";
		public static string INPUT = "INPUT";
		public static string BUTTON = "BUTTON";
		public static string LABEL = "LABEL";
		public static string TEXTAREA = "TEXTAREA";
		public static string FIELDSET = "FIELDSET";
		public static string ANCHOR = "A";
		public static string FRAMESET = "FRAMESET";
		public static string FRAME = "FRAME";
		public static string IFRAME = "IFRAME";
		public static string LEGEND = "LEGEND";
		public static string MENU = "MENU";
		//public static string IFRAME = "IFRAME";
		public static string STYLE = "STYLE";
		public static string LI = "LI";
		public static string SUB = "SUB";
		public static string SUP = "SUP";
		public static string SPAN = "SPAN";
		public static string BDO = "BDO";
		public static string TT = "TT";
		public static string I = "I";
		public static string B = "B";
		public static string U = "U";
		public static string S = "S";
		public static string STRIKE = "STRIKE";
		public static string BIG = "BIG";
		public static string SMALL = "SMALL";
		public static string EM = "EM";
		public static string STRONG = "STRONG";
		public static string DFN = "DFN";
		public static string CODE = "CODE";
		public static string SAMP = "SAMP";
		public static string KBD = "KBD";
		public static string VAR = "VAR";
		public static string CITE = "CITE";
		public static string ACRONYM = "ACRONYM";
		public static string ABBR = "ABBR";
		public static string DT = "DT";
		public static string DD = "DD";
		public static string NOFRAMES = "NOFRAMES";
		public static string NOSCRIPT = "NOSCRIPT";
		public static string ADDRESS = "ADDRESS";
		public static string CENTER = "CENTER";
		public static string TD = "TD";
		public static string TBODY = "TBODY";
		public static string TFOOT = "TFOOT";
		public static string THEAD = "THEAD";
		public static string TR = "TR";
		public static string TH = "TH";

		//
		// Base URL's for tests depending on specific URL's  
		//
		// BASE1 - The URI returned by the "referrer" attribute (Document interface).
		// BASE2 - The string returned by the "domain" attribute (Document interface).
		// BASE3 - The URI returned by the "URL" attribute (Document interface).
		// BASE4 - The URI returned by the "codebase" attribute (Applet interface). 
		// BASE5 - ThE URI returned by the "codeBase" attribute (Object interface). 
		// BASE6 - The URI returned by the "href" attribute (Base interface).
		//

		public static string BASE1 = "HTTP://XW2K.SDCT.ITL.NIST.GOV/BRADY/DOM/INDEX.HTML"; 
		public static string BASE2 = "XW2K.SDCT.ITL.NIST.GOV";
		public static string BASE3 = "HTTP://XW2K.SDCT.ITL.NIST.GOV/BRADY/DOM/FILES/TEST.HTML";
		public static string BASE4 = "HTTP://XW2K.SDCT.ITL.NIST.GOV/BRADY/DOM/FILES/";
		public static string BASE5 = "HTTP://XW2K.SDCT.ITL.NIST.GOV/BRADY/DOM/";
		public static string BASE6 = "HTTP://XW2K.SDCT.ITL.NIST.GOV/BRADY/DOM/";

		//
		// Exception codes
		//

		public static string EOL = "\n"; //String.fromCharCode(13,10);
		public static string INDEX_SIZE_ERR = "StartIndex cannot be less than zero.\r\nParameter name: startIndex";
		public static string DOMSTRING_SIZE_ERR = " ";
		public static string INVALID_CHARACTER_ERR  = "A name contained an invalid character." + EOL;
		public static string NOT_DATA_ALLOWED_ERR = " ";
		public static string NO_MODIFICATION_ALLOWED_ERR = "Attempt to modify a read-only node." + EOL;
		public static string NOT_FOUND1_ERR = "Invalid procedure call or argument";
		public static string NOT_FOUND2_ERR = "Insert position Node must be a Child of the Node to " + "insert under." + EOL;
		public static string NOT_FOUND3_ERR = "The parameter Node is not a child of this Node." + EOL;
		public static string NOT_SUPPORTED_ERR = " ";
		public static string INUSE_ATTRIBUTE_ERR = "The Attribute node cannot be inserted because it is already an attribute of another element.";//"Attributes must be removed before adding them " + "to a different node." + EOL;

		//
		// nodeType values
		//

		public const int ELEMENT_NODE = (int)System.Xml.XmlNodeType.Element;
		public const int ATTRIBUTE_NODE = (int)System.Xml.XmlNodeType.Attribute;
		public const int TEXT_NODE = (int)System.Xml.XmlNodeType.Text;
		public const int CDATA_SECTION_NODE = (int)System.Xml.XmlNodeType.CDATA;
		public const int ENTITY_REFERENCE_NODE = (int)System.Xml.XmlNodeType.EntityReference;
		public const int ENTITY_NODE = (int)System.Xml.XmlNodeType.Entity;
		public const int PROCESSING_INSTRUCTION_NODE = (int)System.Xml.XmlNodeType.ProcessingInstruction;
		public const int COMMENT_NODE = (int)System.Xml.XmlNodeType.Comment;
		public const int DOCUMENT_NODE = (int)System.Xml.XmlNodeType.Document;
		public const int DOCUMENT_TYPE_NODE = (int)System.Xml.XmlNodeType.DocumentType;
		public const int DOCUMENT_FRAGMENT_NODE = (int)System.Xml.XmlNodeType.DocumentFragment;
		public const int NOTATION_NODE = (int)System.Xml.XmlNodeType.Notation;
		public const int XML_DECLARATION_NODE = (int)System.Xml.XmlNodeType.XmlDeclaration;


	public static System.Xml.XmlDocument getDOMDocument()
	{
		return masterDoc; 
	}

	public static System.Xml.XmlDocument getHTMLDocument()
	{
		return testdoc;
	}

	public static System.Xml.XmlDocument getFramesetDocument()
	{
		return framesetdoc;
	}

	public static System.Xml.XmlDocument getDOMHTMLDocument()
	{
		return HTMLDoc;
	}

	public static System.Xml.XmlDocument getnoDTDXMLDocument()
	{
		return noDTDXMLObject;
	}

	public static System.Xml.XmlDocument getOriginalDOMDocument()
	{
		return originalDoc;
	}

	public static System.Xml.XmlDocument getOtherDOMDocument()
	{
		return otherDoc;
	}

	public static System.Xml.XmlNode createNode(int type,string data)
	{
	System.Xml.XmlNode node = null;

	switch(type) {
		case ATTRIBUTE_NODE:
			node = getDOMDocument().CreateAttribute(data);
			break;
		case CDATA_SECTION_NODE:
			node = getDOMDocument().CreateCDataSection(data);
			break;
		case ELEMENT_NODE:
			node = getDOMDocument().CreateElement(data);
			break;
		case ENTITY_REFERENCE_NODE:
			node = getDOMDocument().CreateEntityReference(data);
			break;
		case TEXT_NODE:
			node = getDOMDocument().CreateTextNode(data);
			break;
		default:
			break;
	}
	return node;
	}

	public static void resetData()
	{
		try
		{
			if (getDOMDocument().DocumentElement != null)
			{
				getDOMDocument().RemoveChild(getDOMDocument().DocumentElement);
			}

			System.Xml.XmlNode tmpNode = getDOMDocument().ImportNode(getOriginalDOMDocument().DocumentElement,true);
			getDOMDocument().AppendChild(tmpNode);
			//getDOMDocument().AppendChild(getOriginalDOMDocument().DocumentElement.CloneNode(true));
		}
		catch (NotImplementedException ex)
		{
			throw ex;
		}
	}

/*	public static void resetHTMLData()
	{
		System.Xml.XmlNode newdoc = originalHTMLDocument(HTML);
		testdoc = ( System.Xml.XmlDocument) newdoc.CloneNode(true);
	}
*/
	public static System.Xml.XmlElement getRootNode()
	{
		return getDOMDocument().DocumentElement;
	}

/*	public void HTMLNodeObject(string argFirst,int argSecond)
	{
	string tagName = argFirst;//arguments[0];
	//int one = 1;
	//int two = 2;
	System.Xml.XmlNodeList nodeList=null;

	if (tagName==FRAMESET || tagName==FRAME)
		nodeList = framesetdoc.GetElementsByTagName(tagName);
	else
		nodeList = testdoc.GetElementsByTagName(tagName);

	if (argFirst != "") //if (arguments.length == one)
		this.node = nodeList.Item(util.FIRST);
	if (argSecond != -1) //else if (arguments.length == two)
		this.node = nodeList.Item(argSecond);//arguments[SECOND]);
	}

	public System.Xml.XmlNode originalHTMLDocument(string arg)
	{
		string tagName = arg;
		//int one = 1;
		//int two = 2;

		System.Xml.XmlNodeList nodeList = originaldoc.GetElementsByTagName(tagName);
		this.node = nodeList.Item(util.FIRST).CloneNode(true);
		return this.node;
	}
*/

//	public string getTableCaption(object table)
//	{
//		return table.caption;
//	}
//
//	public void getTableHead(object table)
//	{
//		return table.tHead;
//	}
//
//	public void getTableFoot(object table)
//	{
//	return table.tFoot;
//	}

	public static System.Xml.XmlNode nodeObject(int argFirst,int argSecond)//args)
	{
	string tagName = employee;
	System.Xml.XmlNodeList nodeList = null;
    System.Xml.XmlNode _node = null;

	nodeList = getRootNode().GetElementsByTagName(tagName);
	System.Xml.XmlElement parentNode = (System.Xml.XmlElement)nodeList.Item(argFirst);//arguments[FIRST]);

	if (argFirst != -1)//if (arguments.length == one)
		_node = parentNode;
    
    if (argSecond != -1)//else if (arguments.length == two)
        {
            System.Xml.XmlNodeList list = getSubNodes(parentNode);
            _node = getElement(getSubNodes(parentNode), argSecond);//arguments[SECOND]);
            //_node = getElement((System.Xml.XmlNodeList)getSubNodes(parentNode), argSecond);//arguments[SECOND]);
        }

        //_attributes = getAttributes(_node);
	    //_subNodes = getSubNodes((System.Xml.XmlElement)_node);

        return _node;
	}
	public static System.Xml.XmlNodeList getSubNodes(System.Xml.XmlDocument node)
	{
// GHT alternative for GetElementsByTagName("*")
//        System.Collections.ArrayList nodeArrayList = new System.Collections.ArrayList ();
//        getAllNodesRecursively (node, nodeArrayList);
//        return new XmlNodeArrayList (nodeArrayList);
// GHT alternative for GetElementsByTagName("*")
	    return node.GetElementsByTagName("*");
	}
    public static System.Xml.XmlNodeList getSubNodes(System.Xml.XmlElement node)
    {
// GHT alternative for GetElementsByTagName("*")
//       System.Collections.ArrayList nodeArrayList = new System.Collections.ArrayList ();
//       getAllNodesRecursively (node, nodeArrayList);
//       return new XmlNodeArrayList (nodeArrayList);
// GHT alternative for GetElementsByTagName("*")
       return node.GetElementsByTagName("*");
    }

    private static void getAllNodesRecursively (XmlNode argNode, System.Collections.ArrayList argArrayList)
    {
        XmlNodeList xmlNodeList = argNode.ChildNodes;
        foreach (XmlNode node in xmlNodeList)
        {
            if (node.NodeType == XmlNodeType.Element)
            {
                argArrayList.Add (node);
                getAllNodesRecursively (node, argArrayList);
            }
        }
    }
 

	public static System.Xml.XmlNode getElement(System.Xml.XmlNodeList subNodes,int elementAt)
	{
	    return (System.Xml.XmlNode)subNodes.Item(elementAt);
	}

	public static System.Xml.XmlAttributeCollection  getAttributes(System.Xml.XmlNode node)
	{
		return node.Attributes;
	}

	public static System.Xml.XmlDocumentType getDocType()
	{
		return (System.Xml.XmlDocumentType)getDOMDocument().ChildNodes.Item(SECOND); 
	}

	public static System.Xml.XmlEntity getEntity(string name)
	{
		return (System.Xml.XmlEntity)getDocType().Entities.GetNamedItem(name);
	}

	public static System.Xml.XmlNode getNotation(string name)
	{
		return getDocType().Notations.GetNamedItem(name);
	}

/*
		public void specPtr(index) 
		{
			Spec = new Object();
			Spec['DOMImplementation'] = 'ID-102161490';
			Spec['DocumentFragment'] = 'ID-B63ED1A3';
			Spec['Document'] = 'i-Document';
			Spec['Node'] = 'ID-1950641247';
			Spec['NodeList'] = 'ID-536297177';
			Spec['NamedNodeMap'] = 'ID-1780488922';
			Spec['CharacterData'] = 'ID-FF21A306';
			Spec['Attr'] = 'ID-637646024';
			Spec['Element'] = 'ID-745549614';
			Spec['Text'] = 'ID-1312295772';
			Spec['Comment'] = 'ID-1728279322';
			Spec['CDATASection'] = 'ID-667469212';
			Spec['DocumentType'] = 'ID-412266927';
			Spec['Notation'] = 'ID-5431D1B9';
			Spec['Entity'] = 'ID-527DCFF2';
			Spec['EntityReference'] = 'ID-11C98490';
			Spec['ProcessingInstruction'] = 'ID-1004215813';
			Spec['HTMLCollection'] = 'ID-75708506';
			Spec['HTMLDocument'] = 'ID-26809268';
			Spec['HTMLElement'] = 'ID-58190037';
			Spec['HTMLHtmlElement'] = 'ID-33759296';
			Spec['HTMLHeadElement'] = 'ID-77253168';
			Spec['HTMLLinkElement'] = 'ID-35143001';
			Spec['HTMLTitleElement'] = 'ID-79243169';
			Spec['HTMLMetaElement'] = 'ID-37041454';
			Spec['HTMLBaseElement'] = 'ID-73629039';
			Spec['HTMLIsIndexElement'] = 'ID-85283003';
			Spec['HTMLStyleElement'] = 'ID-16428977';
			Spec['HTMLBodyElement'] = 'ID-62018039';
			Spec['HTMLFormElement'] = 'ID-40002357';
			Spec['HTMLSelectElement'] = 'ID-94282980'; 
			Spec['HTMLOptGroupElement'] = 'ID-38450247';
			Spec['HTMLOptionElement'] = 'ID-70901257';
			Spec['HTMLInputElement'] = 'ID-6043025';
			Spec['HTMLTextAreaElement'] = 'ID-24874179';
			Spec['HTMLButtonElement'] = 'ID-34812697';
			Spec['HTMLLabelElement'] = 'ID-13691394';
			Spec['HTMLFieldSetElement'] = 'ID-7365882';
			Spec['HTMLLegendElement'] = 'ID-21482039';
			Spec['HTMLUListElement'] = 'ID-86834457';
			Spec['HTMLOListElement'] = 'ID-58056027';
			Spec['HTMLDListElement'] = 'ID-52368974';
			Spec['HTMLDirectoryElement'] = 'ID-71600284';
			Spec['HTMLMenuElement'] = 'ID-72509186';
			Spec['HTMLLIElement'] = 'ID-74680021';
			Spec['HTMLBlockquoteElement'] = 'ID-40703765';
			Spec['HTMLDivElement'] = 'ID-22445964';
			Spec['HTMLParagraphElement'] = 'ID-84675076';
			Spec['HTMLHeadingElement'] = 'ID-43345119';
			Spec['HTMLQuoteElement'] = 'ID-70319763';
			Spec['HTMLPreElement'] = 'ID-11383425';
			Spec['HTMLBRElement'] = 'ID-56836063';
			Spec['HTMLBaseFontElement'] = 'ID-32774408';
			Spec['HTMLFontElement'] = 'ID-43943847';
			Spec['HTMLHRElement'] = 'ID-68228811';
			Spec['HTMLModElement'] = 'ID-79359609';
			Spec['HTMLAnchorElement'] = 'ID-48250443';
			Spec['HTMLImageElement'] = 'ID-17701901';
			Spec['HTMLObjectElement'] = 'ID-9893177';
			Spec['HTMLParamElement'] = 'ID-64077273';
			Spec['HTMLAppletElement'] = 'ID-31006348';
			Spec['HTMLMapElement'] = 'ID-94109203';
			Spec['HTMLAreaElement'] = 'ID-26019118';
			Spec['HTMLScriptElement'] = 'ID-81598695';
			Spec['HTMLTableElement'] = 'ID-64060425';
			Spec['HTMLTableCaptionElement'] = 'ID-12035137';
			Spec['HTMLTableColElement'] = 'ID-84150186';
			Spec['HTMLTableSectionElement'] = 'ID-67417573';
			Spec['HTMLTableRowElement'] = 'ID-6986576';
			Spec['HTMLTableCellElement'] = 'ID-82915075';
			Spec['HTMLFrameSetElement'] = 'ID-43829095';
			Spec['HTMLFrameElement'] = 'ID-97790553';
			Spec['HTMLIFrameElement'] = 'ID-50708718';
			return Spec[index];
		}

		public void setInfo() 
		{
			dWin = self.parent.info;
			infodoc = dWin.document;

			iform = parent.interfaces.selectInterface;
			testInterface = iform.interface.options[iform.interface.selectedIndex].Value;

			cform = parent.categories.selectCategory;
			testCategory = cform.category.options[cform.category.selectedIndex].Value;

			sr_file = testCategory.toLowerCase()+"/"+testInterface+"/Requirements.html";
			src_file = testCategory.toLowerCase()+"/"+testInterface+"/"+testInterface+".html";
			util_file = "util.html";
			core_file = "spec/level-one-core.html";
			html_file = "spec/level-one-html.html";

			if (testCategory == "HTML") 
			spec_ref = html_file + "#" + specPtr(testInterface);
			else 
			spec_ref = core_file + "#" + specPtr(testInterface);

			infodoc.write("<BODY BGCOLOR=#0000FF LINK=#FFFF00 VLINK=#FFFF00>\n");
			infodoc.write("<CENTER>\n");
			infodoc.write("<P><P>\n");
			infodoc.write("<b><A HREF="+spec_ref+" TARGET=viewer>DOM REC</A></B><BR>\n");
			infodoc.write("<b><A HREF="+sr_file+" TARGET=viewer>SR's</A></b><BR>\n");
			infodoc.write("<b><A HREF="+src_file+" TARGET=viewer>Source</A></b><BR>\n");
			infodoc.write("<b><A HREF="+util_file+" TARGET=viewer>Utility</A></B><BR>\n");
			infodoc.write("</CENTER>\n");
			infodoc.close();
		}

		public void getInterfaces(option) 
		{
		var Cats = new Object();
		Cats["Fundamental"] = ['DOMImplementation','Node', 'NodeList',
		'Document', 'NamedNodeMap', 'CharacterData', 'Attr',
		'Element', 'Text', 'Comment'];

		Cats["Extended"]  = ['CDATASection', 'DocumentType', 'Notation', 'Entity', 
		'ProcessingInstruction' ];

		Cats["HTML"] = [
		'HTMLAnchorElement',
		'HTMLAppletElement',
		'HTMLAreaElement',
		'HTMLBaseElement',
		'HTMLBaseFontElement',
		'HTMLBlockquoteElement',
		'HTMLBodyElement',
		'HTMLBRElement',
		'HTMLButtonElement',
		'HTMLCollection',
		'HTMLDirectoryElement',
		'HTMLDivElement',
		'HTMLDListElement',
		'HTMLDocument',
		'HTMLElement',
		'HTMLFieldSetElement',
		'HTMLFontElement',
		'HTMLFormElement',
		'HTMLFrameElement',
		'HTMLFrameSetElement',
		'HTMLHeadElement',
		'HTMLHeadingElement',
		'HTMLHRElement',
		'HTMLHtmlElement',
		'HTMLIFrameElement',
		'HTMLImageElement',
		'HTMLInputElement',
		'HTMLIsIndexElement',
		'HTMLLabelElement',
		'HTMLLegendElement',
		'HTMLLIElement',
		'HTMLLinkElement',
		'HTMLMapElement',
		'HTMLMenuElement',
		'HTMLMetaElement',
		'HTMLModElement',
		'HTMLObjectElement',
		'HTMLOListElement',
		'HTMLOptGroupElement',
		'HTMLOptionElement',
		'HTMLParagraphElement',
		'HTMLParamElement',
		'HTMLPreElement',
		'HTMLQuoteElement',
		'HTMLScriptElement',
		'HTMLSelectElement',
		'HTMLStyleElement',
		'HTMLTableCaptionElement',
		'HTMLTableCellElement',
		'HTMLTableColElement',
		'HTMLTableElement',
		'HTMLTableRowElement',
		'HTMLTableSectionElement',
		'HTMLTextAreaElement',
		'HTMLTitleElement',
		'HTMLUListElement'];
		return Cats[option];
		}

		public void displayCategories() 
		{
			cdoc.write("<BODY BGCOLOR=\"#0000FF\" TEXT=\"#FFFF00\">\n");
			cdoc.write("<CENTER>\n");
			cdoc.write("<IMG SRC=\"pix/nist.gif\" width=100 height=75>\n");
			cdoc.write("<P>\n");
			cdoc.write("<b>DOM<BR>Categories</b><p>\n");
			cdoc.write("<FORM NAME=selectCategory>\n");
			cdoc.write("<SELECT NAME=category onClick=displayInterfaces(this.form)>\n");
			cdoc.write("<OPTION SELECTED VALUE=Fundamental>Fundamental\n");
			cdoc.write("<OPTION VALUE=Extended>Extended\n");
			cdoc.write("<OPTION VALUE=HTML>HTML\n");
			cdoc.write("</select>\n");
			cdoc.write("</form>\n");
			cdoc.write("</CENTER>\n");
			cdoc.write("</BODY>\n");
			cdoc.close();
		}
		public void displayInterfaces(form) 
		{

			cat = form.category.options[form.category.selectedIndex].Value;
			interfaces = getInterfaces(cat);

			idoc.write("<BODY BGCOLOR=\"#0000FF\" TEXT=\"#FFFF00\">\n");
			idoc.write("<CENTER>\n");
			idoc.write("<P>\n");
			idoc.write("<b>DOM<BR>Interfaces</b><p>\n");
			idoc.write("<FORM NAME=selectInterface>\n");
			idoc.write("<SELECT NAME=interface onClick=parent.navig()>\n");
			for (i = 0; i < interfaces.length; i++)
				idoc.write("<OPTION VALUE="+interfaces[i]+">"+interfaces[i]+"\n");
			idoc.write("</select>\n");
			idoc.write("</form>\n");
			idoc.write("</CENTER>\n");
			idoc.write("</BODY>\n");
			idoc.close();
		}
*/
	
	}//class

}
