
/* ----- JS ----- */
/* ----- BEHAVIOURS ----- */

var Behaviour={list:new Array,register:function(a){Behaviour.list.push(a)},start:function(){addLoadEvent(function(){Behaviour.apply()})},apply:function(){for(h=0;sheet=Behaviour.list[h];h++){for(selector in sheet){list=document.getElementsBySelector(selector);if(!list){continue}for(i=0;element=list[i];i++){sheet[selector](element)}}}}}
document.getElementsBySelector=function(a){if(!document.getElementsByTagName){return new Array()}var b=a.split(' ');var c=new Array(document);for(var i=0;i<b.length;i++){token=b[i].replace(/^\s+/,'').replace(/\s+$/,'');if(token.indexOf('#')>-1){var d=token.split('#');var f=d[0];var g=d[1];var l=document.getElementById(g);if(f&&l.nodeName.toLowerCase()!=f){return new Array()}c=new Array(l);continue}if(token.indexOf('.')>-1){var d=token.split('.');var f=d[0];var m=d[1];if(!f){f='*'}var n=new Array;var o=0;for(var h=0;h<c.length;h++){var p;if(f=='*'){p=getAllChildren(c[h])}else{p=c[h].getElementsByTagName(f)}for(var j=0;j<p.length;j++){n[o++]=p[j]}}c=new Array;var q=0;for(var k=0;k<n.length;k++){if(n[k].className&&n[k].className.match(new RegExp('\\b'+m+'\\b'))){c[q++]=n[k]}}continue}if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)){var f=RegExp.$1;var r=RegExp.$2;var s=RegExp.$3;var t=RegExp.$4;if(!f){f='*'}var n=new Array;var o=0;for(var h=0;h<c.length;h++){var p;if(f=='*'){p=getAllChildren(c[h])}else{p=c[h].getElementsByTagName(f)}for(var j=0;j<p.length;j++){n[o++]=p[j]}}c=new Array;var q=0;var u;switch(s){case'=':u=function(e){return(e.getAttribute(r)==t)};break;case'~':u=function(e){return(e.getAttribute(r).match(new RegExp('\\b'+t+'\\b')))};break;case'|':u=function(e){return(e.getAttribute(r).match(new RegExp('^'+t+'-?')))};break;case'^':u=function(e){return(e.getAttribute(r).indexOf(t)==0)};break;case'$':u=function(e){return(e.getAttribute(r).lastIndexOf(t)==e.getAttribute(r).length-t.length)};break;case'*':u=function(e){return(e.getAttribute(r).indexOf(t)>-1)};break;default:u=function(e){return e.getAttribute(r)};break}c=new Array;var q=0;for(var k=0;k<n.length;k++){if(u(n[k])){c[q++]=n[k]}}continue}if(!c[0]){return}f=token;var n=new Array;var o=0;for(var h=0;h<c.length;h++){var p=c[h].getElementsByTagName(f);for(var j=0;j<p.length;j++){n[o++]=p[j]}}c=n}return c}

Behaviour.start();

function getAllChildren(e) {
	return e.all ? e.all : e.getElementsByTagName('*');
}

/* That revolting regular expression explained
/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
  \---/  \---/\-------------/    \-------/
    |      |         |               |
    |      |         |           The value
    |      |    ~,|,^,$,* or =
    |   Attribute
   Tag
*/