// 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'];
}
