go.dom = new (function()
{
	
this.clear = (
	function(node)
	{
		node = $(node);
		var cn = node.childNodes;
		var len = cn.length;
		for (var i = len - 1; i >= 0; i--) {
			node.removeChild(cn.item(i));
		}
		return node;
	}
);	

this.addText = (
	function(node, text)
	{
		node = $(node);
		node.appendChild(document.createTextNode(text));
		return node;
	}
);
	
this.setText = (
	function(node, text)
	{
		return _this.addText(_this.clear(node), text);
	}
);	

this.addTextBR = (
	function(node, text)
	{
		node = $(node);
		text = text.split(/\n/);
		var len = text.length;
		for (var i = 0; i < len; i++) {
			if (i) {
				node.appendChild(document.createElement("BR"));
			}
			node.appendChild(document.createTextNode(text[i]));
		}
		return node;
	}
);
	
this.isClass = (
	function(node, cssClass)
	{
		var re = new RegExp("^(.*?\\s)?" + cssClass.replace("-", "\\-") + "(\\s.*?)?$");
		return ($(node).className.search(re) != -1);
	}
);	

this.addClass = (
	function(node, cssClass) 
	{
		node = $(node);
		node.className = node.className ? (node.className + " " + cssClass) : cssClass;
		return true;
	}
);

this.delClass = (
	function(node, cssClass) 
	{
		node = $(node);
		if (node.className == cssClass) {
			node.className = "";
		} 
		return true;
	}
);
	
this.form2string = (
	function(form)
	{
		form = $(form);
		var ret = [];
		var ael = document.getElementsByTagName("input");
		var len = ael.length;
		for (var i = 0; i < len; i++) {
			var el = ael.item(i);
			var name = el.getAttribute("name");
			if (name) {
				var type = el.getAttribute("type");
				if (((type == "checkbox") || (type == "radio")) && (!el.checked)) {
					continue;
				}
				ret.push(name + "=" + encodeURIComponent(el.value));
			}
		}
		return ret.join("&");
	}
);	
	
this.formElements = (
	function(form)
	{
		form = $(form);
		var result = {};
		var aels = [
			form.getElementsByTagName("input"),
			form.getElementsByTagName("select"),
			form.getElementsByTagName("textarea")
		];
		var laels = aels.length;
		for (var i = 0; i < laels; i++) {
			var els  = aels[i];
			var lels = els.length;
			for (var j = 0; j < lels; j++) {
				var el = els.item(j);
				var name = el.getAttribute("name");
				if (!name) {
					continue;
				}
				var obj = result;				
				name = name.replace(/\]/g, "").split("[");
				var len = name.length - 1;
				for (var k = 0; k < len; k++) {
					var p = name[k];
					if (!obj[p]) {
						obj[p] = {};
					}
					obj = obj[p];
				}
				obj[name[len]] = el;
			}
		}
		return result;
	}
);
	
var _this = this;
var $ = go.$;	
	
})(); 

go.cookie = new (function() {
    
    var _this = this;
    
    this.set = (
        function(name, value, expires, path, domain, secure)
        {
            var cook = name + "=" + encodeURIComponent(value);
            if (expires) {
                var t = new Date();
                t.setTime(t.getTime() + expires * 1000);
                cook += ";expires=" + t.toGMTString();
            }
            if (path) {
                cook += ";path=" + encodeURIComponent(path);
            } else if (path === undefined) {
                cook += ";path=/";
            }
            if (domain) {
                cook += ";domain=" + domain;
            }
            if (secure) {
                cook += "secure";
            }
            document.cookie = cook;
            return true;
        }
    );
    
    this.get = (
        function(name, def)
        {
            var cook = document.cookie.split(";");
            for (var i = 0; i < cook.length; i++) {
                var c = cook[i].split("=");
				if (c[0].replace(/^\s*/, "").replace(/\s*$/, "") == name) {
					return decodeURIComponent(c[1].replace(/^\s*/, "").replace(/\s*$/, ""));
				}
            }
            return def;
        }
    );
    
    this.del = (
        function(name, path, domain)
        {
            _this.set(name, "", -1, path, domain);
            return true;
        }
    );

})();