| 
  <HTML>
 <HEAD>
 <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
 <TITLE></TITLE>
 <Script language="JavaScript">
 //////////////////////////////////////////////////////
 // File: vector.js
 //
 // Author: Jason Geissler
 //
 // Date: Sept 3, 2003
 //
 // Purpose: To have a dynamic collection instead
 //          of using arrays when the total quantity
 //          is unknown
 //////////////////////////////////////////////////////
 
 // Vector Constructor -- constructs the object
 function Vector(inc) {
 if (inc == 0) {
 inc = 100;
 }
 
 /* Properties */
 this.data = new Array(inc);
 this.increment = inc;
 this.size = 0;
 
 /* Methods */
 this.getCapacity = getCapacity;
 this.getSize = getSize;
 this.isEmpty = isEmpty;
 this.getLastElement = getLastElement;
 this.getFirstElement = getFirstElement;
 this.getElementAt = getElementAt;
 this.addElement = addElement;
 this.insertElementAt = insertElementAt;
 this.removeElementAt = removeElementAt;
 this.removeAllElements = removeAllElements;
 this.indexOf = indexOf;
 this.contains = contains
 this.resize = resize;
 this.toString = toString;
 this.sort = sort;
 this.trimToSize = trimToSize;
 this.clone = clone;
 this.overwriteElementAt;
 }
 
 // getCapacity() -- returns the number of elements the vector can hold
 function getCapacity() {
 return this.data.length;
 }
 
 // getSize() -- returns the current size of the vector
 function getSize() {
 return this.size;
 }
 
 // isEmpty() -- checks to see if the Vector has any elements
 function isEmpty() {
 return this.getSize() == 0;
 }
 
 // getLastElement() -- returns the last element
 function getLastElement() {
 if (this.data[this.getSize() - 1] != null) {
 return this.data[this.getSize() - 1];
 }
 }
 
 // getFirstElement() -- returns the first element
 function getFirstElement() {
 if (this.data[0] != null) {
 return this.data[0];
 }
 }
 
 // getElementAt() -- returns an element at a specified index
 function getElementAt(i) {
 try {
 return this.data[i];
 }
 catch (e) {
 return "Exception " + e + " occured when accessing " + i;
 }
 }
 
 // addElement() -- adds a element at the end of the Vector
 function addElement(obj) {
 if(this.getSize() == this.data.length) {
 this.resize();
 }
 this.data[this.size++] = obj;
 }
 
 // insertElementAt() -- inserts an element at a given position
 function insertElementAt(obj, index) {
 try {
 if (this.size == this.capacity) {
 this.resize();
 }
 
 for (var i=this.getSize(); i > index; i--) {
 this.data[i] = this.data[i-1];
 }
 this.data[index] = obj;
 this.size++;
 }
 catch (e) {
 return "Invalid index " + i;
 }
 }
 
 // removeElementAt() -- removes an element at a specific index
 function removeElementAt(index) {
 try {
 var element = this.data[index];
 
 for(var i=index; i<(this.getSize()-1); i++) {
 this.data[i] = this.data[i+1];
 }
 
 this.data[getSize()-1] = null;
 this.size--;
 return element;
 }
 catch(e) {
 return "Invalid index " + index;
 }
 }
 
 // removeAllElements() -- removes all elements in the Vector
 function removeAllElements() {
 this.size = 0;
 
 for (var i=0; i<this.data.length; i++) {
 this.data[i] = null;
 }
 }
 
 // indexOf() -- returns the index of a searched element
 function indexOf(obj) {
 for (var i=0; i<this.getSize(); i++) {
 if (this.data[i] == obj) {
 return i;
 }
 }
 return -1;
 }
 
 // contains() -- returns true if the element is in the Vector, otherwise false
 function contains(obj) {
 for (var i=0; i<this.getSize(); i++) {
 if (this.data[i] == obj) {
 return true;
 }
 }
 return false;
 }
 
 // resize() -- increases the size of the Vector
 function resize() {
 newData = new Array(this.data.length + this.increment);
 
 for  (var i=0; i< this.data.length; i++) {
 newData[i] = this.data[i];
 }
 
 this.data = newData;
 }
 
 
 // trimToSize() -- trims the vector down to it's size
 function trimToSize() {
 var temp = new Array(this.getSize());
 
 for (var i = 0; i < this.getSize(); i++) {
 temp[i] = this.data[i];
 }
 this.size = temp.length - 1;
 this.data = temp;
 }
 
 // sort() - sorts the collection based on a field name - f
 function sort(f) {
 var i, j;
 var currentValue;
 var currentObj;
 var compareObj;
 var compareValue;
 
 for(i=1; i<this.getSize();i++) {
 currentObj = this.data[i];
 currentValue = currentObj[f];
 
 j= i-1;
 compareObj = this.data[j];
 compareValue = compareObj[f];
 
 while(j >=0 && compareValue > currentValue) {
 this.data[j+1] = this.data[j];
 j--;
 if (j >=0) {
 compareObj = this.data[j];
 compareValue = compareObj[f];
 }
 }
 this.data[j+1] = currentObj;
 }
 }
 
 // clone() -- copies the contents of a Vector to another Vector returning the new Vector.
 function clone() {
 var newVector = new Vector(this.size);
 
 for (var i=0; i<this.size; i++) {
 newVector.addElement(this.data[i]);
 }
 
 return newVector;
 }
 
 // toString() -- returns a string rep. of the Vector
 function toString() {
 var str = "Vector Object properties:\n" +
 "Increment: " + this.increment + "\n" +
 "Size: " + this.size + "\n" +
 "Elements:\n";
 
 for (var i=0; i<getSize(); i++) {
 for (var prop in this.data[i]) {
 var obj = this.data[i];
 str += "\tObject." + prop + " = " + obj[prop] + "\n";
 }
 }
 return str;
 }
 
 // overwriteElementAt() - overwrites the element with an object at the specific index.
 function overwriteElementAt(obj, index) {
 this.data[index] = obj;
 }
 
 
 
 //////////////////////////////////////////////////////
 // File: Matrix.js
 //
 // Author: Jason Geissler
 //
 // Date: March 9, 2004
 //
 // Purpose: To have a multidimensional dynamic collection instead
 //          of using arrays when the total quantity
 //          is unknown
 //////////////////////////////////////////////////////
 
 // Matrix() - object constructor
 function Matrix(h, w) {
 /*Properties */
 this.height = h;
 this.width = w;
 this.rows = new Vector(w);
 
 // set up this.rows.
 for (var r = 0; r < this.height; r++) {
 var theRow = new Vector(w);
 
 for (var c = 0; c < this.width; c++) {
 theRow.addElement(null);
 }
 this.rows.addElement(theRow);
 }
 
 /*Methods*/
 this.elementAt = elementAt;
 this.setElementAt = setElementAt;
 this.insertRow = insertRow;
 this.insertColumn = insertColumn;
 this.removeRowAt = removeRowAt;
 this.removeColumnAt = removeColumnAt;
 this.getWidth = getWidth;
 this.getHeight = getHeight;
 this.toString = toString;
 }
 
 // getElementAt() - returns a value from the given row/column.
 function elementAt(row, col) {
 try {
 var theRow = this.rows.getElementAt(row);
 return theRow.getElementAt(col);
 }
 catch(e) {
 return "Invalid index";
 }
 }
 
 // setElementAt() - sets a value at a given row/column
 function setElementAt(value, row, col) {
 if (row < 0 || row >= this.height || col < 0 || col >= this.width) {
 return "Matrix object out of Bounds";
 }
 var theRow = this.rows.getElementAt(row);
 theRow.insertElementAt(value, col);
 }
 
 // insertRowAt() - Inserts a blank row at the end.
 function insertRow() {
 try {
 this.height++;
 var theRow = new Vector(this.width);
 for (var r = 0; r < this.width; r++) {
 theRow.addElement(null);
 }
 this.rows.insertElementAt(theRow, this.height-1);
 }
 catch (e) {
 return "Excecption occured " + e;
 }
 }
 
 // insertColumnAt() -- Inserts a column at the end.
 function insertColumn() {
 try {
 this.width++;
 
 for (var c=0; c < this.height; c++) {
 this.rows.getElementAt(c).insertElementAt(null, this.width-1);
 }
 }
 catch (e) {
 return "Invalid column number";
 }
 }
 
 // removeRowAt() - removes a row at a given index.
 function removeRowAt(row) {
 try {
 var result = this.rows.getElementAt(row);
 this.height--;
 
 for (var r=row + 1; r <= this.height; r++) {
 var theRow = this.rows.getElementAt(r);
 this.rows.insertElementAt(theRow, r-1);
 this.rows.removeElementAt(r);
 }
 
 return result;
 }
 catch (e) {
 return "Invalid row number";
 }
 }
 
 // removeColumnAt() - removes a given column
 function removeColumnAt(col) {
 try {
 var result = new Vector(this.height);
 this.width--;
 
 for(var r = 0; r < this.height; r++) {
 var element = this.rows.getElementAt(r).removeElementAt(col);
 result.addElement(element);
 }
 
 return result;
 }
 catch (e) {
 return "Invalid column number";
 }
 }
 
 // getWidth() - returns the Matrix width
 function getWidth() {
 return this.width;
 }
 
 // getHeight() - returns the Matrix height
 function getHeight() {
 return this.height;
 }
 
 // toString() - returns String data about the Matrix object
 function toString() {
 var s = "Height: " + this.height + " Width: " + this.width + " Rows: " + this.rows;
 return s;
 }
 
 
 
 </Script>
 <Script language="JavaScript">
 /*
 elementAt;
 setElementAt;
 insertRow;
 insertColumn;
 removeRowAt;
 removeColumnAt;
 getWidth;
 getHeight;
 toString;
 */
 
 var theMatrix = new Matrix(8,8);
 var counter = 1;
 
 for (var i = 0; i < theMatrix.getHeight(); i++) {
 for (var j = 0; j < theMatrix.getWidth(); j++) {
 
 if (counter % 2 == 0) {
 theMatrix.setElementAt("red", i, j);
 }
 else {
 theMatrix.setElementAt("black", i, j);
 }
 
 counter++;
 }
 counter++;
 }
 
 
 </Script>
 </HEAD>
 <BODY>
 <Table align="center">
 <TR><TD align=center colspan=8><B>Element At</TD></TR>
 <Script language="JavaScript">
 
 for (var x = 0; x < theMatrix.getHeight(); x++) {
 document.write("<TR>");
 
 for (var y = 0; y < theMatrix.getWidth(); y++) {
 var color = theMatrix.elementAt(x, y);
 document.write("<TD bgcolor='" + color + "'>   </TD>");
 }
 
 document.write("</TR>");
 }
 
 document.writeln("");
 document.writeln("");
 document.writeln("<B>Width: </B>" + theMatrix.getWidth());
 document.writeln("<B>Height: </B>" + theMatrix.getHeight());
 document.writeln("<B>ToString: </B>" + theMatrix.toString());
 
 </Script>
 </Table>
 <Table align="center">
 <TR><TD align=center colspan=8><B>Remove Row At</TD></TR>
 <Script language="JavaScript">
 
 var removedRow = theMatrix.removeRowAt(2);
 
 for (var x = 0; x < theMatrix.getHeight(); x++) {
 document.write("<TR>");
 
 for (var y = 0; y < theMatrix.getWidth(); y++) {
 var color = theMatrix.elementAt(x, y)
 document.write("<TD bgcolor='" + color + "'>   </TD>");
 }
 
 document.write("</TR>");
 }
 
 
 </Script>
 </Table>
 </Table>
 <Table align="center">
 <TR><TD align=center colspan=8><B>Remove Column At</TD></TR>
 <Script language="JavaScript">
 
 var removedRow = theMatrix.removeColumnAt(2);
 
 for (var x = 0; x < theMatrix.getHeight(); x++) {
 document.write("<TR>");
 
 for (var y = 0; y < theMatrix.getWidth(); y++) {
 var color = theMatrix.elementAt(x, y)
 document.write("<TD bgcolor='" + color + "'>   </TD>");
 }
 
 document.write("</TR>");
 }
 </Script>
 </Table>
 </BODY>
 </HTML>
 
 
 
 
 
 
 |