var CookieUtil = {

setCookie : function(name, value, days, path, domain, secure) {
	var expires = -1;
	if(typeof days == "number" && days >= 0) {
		var d = new Date();
		d.setTime(d.getTime()+(days*24*60*60*1000));
		expires = d.toGMTString();
	}
	value = escape(value);
	document.cookie = name + "=" + value + ";"
		+ (expires != -1 ? " expires=" + expires + ";" : "")
		+ (path ? "path=" + path : "")
		+ (domain ? "; domain=" + domain : "")
		+ (secure ? "; secure" : "");
},
	
getCookie:function(name) {
	var idx = document.cookie.lastIndexOf(name+'=');
	if(idx == -1) { return null; }
	var value = document.cookie.substring(idx+name.length+1);
	var end = value.indexOf(';');
	if(end == -1) { end = value.length; }
	value = value.substring(0, end);
	value = unescape(value);
	return value;
},

setSubCookie:function(cookieName, subCookieName, subValue, days, path, domain, secure){
	var v = this.getCookie(cookieName);
	if(v){
		var subCookies = v.split('/');
		var subCookieCrumbs, newSubCookies=[];
		for (var i = 0; i < subCookies.length; i++){
			subCookieCrumbs = subCookies[i].split(":");
			if (subCookieCrumbs[0] != subCookieName){
				newSubCookies[newSubCookies.length] = subCookies[i];
			}
		}
		if(newSubCookies.length > 0){
			this.setCookie(cookieName, newSubCookies.join('/')+'/'+subCookieName+':'+escape(subValue), days, path, domain, secure);
		}else{
			this.setCookie(cookieName, subCookieName+':'+escape(subValue), days, path, domain, secure);
		}
	}else{
		this.setCookie(cookieName, subCookieName+':'+escape(subValue), days, path, domain, secure);
	}
},

getSubCookie:function(cookieName, subCookieName){ // name1:value1/name2:value2……
	var v = this.getCookie(cookieName);
	if(v){
		var subCookies = v.split('/');
		var subCookieCrumbs;
		for (var i = 0; i < subCookies.length; i++){
			subCookieCrumbs = subCookies[i].split(":");
			if (subCookieCrumbs[0] == subCookieName){
				return unescape(subCookieCrumbs[1]);
			}
		}
	}else{
		return null;
	}
},

deleteSubCookie:function(cookieName, subCookieName, days, path, domain, secure){
	var v = this.getCookie(cookieName);
	if(v){
		var subCookies = v.split('/');
		var subCookieCrumbs, newSubCookies=[];
		for (var i = 0; i < subCookies.length; i++){
			subCookieCrumbs = subCookies[i].split(":");
			if (subCookieCrumbs[0] != subCookieName){
				newSubCookies[newSubCookies.length] = subCookies[i];
			}
		}
		this.setCookie(cookieName, newSubCookies.join('/'), days, path, domain, secure);
	}else{
		return null;
	}
},

	
deleteCookie:function(name) {
	this.setCookie(name, "-", 0);
},
	
setObjectCookie:function(name, obj, days, path, domain, secure, clearCurrent) {
	if(arguments.length == 5) { // for backwards compat
		clearCurrent = domain;
		domain = null;
		secure = null;
	}
	var pairs = [], cookie, value = "";
	if(!clearCurrent) { cookie = this.getObjectCookie(name); }
	if(days >= 0) {
		if(!cookie) { cookie = {}; }
		for(var prop in obj) {
			if(prop == null) {
				delete cookie[prop];
			} else if(typeof obj[prop] == "string" || typeof obj[prop] == "number") {
				cookie[prop] = obj[prop];
			}
		}
		prop = null;
		for(var prop in cookie) {
			pairs.push(escape(prop) + "=" + escape(cookie[prop]));
		}
		value = pairs.join("&");
	}
	this.setCookie(name, value, days, path, domain, secure);
},
	
getObjectCookie:function(name) {
	var values = null, cookie = this.getCookie(name);
	if(cookie) {
		values = {};
		var pairs = cookie.split("&");
		for(var i = 0; i < pairs.length; i++) {
			var pair = pairs[i].split("=");
			var value = pair[1];
			if( isNaN(value) ) { value = unescape(pair[1]); }
			values[ unescape(pair[0]) ] = value;
		}
	}
	return values;
},
	
isSupported:function() {
	var x = false;
	this.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed", 1, null);
	var cookieVal = this.getCookie("__TestingYourBrowserForCookieSupport__");
	x = (cookieVal == "CookiesAllowed");
	if(x) this.deleteCookie("__TestingYourBrowserForCookieSupport__");
	return x;
}

}

function trim(v){
	return v.replace(/(^[\u3000|\s]*)|([\u3000|\s]*$)/g, "");
}