function Field(fieldName,dataType){this.fieldName=fieldName;var dataType=null;this.setDataType(dataType);};Field.prototype.setDataType=function(dataType){var setType;var dt;dt=(dataType==null)?"string":dataType.toLowerCase();switch(dt){case "string":case "s":setType="String";break;case "number":case "n":setType="Number";break;case "date":case "d":setType="Date";break;case "boolean":case "b":setType="Boolean";break;default:setType="String";break;}this.dataType=setType;};Field.prototype.setFieldName=function(fieldName){this.fieldName=fieldName;};Field.prototype.getFieldName=function(){return this.fieldName;};Field.prototype.getDataType=function(){return this.dataType;};function FieldList(numFields){var list=new Array(numFields);for(var i=0;i<list.length;i++){list[i]=new Field("Field"+String(i),null);}return list;};function DataSet(dataString,fieldNamesString,dataTypesString,rowDelimiter,colDelimiter){this.dataString=dataString;this.fieldNamesString=fieldNamesString;this.dataTypesString=dataTypesString;this.rowDelimiter=(rowDelimiter==null)?"|":rowDelimiter;this.colDelimiter=(colDelimiter==null)?"::":colDelimiter;this.EOF=true;this.BOF=true;this.currentRecord=-1;this.foundRec=null;var rs=new Array();var order=new Array();var fields=null;var newRec=null;var firstRec=-1;};DataSet.prototype.atBOF=function(){this.BOF=true;this.EOF=false;};DataSet.prototype.atEOF=function(){this.BOF=false;this.EOF=true;};DataSet.prototype.noData=function(){this.BOF=true;this.EOF=true;};DataSet.prototype.atMOF=function(){this.BOF=false;this.EOF=false;};DataSet.prototype.resetFlags=function(){if(this.currentRecord==-1){this.atBOF();}else if(this.currentRecord==this.rowCount){this.atEOF();}else{this.atMOF();}};DataSet.prototype.rowCount=function(){return this.rs.length;};DataSet.prototype.colCount=function(){return this.fields.length;};DataSet.prototype.setFirstRecord=function(firstRec){this.firstRec=firstRec;};DataSet.prototype.firstRecord=function(){return this.firstRec;};DataSet.prototype.lastRecord=function(){return(this.rowCount()-1);};DataSet.prototype.firstColumn=function(){return 0;};DataSet.prototype.lastColumn=function(){return(this.colCount()-1);};DataSet.prototype.parseDataString=function(){var rowSplit,colSplit;var count,rowCount,colCount;this.rs=new Array();this.order=new Array();this.fields=null;rowSplit=this.dataString.split(this.rowDelimiter);colSplit=rowSplit[0].split(this.colDelimiter);rowCount=rowSplit.length;colCount=colSplit.length;this.fields=FieldList(colCount);if(rowCount>0){for(count=0;count<rowCount;count++){this.rs[count]=rowSplit[count].split(this.colDelimiter);}this.setFirstRecord(0);this.moveFirst();}else{this.noData();}};DataSet.prototype.parseFieldNames=function(delimiter){var fieldNames;fieldNames=this.fieldNamesString;if(fieldNames!=null){delimiter=(delimiter==null)?this.colDelimiter:delimiter;fieldNames=fieldNames.split(delimiter);for(count=0;count<fieldNames.length;count++){this.fields[count].setFieldName(fieldNames[count]);}}else{for(count=0;count<this.colCount();count++){this.fields[count].setFieldName("Field"+String(count));}}};DataSet.prototype.parseFieldTypes=function(delimiter){var dataTypes;dataTypes=this.dataTypesString;if(dataTypes!=null){delimiter=(delimiter==null)?this.colDelimiter:delimiter;dataTypes=dataTypes.split(delimiter);for(count=0;count<dataTypes.length;count++){this.fields[count].setDataType(dataTypes[count]);}}else{for(count=0;count<this.colCount();count++){this.fields[count].setDataType(null);}}};DataSet.prototype.setFieldNames=function(fieldNames,delimiter){this.fieldNamesString=fieldNames;this.parseFieldNames(delimiter);};DataSet.prototype.setFieldTypes=function(dataTypes,delimiter){this.dataTypesString=dataTypes;this.parseFieldTypes(delimiter);};DataSet.prototype.setDataString=function(dataString,colDelimiter,rowDelimiter){this.dataString=dataString;this.rowDelimiter=(rowDelimiter==null)?"|":rowDelimiter;this.colDelimiter=(colDelimiter==null)?"::":colDelimiter;};DataSet.prototype.getFieldName=function(ordinal){try{return this.fields[ordinal].fieldName;}catch(e){return null;}};DataSet.prototype.getFieldType=function(ordinal){try{return this.fields[ordinal].fieldType;}catch(e){return null;}};DataSet.prototype.getOrdinal=function(fieldName){var count;count=0;try{while(this.fields[count].fieldName.toLowerCase()!=fieldName.toLowerCase()&&count<this.colCount()){count++;}}catch(e){count=-1;}return count;};DataSet.prototype.validOrdinal=function(ordinal){return(ordinal>=this.firstRecord()&&ordinal<this.colCount())?ordinal:-1;};DataSet.prototype.getFieldValue=function(ordinal){var fieldValue,fieldType;fieldValue=this.rs[this.currentRecord][ordinal];fieldType=this.fields[ordinal].getDataType();switch(fieldType){case "String":fieldValue=new String(fieldValue);break;case "Number":fieldValue=new Number(fieldValue);break;case "Date":fieldValue=new Date(Date.parse(fieldValue));break;case "Boolean":fieldValue=(fieldValue.toLowerCase()=="true")?true:false;break;}return fieldValue;};DataSet.prototype.findOrdinal=function(ordinal){var type,foundOrdinal;type=typeof ordinal;switch(type){case "number":foundOrdinal=this.validOrdinal(ordinal);break;case "string":foundOrdinal=this.getOrdinal(ordinal);break;}return foundOrdinal;};DataSet.prototype.get=function(ordinal){var field,foundOrdinal;foundOrdinal=this.findOrdinal(ordinal);if(foundOrdinal!=-1){try{field=this.getFieldValue(foundOrdinal);}catch(e){this.atEOF();}}else{field="{FIELD NOT FOUND}";}return field;};DataSet.prototype.set=function(ordinal,value){var foundOrdinal;foundOrdinal=this.findOrdinal(ordinal);if(foundOrdinal!=-1){if(this.isAdding()){this.newRec[foundOrdinal]=value;}else{this.rs[this.currentRecord][foundOrdinal]=value;}return true;}else{return false;}};DataSet.prototype.moveFirst=function(){if(!this.isAdding()){this.currentRecord=this.firstRecord();this.resetFlags();return true;}else{return false;}};DataSet.prototype.moveLast=function(){if(!this.isAdding()){this.currentRecord=this.lastRecord();this.resetFlags();return true;}else{return false;}};DataSet.prototype.moveNext=function(){if(!this.EOF&&!this.isAdding()){this.currentRecord++;if(this.currentRecord>this.lastRecord()){this.atEOF();}return true;}else{return false;}};DataSet.prototype.movePrev=function(){if(!this.BOF&&!this.isAdding()){this.currentRecord--;if(this.currentRecord<this.firstRecord()){this.atBOF();}return true;}else{return false;}};DataSet.prototype.deleteRecord=function(){var tempRS=new Array();for(var i=0,count=0;i<this.rowCount();i++){if(i!=this.currentRecord){tempRS[count]=this.rs[i];count++;}}this.rs=tempRS;this.currentRecord--;if(this.rowCount==0){this.noData();}else{this.resetFlags();}};DataSet.prototype.insertRecord=function(record,delimiter){delimiter=(delimiter==null)?this.colDelimiter:delimiter;record=record.split(delimiter);if(record.length==this.colCount()){this.rs[this.rowCount()]=record;return true;}else{return false;}};DataSet.prototype.isAdding=function(){return(this.newRec!=null);};DataSet.prototype.addNew=function(){if(!this.isAdding()){this.newRec=new Array();this.noData();return true;}else{return false;}};DataSet.prototype.cancel=function(){if(this.isAdding()){this.newRec=null;this.resetFlags();return true;}else{return false;}};DataSet.prototype.update=function(){if(this.isAdding()){this.rs[this.rowCount()]=this.newRec;this.newRec=null;this.resetFlags();return true;}else{return false;}};DataSet.prototype.binarySearch=function(fieldToSearch,valueToFind){this.currentRecord=this.bSearch(fieldToSearch,valueToFind,0,this.rs.length);if(this.currentRecord==-1){this.atEOF();}};DataSet.prototype.bSearch=function(fieldToSearch,valueToFind,left,right){var middle=-1;while(left<=right){middle=Math.floor((left+right)/2);this.currentRecord=middle;if(this.get(fieldToSearch).valueOf()==valueToFind){return middle;}if(this.get(fieldToSearch).valueOf()>valueToFind){right=middle-1;}else{left=middle+1;}}return-1;};