var Shadowbox = function(){
    var ua = navigator.userAgent.toLowerCase(), 
       S = {version: "3.0b", 
       adapter: null, 
       current: - 1, 
       gallery:[], 
       cache:[], 
       content: null, 
       dimensions: null, 
       plugins: null, 
       path: "", 
       options: 
    {adapter: null, animate: true, animateFade: true, autoplayMovies: true, autoDimensions: false, continuous: false, counterLimit: 10, counterType: "default", displayCounter: true, displayNav: true, ease: function(x){
        return 1 + Math.pow(x - 1, 3);
    }
    , enableKeys: true, errors: {fla: {name: "Flash", url: "http://www.adobe.com/products/flashplayer/"}, qt: {name: "QuickTime", url: "http://www.apple.com/quicktime/download/"}, wmp: {name: "Windows Media Player", url: "http://www.microsoft.com/windows/windowsmedia/"}, f4m: {name: "Flip4Mac", url: "http://www.flip4mac.com/wmv_download.htm"}}, ext: {img:["png", "jpg", "jpeg", "gif", "bmp"], swf:["swf"], flv:["flv"], qt:["dv", "mov", "moov", "movie", "mp4"], wmp:["asf", "wm", "wmv"], qtwmp:["avi", "mpg", "mpeg"], iframe:["asp", "aspx", "cgi", "cfm", "htm", "html", "jsp", "pl", "php", "php3", "php4", "php5", "phtml", "rb", "rhtml", "shtml", "txt", "vbs"]}, fadeDuration: 0.35, flashParams: {bgcolor: "#000000", allowFullScreen: true}, flashVars: {}, flashVersion: "9.0.115", handleOversize: "resize", handleUnsupported: "link", initialHeight: 160, initialWidth: 320, language: "en", modal: false, onChange: null, onClose: null, onFinish: null, onOpen: null, overlayColor: "#000", overlayOpacity: 0.8, players:["img"], resizeDuration: 0.35, showOverlay: true, showMovieControls: true, skipSetup: false, slideshowDelay: 0, useSizzle: true, viewportPadding: 20}, 
       client: {isIE: ua.indexOf("msie") > - 1, isIE6: ua.indexOf("msie 6") > - 1, isIE7: ua.indexOf("msie 7") > - 1, isGecko: ua.indexOf("gecko") > - 1 && ua.indexOf("safari") == - 1, isWebkit: ua.indexOf("applewebkit/") > - 1, isWindows: ua.indexOf("windows") > - 1 || ua.indexOf("win32") > - 1, isMac: ua.indexOf("macintosh") > - 1 || ua.indexOf("mac os x") > - 1, isLinux: ua.indexOf("linux") > - 1}, 
       regex: {domain:/:\/\/(.*?)[:\/]/, inline: /#(.+)$/, rel: /^(light|shadow)box/i, gallery: /^(light|shadow)box\[(.*?)\]/i, unsupported: /^unsupported-(\w+)/, param: /\s*([a-z_]*?)\s*=\s*(.+)\s*/}, 
       libraries: 
    {Prototype: "prototype", jQuery: "jquery", MooTools: "mootools", YAHOO: "yui", dojo: "dojo", Ext: "ext"}, 
       applyOptions: function(opts){
        if (opts){
            default_options = apply({}, S.options);
            
            apply(S.options, opts);
        }
    }
    , 
       buildCacheObj: function(link, 
       opts){
        var href = link.href, obj = {el: link, title: link.getAttribute("title"), options: apply({}, opts || {}), content: href};
        each(["player", "title", "height", "width", "gallery"], function(o){
            if (typeof obj.options[o] != "undefined"){
                obj[o] = obj.options[o];
                delete obj.options[o];
            }
        });
        if ( ! obj.player){
            obj.player = getPlayer(href);
        }
        var rel = link.getAttribute("rel");
        if (rel){
            var m = rel.match(S.regex.gallery);
            if (m){
                obj.gallery = escape(m[2]);
            }
            each(rel.split(";"), function(p){
                m = p.match(S.regex.param);
                if (m){
                    if (m[1] == "options"){
                        eval ("apply(obj.options," + m[2] +")");
                    }
                    else {
                        obj[m[1]] = m[2];
                    }
                }
            });
        }
        
        return obj;
    }
    , 
       change: function(n){
        if ( ! S.gallery){
            return;
        }
        if ( ! S.gallery[n]){
            if ( ! S.options.continuous){
                return;
            }
            else {
                n = n < 0 ? S.gallery.length - 1: 0;
            }
        }
        S.current = n;
        if (typeof slide_timer == "number"){
            clearTimeout(slide_timer);
            slide_timer = null;
            slide_delay = slide_start = 0;
        }
        if (S.options.onChange){
            S.options.onChange();
        }
        
        loadContent();
    }
    , 
       clearCache: function(){
        each(S.cache, function(obj){
            if (obj.el){
                S.lib.removeEvent(obj.el, "click", handleClick);
            }
        });
        
        S.cache =[];
    }
    , 
       close: function(){
        if ( ! active){
            return;
        }
        active = false;
        listenKeys(false);
        if (S.content){
            S.content.remove();
            S.content = null;
        }
        if (typeof slide_timer == "number"){
            clearTimeout(slide_timer);
        }
        slide_timer = null;
        slide_delay = 0;
        if (S.options.onClose){
            S.options.onClose();
        }
        S.skin.onClose();
        S.revertOptions();
        each(v_cache, function(c){
            
            c[0].style.visibility = c[1];
        });
    }
    , 
       contentId: function(){
        
        return content_id;
    }
    , 
       getCounter: function(){
        var len = S.gallery.length;
        if (S.options.counterType == "skip"){
            var c =[], i = 0, end = len, limit = parseInt(S.options.counterLimit) || 0;
            if (limit < len && limit > 2){
                var h = Math.floor(limit / 2);
                i = S.current - h;
                if (i < 0){
                    i += len;
                }
                end = S.current + (limit - h);
                if (end > len){
                    end -= len;
                }
            }
            while (i != end){
                if (i == len){
                    i = 0;
                }
                c.push(i++);
            }
        }
        else {
            var c = (S.current + 1) + " " + S.lang.of + " " + len;
        }
        
        return c;
    }
    , 
       getCurrent: function(){
        
        return S.current > - 1 ? S.gallery[S.current]: null;
    }
    , 
       hasNext: function(){
        
        return S.gallery.length > 1 && (S.current != S.gallery.length - 1 || S.options.continuous);
    }
    , 
       init: function(opts){
        if (initialized){
            return;
        }
        initialized = true;
        opts = opts || {};
        init_options = opts;
        if (opts){
            apply(S.options, opts);
        }
        for (var e in S.options.ext){
            S.regex[e] = new RegExp(".(" + S.options.ext[e].join( "|") +")s*$", "i");
        }
        if ( ! S.path){
            var path_re = /(.+)shadowbox\.js/i, path;
            each(document.getElementsByTagName("script"), function(s){
                if ((path = path_re.exec(s.src)) != null){
                    S.path = path[1];
                    return false;
                }
            });
        }
        if (S.options.adapter){
            S.adapter = S.options.adapter;
        }
        else {
            for (var lib in S.libraries){
                if (typeof window[lib] != "undefined"){
                    S.adapter = S.libraries[lib];
                    break;
                }
            }
            if ( ! S.adapter){
                S.adapter = "base";
            }
        }
        if (S.options.useSizzle && ! window.Sizzle){
            U.include(S.path + "libraries/sizzle/sizzle.js");
        }
        if ( ! S.lang){
            U.include(S.path + "languages/shadowbox-" + S.options.language +".js");
        }
        each(S.options.players, function(p){
            if ((p == "swf" || p == "flv") && ! window.swfobject){
                U.include(S.path + "libraries/swfobject/swfobject.js");
            }
            if ( ! S[p]){
                U.include(S.path + "players/shadowbox-" + p +".js");
            }
        });
        if ( ! S.lib){
            
            U.include(S.path + "adapters/shadowbox-" + S.adapter +".js");
        }
    }
    , 
       isActive: function(){
        
        return active;
    }
    , 
       isPaused: function(){
        
        return slide_timer == "paused";
    }
    , 
       load: function(){
        if (S.skin.options){
            apply(S.options, S.skin.options);
            apply(S.options, init_options);
        }
        var markup = S.skin.markup.replace(/\{(\w+)\}/g, function(m, p){
            return S.lang[p];
        });
        S.lib.append(document.body, markup);
        if (S.skin.init){
            S.skin.init();
        }
        var id;
        S.lib.addEvent(window, "resize", function(){
            if (id){
                clearTimeout(id);
                id = null;
            }
            if (active){
                id = setTimeout(function(){
                    if (S.skin.onWindowResize){
                        S.skin.onWindowResize();
                    }
                    var c = S.content;
                    if (c && c.onWindowResize){
                        c.onWindowResize();
                    }
                }, 50);
            }
        });
        if ( ! S.options.skipSetup){
            
            S.setup();
        }
    }
    , 
       next: function(){
        
        S.change(S.current + 1);
    }
    , 
       open: function(obj){
        if (U.isLink(obj)){
            obj = S.buildCacheObj(obj);
        }
        if (obj.constructor == Array){
            S.gallery = obj;
            S.current = 0;
        }
        else {
            if ( ! obj.gallery){
                S.gallery =[obj];
                S.current = 0;
            }
            else {
                S.current = null;
                S.gallery =[];
                each(S.cache, function(c){
                    if (c.gallery && c.gallery == obj.gallery){
                        if (S.current == null && c.content == obj.content && c.title == obj.title){
                            S.current = S.gallery.length;
                        }
                        S.gallery.push(c);
                    }
                });
                if (S.current == null){
                    S.gallery.unshift(obj);
                    S.current = 0;
                }
            }
        }
        obj = S.getCurrent();
        if (obj.options){
            S.revertOptions();
            S.applyOptions(obj.options);
        }
        var g, r, m, s, a, oe = S.options.errors, msg, el;
        for (var i = 0;i < S.gallery.length; ++ i){
            g = S.gallery[i] = apply({}, S.gallery[i]);
            r = false;
            if (g.player == "unsupported"){
                r = true;
            }
            else {
                if (m = S.regex.unsupported.exec(g.player)){
                    if (S.options.handleUnsupported == "link"){
                        g.player = "html";
                        switch (m[1]){
                            case "qtwmp": 
                                s = "either";
                                a =[oe.qt.url, oe.qt.name, oe.wmp.url, oe.wmp.name];
                                break;
                            case "qtf4m": 
                                s = "shared";
                                a =[oe.qt.url, oe.qt.name, oe.f4m.url, oe.f4m.name];
                                break;
                            default: 
                                s = "single";
                                if (m[1] == "swf" || m[1] == "flv"){
                                    m[1] = "fla";
                                }
                                a =[oe[m[1]].url, oe[m[1]].name];
                        }
                        msg = S.lang.errors[s].replace(/\{(\d+)\}/g, function(m, n){
                            return a[n];
                        });
                        g.content = '<div class="sb-message">' + msg + "</div>";
                    }
                    else {
                        r = true;
                    }
                }
                else {
                    if (g.player == "inline"){
                        m = S.regex.inline.exec(g.content);
                        if (m){
                            var el = U.get(m[1]);
                            if (el){
                                g.content = el.innerHTML;
                            }
                            else {
                                throw "Cannot find element with id " + m[1];
                            }
                        }
                        else {
                            throw "Cannot find element id for inline content";
                        }
                    }
                    else {
                        if (g.player == "swf" || g.player == "flv"){
                            var version = (g.options && g.options.flashVersion) || S.options.flashVersion;
                            if ( ! swfobject.hasFlashPlayerVersion(version)){
                                g.width = 310;
                                g.height = 177;
                            }
                        }
                    }
                }
            }
            if (r){
                S.gallery.splice(i, 1);
                if (i < S.current){
                    -- S.current;
                }
                else {
                    if (i == S.current){
                        S.current = i > 0 ? i - 1: i;
                    }
                }
                -- i;
            }
        }
        if (S.gallery.length){
            if ( ! active){
                if (typeof S.options.onOpen == "function" && S.options.onOpen(obj) === false){
                    return;
                }
                v_cache =[];
                each(["select", "object", "embed", "canvas"], function(tag){
                    each(document.getElementsByTagName(tag), function(el){
                        v_cache.push([el, el.style.visibility || "visible"]);
                        el.style.visibility = "hidden";
                    });
                });
                var h = S.options.autoDimensions && "height" in obj ? obj.height: S.options.initialHeight;
                var w = S.options.autoDimensions && "width" in obj ? obj.width: S.options.initialWidth;
                S.skin.onOpen(h, w, loadContent);
            }
            else {
                loadContent();
            }
            
            active = true;
        }
    }
    , 
       pause: function(){
        if (typeof slide_timer != "number"){
            return;
        }
        var time = new Date().getTime();
        slide_delay = Math.max(0, slide_delay - (time - slide_start));
        if (slide_delay){
            clearTimeout(slide_timer);
            slide_timer = "paused";
            if (S.skin.onPause){
                
                S.skin.onPause();
            }
        }
    }
    , 
       play: function(){
        if ( ! S.hasNext()){
            return;
        }
        if ( ! slide_delay){
            slide_delay = S.options.slideshowDelay * 1000;
        }
        if (slide_delay){
            slide_start = new Date().getTime();
            slide_timer = setTimeout(function(){
                slide_delay = slide_start = 0;
                S.next();
            }, slide_delay);
            if (S.skin.onPlay){
                
                S.skin.onPlay();
            }
        }
    }
    , 
       previous: function(){
        
        S.change(S.current - 1);
    }
    , 
       revertOptions: function(){
        
        apply(S.options, default_options);
    }
    , 
       setDimensions: function(height, 
       width, 
       max_h, 
       max_w, 
       tb, 
       lr, 
       resizable){
        var h = height = parseInt(height), w = width = parseInt(width), pad = parseInt(S.options.viewportPadding) || 0;
        var extra_h = 2 * pad + tb;
        if (h + extra_h >= max_h){
            h = max_h - extra_h;
        }
        var extra_w = 2 * pad + lr;
        if (w + extra_w >= max_w){
            w = max_w - extra_w;
        }
        var resize_h = height, resize_w = width, change_h = (height - h) / height, change_w = (width - w) / width, oversized = (change_h > 0 || change_w > 0);
        if (resizable && oversized && S.options.handleOversize == "resize"){
            if (change_h > change_w){
                w = Math.round((width / height) * h);
            }
            else {
                if (change_w > change_h){
                    h = Math.round((height / width) * w);
                }
            }
            resize_w = w;
            resize_h = h;
        }
        S.dimensions = {height: h + tb, width: w + lr, inner_h: h, inner_w: w, top: (max_h - (h + extra_h)) / 2 + pad, left: (max_w - (w + extra_w)) / 2 + pad, oversized: oversized, resize_h: resize_h, resize_w: resize_w};
        
        return S.dimensions;
    }
    , 
       setup: function(links, 
       opts){
        if ( ! links){
            var links =[], rel;
            each(document.getElementsByTagName("a"), function(a){
                rel = a.getAttribute("rel");
                if (rel && S.regex.rel.test(rel)){
                    links.push(a);
                }
            });
        }
        else {
            var len = links.length;
            if (len){
                if (window.Sizzle){
                    if (typeof links == "string"){
                        links = Sizzle(links);
                    }
                    else {
                        if (len == 2 && links.push && typeof links[0] == "string" && links[1].nodeType){
                            links = Sizzle(links[0], links[1]);
                        }
                    }
                }
            }
            else {
                links =[links];
            }
        }
        each(links, function(link){
            if (typeof link.shadowboxCacheKey == "undefined"){
                link.shadowboxCacheKey = S.cache.length;
                S.lib.addEvent(link, "click", handleClick);
            }
            S.cache[link.shadowboxCacheKey] = S.buildCacheObj(link, opts);
        });
    }
    }, 
       U = S.util = 
    {animate: function(el, p, to, d, cb){
        var from = parseFloat(S.lib.getStyle(el, p));
        if (isNaN(from)){
            from = 0;
        }
        var delta = to - from;
        if (delta == 0){
            if (cb){
                cb();
            }
            return;
        }
        var op = p == "opacity";
        
        function fn(ease){
            var to = from + ease * delta;
            if (op){
                U.setOpacity(el, to);
            }
            else {
                el.style[p] = to + "px";
            }
        }
        if ( ! d || ( ! op && ! S.options.animate) || (op && ! S.options.animateFade)){
            fn(1);
            if (cb){
                cb();
            }
            return;
        }
        d *= 1000;
        var begin = new Date().getTime(), end = begin + d, time, timer = setInterval(function(){
            time = new Date().getTime();
            if (time >= end){
                clearInterval(timer);
                fn(1);
                if (cb){
                    cb();
                }
            }
            else {
                
                fn(S.options.ease((time - begin) / d));
            }
        }, 10);
    }
    , apply: function(o, e){
        for (var p in e){
            o[p] = e[p];
        }
        
        return o;
    }
    , clearOpacity: function(el){
        var s = el.style;
        if (window.ActiveXObject){
            if (typeof s.filter == "string" && (/alpha/i).test(s.filter)){
                s.filter = s.filter.replace(/[\w\.]*alpha\(.*?\);?/i, "");
            }
        }
        else {
            
            s.opacity = "";
        }
    }
    , each: function(obj, fn, scope){
        for (var i = 0, len = obj.length;i < len; ++ i){
            if (fn.call(scope || obj[i], obj[i], i, obj) === false){
                
                return;
            }
        }
    }
    , get: function(id){
        
        return document.getElementById(id);
    }
    , include: function(){
        var includes = {};
        return function(file){
            if (includes[file]){
                return;
            }
            includes[file] = true;
            
            document.write( '<script type="text/javascript" src="' + file + '"><\/script>');
        };
    }
    (), isLink: function(obj){
        if ( ! obj || ! obj.tagName){
            return false;
        }
        var up = obj.tagName.toUpperCase();
        
        return up == "A" || up == "AREA";
    }
    , removeChildren: function(el){
        while (el.firstChild){
            
            el.removeChild(el.firstChild);
        }
    }
    , setOpacity: function(el, o){
        var s = el.style;
        if (window.ActiveXObject){
            s.zoom = 1;
            s.filter = (s.filter || "").replace(/\s*alpha\([^\)]*\)/gi, "") + (o == 1 ? "": " alpha(opacity=" + (o * 100) +")");
        }
        else {
            s.opacity = o;
        }
    }
    }, 
       apply = U.apply, 
       each = U.each, 
       init_options, 
       initialized = false, 
       default_options = {}, 
       content_id = "sb-content", 
       active = false, 
       slide_timer, 
       slide_start, 
       slide_delay = 0, 
       v_cache =[];
    if (navigator.plugins && navigator.plugins.length){
        var names =[];
        each(navigator.plugins, function(p){
            names.push(p.name);
        });
        names = names.join();
        
        var detectPlugin = function(n){
            return names.indexOf(n) > - 1;
        };
        var f4m = detectPlugin("Flip4Mac");
        S.plugins = {fla: detectPlugin("Shockwave Flash"), qt: detectPlugin("QuickTime"), wmp: ! f4m && detectPlugin("Windows Media"), f4m: f4m};
    }
    else {
        
        function detectPlugin(n){
            try {
                var axo = new ActiveXObject(n);
            }
            catch (e){}
            return ! ! axo;
        }
        S.plugins = {fla: detectPlugin("ShockwaveFlash.ShockwaveFlash"), qt: detectPlugin("QuickTime.QuickTime"), wmp: detectPlugin("wmplayer.ocx"), f4m: false};
    }
    
    function getPlayer(url){
        var re = S.regex, p = S.plugins, m = url.match(re.domain), d = m && document.domain == m[1];
        if (url.indexOf("#") > - 1 && d){
            return "inline";
        }
        var q = url.indexOf( "?");
        if (q > - 1){
            url = url.substring(0, q);
        }
        if (re.img.test(url)){
            return "img";
        }
        if (re.swf.test(url)){
            return p.fla ? "swf": "unsupported-swf";
        }
        if (re.flv.test(url)){
            return p.fla ? "flv": "unsupported-flv";
        }
        if (re.qt.test(url)){
            return p.qt ? "qt": "unsupported-qt";
        }
        if (re.wmp.test(url)){
            if (p.wmp){
                return "wmp";
            }
            if (p.f4m){
                return "qt";
            }
            if (S.client.isMac){
                return p.qt ? "unsupported-f4m": "unsupported-qtf4m";
            }
            return "unsupported-wmp";
        }
        if (re.qtwmp.test(url)){
            if (p.qt){
                return "qt";
            }
            if (p.wmp){
                return "wmp";
            }
            return S.client.isMac ? "unsupported-qt": "unsupported-qtwmp";
        }
        if ( ! d || re.iframe.test(url)){
            return "iframe";
        }
        return "unsupported";
    }
    
    function handleClick(e){
        var link;
        if (U.isLink(this)){
            link = this;
        }
        else {
            link = S.lib.getTarget(e);
            while ( ! U.isLink(link) && link.parentNode){
                link = link.parentNode;
            }
        }
        if (link){
            var key = link.shadowboxCacheKey;
            if (typeof key != "undefined" && typeof S.cache[key] != "undefined"){
                link = S.cache[key];
            }
            S.open(link);
            if (S.gallery.length){
                S.lib.preventDefault(e);
            }
        }
    }
    
    function listenKeys(on){
        if ( ! S.options.enableKeys){
            return;
        }
        S.lib[(on ? "add": "remove") + "Event"](document, "keydown", handleKey);
    }
    
    function handleKey(e){
        var code = S.lib.keyCode(e);
        S.lib.preventDefault(e);
        switch (code){
            case 81: 
            case 88: 
            case 27: 
                S.close();
                break;
            case 37: 
                S.previous();
                break;
            case 39: 
                S.next();
                break;
            case 32: 
                S[(typeof slide_timer == "number" ? "pause": "play")]();
        }
    }
    
    function loadContent(){
        var obj = S.getCurrent();
        if ( ! obj){
            return;
        }
        var p = obj.player == "inline" ? "html": obj.player;
        if (typeof S[p] != "function"){
            throw "Unknown player: " + p;
        }
        var change = false;
        if (S.content){
            S.content.remove();
            change = true;
            S.revertOptions();
            if (obj.options){
                S.applyOptions(obj.options);
            }
        }
        U.removeChildren(S.skin.bodyEl());
        S.content = new S[p](obj);
        listenKeys(false);
        S.skin.onLoad(S.content, change, function(){
            if ( ! S.content){
                return;
            }
            if (typeof S.content.ready != "undefined"){
                var id = setInterval(function(){
                    if (S.content){
                        if (S.content.ready){
                            clearInterval(id);
                            id = null;
                            S.skin.onReady(contentReady);
                        }
                    }
                    else {
                        clearInterval(id);
                        id = null;
                    }
                }, 100);
            }
            else {
                S.skin.onReady(contentReady);
            }
        });
        if (S.gallery.length > 1){
            var next = S.gallery[S.current + 1] || S.gallery[0];
            if (next.player == "img"){
                var a = new Image();
                a.src = next.content;
            }
            var prev = S.gallery[S.current - 1] || S.gallery[S.gallery.length - 1];
            if (prev.player == "img"){
                var b = new Image();
                b.src = prev.content;
            }
        }
    }
    
    function contentReady(){
        if ( ! S.content){
            return;
        }
        S.content.append(S.skin.bodyEl(), content_id, S.dimensions);
        S.skin.onFinish(finishContent);
    }
    
    function finishContent(){
        if ( ! S.content){
            return;
        }
        if (S.content.onLoad){
            S.content.onLoad();
        }
        if (S.options.onFinish){
            S.options.onFinish();
        }
        if ( ! S.isPaused()){
            S.play();
        }
        listenKeys(true);
    }
    return S;
}();
 
 Shadowbox.skin = function(){
    var e = Shadowbox, d = e.util, o = false, k =["sb-nav-close", "sb-nav-next", "sb-nav-play", "sb-nav-pause", "sb-nav-previous"];
    
    function l(){
        d.get("sb-container").style.top = document.documentElement.scrollTop + "px";
    }
    
    function g(p){
        var q = d.get("sb-overlay"), r = d.get("sb-container"), t = d.get("sb-wrapper");
        if (p){
            if (e.client.isIE6){
                l();
                e.lib.addEvent(window, "scroll", l);
            }
            if (e.options.showOverlay){
                o = true;
                q.style.backgroundColor = e.options.overlayColor;
                d.setOpacity(q, 0);
                if ( ! e.options.modal){
                    e.lib.addEvent(q, "click", e.close);
                }
                t.style.display = "none";
            }
            r.style.visibility = "visible";
            if (o){
                var s = parseFloat(e.options.overlayOpacity);
                d.animate(q, "opacity", s, e.options.fadeDuration, p);
            }
            else {
                p();
            }
        }
        else {
            if (e.client.isIE6){
                e.lib.removeEvent(window, "scroll", l);
            }
            e.lib.removeEvent(q, "click", e.close);
            if (o){
                t.style.display = "none";
                d.animate(q, "opacity", 0, e.options.fadeDuration, function(){
                    r.style.display = "";
                    t.style.display = "";
                    d.clearOpacity(q);
                });
            }
            else {
                r.style.visibility = "hidden";
            }
        }
    }
    
    function b(r, p){
        var q = d.get("sb-nav-" + r);
        if (q){
            q.style.display = p ? "": "none";
        }
    }
    
    function i(r, q){
        var t = d.get("sb-loading"), v = e.getCurrent().player, u = (v == "img" || v == "html");
        if (r){
            
            function s(){
                d.clearOpacity(t);
                if (q){
                    q();
                }
            }
            d.setOpacity(t, 0);
            t.style.display = "";
            if (u){
                d.animate(t, "opacity", 1, e.options.fadeDuration, s);
            }
            else {
                s();
            }
        }
        else {
            
            function s(){
                t.style.display = "none";
                d.clearOpacity(t);
                if (q){
                    q();
                }
            }
            if (u){
                d.animate(t, "opacity", 0, e.options.fadeDuration, s);
            }
            else {
                s();
            }
        }
    }
    
    function a(s){
        var u = e.getCurrent();
        d.get("sb-title-inner").innerHTML = u.title || "";
        var x, r, t, y, q;
        if (e.options.displayNav){
            x = true;
            var w = e.gallery.length;
            if (w > 1){
                if (e.options.continuous){
                    r = q = true;
                }
                else {
                    r = (w - 1) > e.current;
                    q = e.current > 0;
                }
            }
            if (e.options.slideshowDelay > 0 && e.hasNext()){
                y = ! e.isPaused();
                t = ! y;
            }
        }
        else {
            x = r = t = y = q = false;
        }
        b("close", x);
        b("next", r);
        b("play", t);
        b("pause", y);
        b("previous", q);
        var x = "";
        if (e.options.displayCounter && e.gallery.length > 1){
            var v = e.getCounter();
            if (typeof v == "string"){
                x = v;
            }
            else {
                d.each(v, function(p){
                    x += '<a onclick="Shadowbox.change(' + p +');"';
                    if (p == e.current){
                        x += ' class="sb-counter-current"';
                    }
                    x += ">" + (p + 1) + "</a>";
                });
            }
        }
        d.get("sb-counter").innerHTML = x;
        s();
    }
    
    function h(r, q){
        var w = d.get("sb-wrapper"), z = d.get("sb-title"), s = d.get("sb-info"), p = d.get("sb-title-inner"), x = d.get("sb-info-inner"), y = parseInt(e.lib.getStyle(p, "height")) || 0, v = parseInt(e.lib.getStyle(x, "height")) || 0;
        
        function u(){
            p.style.visibility = x.style.visibility = "hidden";
            a(q);
        }
        if (r){
            d.animate(z, "height", 0, 0.35);
            d.animate(s, "height", 0, 0.35);
            d.animate(w, "paddingTop", y, 0.35);
            d.animate(w, "paddingBottom", v, 0.35, u);
        }
        else {
            z.style.height = s.style.height = "0px";
            w.style.paddingTop = y + "px";
            w.style.paddingBottom = v + "px";
            u();
        }
    }
    
    function j(r){
        var q = d.get("sb-wrapper"), u = d.get("sb-title"), s = d.get("sb-info"), x = d.get("sb-title-inner"), w = d.get("sb-info-inner"), v = parseInt(e.lib.getStyle(x, "height")) || 0, p = parseInt(e.lib.getStyle(w, "height")) || 0;
        x.style.visibility = w.style.visibility = "";
        if (x.innerHTML != ""){
            d.animate(u, "height", v, 0.35);
            d.animate(q, "paddingTop", 0, 0.35);
        }
        d.animate(s, "height", p, 0.35);
        d.animate(q, "paddingBottom", 0, 0.35, r);
    }
    
    function c(q, x, w, p){
        var y = d.get("sb-body"), v = d.get("sb-wrapper"), u = parseInt(q), r = parseInt(x);
        if (w){
            d.animate(y, "height", u, e.options.resizeDuration);
            d.animate(v, "top", r, e.options.resizeDuration, p);
        }
        else {
            y.style.height = u + "px";
            v.style.top = r + "px";
            if (p){
                p();
            }
        }
    }
    
    function f(u, x, v, p){
        var t = d.get("sb-wrapper"), r = parseInt(u), q = parseInt(x);
        if (v){
            d.animate(t, "width", r, e.options.resizeDuration);
            d.animate(t, "left", q, e.options.resizeDuration, p);
        }
        else {
            t.style.width = r + "px";
            t.style.left = q + "px";
            if (p){
                p();
            }
        }
    }
    
    function n(p){
        var r = e.content;
        if ( ! r){
            return;
        }
        var q = m(r.height, r.width, r.resizable);
        switch (e.options.animSequence){
            case "hw": 
                c(q.inner_h, q.top, true, function(){
                    f(q.width, q.left, true, p);
                });
                break;
            case "wh": 
                f(q.width, q.left, true, function(){
                    c(q.inner_h, q.top, true, p);
                });
                break;
            default: 
                f(q.width, q.left, true);
                c(q.inner_h, q.top, true, p);
        }
    }
    
    function m(p, s, r){
        var q = d.get("sb-body-inner");
        sw = d.get("sb-wrapper"), so = d.get("sb-overlay"), tb = sw.offsetHeight - q.offsetHeight, lr = sw.offsetWidth - q.offsetWidth, max_h = so.offsetHeight, max_w = so.offsetWidth;
        return e.setDimensions(p, s, max_h, max_w, tb, lr, r);
    }
    return {markup: '<div id="sb-container"><div id="sb-overlay"></div><div id="sb-wrapper"><div id="sb-title"><div id="sb-title-inner"></div></div><div id="sb-body"><div id="sb-body-inner"></div><div id="sb-loading"><a onclick="Shadowbox.close()">{cancel}</a></div></div><div id="sb-info"><div id="sb-info-inner"><div id="sb-counter"></div><div id="sb-nav"><a id="sb-nav-close" title="{close}" onclick="Shadowbox.close()"></a><a id="sb-nav-next" title="{next}" onclick="Shadowbox.next()"></a><a id="sb-nav-play" title="{play}" onclick="Shadowbox.play()"></a><a id="sb-nav-pause" title="{pause}" onclick="Shadowbox.pause()"></a><a id="sb-nav-previous" title="{previous}" onclick="Shadowbox.previous()"></a></div><div style="clear:both"></div></div></div></div></div>', 
       options: 
    {animSequence: "sync"}, 
       init: function(){
        if (e.client.isIE6){
            d.get("sb-body").style.zoom = 1;
            var r, p, q = /url\("(.*\.png)"\)/;
            d.each(k, function(s){
                r = d.get(s);
                if (r){
                    p = e.lib.getStyle(r, "backgroundImage").match(q);
                    if (p){
                        r.style.backgroundImage = "none";
                        
                        r.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true,src=" + p[1] +",sizingMethod=scale);";
                    }
                }
            });
        }
    }
    , 
       bodyEl: function(){
        
        return d.get("sb-body-inner");
    }
    , 
       onOpen: function(r, 
       q, 
       p){
        d.get("sb-container").style.display = "block";
        var s = m(r, q);
        c(s.inner_h, s.top, false);
        f(s.width, s.left, false);
        
        g(p);
    }
    , 
       onLoad: function(q, 
       r, 
       p){
        i(true);
        h(r, function(){
            if ( ! q){
                return;
            }
            if ( ! r){
                d.get("sb-wrapper").style.display = "";
            }
            
            p();
        });
    }
    , 
       onReady: function(p){
        n(function(){
            
            j(p);
        });
    }
    , 
       onFinish: function(p){
        
        i(false, p);
    }
    , 
       onClose: function(){
        
        g(false);
    }
    , 
       onPlay: function(){
        b("play", false);
        
        b("pause", true);
    }
    , 
       onPause: function(){
        b("pause", false);
        
        b("play", true);
    }
    , 
       onWindowResize: function(){
        var r = e.content;
        if ( ! r){
            return;
        }
        var q = m(r.height, r.width, r.resizable);
        f(q.width, q.left, false);
        c(q.inner_h, q.top, false);
        var p = d.get(e.contentId());
        if (p){
            if (r.resizable && e.options.handleOversize == "resize"){
                p.height = q.resize_h;
                p.width = q.resize_w;
            }
        }
    }
    };
}();