
/*
Script by me, free for nonCommercial use ;>
http://en.wikipedia.org/wiki/Creative_Commons_licenses

version 0.4 dev; 2008-03-06
*/

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 eq={' eq ':'==','=':'==','!=':'!=','>':'>','>=':'>=','<':'<','=<':'=<','==':'=='};
		var eqmecz=new RegExp("[\w\d\-]*[\s]*([\!\=\<\>]+)[\s]*[\-]*");
		
		var limited=0;
		var ile_partnerow = 0;
		var aktualny_partner ='';
		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 ( limit[0] == 0 || ( (ile_partnerow+1)==limit[0] && !limited) )
			{ 
				var r=new Array(); 
				limited=1;
				alert('czyszczony '+ile_partnerow);
				ile_partnerow=0;
			}
			if( (ile_partnerow+1)==limit[1]&&limited ) 
			{
				//alert('go '+ile_partnerow+' => '+r.length);
				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]);
					if (eqq[0]=="=d") eqq[0] = "=";
//					if (confirm(where[x] + " " + eqq[0])) return;
					w.push(where[x].split(eqq[0]));
//					alert(eq[eqq[0]]);
//					iff+="(fetch_record(w["+x+"][0],xmldata,rec)==w["+x+"][1])";
					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 (aktualny_partner!=r[r.length-1][0])
					{
						//aktualny_partner=r[r.length-1][0];
						//alert(ile_partnerow+ ' - ' +aktualny_partner+' ilosc rekordow: '+r.length);
						//ile_partnerow++;
					}
				}
			}
		}
		if (!limited&&r.length<limit[0])
			return 0;
		if (col.indexOf('count')!=-1)
			return r.length;
		return r;
	}
	else alert("query mismatch!");
}