var currentSheet, d = window.document, activators = {   onhover: { on: 'onmouseover', off: 'onmouseout' },   onactive: { on: 'onmousedown', off: 'onmouseup' } }; function parseStylesheets() {   var s = d.styleSheets, i = s.length;   while(i--) {     parseStylesheet( s[i] );   } } function parseStylesheet( sheet ) {   if( sheet.imports ) {     var rules = (currentSheet=sheet).rules, imports = sheet.imports, i = imports.length;     while(i--) {       parseStylesheet( imports[i] );     }     i = rules.length;     while(i--) {       parseCSSRule( rules[i] );     }   } } function parseCSSRule( rule ) {   var select=rule.selectorText, style=rule.style.cssText;   if( !( /(^|\s)(([^a]([^ ]+)?)|(a([^#.][^ ]+)+)):(hover|active)/i ).test(select) || !style ) { return; }   var pseudo = select.replace( /[^:]+:([a-z-]+).*/i, 'on$1' ),    newSelect = select.replace( /(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi, '.$2'+pseudo ),    className = ( /\.([a-z0-9_-]*on(hover|active))/i ).exec(newSelect)[1],    elements = getElementsBySelect( select.replace( /:hover.*$/, '' ) ), i = elements.length;   currentSheet.addRule( newSelect, style );   while(i--) {     new HoverElement( elements[i], className, activators[pseudo] );   } } function HoverElement( node, className, events ) {   if( !node.hovers ) { node.hovers={}; }   if( node.hovers[className] ) { return; }   node.hovers[className] = true;   node.attachEvent( events.on, function() { node.className += ' ' + className; } );   node.attachEvent( events.off, function() { node.className =     node.className.replace( new RegExp( '\\s+' + className, 'g' ), '' ); } ); } function getElementsBySelect( rule ) {   var b = rule.split( / / ), i=b.length, nodes=[d];   while(i--) {     nodes = getSelectedNodes( b[i], nodes );   }   return nodes; } function getSelectedNodes( select, elements ) {   var i, j, result, node, nodes = [],    classname = ( /\.([a-z0-9_-]+)/i ).exec( select ),    identify = ( /\#([a-z0-9_-]+)/i ).exec( select ),    tagName = ( /^[a-z0-9]+/i ).exec( select.toUpperCase() ) || '*';   for( i=0; i<elements.length; i++ ) {     result = elements[i].getElementsByTagName(tagName);     for( j=0; j<result.length; j++ ) {       node = result[j];       if( ( identify && node.id !== identify[1] ) || ( classname && !( new RegExp( '\\b' + classname[1] + '\\b' ).exec( node.className ) ) ) ) {         continue;       }       nodes[nodes.length]=node;     }   }   return nodes; }

