/** * An adapter for the Shadowbox media viewer and the Yahoo! User Interface (YUI) * JavaScript library. * * This file is part of Shadowbox. * * Shadowbox is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * Shadowbox is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for * more details. * * You should have received a copy of the GNU Lesser General Public License * along with Shadowbox.  If not, see <http://www.gnu.org/licenses/>. * * @author      Michael J. I. Jackson <mjijackson@gmail.com> * @copyright   2007 Michael J. I. Jackson * @license     http://www.gnu.org/licenses/lgpl-3.0.txt GNU LGPL 3.0 * @version     SVN: $Id: shadowbox-yui.js 48 2008-01-26 09:58:25Z mjijackson $ */if(typeof YAHOO == 'undefined'){    throw 'Unable to load Shadowbox, core YUI utilities (yahoo, dom, event, anim) not found.';}// create the Shadowbox object firstvar Shadowbox = {};Shadowbox.lib = function(){    var E = YAHOO.util.Event;    var D = YAHOO.util.Dom;    return {        /**         * Gets the value of the style on the given element.         *         * @param   {HTMLElement}   el      The DOM element         * @param   {String}        style   The name of the style (e.g. margin-top)         * @return  {mixed}                 The value of the given style         * @public         */        getStyle: function(el, style){            return D.getStyle(el, style);        },        /**         * Sets the style on the given element to the given value. May be an         * object to specify multiple values.         *         * @param   {HTMLElement}   el      The DOM element         * @param   {String/Object} style   The name of the style to set if a         *                                  string, or an object of name =>         *                                  value pairs         * @param   {String}        value   The value to set the given style to         * @return  void         * @public         */        setStyle: function(el, style, value){            if(typeof style != 'object'){                var temp = {};                temp[style] = value;                style = temp;            }            for(var s in style){                D.setStyle(el, s, style[s]);            }        },        /**         * Gets a reference to the given element.         *         * @param   {String/HTMLElement}    el      The element to fetch         * @return  {HTMLElement}                   A reference to the element         * @public         */        get: function(el){            return D.get(el);        },        /**         * Removes an element from the DOM.         *         * @param   {HTMLElement}           el      The element to remove         * @return  void         * @public         */        remove: function(el){            el.parentNode.removeChild(el);        },        /**         * Gets the target of the given event. The event object passed will be         * the same object that is passed to listeners registered with         * addEvent().         *         * @param   {mixed}                 e       The event object         * @return  {HTMLElement}                   The event's target element         * @public         */        getTarget: function(e){            return E.getTarget(e.browserEvent || e);        },        /**         * Prevents the event's default behavior. The event object passed will         * be the same object that is passed to listeners registered with         * addEvent().         *         * @param   {mixed}                 e       The event object         * @return  void         * @public         */        preventDefault: function(e){            E.preventDefault(e.browserEvent || e);        },        /**         * Adds an event listener to the given element. It is expected that this         * function will be passed the event as its first argument.         *         * @param   {HTMLElement}   el          The DOM element to listen to         * @param   {String}        name        The name of the event to register         *                                      (i.e. 'click', 'scroll', etc.)         * @param   {Function}      handler     The event handler function         * @return  void         * @public         */        addEvent: function(el, name, handler){            E.addListener(el, name, handler);        },        /**         * Removes an event listener from the given element.         *         * @param   {HTMLElement}   el          The DOM element to stop listening to         * @param   {String}        name        The name of the event to stop         *                                      listening for (i.e. 'click')         * @param   {Function}      handler     The event handler function         * @return  void         * @public         */        removeEvent: function(el, name, handler){            E.removeListener(el, name, handler);        },        /**         * Animates numerous styles of the given element. The second parameter         * of this function will be an object of the type that is expected by         * YAHOO.util.Anim. See http://developer.yahoo.com/yui/docs/YAHOO.util.Anim.html         * for more information.         *         * @param   {HTMLElement}   el          The DOM element to animate         * @param   {Object}        obj         The animation attributes/parameters         * @param   {Number}        duration    The duration of the animation         *                                      (in seconds)         * @param   {Function}      callback    A callback function to call when         *                                      the animation completes         * @return  void         * @public         */        animate: function(el, obj, duration, callback){            var anim = new YAHOO.util.Anim(el, obj, duration, YAHOO.util.Easing.easeOut);            if(typeof callback == 'function'){                var f = function(){                    anim.onComplete.unsubscribe(f);                    callback.call(anim, anim);                };                anim.onComplete.subscribe(f, anim, true);            }            anim.animate();        }    };}();
