// Meant to be identical to class in Package.cs 

function Package(val, key)
{
  this.key = key;
  this.nameValues = new Object();
  this.namesArray = new Array();
  if (val)
    this.unPack(val);
}

Package.prototype.addValue = function(name, value)
{
  if (this.nameValues[name])
    this.nameValues[name] += ',' + value;
  else
  {
    this.nameValues[name] = value;
    this.namesArray[this.namesArray.length] = name;
  }
}

Package.prototype.getValue = function(name)
{
  return this.nameValues[name];
}

Package.prototype.getName = function(index)
{
  return this.namesArray[index];
}

Package.prototype.getCount = function()
{
  return this.namesArray.length;

}

Package.prototype.pack = function(encrypt)
{
  var name, value, returnValue = '';
  for(var i=0; i<this.namesArray.length; i++)
  {
    name = this.namesArray[i];
    if (this.nameValues[name])
      value = this.nameValues[name];
    else
      value = '';
    returnValue += name + '===' + value + '&&&';
  }
  if (encrypt) {
    if (this.key)
      returnValue = prefixEncryptedFull + AESEncryptWithKeyGeneration(returnValue, this.key);
    else
      returnValue = prefixBase64 + b64EncryptBytes(utf8Encrypt(returnValue));
  }
  return returnValue;
}

Package.prototype.unPack = function(val)
{
  if (!val)
    return;
  
  var prefix = val.substr(0, 1);
  switch(prefix) {
    case prefixEncryptedFull:
      var bData = b64DecryptBytes(val.substr(1, val.length-1));
      break;
    case prefixEncrypted:
      var bData = b64DecryptBytes(val.substr(1, val.length-1));
      break;
    case prefixBase64:
      var bData = b64DecryptBytes(val.substr(1, val.length-1));
      val = utf8Decrypt(bData);
      break;
  }

  var nameValues = val.split(/&&&/);
  for (var i=0; i<nameValues.length; i++)
  {
    var nameValue = nameValues[i].split(/===/);
    this.addValue(nameValue[0], nameValue[1]);
  }
}

Package.prototype.success = function()
{
  return ('true' == this.nameValues['Success']);
}

Package.prototype.reload = function()
{
  return ('true' == this.nameValues['Reload']);
}

Package.prototype.userMessage = function()
{
  return this.nameValues['UserMessage'];
}
