var CSSEvents = {
	cssReg: /(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active|focus|unknown)/i,
	onhover: {over:"mouseover", out:"mouseout"},
	onactive: {over:"mousedown", out:"mouseup"},
	onfocus: {over:"focus", out:"blur"},
	currentRule: null
};

CSSEvents.parseSheetItem = function(s){
	if(s.imports){
		try {
			for(var i=0, imports = sheet.imports; i<imports.length; i++)
				CSSEvents.parseSheetItem(imports[i]);
		} catch (e) {}
	}
	try {
		var rules = (CSSEvents.currentRule = s).rules;
		for(var j=0; j<rules.length; j++)
			CSSEvents.parseCSSItem(rules[j]);
	} catch (e) {}

}

CSSEvents.getCSSText = function(item, sel){
	for(var s = 0, text = null, item = item.rules;
		text == null && s < item.length; s++){
			if(item[s].selectorText && item[s].selectorText == sel){
				text = item[s].style.cssText;
				break;
			}
	}
	return text;
}

CSSEvents.parseCSSItem = function(item){
	var sel = item.selectorText, sty = item.style.cssText;
	if( CSSEvents.cssReg.test(sel) || sty ){
		if(/[:](hover|active|focus|unknown).*$/.test(sel)
			&& !/^(a|A).*$/.test(sel)){
			var event = sel.split(":"), selout = event[0];
			var event = event[1] == "unknown" ? "focus" : event[1], el = $$(selout);
			
			for(var newClass = "", nca = selout.split(" "), i = nca.length; i>(nca.length-1);
				i--, newClass = nca[i].replace(/^(#|[.])/g, "").toLowerCase() + "_" + event);

			el.each(function(i){
				Event.add(this[i], CSSEvents["on" + event].over, function(e){
					var e = getTargetByEvent(e || window.event);
					setClass(e, e.className + " " + newClass);
				});
				Event.add(this[i], CSSEvents["on" + event].out, function(e){
					setClass(getTargetByEvent(e || window.event));
				});
			});
		}
	}
}

CSSEvents.parse = function(){

	if(!Browser.isIE() &&
		!/MSIE (5|6)/.test(navigator.userAgent)) return false;

	for(var i=0, sheets = document.styleSheets; i<sheets.length; i++)
		CSSEvents.parseSheetItem(sheets[i]);

}