var $$ = (function() {
    function verify(sctr, el) {
        if(sctr.charAt(0) == "#") {
            if(el.id == sctr.substring(1))
                return el;
        } else if(sctr.charAt(0) == ".") {
			var c,cs;
            if((c=getAttribute(el,"class")) == (cs=sctr.substring(1)))
            	return el;
			if(c && c.indexOf(' ') != -1) {
				var p = c.split(' ');
				for(var i=0; i < p.length; i++) {
					if(p[i] == cs) return el;
				}
			}
        } else if(sctr.indexOf('.') != -1) {
			var parts = sctr.split('.');
			if(parts.length == 2) {
				if(el.nodeName.toLowerCase() == parts[0]) { 
					if(getAttribute(el,'class') == parts[1]) {
						return el;
					}
				}
			}
		} else {
            if(el.nodeName.toLowerCase() == sctr)
                return el;
        }
        return null;
    }
    function scan(prnt, qu, idx, out) {
        if(!prnt) prnt = document.getElementsByTagName("html")[0];
        for(var i=0; i < prnt.childNodes.length; i++) {
            var node = verify(qu[idx], prnt.childNodes[i]);
            if(node && idx == qu.length-1) {
                out.push(node);
            } else if(node) {
                scan(node, qu, idx+1, out);
            } else {
                scan(prnt.childNodes[i], qu, idx, out);
            }
        }
    }
    return function() {
		var sctr = null;
		var prnt = null;
		if(typeof(arguments[0]) == 'string') {
			sctr = arguments[0];
		} else {
			prnt = arguments[0];
			sctr = arguments[1];
		}
    	if(sctr.indexOf(",") != -1) {
    	    var parts = sctr.split(",");
            var out = [];
			for(var i=0; i < parts.length; i++) {
				var grp = $$(prnt, parts[i]);
				if(grp) {
					for(var j=0; j < grp.length; j++)
						out.push(grp[j]);
				}
			}
			return out;
    	}
		sctr = sctr.trim().replace(/ +/g,' ');
        var out = [];
        scan(prnt, sctr.split(" "), 0, out);
        return out;
    }
})();
