// DataList v0.1

function DataList(datafile)
{
	
	//Properties
		var m_xmlDoc;
		var m_rootnode;
		var m_itemnode;
		var m_reccount = 0;
		var m_currec = 0;
	//Private Methods
		//function IsMoz();
		//function ClearSpaces(node);
	//Public Methods
		this.DebugText = DebugText;
		this.LoadXML = LoadXML;
		this.InitData = InitData;
		this.GetRecordCount = GetRecordCount;
		this.GetItemTextByTag = GetItemTextByTag;
		this.GetItemText = GetItemText;
		this.GetItemNodeName = GetItemNodeName;
		this.GetCurRecTextByTag=GetCurRecTextByTag;
		this.GetCurRecText = GetCurRecText;
		this.GetCurRecNodeName = GetCurRecNodeName;
		this.NextRecord = NextRecord;
		this.PrevRecord = PrevRecord;
	
	//Call Inital Constructor
		Create(datafile);
	
	//Constructor
	function Create(datafile)
	{
		LoadXML(datafile);
	}

	//Destructor
	function Destroy(){}
	
	function IsMoz()
	{
		return (document.implementation && document.implementation.createDocument);
	}
	//Load In XML file
	function LoadXML(file)
	{
		if (window.ActiveXObject)
		{ 
			m_xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			m_xmlDoc.async=false;
			m_xmlDoc.load(file);
			InitData();
		}
		if (IsMoz())
		{ 
			m_xmlDoc=document.implementation.createDocument("","",null);		
			m_xmlDoc.async=false;
			m_xmlDoc.onload=InitData;
			m_xmlDoc.load(file);			
			
		}	
	}

	//Setup base nodes
	function InitData()
	{
		m_rootnode = m_xmlDoc.documentElement;
		if (IsMoz()) ClearSpaces(m_rootnode);
		m_itemnode = m_rootnode.childNodes;
		m_reccount = m_itemnode.length;
	}
	
	//Clear Whitespaces from document
	function ClearSpaces(node)
	{
		var NotWhitespace = /\S/;
		for (var i=0; i<node.childNodes.length; i++)
		{
			var childNode = node.childNodes[i];
			if ((childNode.nodeType==3) && (!NotWhitespace.test(childNode.nodeValue)))
			{
				node.removeChild(node.childNodes[i]);
				i--;
			}
			if (childNode.nodeType==1)
			{
				ClearSpaces(childNode);
			}
		}
	}
	
	function GetRecordCount()
	{
		return m_reccount;
	}
	
	function GetItemTextByTag(tName,TextNo)
	{
		var tempnode = m_xmlDoc.getElementsByTagName(tName);
		return tempnode[TextNo].firstChild.nodeValue;
	}
	
	function GetItemText(ItemNo,TextNo)
	{
		return m_itemnode[ItemNo].childNodes[TextNo].firstChild.nodeValue;
		//return m_itemnode[ItemNo].childNodes[TextNo].text;
	}
	
	function GetItemNodeName(ItemNo,TextNo)
	{
		return m_itemnode[ItemNo].childNodes[TextNo].nodeName;
		//return m_itemnode[ItemNo].childNodes[TextNo].nodeName;
	}
	
	function GetCurRecTextByTag(tName)
	{
		return GetItemTextByTag(tName,m_currec);
	}
	
	function GetCurRecText(TextNo)
	{
		return GetItemText(m_currec,TextNo);
	}
	
	function GetCurRecNodeName(TextNo)
	{
		return GetItemNodeName(m_currec,TextNo);
	}
	
	function NextRecord()
	{
		m_currec = m_currec+1;
		if(m_currec>m_reccount-1) { m_currec=0; }
	}
	
	function PrevRecord()
	{
		m_currec = m_currec-1;
		if(m_currec<0) { m_currec=m_reccount-1; }
	}
	
	function DebugText(text)
	{
		alert(text);
	}
}

