function HashState() {
	var self = this;
	this.pairs = new Array();
	this.pairDelimiter = '&';

	this.setItem = function(name, value) {
		self.pairs[name] = value;
		self.save();
	}

	this.hasItem = function(name) {
		return (self.pairs[name] !== undefined);
	}

	this.getItem = function(name) {
		return self.pairs[name];
	}

	this.deleteItem = function(name) {
		delete self.pairs[name];
		self.save();
	}

	this.load = function() {
	    var locationHash = location.hash;

		if (locationHash != '') {
			locationHash = locationHash.replace('#', '');
			
			var hashParts = locationHash.split(self.pairDelimiter);

			for (var i = 0; i < hashParts.length; i++) {
				var pair = hashParts[i];
				var pairArray = pair.split('=');
				if (pairArray[0] != '') {
					self.pairs[pairArray[0]] = pairArray[1];
				}
			}
		}
	}

	this.save = function() {
		var locationHash = '';
		for (var name in self.pairs) {
			locationHash += self.pairDelimiter + name + '=' + self.pairs[name];
		}
		locationHash = '#' + locationHash.substr(1, locationHash.length);
		location.hash = locationHash;
	}

	this.alertPairs = function() {
		var locationHash = '';
		for (var name in self.pairs) {
			locationHash += "'" + name + "' = " + self.pairs[name] + '\n';
		}
		alert('locationHash = ' + locationHash);
	}

}
