var NS = 1;
var IE = 2;
var Browser = 0;

function createDOM( form )
{
	var xmlDoc;
	var FN = form.hyperlink.value;

//create an instance of	the XML	parser
	if( window.ActiveXObject )
	{ // Checking if the browser is	IE
		xmlDoc = new ActiveXObject( "Microsoft.XMLDOM" );
		xmlDoc.async = "false";	 //make	sure doc is fully loaded
		xmlDoc.load( FN	); //load the file in the parser

		Browser = IE;
		
		if( xmlDoc.parseError.errorCode	!= 0 )
		{
			var myError = xmlDoc.parseError;
			// alert( "You have error " + myError.reason );
			parseXMLError( myError );
		}
		else
		{
			// Browser	= IE;
			parseXML( xmlDoc );
		}
	}
	else
	if( document.implementation && document.implementation.createDocument )
	{	// for Mozilla based browsers
		var xmlDoc = document.implementation.createDocument( "", "doc",	null );	//NS
		xmlDoc.async = false; // make sure doc is fully	loaded
		var loaded;
		var loadStatus = 1;

		Browser = NS;

		try
		{
			loaded = xmlDoc.load( FN ); // load the XML file
		}
		catch( error )
		{
			alert( "Error in XML file" );
		}

		if( !loaded )
			alert( "Error in XML file" );
		else
			parseXML( xmlDoc );
	}
}

function parseXMLError( myError )
{
	var SP = "<br>";
	var Tag = null;
	var popWindow = window.open( "", "ERROR","height=360,width=420, menubar=yes, scrollbars=yes, scroll=yes, resizable=yes, status=yes, toolbar=yes" );

	Tag = "<h1>XML Parsing error!</h1>" + SP;
	
	if( Browser == IE )
	{
		Tag = Tag + "Error #: " + myError.errorCode + SP;
		Tag = Tag + "Description: " + myError.reason + SP;
		Tag = Tag + "In file: " + myError.url + SP;
		Tag = Tag + "Line #:" + myError.line + SP;
		Tag = Tag + "Character # in line: " + myError.linepos + SP;
		Tag = Tag + "Character # in file: " + myError.filepos + SP;
		Tag = Tag + "Source line: <xmp>" + myError.srcText + "</xmp>" + SP;
	}
	
	popWindow.document.writeln( Tag );
	popWindow.document.close();
}


function parseXML( xmlDoc, Browser )
{
	var root = xmlDoc.documentElement;
	var Node = root.childNodes;
	var Tag	= null;

	popWindow = window.open( "", "homework4","height=440,width=480, menubar=yes, scrollbars=yes, scroll=yes, resizable=yes, status=yes, toolbar=yes" );

	for( var i = 0 ; i < Node.length; i++ )
	{
		currNode = Node.item(i);
		Tag = replaceTag( xmlDoc, currNode )
		if( Tag )
			popWindow.document.writeln( Tag );
	}

	popWindow.document.close();
}

function replaceTag( xmlDoc, currNode )
{
	child_number = currNode.childNodes.length;
	
	if( child_number == 0 )
		return breakTag( currNode );
	else
	if( child_number == 1 )
		return oneElementTag( currNode );
	else
		return convert2Tag( xmlDoc, currNode );
}

function breakTag( currNode )
{
	if( currNode.nodeName == "break" )
		return "<br>";
}

function oneElementTag(	currNode )
{
	var text = null;

	if( currNode.nodeName == "submit" )
			text = "<INPUT TYPE=submit VALUE=\"" + currNode.firstChild.text + "\">";

	if( currNode.nodeName == "title" )
			text = "<h1>" + currNode.firstChild.text + "</h1>";

	return text;
}

function convert2Tag( xmlDoc, currNode )
{
	var NodeName = currNode.nodeName;
	var Node = currNode.childNodes;
	var Tag	= null;

	if( Browser == NS ) // for mozilla based browser
	{
        	if( NodeName == "title" )
	     		Tag = "<h1>" + currNode.textContent + "</h1>";

        	if( NodeName == "submit" )
             		Tag = "<INPUT TYPE=submit VALUE=\"" + currNode.textContent + "\">";
	}

	switch(	NodeName )
	{
		case "textbox" :
			Tag = textboxTag( currNode );
			break;
		case "checkbox"	:
			Tag = checkboxTag( currNode );
			break;
		case "select" :
			Tag = selectTag( currNode );
			break;
		case "radio" :
			Tag = radioTag(	currNode );
			break;
	}

	return Tag;
}

function textboxTag( currNode )
{
	var Node = currNode.childNodes;
	var Tag	= null;
	var BrowserString = null;
	for( var i = 0 ; i < Node.length; i++ )
	{
		BrowserString =	( Browser == IE ? Node.item(i).text : Node.item(i).textContent );
		if( Node.item(i).nodeName == "name" )
			Tag = "	<Input name=" +	Node.item(i).nodeName +	">";
		if( Node.item(i).nodeName == "caption" )
			Tag = BrowserString + Tag;
		if( Node.item(i).nodeName == "break" )
			Tag = Tag + "<br>";
	}
	return Tag;
}

function checkboxTag( currNode )
{
	var Node = currNode.childNodes;
	var Tag	= null;
	var BrowserString = null;
	Tag = "<INPUT TYPE=\"checkbox\"	";
	for( var i = 0 ; i < Node.length; i++ )
	{
		BrowserString =	( Browser == IE ? Node.item(i).text : Node.item(i).textContent );
		if( Node.item(i).nodeName == "name" )
			Tag = Tag + "NAME=\"" +	BrowserString +	"\">";
		if( Node.item(i).nodeName == "caption" )
			Tag = Tag + BrowserString;
		if( Node.item(i).nodeName == "break" )
			Tag = Tag + "<br>";
	}
	return Tag;
}

function selectTag( currNode )
{
	var Node = currNode.childNodes;
	var Tag	= null;
	var BrowserString = null;
	Tag = "<SELECT ";
	for( var i = 0 ; i < Node.length; i++ )
	{
		BrowserString =	( Browser == IE ? Node.item(i).text : Node.item(i).textContent );
		if( Node.item(i).nodeName == "name" )
			Tag = Tag + "NAME=\"" +	BrowserString +	"\">";
		if( Node.item(i).nodeName == "caption" )
			Tag = Tag + "<OPTION> "	+ BrowserString;
		if( Node.item(i).nodeName == "break" )
			Tag = Tag + "<br>";
	}
	Tag = Tag + "</SELECT>";
	return Tag;
}

function radioTag( currNode )
{
	var Node = currNode.childNodes;
	var Tag	= "";
	var FixTag = null;
	var BrowserString = null;
	FixTag = "<INPUT TYPE=\"radio\"";
	for( var i = 0 ; i < Node.length; i++ )
	{
		BrowserString =	( Browser == IE ? Node.item(i).text : Node.item(i).textContent );
		if( Node.item(i).nodeName == "name" )
			FixTag = FixTag	+ "Name=\"" + Node.item(i).text	+ "\"";
		if( Node.item(i).nodeName == "caption" )
			Tag += FixTag +	"VALUE=\"" + BrowserString + "\">" + BrowserString;
		if( Node.item(i).nodeName == "break" )
			Tag = Tag + "<br>";
	}
	return Tag;
}


