function setOpacity(a,b){b=(b==1)?0.99999:b;a.style.opacity=b;a.style.filter='alpha(opacity='+b*100+')';a.style.MozOpacity=b;a.style.KhtmlOpacity=b}function fade(a,b,c,d){this.elem=a||document.body;this.to=b!==undefined?b:1;var e=this.elem.style;this.from=(c===undefined?(!e.opacity&&e.opacity!==0?(this.to>0?0:1):parseFloat(e.opacity)):c);d=d||{};this.duration=d.duration||500;this.frameRate=d.frameRate||30;this.onFinish=d.onFinish;this.totalFrames=Math.ceil(this.duration/1000*this.frameRate);this.perFrame=(this.to-this.from)/this.totalFrames;this.frameNb=0;var f=this;this.next=function(){this.prog=setTimeout(function(){f.frame()},1000/this.frameRate)};this.frame=function(){setOpacity(this.elem,this.from+this.perFrame*this.frameNb);if(this.frameNb===this.totalFrames){setOpacity(this.elem,this.to);if(typeof this.onFinish=='function'){setTimeout(this.onFinish,1)}}else{this.frameNb++;this.next()}};this.next()}