//table.js
//manages data tables for ease of use
//needs: dynapi.js
//(c)2001 A.M.C. SoftWorks

function Table(name,key)
{
	this.name=name||""
	this.data=[]
	this.dataKey=key||""
}
Table.prototype.setName=function(sName)
{
	this.name=sName||""
}
Table.prototype.setKey=function(sKey)
{
	this.dataKey=sKey||""
}
Table.prototype.find=function(keyValue)
{
	var i
	for(i=0;i<this.data.length;i++){
		if(this.data[i][this.dataKey]==keyValue){
			break
		}
	}
	return i
}
Table.prototype.sel=function(keyValue)
{
	return this.data[this.find(keyValue)]
}
Table.prototype.ins=function(obj)
{
	this.data[this.find(obj[this.dataKey])]=obj
	this.onAfterIns(obj[this.dataKey])
}
Table.prototype.onAfterIns=function(insertedObjKeyValue)
{
}
Table.prototype.del=function(keyValue)
{
	this.data=Table.removeFromArray(this.data,this.find(keyValue))
	this.onAfterDel(keyValue)
}
Table.prototype.onAfterDel=function(deletedObjKeyValue)
{
}
Table.prototype.toString=function(keyArray,pivotArray)
{
	var s=""
	for(var i=0;i<keyArray.length;i++){
		s+=keyArray[i]+":"
		if(typeof(this[keyArray[i]])=='number')
			s+=this[keyArray[i]]
		else
			s+="\""+this[keyArray[i]]+"\""
		if(i<keyArray.length-1)
			s+=","
	}
	s+="|"
	for(var i=0;i<this.data.length;i++){
		for(var j=0;j<pivotArray.length;j++){
			s+=pivotArray[j]+":"
			if(typeof(this.data[i][pivotArray[j]])=='number')
				s+=this.data[i][pivotArray[j]]
			else
				s+="\""+this.data[i][pivotArray[j]]+"\""
			if(j<pivotArray.length-1)
				s+=","
		}
		if(i<this.data.length-1)
			s+="^"
	}
	return escape(s)
}
Table.prototype.fromString=function(sFrom,pClass)
{
	var s=unescape(sFrom)
	var f=s.split("|")
	var obj=eval("_u={"+f[0]+"}")
	for(var p in obj)
		this[p]=obj[p]
	var data=f[1].split("^")
	delete this.data
	this.data=[]
	for(var i=0;i<data.length;i++){
		var obj=eval("_u={"+data[i]+"}")
		this.data[i]=new pClass(obj)
	}
}
Table.removeFromArray=function(array,index)
{
	var which=(typeof(index)=="object")?index:array[index];
       	for(var i=0;i<array.length;i++){
		if(array[i]==which){
			if(array.splice){
				array.splice(i,1);
			}
			else{
				for(var x=i;x<array.length-1;x++)
					array[x]=array[x+1];
        			array.length-=1;
			}
			break;
		}
	}
	return array;
}
