Hash = {

	read : function() {
		var hash = window.location.hash;
		var hashObj = new Object();

		hash = hash.split(',');
		for (i=1; i<hash.length; i+=2)
			hashObj[hash[i]] = hash[i+1];

		Hash.hash = hashObj;
	},

	write: function() {
		var hash = "#!";
		for (key in Hash.hash)
			hash += "," + key + "," + Hash.hash[key];
			
		document.location.hash = hash;
		Hash.current = document.location.hash;
	},

	get: function(name) {
		if(name==undefined) {
			return "";
		}
		return Hash.hash[name];
	},

	set: function(name, value) {
		Hash.hash[name] = value;
		Hash.write();
	},
	
	clear : function() {
		Hash.hash = new Object;
		Hash.write();
	},
	
	check : function(){
		
		if(Hash.current != document.location.hash) {
			Hash.read();
			Hash.current = document.location.hash;
			Hash.current = Hash.current.split(",");
			Page.go(true, Hash.current[2]);
		}
	}
}

Cookie = {
	create : function(name, value, days){
		
		if(!days)
			days = 0.5;
		
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		
		document.cookie = name+"="+value+expires+"; path=/";
	},
	
	read : function(name){
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},
	
	destroy : function(name){
		Cookie.create(name,"",-1);
	}
}

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}
