function AssocArray() {
  this.data = new Array();
  this.keys = new Array();
}

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from <0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from <0)
      from += len;

    for (; from <len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

AssocArray.prototype.join = function(separator) {
  if (separator == undefined || separator == "") 
    separator = "&";
  var tmp = "";
  for (var i = 0; i <this.keys.length; i++) {
    tmp += (tmp != "" ? separator : "") + this.keys[i] + "=" + this.data[i];
  }
  return tmp;
}

AssocArray.prototype.add = function(key, val) {
  if (this.keys.indexOf(key) != -1)
    return false;
  this.keys.push(key);
  this.data.push(val);
  return true;
}

AssocArray.prototype.setValue = function(key, val) {
  var idx = this.keys.indexOf(key);
  
  if (idx == -1) {
    this.add(key, val);
    return true;
  }
    
  this.data[idx] = val;
  return true; 
}

AssocArray.prototype.getObject = function(args) {
  var tmp = {};
  for (var i = 0; i <this.keys.length; i++) {
    tmp[this.keys[i]] = this.data[i];
  }
  if (args) {
    for (var k in args) {
      tmp[k] = args[k]
    }
  }
  return tmp;
}