function XML_load(file,elements)
{
if(window.ActiveXObject) xml=new ActiveXObject("Microsoft.XMLDOM");
else if(document.implementation.createDocument)	xml=document.implementation.createDocument("", "", null);
else { }
xml.async=false;
xml.load(file);
return xml.getElementsByTagName(elements);
}

function fetch_record(c,f,r) 
{
c=c.split(',');
var a=new Array();
for(var x=0;x<c.length;x++)	a.push(f[r].getAttribute(c[x]));
return a; 
}

function XML_query(str)
{
var mecz=new RegExp("select (.*?) from (.*?) where (.*?) limit (.*?);");
var q=mecz.exec(str);
if(q)
	{
	var col=q[1];
	var xmldata=eval(q[2]);
	var wtype=' and ';
	if(q[3].indexOf(' or ')>0)wtype=' or ';
	var where=q[3].replace(/\"/g,'').split(wtype);
	var limit=q[4].split(',');
	var records=xmldata.length;
	if(records==limit[0])return 0;
	var r=new Array();
	var limited=0;
	var eq={' eq ':'==','=':'==','!=':'!=','>':'>','>=':'>=','<':'<','=<':'=<','==':'=='};
	var eqmecz=new RegExp("[\w\d\-]*[\s]*([\!\=\<\>]+)[\s]*[\w\d\-]*");
	
	for(var rec=0; rec<records; rec++)
		{
		if(r.length==limit[0]&&!limited){ var r=new Array(); limited=1; }
		if(r.length==limit[1]&&limited) return r;
		if(where=='1') r.push(fetch_record(col,xmldata,rec));
		else 
			{
			var wl=where.length;
			var iff='';
			var w=new Array();
			for(var x=0;x<wl;x++)
				{
				var eqq=eqmecz.exec(where[x]);
				w.push(where[x].split(eqq[0]));
				iff+="(fetch_record(w["+x+"][0],xmldata,rec)"+eq[eqq[0]]+"w["+x+"][1])";
				if(wl>1&&x<wl-1)iff+=(wtype==' and ')?'&&':'||';
				}
			if(eval(iff)) r.push(fetch_record(col,xmldata,rec));
			}
		}
	if(!limited&&r.length<limit[0])return 0;
	if(col.indexOf('count(')!=-1)return r.length;
	return r;
	}
else alert("query mismatch!");
}