TD=':';
Tokens = {
	isMain	: function (token){
					switch (token) {
						case this.folder	: {return true;}
						case this.details	: {return true;}
						case this.search	: {return true;}
						case this.tag		: {return true;}
						case this.edit		: {return true;}
						case this.comment	: {return true;}
						default 			: {return false;}
					}
			  },
	isAction: function (token){
					for (var i in this){
						if (typeof(this[i])=='string' && token == this[i]){
							return true;
						}
					}
					return false;
			  },				  
	folder	: 'f',
	details	: 'd',
	search	: 's',
	tag		: 't',
	edit	: 'e',
	comment	: 'c',
	page	: 'p',
	sort	: 'o',
	pagesize: 'z'
}


function getToken(token) {
	if (!token){
		token = currentWindow.location.hash;
    	token = token.split('#')[1];
    }
    if (token) {
		var parts = token.split(TD);
		var obj = new Object();
	    obj.itemId = unescape(parts[0]);
	    obj.start = 0;
	    obj.pagesize = 10;
	    obj.sortField = 'date';
		obj.sortDir = 'desc';
	    
	    for (var i=1;i<parts.length;i++){
	    	if (Tokens.isMain(parts[i])){
	    		obj.action = parts[i];
	    		i++;
	    		obj.itemName = parts[i];
	    	} else {
	    		switch (parts[i]) {
	    			case Tokens.page:
	    				i++;
	    				obj.start = parseInt(parts[i]);
	    				break;
	    			case Tokens.pagesize:
	    				i++;
	    				obj.pagesize = parseInt(parts[i]);
	    				break;
	    			case Tokens.sort:
	    				i++;
	    				obj.sortField = parts[i];
	    				i++;
	    				obj.sortDir = parts[i];
	    				break;
	    		}
	    	}
	    }
		return obj;
		
    }
    return null;
}

function createToken(addition,keep) {
	
	token = currentWindow.location.hash;
	token = token.split('#')[1];
	
    if (token) {
		var parts = token.split(TD);
		var obj = new Object();
		if (addition.id){
			var itemId = addition.id;
			delete addition.id;
		} else {
	    	var itemId = parts[0];
		}
	    
	    for (var i=1;i<parts.length;i++){
	    	if (Tokens.isAction(parts[i])){
	    		var key = parts[i];
	    		var details = '';
	    		switch (parts[i]) {
	    			case Tokens.sort:
	    				i++;
	    				details+=TD+parts[i];
	    				i++;
	    				details+=TD+parts[i];
	    				break;
	    			default :
	    				i++;
	    				details+=TD+parts[i];
	    				break;
	    		}
	    		if (!keep || keep[key])
	    			obj[key]=details;
	    	}
	    }
	    for (i in addition){
	    	obj[i] = addition[i];
	    }
		var hash = itemId;
		for (i in obj){
			hash +=TD+i+obj[i];
		}
		return hash;
    }
    return null;
}