
////////////////////////////////////////////////////////////////////////////////////////////////

//// Map ////

// Constructor.
// Separador de entrades -> '|'
// Separador de clau/valor -> '='
// --------------------------------------------------
// 0 :	[Buit]
//		String	-> new String("a=1|b=2|c=")
//		Array	-> new Array("a=1", "b=2", "c=")
// --------------------------------------------------
function Map() {
	var obj = arguments[0];
	this.keys = new Array();
	this.entries = new Array();
	if (obj!=null) {
		if (obj instanceof String) {
			obj = obj.split("|");
		}
		if (obj instanceof Array) {
			for (var i=0; i<obj.length; i++) {
				var pair = obj[i].split("=");
				this.put(pair[0], pair.length>1 ? pair[1] : "");
			}
		}
	}
}

// PUT
Map.prototype.put = function() {
	var key = arguments[0];
	var value = arguments[1];
	var existEntry = this.get(key)!=null;
	if (!existEntry) {
		this.keys[this.keys.length] = key;
	}
	this.entries[key] = value;
}

// GET
Map.prototype.get = function() {
	var key = arguments[0];
	return this.entries[key];
}

// GET
Map.prototype.containsKey = function() {
	var key = arguments[0];
	return this.entries[key]!=null;
}

// Keys
Map.prototype.entryKeys = function() {
	return this.keys;
}

// Representació textual.
Map.prototype.toString = function() {
	var buff = "Map [\n";
	for (var i=0; i<this.keys.length; i++) {
		var key = this.keys[i];
		var value = this.entries[this.keys[i]];
		buff += key + "=" + value + ",\n";
	}
	buff += "\n]";
	return buff;
}
