/** * @author Ryan Johnson <http: * @copyright 2008 PersonalGrid Corporation <http: * @package LivePipe UI * @license MIT * @url http: * @require prototype.js */ if(typeof(Control) == 'undefined') Control = {}; var $proc = function(proc){ return typeof(proc) == 'function' ? proc : function(){return proc};}; var $value = function(value){ return typeof(value) == 'function' ? value() : value;}; Object.Event = { extend: function(object){ object._objectEventSetup = function(event_name){ this._observers = this._observers || {}; this._observers[event_name] = this._observers[event_name] || [];}; object.observe = function(event_name,observer){ if(typeof(event_name) == 'string' && typeof(observer) != 'undefined'){ this._objectEventSetup(event_name); if(!this._observers[event_name].include(observer)) this._observers[event_name].push(observer);}else for(var e in event_name) this.observe(e,event_name[e]);}; object.stopObserving = function(event_name,observer){ this._objectEventSetup(event_name); if(event_name && observer) this._observers[event_name] = this._observers[event_name].without(observer); else if(event_name) this._observers[event_name] = []; else this._observers = {};}; object.observeOnce = function(event_name,outer_observer){ var inner_observer = function(){ outer_observer.apply(this,arguments); this.stopObserving(event_name,inner_observer);}.bind(this); this._objectEventSetup(event_name); this._observers[event_name].push(inner_observer);}; object.notify = function(event_name){ this._objectEventSetup(event_name); var collected_return_values = []; var args = $A(arguments).slice(1); try{ for(var i = 0; i < this._observers[event_name].length; ++i) collected_return_values.push(this._observers[event_name][i].apply(this._observers[event_name][i],args) || null);}catch(e){ if(e == $break) return false; else throw e;} return collected_return_values;}; if(object.prototype){ object.prototype._objectEventSetup = object._objectEventSetup; object.prototype.observe = object.observe; object.prototype.stopObserving = object.stopObserving; object.prototype.observeOnce = object.observeOnce; object.prototype.notify = function(event_name){ if(object.notify){ var args = $A(arguments).slice(1); args.unshift(this); args.unshift(event_name); object.notify.apply(object,args);} this._objectEventSetup(event_name); var args = $A(arguments).slice(1); var collected_return_values = []; try{ if(this.options && this.options[event_name] && typeof(this.options[event_name]) == 'function') collected_return_values.push(this.options[event_name].apply(this,args) || null); for(var i = 0; i < this._observers[event_name].length; ++i) collected_return_values.push(this._observers[event_name][i].apply(this._observers[event_name][i],args) || null);}catch(e){ if(e == $break) return false; else throw e;} return collected_return_values;};}} }; Element.addMethods({ observeOnce: function(element,event_name,outer_callback){ var inner_callback = function(){ outer_callback.apply(this,arguments); Element.stopObserving(element,event_name,inner_callback);}; Element.observe(element,event_name,inner_callback);}}); (function(){ function wheel(event){ var delta, element, custom_event; if (event.wheelDelta){ delta = event.wheelDelta / 120;} else if (event.detail){ delta =- event.detail / 3;} if (!delta){ return;} element = Event.extend(event).target; element = Element.extend(element.nodeType === Node.TEXT_NODE ? element.parentNode : element); custom_event = element.fire('mouse:wheel',{ delta: delta }); if (custom_event.stopped){ Event.stop(event); return false;}} document.observe('mousewheel',wheel); document.observe('DOMMouseScroll',wheel);})(); var IframeShim = Class.create({ initialize: function(){ this.element = new Element('iframe',{ style: 'position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);display:none', src: 'javascript:void(0);', frameborder: 0 }); $(document.body).insert(this.element);}, hide: function(){ this.element.hide(); return this;}, show: function(){ this.element.show(); return this;}, positionUnder: function(element){ var element = $(element); var offset = element.cumulativeOffset(); var dimensions = element.getDimensions(); this.element.setStyle({ left: offset[0] + 'px', top: offset[1] + 'px', width: dimensions.width + 'px', height: dimensions.height + 'px', zIndex: element.getStyle('zIndex') - 1 }).show(); return this;}, setBounds: function(bounds){ for(prop in bounds) bounds[prop] += 'px'; this.element.setStyle(bounds); return this;}, destroy: function(){ if(this.element) this.element.remove(); return this;}});
