Liferay.Animate = function(id, fn, data) {/* id - unique identifier for this process * fn - animation function * data - object that is passed to the animation function * data.delay - assign a number (in milliseconds) to this property *				to delay the start of the animation process */var lib = Liferay.Animate;if (!lib.q[id]) {lib.q[id] = {"id": id, "fn": fn, "data": data};}if (!lib.timer) {lib.start();}};Liferay.Animate.extendNativeFunctionObject({q: new Object,timer: 0,process: function() {var processed = false;for (var i in this.q) {var item = this.q[i];if (item) {var rt = item.fn(item.data);if (rt == false) {this.q[i] = null;}processed = true;}}if (!processed) {this.stop();}},start: function() {var lib = Liferay.Animate;if (!lib.timer) {Liferay.Animate.process();Liferay.Animate.timer = setInterval("Liferay.Animate.process()", 30);}},stop: function() {clearInterval(Liferay.Animate.timer);Liferay.Animate.timer = 0;}});