/* ################################# *\
|               F A C E               |
|  Faruk's Automated CSS Enhancement  |
+-------------------------------------+
| More information can be found here: |
|  http://kurafire.net/projects/face  |
|       http://www.phest.net/         |
\* ################################# */
var face={defSpeed:10,defDelay:100,when:'L',running:false,heartbeat:0,pace:0,level:0,active:{},events:{},delaylist:[],folder:'/',sheet:'face.css',rerun:false,pre:function(id){if(!document.getElementById||!document.getElementsByTagName){return false;}if(!document.getElementById(id)){return false;}face.startid=id;face.css(face.sheet);face.init(id);},init:function(id){var constructs=document.getElementById(id);var nodes=constructs.className.split(':');face.id=id;if(nodes.length<3)return false;if(face.startid!=id){face.changeconstructs(constructs,nodes);}for(var i=0;i<nodes.length;i++){switch(i){case 0:face.type =(nodes[i].toUpperCase()=='C')?'C':'S';break;case 1:face.classname=(nodes[i].match(/[a-z0-9-]+/i))?nodes[i]:false;break;case 2:face.steps=(typeof parseInt(nodes[i])=='number')?nodes[i]:false;break;case 3:face.when =(nodes[i].toUpperCase()!= 'B')?((nodes[i].toUpperCase()=='MO')?'MO':'L'):'L';break;case 4:face.speed=(typeof parseInt(nodes[i])=='number')?parseInt(nodes[i]):faceDefSpeed;break;case 5:face.delay=(typeof parseInt(nodes[i])=='number')?parseInt(nodes[i]):faceDefDelay;break;case 6:face.after=nodes[i].split(",");break;}}if(face.startid==id){if(nodes[3]=='B'){face.rerun=true;}face.changeconstructs(constructs,nodes);}if(face.classname==false||face.steps==false){face.css(face.sheet,'delete');return false;}face.gather(constructs);face.calcpace();if(face.when=='L')face.populate(face.delaylist);},gather:function(elem){var counter=0,i;if(face.type=='S'){elem.setAttribute('id',face.id+'-'+counter);face.delaylist[counter]=face.id+'-'+counter;}else if(face.type=='C'&&elem.hasChildNodes()){for(i=0;i<elem.childNodes.length;i++){if(elem.childNodes[i].nodeType==3||elem.childNodes[i].nodeType==8){continue;} elem.childNodes[i].setAttribute('id',face.id+'-'+counter);if(face.when=='MO'){elem.childNodes[i].onmouseover=function(){face.isactive(this)};}face.delaylist[counter]=face.id+'-'+counter;counter++;}}},populate:function(element){var current,i,j,pacekey,times;if(face.when=='MO'){face.active[element.id]=element.id;}times=element.constructor==Array?element.length:1;for(i=0;i<times;i++){current=element.constructor==Array?element[i]:element.id;pacekey=face.when=='L'?face.heartbeat+face.delay*(i+1):face.heartbeat+face.pace;for(j=0;j<face.steps;j++){pacekey=pacekey+face.pace;if(face.events[pacekey]==undefined||face.events[pacekey]==''){face.events[pacekey]=new Array(current+':'+j);}else{	face.events[pacekey].push(current+':'+j);}}if(face.events[pacekey+face.pace]==undefined||face.events[pacekey+face.pace]==''){face.events[pacekey+face.pace]=new Array(current+':end');}else{face.events[pacekey+face.pace].push(current+':end');}face.level++;}if(face.running==false){face.start();}},start:function(){var result,target;if(face.running==true&&face.level==0){face.stop();return;}face.running=true;if(face.events[face.heartbeat]!=undefined){for(i=0;i<face.events[face.heartbeat].length;i++){result=face.events[face.heartbeat][i].split(':');if(result[1]=='end'){face.level--;delete face.active[result[0]];continue;}target=document.getElementById(result[0]);target.className=face.classname+result[1];}delete face.events[face.heartbeat];}face.heartbeat=face.heartbeat+face.pace;setTimeout(function(){face.start();},face.speed);},stop:function(){face.running=false;if(face.rerun==true&&face.startid==face.id){face.afterlife();}},afterlife:function(){var i;face.rerun=false;if(face.after==undefined){face.init(face.id);}else{for(i=0;face.after.length > i;i++){face.init(face.after[i]);}}},changeconstructs:function(element,nodes){var i=1;var elclass;if(nodes[3].toUpperCase()=='B'){nodes[3]='MO';elclass=nodes[0];while(i<nodes.length){elclass+=':'+nodes[i];i++;}element.className=elclass;}},isactive:function(element){if(face.active[element.id]==undefined||face.active[element.id]==''){face.populate(element);}},calcpace:function(){if(face.when=='MO'){face.pace=face.speed;return;} var x,gcd;var a=face.speed;var b=face.delay;while(b > 0){gcd=a % b;a=b;b=gcd;}face.pace=a;},css:function(sheet,action){var head,link;if(action=='delete'){link=document.getElementById('face');link.parentNode.removeChild(link);return;}head=document.getElementsByTagName('head');link=document.createElement('link');link.setAttribute('media','screen');link.setAttribute('href',face.folder+sheet);link.setAttribute('rel','stylesheet');link.setAttribute('id','face');head[0].appendChild(link);}};window.onload=function(){face.pre("enhance");}