//ROB WAGNER rob@stoffaproductions.com
function isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}
function trace( msg ){ 
  if( typeof( console ) != 'undefined' ){
    console.log( msg );
  }
}
function purge(d) {
    var a = d.attributes, i, l, n;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            purge(d.childNodes[i]);
        }
    }
}




function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return 0;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}




Array.prototype.arrayMap=function(func){
	for (var i=0;i<this.length;i++) {
		this[i]=func(this[i]);
	}
}

	
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}
String.prototype.removeQuotes=function() { 
	return this.replace(/^['"]|['"]$/g,'');
}

Array.prototype.valueExists = function(search){
  for (var i=0; i<this.length; i++) { 
    if (this[i] == search) return i;
	}
  return -1;
} 


function mergeHash(a1,a2) {
	for (var i in a2 ) { 
		if (typeof(a2[i])!='function') a1[i]=a2[i]
		}
	return a1
};

function hashValues(h) {
	var ret=[];
	for (var i in h) 	ret.push(h[i]);
	return ret;
	}
function hashKeys(h) {
	var ret=[];
	for (var i in h) 	ret.push(i);
	return ret;
	}	
function trim(v) { return v.replace(/^\s+|\s+$/g,"");
	}
function stripslashes(v) { return v.replace("\\",'');}
function copyArray(a) { 
		var ret=[];
		for (i=0;i<a.length;i++) {
			ret.push(a[i]);
		}
		return ret;
	}
function dbFunctions(thisClass) {	
var dbObj=(arguments[1])?arguments[1]:thisClass;
var table
var	orderBy
var groupBy
var cacheStatement
var fieldsFromOtherTables={};
this.cacheStatement={};
var that=this;
this.errors={illegalStatement:"Sorry, your statement has errors",fieldValueLength:"The value lenth does not match the key length"};
this.pQuery=function(s,values,whereValues) {
	var type,where,limit;
	s=s.replace(/\s+/g,' ');

	s.match(/^\s*(select|insert|update|delete)/i);
	
	type=RegExp.$1.toLowerCase();
	switch(type) {
		case 'update':	
		var limit='';var temp2;var field=[];var value=[];var val;var subIndex=0;
		var temp=s.split('where');
		temp[0].match(/update\s+(\w+?)\s+set\s+(.+)/i);
		var table=RegExp.$1
		var fields=RegExp.$2.split(/\s*,\s*/);
		for (i=0;fields[i];i++) {
			temp2=fields[i].split(/\s*=\s*/);
			field[i]=temp2[0];
			val=temp2[1].trim();
			if (val=='?') {value[i]=values[subIndex];subIndex+=1;}
			
			else if (val==parseFloat(val)) value[i]=val;
			else if (val.match(/^(['"])(.+?)\1$/)) value[i]=RegExp.$2;
			else  {
				val=val.split(/([+\-\*\/])/);
				value[i]=val;
			}
		}
		if (!temp[1]) { 
			l=dbObj[table].length;var rowsToUpdate={};rowsToUpdate[table]=[];
			for (var i=0;i<l;i++) { rowsToUpdate[table].push(i);}		
		}
		else {
			var ops=[];var k=[];var v=[];
			temp=temp[1].split('limit');
			if (temp[1]) {
				limit=temp[1].replace(/[^0-9]+/g,'').trim();
				if (temp[0]=='') {
					l=dbObj[table].length;var rowsToUpdate={};rowsToUpdate[table]=[];
					for (var i=0;i<l;i++) { rowsToUpdate[table].push(i);}
					}	
				} 
			else {
				where=temp[0].split(/(and|or)/);var j=0;
				for (var i=0;where[i];i+=2) { 
					where[i].match(/\s*([=<>]+)\s*/);
					ops.push(RegExp.$1);
					f=where[i].split(RegExp.$1);
					f[1]=f[1].trim();
					if (f[1]=='?') {	v.push(whereValues[j]+'');j+=1;}
					else v.push(f[1].removeQuotes());
					if (i)  f[0]=where[i-1]+' '+f[0];
					k.push(f[0].trim());
					
					}	
				}
				
			var rowsToUpdate=this.returnIndexes(table,k,v,ops);		
			} 
			
			var numRows=rowsToUpdate[table].length;
			for (var j=0;j<numRows;j++) {
					if (limit && j==limit)break;
					cur=rowsToUpdate[table][j];
					u=1;
					for (h in rowsToUpdate) {
						if (h==table) continue;
						if (!rowsToUpdate[cur]) u=0;
						}
					if (!u) continue; 
					for(i=0;field[i];i++) {
						if (isArray(value[i])) {
							if (value[i][1]) {
								value[i]=eval(dbObj[table][cur][value[i][0]]+value[i][1]+value[i][2])
							}
							else 	value[i]=dbObj[table][cur][value[i]]
							}
						dbObj[table][cur][field[i]]=value[i];
						}

			}
			if (j) 		this.cacheStatement[table]='';		
			return numRows;
			break;		
			case 'insert':
				var fields; var value;				
				
				if (s.match(/insert\s+into\s+(\w+)\s*(\([^)]+\))?\s*values\s*\((.+)\)/i)) {
					table=RegExp.$1;var allFields=this.returnHashSubSet(table,'name').split(',');
					fields=((RegExp.$2)?RegExp.$2.substring(1,RegExp.$2.length-1):allFields);
					value=RegExp.$3.split(/\s*,\s*/);
					}
				else 	if (s.match(/insert\s+into\w*(\S+)\b\s*(\([^)]+\))?\s*(select\s+.+)/i))	{
					table=RegExp.$1;var allFields=this.returnHashSubSet(table,'name');
					fields=((RegExp.$2)?RegExp.$2.substring(1,RegExp.$2.length-1):this.returnHashSubSet(table,'name')).split(',');

					temp=this.query(RegExp.$3);value=hashValues(temp[0]);
				}
					else { thisClass.error=this.errors['illegalStatement'];return;}
				value.arrayMap(trim);
				value.arrayMap(stripslashes);	
				fields=fields.split(',');
				fields.arrayMap(trim);
				if (fields.length!=value.length) { thisClass.error=this.errors['fieldValueLength'];return;}
				dbObj[table].push({});
				temp=dbObj[table][dbObj[table].length-1];
				var j=0;var k;		//	trace(fields.toSource());trace(values.toSource())	
				for (var i=0;i<allFields.length;i++) {
					k=fields.valueExists(allFields[i])
					if (k==-1) {temp[allFields[i]]='';}
					else if (value[k]=='?') 	{temp[allFields[i]]=values[k];j+=1; }
					else temp[allFields[i]]=value[k].removeQuotes();
					
					}
				if (i) 		this.cacheStatement[table]='';			
			}		
		
}
this.query=function(s) {
	var type,where,limit;
	s=s.replace(/\s+/g,' ');

	s.match(/^\s*(select|insert|update|delete)/i);
	
	type=RegExp.$1.toLowerCase();
	switch(type) {	
		
		case 'select':
		var f=[],k=[],v=[],op,ops=[],temp,good,join,resultRows=[],row={},i,start=0,fld;
		temp=s.split('limit');
		limit=(temp[1])?temp[1].trim():'';
		limit=limit.split(',');
		if (limit[1]) {start=parseInt(limit[0]);limit=parseInt(limit[1]);}
		else	{limit=parseInt(limit[0]);	start=0;}
		temp=temp[0].split('order by');
		orderBy=(temp[1])?temp[1].trim():'';
		cacheStatement=temp[0].replace(/\s/g,'');
		if (cacheStatement==this.cacheStatement[table]) { 
		}
		else {		
		fieldsFromOtherTables={}
		
		temp=temp[0].split('group by');
		groupBy=(temp[1])?temp[1].trim():'';
		temp=temp[0].split('where');
		where=(temp[1])?temp[1].match(/(and|or)?\s*[a-z0-9_\-\.]+\s*(?:[\!<>=]+|like)\s*[a-z0-9_\-'"\.%]+/ig):'';
		join=(temp[0].split('join'));
		temp=join.shift();
		temp.match(/^\s*select\s+(.+?)\s+from\s+(.+)/i );
		fields=RegExp.$1.split(',');
		var tables=RegExp.$2.split(',');
		tables.arrayMap(trim);;
		this.table=table=tables[0];
		this.cacheData=[];
		if (!dbObj[table] || dbObj[table].length==0) return	this.cacheData;
			this.cacheStatement[table]=cacheStatement;
		if (!where) {  
			if (fields[0]=='*') 		this.cacheData=dbObj[table];			
			else {
				var temp2;
				var l=dbObj[table].length;
				for (i=0;i<l;i++) {	
					if (!dbObj[table][i]) continue				
					temp=dbObj[table][i];
					this.cacheData[i]={internalDBId:i};
					for (j=0;fld=fields[j];j++) {
						if (fld.indexOf('.')>0) {
							temp2=fld.split('.');
							if (temp2[0]!=table) {
								if(typeof(fieldsFromOtherTables[temp2[0]])!='array') {
									fieldsFromOtherTables[temp2[0]]=[];
									}
								fieldsFromOtherTables[temp2[0]].push(temp2[1]);
								continue; 
								}
							fld=temp2[1];
							}
						if (fld=='*') this.cacheData[i]=temp	
						else this.cacheData[i][fld]=temp[fld]
						}
					}	
				}	
		
			}		
		else {
			for (j=0;fld=fields[j];j++) {
				if (!fld.indexOf('.')) continue
				temp2=fld.split('.');
				if (temp2[0]!=table) {
					if(typeof(fieldsFromOtherTables[temp2[0]])!='array') fieldsFromOtherTables[temp2[0]]=[];
					fieldsFromOtherTables[temp2[0]].push(temp2[1]);	
					}
				}	
			for (i=0;where[i];i++) {
				where[i].match(/([=<>!]+|like)/);
				ops.push(RegExp.$1);
				f=where[i].split(RegExp.$1);
				k.push(f[0].trim());v.push(f[1].trim().removeQuotes());
				}	
			var selectedRows=this.returnIndexes(table,k,v,ops);
			for (i=0;i<selectedRows[table].length;i++) {
				//	if (limit && i==limit) { break;}
				good=1;
				temp=selectedRows[table][i];
				row=dbObj[table][temp];
				for (j in selectedRows) { 
					if (j==table) { continue;	 }
					if (selectedRows[j][temp]=='') { good=0;break;}
					row=mergeHash(row,dbObj[j][selectedRows[j][temp]]);
					}
				if (good) { 
					if (fields[0].match(/\*/))  this.cacheData.push(row);
					else {
						this.cacheData.push({internalDBId:i});
						for (j=0;fields[j];j++)this.cacheData[this.cacheData.length-1][fields[j]]=row[fields[j]]
						 }
					}	
				}	
			}


		var j,c,table2,t,j,cond={},entry,ind;
		for (i=0;i<join.length;i++) { 
			j=join[i].trim().split(' ');
			table2=j[0];
			c=j[2].split('=');
			for (j=0;j<2;j++) {
				t=c[j].trim().split('.');
				cond[t[0]]=t[1];
				}
			l=this.cacheData.length;	
			for (j=0;j<l;j++) { 
				if (!(entry=this.cacheData[j])) continue;
				
				ind=this.findIndex(table2,cond[table2],entry[cond[table]],'=');
				for (k=0;fld=fieldsFromOtherTables[table2][k];k++) { 
					
					this.cacheData[j][fld]=dbObj[table2][ind][fld];
					}
				}	
			}
		}	
		if (orderBy) { this.cacheData.sort(this.orderByField); }		
		temp=copyArray(this.cacheData)		
		resultRows=(limit)?temp.splice(start,limit):temp;	
		return resultRows;
		break;
		
		
		case 'delete': 
		var f=[],k=[],v=[],op,ops=[]
		s.match(/delete\s+from\s+(.+?)\b/i);
		table=RegExp.$1;
		s.match(/limit\s+([0-9]+)/);
		limit=RegExp.$1;
		where=s.match(/(and|or)?\s*[a-z0-9_\-\.]+\s*[\!<>=]+\s*[a-z0-9_\-'"\.]+\b/ig);
		for (var i=0;where[i];i++) {
			where[i].match(/([=<>]+)/);
			ops.push(RegExp.$1);
			f=where[i].split(RegExp.$1);
			k.push(f[0].trim());v.push(f[1].trim().removeQuotes());
			}	
		var rowsToBeDeleted=this.returnIndexes(table,k,v,ops);
		var l=rowsToBeDeleted[table].length;
		for (var i=0;i<l;i++) {
			dbObj[table][rowsToBeDeleted[table][i]]='';
			}
		temp=dbObj[table]; 
		dbObj[table]=[];l=temp.length
		for (i=0;i<l;i++) { 
			if (!temp[i]) continue;
			dbObj[table].push(temp[i]);
			}
		this.cacheStatement[table]='';	
		break;
		
		
		case 'update':	
		var f=[],k=[],v=[],op,ops=[],val,key,i,h,u,cur;
		s.match(/update\s+(.+?)\s+set\s+(.+)/i);
		table=RegExp.$1;
		var temp,limit='';;	
		temp=RegExp.$2.split('where');
		var fields=(temp[0].trim()+' ').match(/[a-z_\-0-9]+\s*[\+\-\/\*]?[^\\]=\s*(["']?)[^\W\1]*\1/gi);
		
		//var fields=temp[0].trim().match(/[a-z_\-0-9]+\s*\+=1/gi);
		
		if (!temp[1]) { 
			l=dbObj[table].length;var rowsToUpdate={};rowsToUpdate[table]=[];
			for (var i=0;i<l;i++) { rowsToUpdate[table].push(i);}		
			}
		else {

		temp=temp[1].split('limit');
		limit=(temp[1])?temp[1].replace(/[^0-9]+/g,'').trim():''; 
	
		where=temp[0].split(/(and|or)/);
		for (var i=0;where[i];i+=2) { 
			where[i].match(/([=<>]+)/);
			ops.push(RegExp.$1);
			f=where[i].split(RegExp.$1);
			if (i)  f[0]=where[i-1]+' '+f[0];
			k.push(f[0].trim());v.push(f[1].trim().removeQuotes());
			}	
		
		var rowsToUpdate=this.returnIndexes(table,k,v,ops);		
		} 
		numRows=rowsToUpdate[table].length;
		for (var j=0;j<numRows;j++) {
			if (limit && j==limit)break;
			cur=rowsToUpdate[table][j];
			u=1;
			for (h in rowsToUpdate) {
				if (h==table) continue;
				if (!rowsToUpdate[cur]) u=0;
				}
			if (!u) continue; 
			var operand;
			for(i=0;fields[i];i++) { 
				
				temp=fields[i].split(/([\*\+-\/]?)=/);
				key=temp[0].trim();
				//char=temp[0].charAt(temp[0].length);
				
				if (char=temp[1]) {
				//if (char=='+' || char=='-' || char=='*' || char=='/') {
					val=eval(parseFloat(dbObj[table][cur][key])+char+parseFloat(temp[2]));
					
				}
				
				else {val=temp[2].trim().removeQuotes(); }
				
				dbObj[table][cur][key]=val;
				}
			
			}
		if (j) 		this.cacheStatement[table]='';		
		return numRows;
		break;
		
		
		case 'insert': 
		var fields,values;
		if (s.match(/insert\s+into\s+(\S+)\s+(\([^)]+\))?\s*values\s*\((.+)\)/i)) {
			table=RegExp.$1;
			fields=((RegExp.$2)?RegExp.$2.substring(1,RegExp.$2.length-1):this.returnHashSubSet(table,'name'));
			values=RegExp.$3.split(/\s*,\s*[^\\]?'/);
			}
		else 	if (s.match(/insert\s+into\s+(\S+)\b\s*(\([^)]+\))?\s*(select\s+.+)/i))	{
			table=RegExp.$1;
			fields=((RegExp.$2)?RegExp.$2.substring(1,RegExp.$2.length-1):this.returnHashSubSet(table,'name'));	
			
			temp=this.query(RegExp.$3);values=hashValues(temp[0]);
		}
			else { thisClass.error=this.errors['illegalStatement'];return;}
		values.arrayMap(trim);
		values.arrayMap(stripslashes);	
		fields=fields.split(',');
		fields.arrayMap(trim);
		if (fields.length!=values.length) { thisClass.error=this.errors['fieldValueLength'];return;}
		dbObj[table].push({});
		temp=dbObj[table][dbObj[table].length-1]					
		for (var i=0;i<fields.length;i++) {
			
			temp[fields[i]]=values[i].removeQuotes();
			}
		if (i) 		this.cacheStatement[table]='';			
	}
}
this.orderByField= function orderByField(a,b) {  //alert(a.toSource()+' '+b.toSource())
	var temp=orderBy.split(' ');var table;
	var temp2=temp[0].split('.');
	if (temp2[1]) {table=temp2[0];temp[0]=temp2[1]}
	else {table=that.table}
	
	var dataType=(dbObj[table+'Fields'][temp[0]])?dbObj[table+'Fields'][temp[0]].type:'string';

	if (temp[1] && temp[1].trim()=='desc'){
		var b2=a[temp[0]];
		var a2=b[temp[0]];
		}
	else {			
		var a2=a[temp[0]];
		var b2=b[temp[0]];
		}
	switch(dataType) {
		case 'string':
		a2=a2.toLowerCase();b2=b2.toLowerCase();
		break
		case 'int':
		a2=parseInt(a2);b2=parseInt(b2)
		break;
		case 'float':  case 'double':
		a2=parseFloat(a2);b2=parseFloat(b2);
		break;
		case 'date':
		var temp=a2.split(' ')
		var temp2=temp[0].split('-');
		if (temp[1]){
			var temp3=temp[1].split(':');
			var h=temp3[0];var mn=temp3[1];var sc=temp3[2];
		}
		else {var h=0;var mn=0;var sc=0;}
		a2=Date.utc(temp2[0],temp2[1],temp2[2],h,mn,sc);
		var temp=b2.split(' ')
		var temp2=temp[0].split('-');
		if (temp[1]){
			var temp3=temp[1].split(':');
			var h=temp3[0];var mn=temp3[1];var sc=temp3[2];
		}
		else {var h=0;var mn=0;var sc=0;}
		b2=Date.utc(temp2[0],temp2[1],temp2[2],h,mn,sc);
		break;
	}
	if (a2>b2) {return 1; }
	if (a2<b2) {return -1; }
	return 0;
	}
/*this.returnHashSubSet=function(t,n) {
	var ret='';;var table=dbObj[t+'Fields'];
	var l=table.length
	for (var i=0;i<l;i++) {
		ret+=table[i][n]+',';
		}
	return ret.substring(0,ret.length-1);
}*/
this.returnHashSubSet=function(t,n) {
	var ret='';;var table=dbObj[t+'Fields'];
	for (var i in table) {
		ret+=i+',';
		}
		
	return ret.substring(0,ret.length-1);
}
this.findIndex=function(table,f,v,op) { 

	if (window[dbObj['tableIndexes'][table][f]]) { return dbObj['tableIndexes'][table][f];}
	var indx,r,l=dbObj[table].length;
	for (var i=0;i<l;i++) {
		r=dbObj[table][i];if (!r) continue;
			switch(op) {
				case '=': 
				indx=(r[f]==v)?i:-1;
				break;
				case '<':
				indx=(r[f]<v)?i:-1;
				break;
				case '<=':
				indx=(r[f]<=v)?i:-1;
				break;
				case '>':
				indx=(r[f]>v)?i:-1;	
				break;
				case '>=':
				indx=(r[f]>=v)?i:-1;
				break;
				case '!=':
				indx=(r[f]!=v)?i:-1;
				break;
				}
			if (indx>-1) return indx;	
			}
		return -1;	
		}
				
this.returnIndexes=function(table,k,v,ops) { 
	table=table.trim();
	var t=dbObj[table],temp,tk,ret={},matches={},n,ind=0;
	matches[table]=[];
	var l=t.length;
	for (var i=0;i<l;i++) { if(!t[i]) continue;
		for (var j=0;k[j];j++) {  
			temp=k[j].split(/\s+/);
			if (temp[1]) 	{tk=temp[1];cond=(temp[0].toLowerCase()=='and')?1:0; }
			else { tk=temp[0];cond='';}
		
			temp=v[j].split('.');		
			if (cond) 	{ if (!matches[table][ind] || matches[table][ind]==undefined) continue;}
			if (temp[1]) {
				n=this.findIndex(temp[0],temp[1],t[i][tk],ops[j]);
				if (n>-1) {
					 if (!matches[temp[0]])matches[temp[0]]=[];

					matches[temp[0]][ind]=n;matches[table][ind]=1;
						
					}	
				continue;
				}		
			switch(ops[j]) {
				case '=': 
				matches[table][ind]=(t[i][tk]==v[j])?1:((matches[table][ind] && !cond)?1:undefined)
				break;
				case '<':
				matches[table][ind]=(t[i][tk]<v[j])?1:((matches[table][ind] && !cond)?1:undefined);
				break;
				case '<=':
				matches[table][ind]=(t[i][tk]<=v[j])?1:((matches[table][ind] && !cond)?1:undefined);
				break;
				case '>':
				
				matches[table][ind]=(t[i][tk]>v[j])?1:((matches[table][ind] && !cond)?1:undefined);
				break;
				case '>=':
				matches[table][ind]=(t[i][tk]>=v[j])?1:((matches[table][ind] && !cond)?1:undefined);
				break;
				case '!=': 
				matches[table][ind]=(t[i][tk]!=v[j])?1:((matches[table][ind] && !cond)?1:undefined);
				break;
				case 'like':var m=v[j].replace(/%/g,'.*');
				var re=new RegExp('^'+m+'$');
				matches[table][ind]=(re.test(t[i][tk]))?1:((matches[table][ind] && !cond)?1:undefined);
				break;
				}
				
			}
			
		ind++;	
		}	
	for( i in matches) {
		if (i==table) {
		ret[table]=[]; 
		for (j=0;j<matches[i].length;j++) { if (matches[i][j]!=undefined) ret[i].push(j);}
		}
		
		else ret[i]=matches[i];
		
	} 

	return ret;
	}
	
this.returnSubSet=function(table,k,v) {
	var t=dbObj[table];
	ret=[];
	for (var i=0;t[i];i++) {
		for (var j=0;k[j];j++) { 
			if (t[i][k[j]]==v[j]) 	ret.push(t[i]);
			}
		}
	return ret;
	}

				
var curLetterObject;
this.sliceData= function sliceData(a,l,f) {
	thisClass.sortField=f;
	thisClass[a].sort(thisClass.sortByField);
	var aa=thisClass[a]
	var x=0;
	while (aa[x][f].substring(0,1).toLowerCase() <l) { x+=1; }
	for (var i=aa.length-1;aa[i]>l;i--) {}
	thisClass.cacheData[currentTable]=aa.slice(x,i);
	thisClass.curLetter[currentTable]=l;
	thisClass.startResults[currentTable]=0;
	}





this.sortByDate= function sortByDate(frm){
	var t=thisClass[frm.table.value];var f=frm.fld.value;
	var j=0;var d;var sy=findSelectValue(frm.start_year);var sm=findSelectValue(frm.start_month);var ey=findSelectValue(frm.end_year);var em=findSelectValue(frm.end_month);var btm=-1,top=t.length-1;
	for (var i=0;t[i];i++) {	
		d=t[i][f].split('-');d[0]=parseInt(d[0]);d[2]=parseInt(d[2]);
		if (d[2]>sy || (d[2]==sy && d[0]>=sm)) {btm=i; break}

		}
	while (i<t.length) {
			d=t[i][f].split('-');d[0]=parseInt(d[0]);d[2]=parseInt(d[2]); 
			if (d[2]>ey || (d[2]==ey && parseInt(d[0])>em)) { top=i-1; break}
			i++;
		}	
		if (top<btm || btm==-1) { thisClass.cacheData[currentTable]=[]}
		
	else {	thisClass.cacheData[currentTable]=copy_array(t)
		thisClass.cacheData[currentTable]=thisClass.cacheData[currentTable].splice(btm,top+1) }
		thisClass.startResults[currentTable]=0;
		thisClass.curNumResults[currentTable]=thisClass.cacheData[currentTable].length
		showNow=thisClass.cacheData[currentTable];
		thisClass.createDynamicWidget('dynamicList[RW_Orders',currentIndex);
		thisClass.createDynamicWidget('navDataWidget[RW_Orders',currentIndex);
	}


}
