function addEvent(a,b,c){ //Attach event to a DOM node. //Ex. addEvent(node,'click',function); return (a.addEventListener)?a.addEventListener(b,c,false):(a.attachEvent)?a.attachEvent('on'+b,c):false; } function removeEvent(a,b,c){ //Detach event from a DOM node. //Ex. removeEvent(node,'click',function); return (a.removeEventListener)?a.removeEventListener(b,c,false):(a.detachEvent)?a.detachEvent('on'+b,c):false; } function cancelEvent(e){ //Cancel current event. //Ex. cancelEvent(event); if(!e)var e=window.event;(e.preventDefault)?e.preventDefault():e.returnValue=false; } function getEventTarget(e){ //Return target DOM node on which the event is triggered. //Ex. getEventTarget(event); if(!e)var e=window.event;return (e.target&&e.target.nodeType==3)?e.target.parentNode:(e.target)?e.target:e.srcElement; } function getStyle(a,b){ //Return the value of the computed style on a DOM node. //Ex. getStyle(node,'padding-bottom'); if(window.getComputedStyle)return document.defaultView.getComputedStyle(a,null).getPropertyValue(b); var n=b.indexOf('-'); if(n!==-1)b=b.substr(0,n)+b.substr(n+1,1).toUpperCase()+b.substr(n+2); return a.currentStyle[b]; } function getWidth(a){ //Return the integer value of the computed width of a DOM node. //Ex. getWidth(node); var w=getStyle(a,'width'); if(w.indexOf('px')!==-1)return parseInt(w.replace('px','')); var p=[getStyle(a,'padding-top'),getStyle(a,'padding-right'),getStyle(a,'padding-bottom'),getStyle(a,'padding-left')]; for(var i=0;i<4;i++){ if(p[i].indexOf('px')!==-1)p[i]=parseInt(p[i]); else p[i]=0; } return Math.max(0,a.offsetWidth-p[1]-p[3]); } function getHeight(a){ //Return the integer value of the computed height of a DOM node. //Ex. getHeight(node); var h=getStyle(a,'height'); if(h.indexOf('px')!==-1)return parseInt(h.replace('px','')); var p=[getStyle(a,'padding-top'),getStyle(a,'padding-right'),getStyle(a,'padding-bottom'),getStyle(a,'padding-left')]; for(var i=0;i<4;i++){ if(p[i].indexOf('px')!==-1)p[i]=parseInt(p[i]); else p[i]=0; } return Math.max(0,a.offsetHeight-p[0]-p[2]); } function supportsSVG(){ //Return true if the browser supports SVG. //Ex. if(!supportsSVG()){..apply png fallback..} //Old FF 3.5 and Safari 3 versions have svg support, but a very poor one //http://www.w3.org/TR/SVG11/feature#Image Defeat FF 3.5 only //http://www.w3.org/TR/SVG11/feature#Animation Defeat Saf 3 but also returns false in IE9 //http://www.w3.org/TR/SVG11/feature#BasicGraphicsAttribute Defeat Saf 3 but also returns false in Chrome and safari4 //http://www.w3.org/TR/SVG11/feature#Text Defeat Saf 3 but also returns false in FF and safari4 if(!document.createElementNS||!document.createElementNS('http://www.w3.org/2000/svg','svg').createSVGRect)return false; if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"))return false; if(!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicGraphicsAttribute","1.1")&&!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Animation","1.1")&&!document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Text","1.1"))return false; return true; } function fallbackSVG(){ //Replace all images extensions from .svg to .png if browser doesn't support SVG files. if(supportsSVG())return; for(var i=0,nd=document.getElementsByTagName('*'),n=nd.length;i