// blur.js var blur = new _blur(); function _blur() { var blur = new Object(); this.initialise = initialise; this.start = start; this.stop = stop; this.animate = animate; function initialise(parameters) { var image = document.images[parameters["image"]]; var imageLeft = 0, imageTop = 0, imageWidth = 0, imageHeight = 0; try { imageWidth = image.offsetWidth; imageHeight = image.offsetHeight; imageLeft = image.offsetLeft; imageTop = image.offsetTop; while(image.offsetParent) { imageLeft += image.offsetParent.offsetLeft; imageTop += image.offsetParent.offsetTop; image = image.offsetParent; } } catch(e) {} for (var i in parameters["blur"]) { blur[i] = new __blur(); blur[i].initialise({id: i, left: imageLeft, top: imageTop, width: imageWidth, height: imageHeight, blur: parameters["blur"][i]}); } } function start() { for (var i in blur) { blur[i].start(); } } function stop() { for (var i in blur) { blur[i].stop(); } } function animate(id) { blur[id].animate(); } function __blur() { var _timer, _interval, _index, _style, _frames, _id, _div; this.initialise = initialise; this.start = start; this.stop = stop; this.animate = animate; function initialise(parameters) { var blurParameters = parameters["blur"]; _id = parameters["id"]; _interval = Math.ceil(1000 / blurParameters["framesPerSecond"]); _frames = Math.ceil(blurParameters["time"] / 1000 * blurParameters["framesPerSecond"]); _style = new Array(_frames); for (var i = 0; i < _frames; i++) { _style[i] = new Object(); } var startLeft = blurParameters["startLeft"] * parameters["width"] / 100 + parameters["left"]; var endLeft = blurParameters["endLeft"] * parameters["width"] / 100 + parameters["left"]; switch(blurParameters["calcLeft"]) { case "linear": linear("left", startLeft, endLeft - startLeft, _frames); break; default: break; } for (var i = 0; i < _frames; i++) { _style[i]["left"] = Math.min(Math.ceil(_style[i]["left"]), parameters["left"] + parameters["width"]) + "px"; } var startWidth = blurParameters["startWidth"] * parameters["width"] / 100; var endWidth = blurParameters["endWidth"] * parameters["width"] / 100; switch(blurParameters["calcWidth"]) { case "linear": linear("width", startWidth, endWidth - startWidth, _frames); break; default: break; } for (var i = 0; i < _frames; i++) { _style[i]["width"] = Math.ceil(Math.min(_style[i]["width"], parameters["left"] + parameters["width"] - parseInt(_style[i]["left"], 10))) + "px"; } switch(blurParameters["calcOpacity"]) { case "linear": linear("opacity", blurParameters["startOpacity"], blurParameters["endOpacity"] - blurParameters["startOpacity"], _frames); break; default: break; } for (var i = 0; i < _frames; i++) { _style[i]["-moz-opacity"] = _style[i]["opacity"]; _style[i]["filter"] = "alpha(opacity=" + Math.ceil(100 * _style[i]["opacity"]) + ")"; } _style[0]["display"] = "block"; _style[0]["height"] = parameters["height"]; _style[0]["top"] = parameters["top"]; _style[_frames - 1]["display"] = "none"; _div = document.createElement("DIV"); _div.className = "blur"; document.getElementsByTagName("BODY")[0].appendChild(_div); } function linear(style, start, move, steps) { for (var i = 0; i < steps; i++) { _style[i][style] = move * i / steps + start; } } function start() { _index = 0; animate(); } function stop() { clearTimeout(_timer); _index = _frames - 1; animate(); } function animate() { for (style in _style[_index]) { _div.style[style] = _style[_index][style]; } _index++; if (_index < _frames) { _timer = setTimeout("blur.animate(" + _id + ");", _interval); } } return this; } return this; }