// Copyright 2006 Andreas Koch


function XMLFixed(nodeName, isEnd)
{
	
	this.add = function(sub)
	{
		this.subs.push(sub);
		return null;
	}
	
	this.getNode = function(name)
	{
		for(var i = 0; i<this.subs.length; i++)
		{
			if(this.subs[i].nodeName == name)
			{
				return this.subs[i];
			}
		}
		alert("Error "+name);
		return null;
	}
	
	
	this.nodeName = nodeName;
	this.isEnd = isEnd;
	this.subs = new Array();
}

function XMLNode(name)
{
	this.addSubNode = function(nn)
	{
		this.subs.push(nn);
	}	

	this.setValue = function(val)
	{
		this.value = val;
		this.isEnd = true;
		return null;
	}
	
	this.getSub = function(name, index)
	{
		var rv = new XMLNode("Node not found");
		var count=0;
		for(var i=0; i<this.subs.length; i++)
		{
			
			if(this.subs[i].name == name)
			{
				if(count==index)
				{
					rv = this.subs[i];
					break;
				}
				count++;
			}
		}
		return rv;
	}
	
	this.getSubs = function (name)
	{
		var rv = new Array();
		for(var i=0; i<this.subs.length; i++)
		{
			if(this.subs[i].name == name)
			{
				rv.push(this.subs[i]);
			}
		}
		return rv;
	}
	
	this.asString = function ()
	{
		var str;
		if(this.isEnd)
		{
			str="<"+this.name+">"+this.value+"<"+this.name+"/>";
		} else
		{
			str="<"+this.name+">";
			for(var i=0; i<this.subs.length; i++)
			{
				str+=this.subs[i].asString();
			}
			str+="</"+this.name+">";
		}
		return str;
	}
	
	this.value = "";
	this.isEnd = false;
	this.subs = new Array();
	this.name = name;
}

function parseXML(xmlin, structure)
{
	var nv = new XMLNode(structure.nodeName);
	
	for(var j=0; j<structure.subs.length; j++)
	{
		parseXMLElement(
			xmlin.getElementsByTagName(structure.nodeName)[0].childNodes,
			structure.subs[j],
			nv
			);
	}
	
	return nv;
}

function parseXMLElement(children, structure, node)
{
	if(structure.isEnd)
	{
		var emner=children[0].parentNode.getElementsByTagName(structure.nodeName);
		for(var i=0; i<emner.length; i=i+1)
		{
			var rv = new XMLNode(structure.nodeName);
			rv.value = emner[i].childNodes[0].nodeValue;
			rv.isEnd = true;
			node.addSubNode(rv);
		}
	} else
	{
		if(children.length>0)
		{
			var emner=children[0].parentNode.getElementsByTagName(structure.nodeName);
			for(var i=0; i<emner.length; i=i+1)
			{
				var nextNode = new XMLNode(structure.nodeName);
				node.addSubNode(nextNode);
				for(var j=0; j<structure.subs.length; j=j+1)
				{
					var nn = emner[i].childNodes;
					parseXMLElement(
					nn,
					structure.subs[j],
					nextNode
					);
				}				
			}
		}
	}
}

