/* SELECTOR OPTIMIZATIONS */
(function(){

var getByClass = (function(){
	var testee = document.createElement('div');
	testee.innerHTML = '<a name="' + $time() + '" class="€ b"></a>';
	testee.appendChild(document.createComment(''));

	if (!testee.getElementsByClassName || !testee.getElementsByClassName('b').length) return false;
	testee.firstChild.className = 'c';
	return (testee.getElementsByClassName('c').length == 1);
})();

Selectors.Utils.search = function(self, expression, local){
	var splitters = [];

	var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
		splitters.push(m1);
		return ':)' + m2;
	}).split(':)');

	var items, filtered, item;

	for (var i = 0, l = selectors.length; i < l; i++){

		var selector = selectors[i];

		/* CUSTOM */
		if (i == 0 && self.querySelectorAll && (/^(?:\w+|\*)?(?:#|\.)?(?:\w+|\*)$/).test(selector)){
			try { items = $A(self.querySelectorAll(selector)); } catch (e){}
			if (items) continue;
		}

		if (i == 0 && getByClass && (/^\.(?:\w+|\*)$/).test(selector)){
			items = $A(self.getElementsByClassName(selector.substr(1)));
			continue;
		}
		/* END CUSTOM */

		if (i == 0 && Selectors.RegExps.quick.test(selector)){
			items = self.getElementsByTagName(selector);
			continue;
		}

		var splitter = splitters[i - 1];

		var tagid = Selectors.Utils.parseTagAndID(selector);
		var tag = tagid[0], id = tagid[1];

		if (i == 0){
			items = Selectors.Utils.getByTagAndID(self, tag, id);
		} else {
			var uniques = {}, found = [];
			for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
			items = found;
		}

		var parsed = Selectors.Utils.parseSelector(selector);

		if (parsed){
			filtered = [];
			for (var m = 0, n = items.length; m < n; m++){
				item = items[m];
				if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
			}
			items = filtered;
		}

	}

	return items;

};

})();