Tools = {
 getElementsByClass : function (searchClass,node,tag) {
        var classElements = [];
        if ( !node  ) {
                node = document;
			}
        if ( !tag ) {
                tag = '*';
			}
        var els = node.getElementsByTagName(tag);
        var elsLen = els.length;
        var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
        for (i = 0, j = 0; i < elsLen; i++) {
                if ( pattern.test(els[i].className) ) {
                        classElements[j] = els[i];
                        j++;
                }
        }
        return classElements;
	},

hasClass: function(ele,cls) {
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
},

addClass: function(ele,cls) {
	if (!Tools.hasClass(ele,cls)) ele.className += " "+cls;
},

removeClass: function(ele,cls) {
	if (Tools.hasClass(ele,cls)) {
    	var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
},

	getValue : function(el) {
			var tval = el.value;
			if((el.type == 'checkbox') || (el.type == 'radio')) {
				tval = '';
				var my = el.form[el.name];
				for(var i = 0; i < my.length; ++i) {
					if(my[i].checked) {
						if(tval.length > 0) { tval += '|'; }
						tval += my[i].value;
					}
				}
			}
			return tval;
	},
	
	findCSSRule: function(sel) {
try {
		for(var i = 0; i < document.styleSheets.length; ++i)
		{
			var rules = document.styleSheets[i].rules || document.styleSheets[i].cssRules;
			if(rules)
			{
				for(var j = 0; j < rules.length; ++j)
				{
					if(rules[j].selectorText == sel)
					{
						return rules[j];
					}
				}
			}
		}
} catch(err) {
}		
		return null;
	},

	Query : (function() {
		var q = document.location.search.split('&');
		var ar;
		var ret = {};
		for(var n in q) {
			ar = q[n].split('=');
			ret[decodeURIComponent(ar[0])] = decodeURIComponent(ar[1]);
		}
		return ret;
	})()
};



var DocumentReadyClass = function() {

	var isReady = false;
	var docReadyInt;
	var handlers = [];

	var docReady = function() {
		if(isReady) {
			return;
		}

		isReady = true;
		//
		if(docReadyInt) { clearInterval(docReadyInt); docReadyInt = null; }
		
		for(var i = 0; i < handlers.length; ++i) {
			handlers[i]();
		}
	};

    var _onload = window.onload;
    window.onload = function() {
    	docReady();
    	if(_onload) {
    		_onload();
    	}
    };
    
    if(document.addEventListener) {
        document.addEventListener('DOMContentLoaded', docReady, false);    	
    } else if(document.onreadystatechange) {
    	//IE
    	docReadyInt = setInterval(function() {
    		try { 
    			var d = isReady || document.documentElement.doScroll('left');
    		} catch(e) {
    			return;
    		}
    		docReady();
    	}, 10);
    
    	document.onreadystatechange = function() {
    		if(document.readyState == 'complete') {
    			document.onreadystatechange = null;
    			docReady();
    		}
    	};

    } else if(document.readyState){
    	docReadyInt = setInterval(function() {
	    	if(document.readyState == 'complete') {
	    		docReady();
	    	}
    	}, 10);
    }
    
    this.on = function(handler) {
    	handlers.push(handler);
    };
};

DocumentReady = new DocumentReadyClass();

$ = function(d) {
	if(typeof(d) == 'string') {
		return document.getElementById(d);
	}
	return d;
};
