// *********************************************************
// oVector -- base object to hold a list
// *********************************************************

function oVector() {
  // ==============
  // attributes
  // ==============
  this.arrKeys = 			new Array();
  this.arrVals =			new Array();
  this.length = 			0;
  this.Name =				"";
  // ==============
  // methods
  // ==============
  this.add =				oVectorAdd;
  this.remove =			oVectorDelete;
  this.get =				oVectorGet;
  this.set = 				oVectorSet;
  this.toXml =			oVectorToXml;
}

function oVectorAdd(strKey,oVal) {
  this.arrKeys[this.arrKeys.length] = strKey;
  this.arrVals[this.arrVals.length] = oVal;
  this.length++;
  return(oVal);
}

function oVectorDelete(strKey) {
  var arrNewKeys = new Array();
  var arrNewVals = new Array();
  var j = 0;
  var flgSuccess = false;
  for (var i = 0; i < this.arrKeys.length; i++) {
    if (this.arrKeys[i] != strKey) {
      arrNewKeys[j] = this.arrKeys[i];
      arrNewVals[j] = this.arrVals[i];
      j++;
    } else {
      flgSuccess = true;
      this.length--;
    }
  }
  this.arrKeys = arrNewKeys;
  this.arrVals = arrNewVals;
  return(flgSuccess);
}

function oVectorGet(strKey) {
  for (var i = 0; i < this.arrKeys.length; i++) {
    if (this.arrKeys[i] == strKey) {
      return(this.arrVals[i]);
      break;
    }
  }
  return(false);
}

function oVectorSet(strKey,oVal) {
  var flgFound = false;
  for (var i = 0; i < this.arrKeys.length; i++) {
    if (this.arrKeys[i] == strKey) {
      this.arrVals[i] = oVal;
      flgFound = true;
      break;
    }
  }
  if (!flgFound) {
    this.add(strKey,oVal);
  }
  return(flgFound);
}

function oVectorToXml(flgPretty) {
  var crlf =				"";
  if (flgPretty) {
    crlf =				"\n";
  }
  var str = "";
  str +=					"<obj type='oVector' name='" + this.Name + "'>" + crlf;
  for (var i = 0; i < this.arrKeys.length; i++) {
    str += 				"<prop name='" + this.arrKeys[i] + "'>";
    if (this.arrVals[i].hasOwnProperty("toXml")) {
      str +=			this.arrVals[i].toXml(flgPretty);
    } else {
      str +=			this.arrVals[i].toString();
    }
    str +=				"</prop>" + crlf;
  }
  str +=					"</obj>" + crlf;
  return(str);
}

