 function ArrayToWddxRecordset(RSArr, colNames, RSObj) { var Rows = RSArr.length; var ColName; if (arguments.length < 2) { if (typeof(RSArr.getRowCount != 'function')) { RSObj = new WddxRecordset; for (i = 0; i < colNames[0].length; i++) { RSObj.addColumn(colNames[i]); } RSObj.addRows(Rows); } } for (Col = 0; Col < colNames.length; Col++) { ColName = colNames[Col]; for (Row = 0; Row < Rows; Row++) { RSObj.setField(Row, ColName, RSArr[Row][ColName]); } } return RSObj; } function wddxRecordset_addColumns(colNamesAsArray) { for (i = 0; i < colNamesAsArray.length; i++) { this.addColumn(colNamesAsArray[i]); } } function wddxRecordset_insertRow(RowNum, arValues) { var numRows = this.getRowCount(); if (RowNum <= numRows) { var colNames = this.getFieldNames(); var isSpliceOK = (typeof(colNames.splice) == 'function'); if (!isSpliceOK) this.addRows(1); for (Col = 0; Col < colNames.length; Col++) { if (isSpliceOK) { this[colNames[Col]].splice(RowNum, 0, ""); } else { for (Row = numRows; Row > RowNum; Row--) { this.setField(Row, colNames[Col], this.getField(Row-1, colNames[Col])); } this.setField(RowNum, colNames[Col], ""); } } if (arguments.length > 1) { this.setFields(RowNum, arValues); } } } function wddxRecordset_deleteRow(rowNum) { var ColNames = this.getFieldNames(); var isSpliceOK = (typeof(ColNames.splice) == 'function'); for (Col = 0; Col < ColNames.length; Col++) { if (isSpliceOK) { this[ColNames[Col]].splice(rowNum, 1); } else { for (Row = rowNum; Row < this.getRowCount(); Row++) { this.setField(Row, ColNames[Col], this.getField(Row+1, ColNames[Col])); } this[ColNames[Col]].length = this[ColNames[Col]].length -1; } } } /* Function to add values to a recordset's row all at once Becomes a method of all new wddxRecordset objects. */ function wddxRecordset_setFields(RowNum, arValues) { var ColNames = this.getFieldNames(); var numCols = ColNames.length <= arValues.length ? ColNames.length : arValues.length; for (var Col = 0; Col < numCols; Col++) { this.setField(RowNum, ColNames[Col], arValues[Col]); } } function wddxRecordset_findValue(ColName, Value, bWholeStrings, bCaseSensitive, bMultiple) { if (arguments.length < 2) bWholeStrings = true; if (arguments.length < 3) bCaseSensitive = true; if (arguments.length < 4) bMultiple = false; if (bMultiple) var arFoundRows = new Array(); else var FoundRow = -1; if (bWholeStrings) { if (bCaseSensitive) { for (Row = 0; Row < this.getRowCount(); Row++) { if (this.getField(Row, ColName) == Value) { if (bMultiple) arFoundRows[arFoundRows.length] = Row; else { FoundRow = Row; break; } } } } else { Value = Value.toLowerCase(); for (Row = 0; Row < this.getRowCount(); Row++) { if (this.getField(Row, ColName).toLowerCase() == Value) { if (bMultiple) arFoundRows[arFoundRows.length] = Row; else { FoundRow = Row; break; } } } } } else { if (bCaseSensitive) { for (Row = 0; Row < this.getRowCount(); Row++) { if (this.getField(Row, ColName).indexOf(Value) >= 0) { if (bMultiple) arFoundRows[arFoundRows.length] = Row; else { FoundRow = Row; break; } } } } else { Value = Value.toLowerCase(); for (Row = 0; Row < this.getRowCount(); Row++) { if (this.getField(Row, ColName).toLowerCase().indexOf(Value) >= 0) { if (bMultiple) arFoundRows[arFoundRows.length] = Row; else { FoundRow = Row; break; } } } } } if (bMultiple) return arFoundRows; else return FoundRow; } function wddxRecordset_getFieldNames() { var Names = new Array(); var Rows = this.getRowCount(); for (x in this) { if ( (typeof(this[x]) == 'object') && (this[x].length == Rows)) { Names[Names.length] = x; } } return Names; } function wddxRecordset_toArray() { var Rec, Col, Row; var Records = new Array(); var colNames = this.getFieldNames(); var RowCount = this.getRowCount(); for (Row = 0; Row < this[colNames[0]].length; Row++) { Rec = new Array(RowCount); for (Col = 0; Col < colNames.length; Col++) Rec[colNames[Col]] = this[colNames[Col]][Row]; Records[Row] = Rec; } return Records; } function wddxRecordsetSimpleComparator_compareAsc(i, j) { var a = this.rs[this.col][i]; var b = this.rs[this.col][j]; return (a == b) ? 0 : (a > b) ? 1 : -1; } function wddxRecordsetSimpleComparator_compareDesc(i, j) { var a = this.rs[this.col][i]; var b = this.rs[this.col][j]; return (a == b) ? 0 : (a > b) ? -1 : 1; } function wddxRecordsetSimpleComparator(rs, col, func) { this.rs = rs; this.col = col; this.compare = func; } function _wddxRecordset_sortComparatorFunc(i, j) { return _wddxRecordset_activeComparator.compare(i, j); } function wddxRecordset_sort() { var rowCount = this.getRowCount(); if (rowCount < 2) return this; var cmpObj = null; if (arguments.length == 0 || arguments.length > 2) return null; if (typeof(arguments[0]) == "object") { if (typeof(arguments[0].compare) == "function") { cmpObj = arguments[0]; } } else if (typeof(arguments[0]) == "string") { if (typeof(this[arguments[0]]) == "object") { var isError = false; var isAscending = true; if (arguments.length == 2) { var orderSpec = arguments[1].toLowerCase(); if (orderSpec == "asc") { isAscending = true; } else if (orderSpec == "desc") { isAscending = false; } else { isError = true; } } if (! isError) { cmpObj = new wddxRecordsetSimpleComparator( this, arguments[0], isAscending ? wddxRecordsetSimpleComparator_compareAsc : wddxRecordsetSimpleComparator_compareDesc); } } } if (cmpObj == null) return null; var indexes = new Array(rowCount); for (var i = 0; i < rowCount; ++i) { indexes[i] = i; } _wddxRecordset_activeComparator = cmpObj; indexes.sort(_wddxRecordset_sortComparatorFunc); for (var col in this) { if (typeof(this[col]) != "function") { var colArray = new Array(rowCount); for (var i = 0; i < rowCount; ++i) { colArray[i] = this[col][indexes[i]]; } this[col] = colArray; } } return this; } function replaceAny(strString, strFind, strRep) { var newString = ''; if (typeof 'teststring'.replace == 'function') { newString = strString.replace(strFind, strRep); } else { tempArray = strString.split(strFind); for (var x = 0; x < tempArray.length-1; x++) { newString = newString + tempArray[x] + strRep; } newString = newString + tempArray[tempArray.length-1]; } return newString; } function wddxRecordset_readFromPacket(WDDXPacket) { WDDXPacket = WDDXPacket.toString() + ''; var parseSpecialChars; if (arguments.length > 1) parseSpecialChars = arguments[1]; else parseSpecialChars = (WDDXPacket.toLowerCase().indexOf('<char code=') > 0); if (parseSpecialChars) { WDDXPacket = replaceAny(WDDXPacket, '<CHAR CODE=', '<char code='); } var data = WDDXPacket.split('<data>'); var xmlheader = data[0]; var recordset = data[1].split('</data>'); var nfirstfield = recordset[0].indexOf('>',0); recordsetheader = recordset[0].substring(0, nfirstfield); fields = recordset[0].substring( nfirstfield+1, recordset[0].length - 12); var fields = fields.split('</field>'); for (var i = 0; i < fields.length-1; i++){ var field = fields[i]; var fielddata = field.indexOf('>',0); var fieldname = field.substring(0,fielddata); fieldname = replaceAny(fieldname, '<field ', 'field').toLowerCase(); eval(fieldname); fielddata = field.substring(fielddata+1); datatype = fielddata.substring(0, fielddata.indexOf('>',0) + 1); datatype = replaceAny(datatype, '<', '</'); fielddata = fielddata.split(datatype); datatype = replaceAny(datatype, '/' ,''); fname = new Array; if (datatype == '<datetime>') { for (var y = 0; y < fielddata.length - 1; y++){ var Value = replaceAny(fielddata[y], datatype,''); Value = Value.split('T'); var dtDateParts = Value[0].split('-'); var dtTimeParts = Value[1].split(':'); fname[y] = new Date(dtDateParts[0], dtDateParts[1], dtDateParts[2], dtTimeParts[0], dtTimeParts[1], 0); } } else if (datatype == '<number>') { for (var y = 0; y < fielddata.length - 1; y++){ fname[y] = parseFloat(replaceAny(fielddata[y], datatype,'')); } } else if (datatype == '<boolean>') { for (var y = 0; y < fielddata.length - 1; y++){ fname[y] = ( replaceAny(fielddata[y], datatype,'') == 'true' ); } } else { for (var y = 0; y < fielddata.length - 1; y++){ fname[y] = replaceAny(fielddata[y], datatype,''); if (parseSpecialChars) { fname[y] = replaceAny(fname[y], "<char code='0D'/>", '\r'); fname[y] = replaceAny(fname[y], "<char code='0C'/>", '\f'); fname[y] = replaceAny(fname[y], "<char code='0A'/>", '\n'); fname[y] = replaceAny(fname[y], "<char code='09'/>", '\t'); } } } this[fieldname] = fname; } return 0; } registerWddxRecordsetExtension("getFieldNames", wddxRecordset_getFieldNames); registerWddxRecordsetExtension("toArray", wddxRecordset_toArray); registerWddxRecordsetExtension("sort", wddxRecordset_sort); registerWddxRecordsetExtension("addColumns", wddxRecordset_addColumns); registerWddxRecordsetExtension("deleteRow", wddxRecordset_deleteRow); registerWddxRecordsetExtension("insertRow", wddxRecordset_insertRow); registerWddxRecordsetExtension("setFields", wddxRecordset_setFields); registerWddxRecordsetExtension("findValue", wddxRecordset_findValue); registerWddxRecordsetExtension("readFromPacket", wddxRecordset_readFromPacket); 
