function get_hostname_from_url(url) {
    return url.match(/:\/\/(.[^/]+)/)[1];
}
if (typeof Effect == "undefined") {
    throw ("lightwindow.js requires including script.aculo.us' effects.js library!");
}
try {
    document.execCommand("BackgroundImageCache", false, true);
} catch(e) {}
var lightwindow = Class.create();
lightwindow.prototype = {
    element: null,
    contentToFetch: null,
    windowActive: false,
    dataEffects: [],
    dimensions: {
        cruft: null,
        container: null,
        viewport: {
            height: null,
            width: null,
            offsetTop: null,
            offsetLeft: null
        }
    },
    pagePosition: {
        x: 0,
        y: 0
    },
    pageDimensions: {
        width: null,
        height: null
    },
    preloadImage: [],
    preloadedImage: [],
    galleries: [],
    resizeTo: {
        height: null,
        heightPercent: null,
        width: null,
        widthPercent: null,
        fixedTop: null,
        fixedLeft: null
    },
    scrollbarOffset: 18,
    navigationObservers: {
        previous: null,
        next: null
    },
    containerChange: {
        height: 0,
        width: 0
    },
    activeGallery: false,
    galleryLocation: {
        current: 0,
        total: 0
    },
    initialize: function (options) {
        this.options = Object.extend({
            resizeSpeed: 8,
            contentOffset: {
                height: 20,
                width: 20
            },
            dimensions: {
                image: {
                    height: 250,
                    width: 250
                },
                page: {
                    height: 250,
                    width: 250
                },
                inline: {
                    height: 250,
                    width: 250
                },
                media: {
                    height: 250,
                    width: 250
                },
                external: {
                    height: 250,
                    width: 250
                },
                titleHeight: 25
            },
            classNames: {
                standard: "lightwindow",
                action: "lightwindow_action"
            },
            fileTypes: {
                page: ["asp", "aspx", "cgi", "cfm", "htm", "html", "pl", "php4", "php3", "php", "php5", "phtml", "rhtml", "shtml", "txt", "vbs", "rb"],
                media: ["aif", "aiff", "asf", "avi", "divx", "m1v", "m2a", "m2v", "m3u", "mid", "midi", "mov", "moov", "movie", "mp2", "mp3", "mpa", "mpa", "mpe", "mpeg", "mpg", "mpg", "mpga", "pps", "qt", "rm", "ram", "swf", "viv", "vivo", "wav"],
                image: ["bmp", "gif", "jpg", "png", "tiff"]
            },
            mimeTypes: {
                avi: "video/avi",
                aif: "audio/aiff",
                aiff: "audio/aiff",
                gif: "image/gif",
                bmp: "image/bmp",
                jpeg: "image/jpeg",
                m1v: "video/mpeg",
                m2a: "audio/mpeg",
                m2v: "video/mpeg",
                m3u: "audio/x-mpequrl",
                mid: "audio/x-midi",
                midi: "audio/x-midi",
                mjpg: "video/x-motion-jpeg",
                moov: "video/quicktime",
                mov: "video/quicktime",
                movie: "video/x-sgi-movie",
                mp2: "audio/mpeg",
                mp3: "audio/mpeg3",
                mpa: "audio/mpeg",
                mpa: "video/mpeg",
                mpe: "video/mpeg",
                mpeg: "video/mpeg",
                mpg: "audio/mpeg",
                mpg: "video/mpeg",
                mpga: "audio/mpeg",
                pdf: "application/pdf",
                png: "image/png",
                pps: "application/mspowerpoint",
                qt: "video/quicktime",
                ram: "audio/x-pn-realaudio-plugin",
                rm: "application/vnd.rn-realmedia",
                swf: "application/x-shockwave-flash",
                tiff: "image/tiff",
                viv: "video/vivo",
                vivo: "video/vivo",
                wav: "audio/wav",
                wmv: "application/x-mplayer2"
            },
            classids: {
                mov: "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B",
                swf: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
                wmv: "clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6"
            },
            codebases: {
                mov: "http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0",
                swf: "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0",
                wmv: "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715"
            },
            viewportPadding: 10,
            EOLASFix: "swf,wmv,fla,flv",
            overlay: {
                opacity: 0.7,
                image: url_home+"/plugins/content/joomthumbnail/gallery/lightwindow/images/black.png",
                presetImage: url_home+"/plugins/content/joomthumbnail/gallery/lightwindow/images/black-70.png"
            },
            skin: {
                main: '<div id="lightwindow_container" >' + '<div id="lightwindow_title_bar" >' + '<div id="lightwindow_title_bar_inner" >' + '<span id="lightwindow_title_bar_title"></span>' + '<a id="lightwindow_title_bar_close_link" >close</a>' + "</div>" + "</div>" + '<div id="lightwindow_stage" >' + '<div id="lightwindow_contents" >' + "</div>" + '<div id="lightwindow_navigation" >' + '<a href="#" id="lightwindow_previous" >' + '<span id="lightwindow_previous_title"></span>' + "</a>" + '<a href="#" id="lightwindow_next" >' + '<span id="lightwindow_next_title"></span>' + "</a>" + '<iframe name="lightwindow_navigation_shim" id="lightwindow_navigation_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>' + "</div>" + '<div id="lightwindow_galleries">' + '<div id="lightwindow_galleries_tab_container" >' + '<a href="#" id="lightwindow_galleries_tab" >' + '<span id="lightwindow_galleries_tab_span" class="up" >Galleries</span>' + "</a>" + "</div>" + '<div id="lightwindow_galleries_list" >' + "</div>" + "</div>" + "</div>" + '<div id="lightwindow_data_slide" >' + '<div id="lightwindow_data_slide_inner" >' + '<div id="lightwindow_data_details" >' + '<div id="lightwindow_data_gallery_container" >' + '<span id="lightwindow_data_gallery_current"></span>' + " of " + '<span id="lightwindow_data_gallery_total"></span>' + "</div>" + '<div id="lightwindow_data_author_container" >' + 'by <span id="lightwindow_data_author"></span>' + "</div>" + "</div>" + '<div id="lightwindow_data_caption" >' + "</div>" + "</div>" + "</div>" + "</div>",
                loading: '<div id="lightwindow_loading" >' + '<img src="'+url_home+'/plugins/content/joomthumbnail/gallery/lightwindow/images/ajax-loading.gif" alt="loading" />' + '<span>Loading or <a href="javascript: myLightWindow.deactivate();">Cancel</a></span>' + '<iframe name="lightwindow_loading_shim" id="lightwindow_loading_shim" src="javascript:false;" frameBorder="0" scrolling="no"></iframe>' + "</div>",
                iframe: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' + '<html xmlns="http://www.w3.org/1999/xhtml">' + "<body>" + "{body_replace}" + "</body>" + "</html>",
                gallery: {
                    top: '<div class="lightwindow_galleries_list">' + "<h1>{gallery_title_replace}</h1>" + "<ul>",
                    middle: "<li>" + "{gallery_link_replace}" + "</li>",
                    bottom: "</ul>" + "</div>"
                }
            },
            formMethod: "get",
            hideFlash: false,
            hideGalleryTab: true,
            showTitleBar: true,
            animationHandler: false,
            navigationHandler: false,
            transitionHandler: false,
            finalAnimationHandler: false,
            formHandler: false,
            galleryAnimationHandler: false,
            showGalleryCount: true
        },
        options || {});
        this.duration = ((11 - this.options.resizeSpeed) * 0.15);
        this._setupLinks();
        this._getScroll();
        this._getPageDimensions();
        this._browserDimensions();
        this._addLightWindowMarkup(false);
        this._setupDimensions();
        this.buildGalleryList();
    },
    activate: function (e, link) {
        this._clearWindowContents(true);
        this._addLoadingWindowMarkup();
        this._setupWindowElements(link);
        this._getScroll();
        this._browserDimensions();
        this._setupDimensions();
        this._toggleTroubleElements("hidden", false);
        this._displayLightWindow("block", "hidden");
        this._setStatus(true);
        this._monitorKeyboard(true);
        this._prepareIE(true);
        this._loadWindow();
    },
    deactivate: function () {
        this.windowActive = false;
        this.activeGallery = false;
        if (!this.options.hideGalleryTab) {
            this._handleGalleryAnimation(false);
        }
        this.animating = false;
        this.element = null;
        this._displayLightWindow("none", "visible");
        this._clearWindowContents(false);
        var queue = Effect.Queues.get("lightwindowAnimation").each(function (e) {
            e.cancel();
        });
        this._prepareIE(false);
        this._setupDimensions();
        this._toggleTroubleElements("visible", false);
        this._monitorKeyboard(false);
    },
    createWindow: function (element, attributes) {
        this._processLink($(element));
    },
    activateWindow: function (options) {
        this.element = Object.extend({
            href: null,
            title: null,
            author: null,
            caption: null,
            rel: null,
            top: null,
            left: null,
            type: null,
            showImages: null,
            height: null,
            width: null,
            loadingAnimation: null,
            iframeEmbed: null,
            form: null
        },
        options || {});
        this.contentToFetch = this.element.href;
        this.windowType = this.element.type ? this.element.type : this._fileType(this.element.href);
        this._clearWindowContents(true);
        this._addLoadingWindowMarkup();
        this._getScroll();
        this._browserDimensions();
        this._setupDimensions();
        this._toggleTroubleElements("hidden", false);
        this._displayLightWindow("block", "hidden");
        this._setStatus(true);
        this._monitorKeyboard(true);
        this._prepareIE(true);
        this._loadWindow();
    },
    submitForm: function (e) {
        if (this.options.formHandler) {
            this.options.formHandler(e);
        } else {
            this._defaultFormHandler(e);
        }
    },
    openWindow: function (element) {
        var element = $(element);
        this.windowActive = true;
        this._clearWindowContents(true);
        this._addLoadingWindowMarkup();
        this._setupWindowElements(element);
        this._setStatus(true);
        this._handleTransition();
    },
    navigateWindow: function (direction) {
        this._handleNavigation(false);
        if (direction == "previous") {
            this.openWindow(this.navigationObservers.previous);
        } else {
            if (direction == "next") {
                this.openWindow(this.navigationObservers.next);
            }
        }
    },
    buildGalleryList: function () {
        var output = "";
        var galleryLink;
        for (i in this.galleries) {
            if (typeof this.galleries[i] == "object") {
                output += (this.options.skin.gallery.top).replace("{gallery_title_replace}", unescape(i));
                for (j in this.galleries[i]) {
                    if (typeof this.galleries[i][j] == "object") {
                        galleryLink = '<a href="#" id="lightwindow_gallery_' + i + "_" + j + '" >' + unescape(j) + "</a>";
                        output += (this.options.skin.gallery.middle).replace("{gallery_link_replace}", galleryLink);
                    }
                }
                output += this.options.skin.gallery.bottom;
            }
        }
        new Insertion.Top("lightwindow_galleries_list", output);
        for (i in this.galleries) {
            if (typeof this.galleries[i] == "object") {
                for (j in this.galleries[i]) {
                    if (typeof this.galleries[i][j] == "object") {
                        Event.observe($("lightwindow_gallery_" + i + "_" + j), "click", this.openWindow.bind(this, this.galleries[i][j][0]), false);
                        $("lightwindow_gallery_" + i + "_" + j).onclick = function () {
                            return false;
                        };
                    }
                }
            }
        }
    },
    _setupLinks: function () {
        var links = $$("." + this.options.classNames.standard);
        links.each(function (link) {
            this._processLink(link);
        }.bind(this));
    },
    _processLink: function (link) {
        if ((this._fileType(link.getAttribute("href")) == "image" || this._fileType(link.getAttribute("href")) == "media")) {
            if (gallery = this._getGalleryInfo(link.rel)) {
                if (!this.galleries[gallery[0]]) {
                    this.galleries[gallery[0]] = new Array();
                }
                if (!this.galleries[gallery[0]][gallery[1]]) {
                    this.galleries[gallery[0]][gallery[1]] = new Array();
                }
                this.galleries[gallery[0]][gallery[1]].push(link);
            }
        }
        var url = link.getAttribute("href");
        if (url.indexOf("?") > -1) {
            url = url.substring(0, url.indexOf("?"));
        }
        var container = url.substring(url.indexOf("#") + 1);
        if ($(container)) {
            $(container).setStyle({
                display: "none"
            });
        }
        Event.observe(link, "click", this.activate.bindAsEventListener(this, link), false);
        link.onclick = function () {
            return false;
        };
    },
    _setupActions: function () {
        var links = $$("#lightwindow_container ." + this.options.classNames.action);
        links.each(function (link) {
            Event.observe(link, "click", this[link.getAttribute("rel")].bindAsEventListener(this, link), false);
            link.onclick = function () {
                return false;
            };
        }.bind(this));
    },
    _addLightWindowMarkup: function (rebuild) {
        var overlay = Element.extend(document.createElement("div"));
        overlay.setAttribute("id", "lightwindow_overlay");
        if (Prototype.Browser.Gecko) {
            overlay.setStyle({
                backgroundImage: "url(" + this.options.overlay.presetImage + ")",
                backgroundRepeat: "repeat",
                height: this.pageDimensions.height + "px"
            });
        } else {
            overlay.setStyle({
                opacity: this.options.overlay.opacity,
                backgroundImage: "url(" + this.options.overlay.image + ")",
                backgroundRepeat: "repeat",
                height: this.pageDimensions.height + "px"
            });
        }
        var lw = document.createElement("div");
        lw.setAttribute("id", "lightwindow");
        lw.innerHTML = this.options.skin.main;
        var body = document.getElementsByTagName("body")[0];
        body.appendChild(overlay);
        body.appendChild(lw);
        if ($("lightwindow_title_bar_close_link")) {
            Event.observe("lightwindow_title_bar_close_link", "click", this.deactivate.bindAsEventListener(this));
            $("lightwindow_title_bar_close_link").onclick = function () {
                return false;
            };
        }
        Event.observe($("lightwindow_previous"), "click", this.navigateWindow.bind(this, "previous"), false);
        $("lightwindow_previous").onclick = function () {
            return false;
        };
        Event.observe($("lightwindow_next"), "click", this.navigateWindow.bind(this, "next"), false);
        $("lightwindow_next").onclick = function () {
            return false;
        };
        if (!this.options.hideGalleryTab) {
            Event.observe($("lightwindow_galleries_tab"), "click", this._handleGalleryAnimation.bind(this, true), false);
            $("lightwindow_galleries_tab").onclick = function () {
                return false;
            };
        }
        if (Prototype.Browser.IE) {
            Event.observe(document, "mousewheel", this._stopScrolling.bindAsEventListener(this), false);
        } else {
            Event.observe(window, "DOMMouseScroll", this._stopScrolling.bindAsEventListener(this), false);
        }
        Event.observe(overlay, "click", this.deactivate.bindAsEventListener(this), false);
        overlay.onclick = function () {
            return false;
        };
    },
    _addLoadingWindowMarkup: function () {
        $("lightwindow_contents").innerHTML += this.options.skin.loading;
    },
    _setupWindowElements: function (link) {
        this.element = link;
        this.element.title = null ? "" : link.getAttribute("title");
        this.element.author = null ? "" : link.getAttribute("author");
        this.element.caption = null ? "" : link.getAttribute("caption");
        this.element.rel = null ? "" : link.getAttribute("rel");
        this.element.params = null ? "" : link.getAttribute("params");
        this.contentToFetch = this.element.href;
        this.windowType = this._getParameter("lightwindow_type") ? this._getParameter("lightwindow_type") : this._fileType(this.contentToFetch);
    },
    _clearWindowContents: function (contents) {
        if ($("lightwindow_iframe")) {
            Element.remove($("lightwindow_iframe"));
        }
        if ($("lightwindow_media_primary")) {
            try {
                $("lightwindow_media_primary").Stop();
            } catch(e) {}
            Element.remove($("lightwindow_media_primary"));
        }
        if ($("lightwindow_media_secondary")) {
            try {
                $("lightwindow_media_secondary").Stop();
            } catch(e) {}
            Element.remove($("lightwindow_media_secondary"));
        }
        this.activeGallery = false;
        this._handleNavigation(this.activeGallery);
        if (contents) {
            $("lightwindow_contents").innerHTML = "";
            $("lightwindow_contents").setStyle({
                overflow: "hidden"
            });
            if (!this.windowActive) {
                $("lightwindow_data_slide_inner").setStyle({
                    display: "none"
                });
                $("lightwindow_title_bar_title").innerHTML = "";
            }
            $("lightwindow_data_slide").setStyle({
                height: "auto"
            });
        }
        this.resizeTo.height = null;
        this.resizeTo.width = null;
    },
    _setStatus: function (status) {
        this.animating = status;
        if (status) {
            Element.show("lightwindow_loading");
        }
        if (! (/MSIE 6./i.test(navigator.userAgent))) {
            this._fixedWindow(status);
        }
    },
    _fixedWindow: function (status) {
        if (status) {
            if (this.windowActive) {
                this._getScroll();
                $("lightwindow").setStyle({
                    position: "absolute",
                    top: parseFloat($("lightwindow").getStyle("top")) + this.pagePosition.y + "px",
                    left: parseFloat($("lightwindow").getStyle("left")) + this.pagePosition.x + "px"
                });
            } else {
                $("lightwindow").setStyle({
                    position: "absolute"
                });
            }
        } else {
            if (this.windowActive) {
                this._getScroll();
                $("lightwindow").setStyle({
                    position: "fixed",
                    top: parseFloat($("lightwindow").getStyle("top")) - this.pagePosition.y + "px",
                    left: parseFloat($("lightwindow").getStyle("left")) - this.pagePosition.x + "px"
                });
            } else {
                if ($("lightwindow_iframe")) {
                    this._browserDimensions();
                }
                $("lightwindow").setStyle({
                    position: "fixed",
                    top: (parseFloat(this._getParameter("lightwindow_top")) ? parseFloat(this._getParameter("lightwindow_top")) + "px" : this.dimensions.viewport.height / 2 + "px"),
                    left: (parseFloat(this._getParameter("lightwindow_left")) ? parseFloat(this._getParameter("lightwindow_left")) + "px" : this.dimensions.viewport.width / 2 + "px")
                });
            }
        }
    },
    _prepareIE: function (setup) {
        if (Prototype.Browser.IE) {
            var height, overflowX, overflowY;
            if (setup) {
                var height = "100%";
            } else {
                var height = "auto";
            }
            var body = document.getElementsByTagName("body")[0];
            var html = document.getElementsByTagName("html")[0];
            html.style.height = body.style.height = height;
        }
    },
    _stopScrolling: function (e) {
        if (this.animating) {
            if (e.preventDefault) {
                e.preventDefault();
            }
            e.returnValue = false;
        }
    },
    _getScroll: function () {
        if (typeof(window.pageYOffset) == "number") {
            this.pagePosition.x = window.pageXOffset;
            this.pagePosition.y = window.pageYOffset;
        } else {
            if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
                this.pagePosition.x = document.body.scrollLeft;
                this.pagePosition.y = document.body.scrollTop;
            } else {
                if (document.documentElement) {
                    this.pagePosition.x = document.documentElement.scrollLeft;
                    this.pagePosition.y = document.documentElement.scrollTop;
                }
            }
        }
    },
    _setScroll: function (x, y) {
        document.documentElement.scrollLeft = x;
        document.documentElement.scrollTop = y;
    },
    _toggleTroubleElements: function (visibility, content) {
        if (content) {
            var selects = $("lightwindow_contents").getElementsByTagName("select");
        } else {
            var selects = document.getElementsByTagName("select");
        }
        for (var i = 0; i < selects.length; i++) {
            selects[i].style.visibility = visibility;
        }
        if (!content) {
            if (this.options.hideFlash) {
                var objects = document.getElementsByTagName("object");
                for (i = 0; i != objects.length; i++) {
                    objects[i].style.visibility = visibility;
                }
                var embeds = document.getElementsByTagName("embed");
                for (i = 0; i != embeds.length; i++) {
                    embeds[i].style.visibility = visibility;
                }
            }
            var iframes = document.getElementsByTagName("iframe");
            for (i = 0; i != iframes.length; i++) {
                iframes[i].style.visibility = visibility;
            }
        }
    },
    _getPageDimensions: function () {
        var xScroll, yScroll;
        if (window.innerHeight && window.scrollMaxY) {
            xScroll = document.body.scrollWidth;
            yScroll = window.innerHeight + window.scrollMaxY;
        } else {
            if (document.body.scrollHeight > document.body.offsetHeight) {
                xScroll = document.body.scrollWidth;
                yScroll = document.body.scrollHeight;
            } else {
                xScroll = document.body.offsetWidth;
                yScroll = document.body.offsetHeight;
            }
        }
        var windowWidth, windowHeight;
        if (self.innerHeight) {
            windowWidth = self.innerWidth;
            windowHeight = self.innerHeight;
        } else {
            if (document.documentElement && document.documentElement.clientHeight) {
                windowWidth = document.documentElement.clientWidth;
                windowHeight = document.documentElement.clientHeight;
            } else {
                if (document.body) {
                    windowWidth = document.body.clientWidth;
                    windowHeight = document.body.clientHeight;
                }
            }
        }
        if (yScroll < windowHeight) {
            this.pageDimensions.height = windowHeight;
        } else {
            this.pageDimensions.height = yScroll;
        }
        if (xScroll < windowWidth) {
            this.pageDimensions.width = windowWidth;
        } else {
            this.pageDimensions.width = xScroll;
        }
    },
    _displayLightWindow: function (display, visibility) {
        $("lightwindow_overlay").style.display = $("lightwindow").style.display = $("lightwindow_container").style.display = display;
        $("lightwindow_overlay").style.visibility = $("lightwindow").style.visibility = $("lightwindow_container").style.visibility = visibility;
    },
    _setupDimensions: function () {
        var originalHeight, originalWidth;
        switch (this.windowType) {
        case "page":
            originalHeight = this.options.dimensions.page.height;
            originalWidth = this.options.dimensions.page.width;
            break;
        case "image":
            originalHeight = this.options.dimensions.image.height;
            originalWidth = this.options.dimensions.image.width;
            break;
        case "media":
            originalHeight = this.options.dimensions.media.height;
            originalWidth = this.options.dimensions.media.width;
            break;
        case "external":
            originalHeight = this.options.dimensions.external.height;
            originalWidth = this.options.dimensions.external.width;
            break;
        case "inline":
            originalHeight = this.options.dimensions.inline.height;
            originalWidth = this.options.dimensions.inline.width;
            break;
        default:
            originalHeight = this.options.dimensions.page.height;
            originalWidth = this.options.dimensions.page.width;
            break;
        }
        var offsetHeight = this._getParameter("lightwindow_top") ? parseFloat(this._getParameter("lightwindow_top")) + this.pagePosition.y : this.dimensions.viewport.height / 2 + this.pagePosition.y;
        var offsetWidth = this._getParameter("lightwindow_left") ? parseFloat(this._getParameter("lightwindow_left")) + this.pagePosition.x : this.dimensions.viewport.width / 2 + this.pagePosition.x;
        $("lightwindow").setStyle({
            top: offsetHeight + "px",
            left: offsetWidth + "px"
        });
        $("lightwindow_container").setStyle({
            height: originalHeight + "px",
            width: originalWidth + "px",
            left: -(originalWidth / 2) + "px",
            top: -(originalHeight / 2) + "px"
        });
        $("lightwindow_contents").setStyle({
            height: originalHeight + "px",
            width: originalWidth + "px"
        });
    },
    _fileType: function (url) {
        var image = new RegExp("[^.].(" + this.options.fileTypes.image.join("|") + ")s*$", "i");
        if (image.test(url)) {
            return "image";
        }
        if (url.indexOf("#") > -1 && (document.domain == this._getDomain(url))) {
            return "inline";
        }
        if (url.indexOf("?") > -1) {
            url = url.substring(0, url.indexOf("?"));
        }
        var type = "unknown";
        var page = new RegExp("[^.].(" + this.options.fileTypes.page.join("|") + ")s*$", "i");
        var media = new RegExp("[^.].(" + this.options.fileTypes.media.join("|") + ")s*$", "i");
        if (document.domain != this._getDomain(url)) {
            type = "external";
        }
        if (media.test(url)) {
            type = "media";
        }
        if (type == "external" || type == "media") {
            return type;
        }
        if (page.test(url) || url.substr((url.length - 1), url.length) == "/") {
            type = "page";
        }
        return type;
    },
    _fileExtension: function (url) {
        if (url.indexOf("?") > -1) {
            url = url.substring(0, url.indexOf("?"));
        }
        var extenstion = "";
        for (var x = (url.length - 1); x > -1; x--) {
            if (url.charAt(x) == ".") {
                return extenstion;
            }
            extenstion = url.charAt(x) + extenstion;
        }
    },
    _monitorKeyboard: function (status) {
        if (status) {
            document.onkeydown = this._eventKeypress.bind(this);
        } else {
            document.onkeydown = "";
        }
    },
    _eventKeypress: function (e) {
        if (e == null) {
            var keycode = event.keyCode;
        } else {
            var keycode = e.which;
        }
        switch (keycode) {
        case 27:
            this.deactivate();
            break;
        case 13:
            return;
        default:
            break;
        }
        if (this.animating) {
            return false;
        }
        switch (String.fromCharCode(keycode).toLowerCase()) {
        case "p":
            if (this.navigationObservers.previous) {
                this.navigateWindow("previous");
            }
            break;
        case "n":
            if (this.navigationObservers.next) {
                this.navigateWindow("next");
            }
            break;
        default:
            break;
        }
    },
    _getGalleryInfo: function (rel) {
        if (!rel) {
            return false;
        }
        if (rel.indexOf("[") > -1) {
            return new Array(escape(rel.substring(0, rel.indexOf("["))), escape(rel.substring(rel.indexOf("[") + 1, rel.indexOf("]"))));
        } else {
            return false;
        }
    },
    _getDomain: function (url) {
        var leadSlashes = url.indexOf("//");
        var domainStart = leadSlashes + 2;
        var withoutResource = url.substring(domainStart, url.length);
        var nextSlash = withoutResource.indexOf("/");
        var domain = withoutResource.substring(0, nextSlash);
        if (domain.indexOf(":") > -1) {
            var portColon = domain.indexOf(":");
            domain = domain.substring(0, portColon);
        }
        return domain;
    },
    _getParameter: function (parameter, parameters) {
        if (!this.element) {
            return false;
        }
        if (parameter == "lightwindow_top" && this.element.top) {
            return unescape(this.element.top);
        } else {
            if (parameter == "lightwindow_left" && this.element.left) {
                return unescape(this.element.left);
            } else {
                if (parameter == "lightwindow_type" && this.element.type) {
                    return unescape(this.element.type);
                } else {
                    if (parameter == "lightwindow_show_images" && this.element.showImages) {
                        return unescape(this.element.showImages);
                    } else {
                        if (parameter == "lightwindow_height" && this.element.height) {
                            return unescape(this.element.height);
                        } else {
                            if (parameter == "lightwindow_width" && this.element.width) {
                                return unescape(this.element.width);
                            } else {
                                if (parameter == "lightwindow_loading_animation" && this.element.loadingAnimation) {
                                    return unescape(this.element.loadingAnimation);
                                } else {
                                    if (parameter == "lightwindow_iframe_embed" && this.element.iframeEmbed) {
                                        return unescape(this.element.iframeEmbed);
                                    } else {
                                        if (parameter == "lightwindow_form" && this.element.form) {
                                            return unescape(this.element.form);
                                        } else {
                                            if (!parameters) {
                                                if (this.element.params) {
                                                    parameters = this.element.params;
                                                } else {
                                                    return;
                                                }
                                            }
                                            var value;
                                            var parameterArray = parameters.split(",");
                                            var compareString = parameter + "=";
                                            var compareLength = compareString.length;
                                            for (var i = 0; i < parameterArray.length; i++) {
                                                if (parameterArray[i].substr(0, compareLength) == compareString) {
                                                    var currentParameter = parameterArray[i].split("=");
                                                    value = currentParameter[1];
                                                    break;
                                                }
                                            }
                                            if (!value) {
                                                return false;
                                            } else {
                                                return unescape(value);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    _browserDimensions: function () {
        if (Prototype.Browser.IE) {
            this.dimensions.viewport.height = document.documentElement.clientHeight;
            this.dimensions.viewport.width = document.documentElement.clientWidth;
        } else {
            this.dimensions.viewport.height = window.innerHeight;
            this.dimensions.viewport.width = document.width || document.body.offsetWidth;
        }
    },
    _getScrollerWidth: function () {
        var scrollDiv = Element.extend(document.createElement("div"));
        scrollDiv.setAttribute("id", "lightwindow_scroll_div");
        scrollDiv.setStyle({
            position: "absolute",
            top: "-10000px",
            left: "-10000px",
            width: "100px",
            height: "100px",
            overflow: "hidden"
        });
        var contentDiv = Element.extend(document.createElement("div"));
        contentDiv.setAttribute("id", "lightwindow_content_scroll_div");
        contentDiv.setStyle({
            width: "100%",
            height: "200px"
        });
        scrollDiv.appendChild(contentDiv);
        var body = document.getElementsByTagName("body")[0];
        body.appendChild(scrollDiv);
        var noScroll = $("lightwindow_content_scroll_div").offsetWidth;
        scrollDiv.style.overflow = "auto";
        var withScroll = $("lightwindow_content_scroll_div").offsetWidth;
        Element.remove($("lightwindow_scroll_div"));
        this.scrollbarOffset = noScroll - withScroll;
    },
    _addParamToObject: function (name, value, object, id) {
        var param = document.createElement("param");
        param.setAttribute("value", value);
        param.setAttribute("name", name);
        if (id) {
            param.setAttribute("id", id);
        }
        object.appendChild(param);
        return object;
    },
    _outerHTML: function (object) {
        if (Prototype.Browser.IE) {
            return object.outerHTML;
        } else {
            var clone = object.cloneNode(true);
            var cloneDiv = document.createElement("div");
            cloneDiv.appendChild(clone);
            return cloneDiv.innerHTML;
        }
    },
    _convertToMarkup: function (object, closeTag) {
        var markup = this._outerHTML(object).replace("</" + closeTag + ">", "");
        if (Prototype.Browser.IE) {
            for (var i = 0; i < object.childNodes.length; i++) {
                markup += this._outerHTML(object.childNodes[i]);
            }
            markup += "</" + closeTag + ">";
        }
        return markup;
    },
    _appendObject: function (object, closeTag, appendTo) {
        if (Prototype.Browser.IE) {
            appendTo.innerHTML += this._convertToMarkup(object, closeTag);
            if (this.options.EOLASFix.indexOf(this._fileType(this.element.href)) > -1) {
                var objectElements = document.getElementsByTagName("object");
                for (var i = 0; i < objectElements.length; i++) {
                    if (objectElements[i].getAttribute("data")) {
                        objectElements[i].removeAttribute("data");
                    }
                    objectElements[i].outerHTML = objectElements[i].outerHTML;
                    objectElements[i].style.visibility = "visible";
                }
            }
        } else {
            appendTo.appendChild(object);
        }
    },
    _appendIframe: function (scroll) {
        var iframe = document.createElement("iframe");
        iframe.setAttribute("id", "lightwindow_iframe");
        iframe.setAttribute("name", "lightwindow_iframe");
        iframe.setAttribute("src", "about:blank");
        iframe.setAttribute("height", "100%");
        iframe.setAttribute("width", "100%");
        iframe.setAttribute("frameborder", "0");
        iframe.setAttribute("marginwidth", "0");
        iframe.setAttribute("marginheight", "0");
        iframe.setAttribute("scrolling", scroll);
        this._appendObject(iframe, "iframe", $("lightwindow_contents"));
    },
    _writeToIframe: function (content) {
        var template = this.options.skin.iframe;
        template = template.replace("{body_replace}", content);
        if ($("lightwindow_iframe").contentWindow) {
            $("lightwindow_iframe").contentWindow.document.open();
            $("lightwindow_iframe").contentWindow.document.write(template);
            $("lightwindow_iframe").contentWindow.document.close();
        } else {
            $("lightwindow_iframe").contentDocument.open();
            $("lightwindow_iframe").contentDocument.write(template);
            $("lightwindow_iframe").contentDocument.close();
        }
    },
    _loadWindow: function () {
        switch (this.windowType) {
        case "image":
            var current = 0;
            var images = [];
            this.checkImage = [];
            this.resizeTo.height = this.resizeTo.width = 0;
            this.imageCount = this._getParameter("lightwindow_show_images") ? parseInt(this._getParameter("lightwindow_show_images")) : 1;
            if (gallery = this._getGalleryInfo(this.element.rel)) {
                for (current = 0; current < this.galleries[gallery[0]][gallery[1]].length; current++) {
                    if (this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href) > -1) {
                        break;
                    }
                }
                if (this.galleries[gallery[0]][gallery[1]][current - this.imageCount]) {
                    this.navigationObservers.previous = this.galleries[gallery[0]][gallery[1]][current - this.imageCount];
                } else {
                    this.navigationObservers.previous = false;
                }
                if (this.galleries[gallery[0]][gallery[1]][current + this.imageCount]) {
                    this.navigationObservers.next = this.galleries[gallery[0]][gallery[1]][current + this.imageCount];
                } else {
                    this.navigationObservers.next = false;
                }
                this.activeGallery = true;
            } else {
                this.navigationObservers.previous = false;
                this.navigationObservers.next = false;
                this.activeGallery = false;
            }
            for (var i = current; i < (current + this.imageCount); i++) {
                if (gallery && this.galleries[gallery[0]][gallery[1]][i]) {
                    this.contentToFetch = this.galleries[gallery[0]][gallery[1]][i].href;
                    this.galleryLocation = {
                        current: (i + 1) / this.imageCount,
                        total: (this.galleries[gallery[0]][gallery[1]].length) / this.imageCount
                    };
                    if (!this.galleries[gallery[0]][gallery[1]][i + this.imageCount]) {
                        $("lightwindow_next").setStyle({
                            display: "none"
                        });
                    } else {
                        $("lightwindow_next").setStyle({
                            display: "block"
                        });
                        $("lightwindow_next_title").innerHTML = this.galleries[gallery[0]][gallery[1]][i + this.imageCount].title;
                    }
                    if (!this.galleries[gallery[0]][gallery[1]][i - this.imageCount]) {
                        $("lightwindow_previous").setStyle({
                            display: "none"
                        });
                    } else {
                        $("lightwindow_previous").setStyle({
                            display: "block"
                        });
                        $("lightwindow_previous_title").innerHTML = this.galleries[gallery[0]][gallery[1]][i - this.imageCount].title;
                    }
                }
                images[i] = document.createElement("img");
                images[i].setAttribute("id", "lightwindow_image_" + i);
                images[i].setAttribute("border", "0");
                images[i].setAttribute("src", this.contentToFetch);
                $("lightwindow_contents").appendChild(images[i]);
                this.checkImage[i] = new PeriodicalExecuter(function (i) {
                    if (! (typeof $("lightwindow_image_" + i).naturalWidth != "undefined" && $("lightwindow_image_" + i).naturalWidth == 0)) {
                        this.checkImage[i].stop();
                        var imageHeight = $("lightwindow_image_" + i).getHeight();
                        if (imageHeight > this.resizeTo.height) {
                            this.resizeTo.height = imageHeight;
                        }
                        this.resizeTo.width += $("lightwindow_image_" + i).getWidth();
                        this.imageCount--;
                        $("lightwindow_image_" + i).setStyle({
                            height: "100%"
                        });
                        if (this.imageCount == 0) {
                            this._processWindow();
                        }
                    }
                }.bind(this, i), 1);
            }
            break;
        case "media":
            var current = 0;
            this.resizeTo.height = this.resizeTo.width = 0;
            if (gallery = this._getGalleryInfo(this.element.rel)) {
                for (current = 0; current < this.galleries[gallery[0]][gallery[1]].length; current++) {
                    if (this.contentToFetch.indexOf(this.galleries[gallery[0]][gallery[1]][current].href) > -1) {
                        break;
                    }
                }
                if (this.galleries[gallery[0]][gallery[1]][current - 1]) {
                    this.navigationObservers.previous = this.galleries[gallery[0]][gallery[1]][current - 1];
                } else {
                    this.navigationObservers.previous = false;
                }
                if (this.galleries[gallery[0]][gallery[1]][current + 1]) {
                    this.navigationObservers.next = this.galleries[gallery[0]][gallery[1]][current + 1];
                } else {
                    this.navigationObservers.next = false;
                }
                this.activeGallery = true;
            } else {
                this.navigationObservers.previous = false;
                this.navigationObservers.next = false;
                this.activeGallery = false;
            }
            if (gallery && this.galleries[gallery[0]][gallery[1]][current]) {
                this.contentToFetch = this.galleries[gallery[0]][gallery[1]][current].href;
                this.galleryLocation = {
                    current: current + 1,
                    total: this.galleries[gallery[0]][gallery[1]].length
                };
                if (!this.galleries[gallery[0]][gallery[1]][current + 1]) {
                    $("lightwindow_next").setStyle({
                        display: "none"
                    });
                } else {
                    $("lightwindow_next").setStyle({
                        display: "block"
                    });
                    $("lightwindow_next_title").innerHTML = this.galleries[gallery[0]][gallery[1]][current + 1].title;
                }
                if (!this.galleries[gallery[0]][gallery[1]][current - 1]) {
                    $("lightwindow_previous").setStyle({
                        display: "none"
                    });
                } else {
                    $("lightwindow_previous").setStyle({
                        display: "block"
                    });
                    $("lightwindow_previous_title").innerHTML = this.galleries[gallery[0]][gallery[1]][current - 1].title;
                }
            }
            if (this._getParameter("lightwindow_iframe_embed")) {
                this.resizeTo.height = this.dimensions.viewport.height;
                this.resizeTo.width = this.dimensions.viewport.width;
            } else {
                this.resizeTo.height = this._getParameter("lightwindow_height");
                this.resizeTo.width = this._getParameter("lightwindow_width");
            }
            this._processWindow();
            break;
        case "external":
            this._appendIframe("auto");
            this.resizeTo.height = this.dimensions.viewport.height;
            this.resizeTo.width = this.dimensions.viewport.width;
            this._processWindow();
            break;
        case "page":
            var newAJAX = new Ajax.Request(this.contentToFetch, {
                method: "get",
                parameters: "",
                onComplete: function (response) {
                    $("lightwindow_contents").innerHTML += response.responseText;
                    this.resizeTo.height = $("lightwindow_contents").scrollHeight + (this.options.contentOffset.height);
                    this.resizeTo.width = $("lightwindow_contents").scrollWidth + (this.options.contentOffset.width);
                    this._processWindow();
                }.bind(this)
            });
            break;
        case "inline":
            var content = this.contentToFetch;
            if (content.indexOf("?") > -1) {
                content = content.substring(0, content.indexOf("?"));
            }
            content = content.substring(content.indexOf("#") + 1);
            new Insertion.Top($("lightwindow_contents"), $(content).innerHTML);
            this.resizeTo.height = $("lightwindow_contents").scrollHeight + (this.options.contentOffset.height);
            this.resizeTo.width = $("lightwindow_contents").scrollWidth + (this.options.contentOffset.width);
            this._toggleTroubleElements("hidden", true);
            this._processWindow();
            break;
        default:
            throw ("Page Type could not be determined, please amend this lightwindow URL " + this.contentToFetch);
            break;
        }
    },
    _resizeWindowToFit: function () {
        if (this.resizeTo.height + this.dimensions.cruft.height > this.dimensions.viewport.height) {
            var heightRatio = this.resizeTo.height / this.resizeTo.width;
            this.resizeTo.height = this.dimensions.viewport.height - this.dimensions.cruft.height - (2 * this.options.viewportPadding);
            if (this.windowType == "image" || (this.windowType == "media" && !this._getParameter("lightwindow_iframe_embed"))) {
                this.resizeTo.width = this.resizeTo.height / heightRatio;
                $("lightwindow_data_slide_inner").setStyle({
                    width: this.resizeTo.width + "px"
                });
            }
        }
        if (this.resizeTo.width + this.dimensions.cruft.width > this.dimensions.viewport.width) {
            var widthRatio = this.resizeTo.width / this.resizeTo.height;
            this.resizeTo.width = this.dimensions.viewport.width - 2 * this.dimensions.cruft.width - (2 * this.options.viewportPadding);
            if (this.windowType == "image" || (this.windowType == "media" && !this._getParameter("lightwindow_iframe_embed"))) {
                this.resizeTo.height = this.resizeTo.width / widthRatio;
                $("lightwindow_data_slide_inner").setStyle({
                    height: this.resizeTo.height + "px"
                });
            }
        }
    },
    _presetWindowSize: function () {
        if (this._getParameter("lightwindow_height")) {
            this.resizeTo.height = parseFloat(this._getParameter("lightwindow_height"));
        }
        if (this._getParameter("lightwindow_width")) {
            this.resizeTo.width = parseFloat(this._getParameter("lightwindow_width"));
        }
    },
    _processWindow: function () {
        this.dimensions.dataEffects = [];
        if (this.element.caption || this.element.author || (this.activeGallery && this.options.showGalleryCount)) {
            if (this.element.caption) {
                $("lightwindow_data_caption").innerHTML = this.element.caption;
                $("lightwindow_data_caption").setStyle({
                    display: "block"
                });
            } else {
                $("lightwindow_data_caption").setStyle({
                    display: "none"
                });
            }
            if (this.element.author) {
                $("lightwindow_data_author").innerHTML = this.element.author;
                $("lightwindow_data_author_container").setStyle({
                    display: "block"
                });
            } else {
                $("lightwindow_data_author_container").setStyle({
                    display: "none"
                });
            }
            if (this.activeGallery && this.options.showGalleryCount) {
                $("lightwindow_data_gallery_current").innerHTML = this.galleryLocation.current;
                $("lightwindow_data_gallery_total").innerHTML = this.galleryLocation.total;
                $("lightwindow_data_gallery_container").setStyle({
                    display: "block"
                });
            } else {
                $("lightwindow_data_gallery_container").setStyle({
                    display: "none"
                });
            }
            $("lightwindow_data_slide_inner").setStyle({
                width: this.resizeTo.width + "px",
                height: "auto",
                visibility: "visible",
                display: "block"
            });
            $("lightwindow_data_slide").setStyle({
                height: $("lightwindow_data_slide").getHeight() + "px",
                width: "1px",
                overflow: "hidden",
                display: "block"
            });
        } else {
            $("lightwindow_data_slide").setStyle({
                display: "none",
                width: "auto"
            });
            $("lightwindow_data_slide_inner").setStyle({
                display: "none",
                visibility: "hidden",
                width: this.resizeTo.width + "px",
                height: "0px"
            });
        }
        if (this.element.title != "null") {
            $("lightwindow_title_bar_title").innerHTML = this.element.title;
        } else {
            $("lightwindow_title_bar_title").innerHTML = "";
        }
        var originalContainerDimensions = {
            height: $("lightwindow_container").getHeight(),
            width: $("lightwindow_container").getWidth()
        };
        $("lightwindow_container").setStyle({
            height: "auto",
            width: $("lightwindow_container").getWidth() + this.options.contentOffset.width - (this.windowActive ? this.options.contentOffset.width : 0) + "px"
        });
        var newContainerDimensions = {
            height: $("lightwindow_container").getHeight(),
            width: $("lightwindow_container").getWidth()
        };
        this.containerChange = {
            height: originalContainerDimensions.height - newContainerDimensions.height,
            width: originalContainerDimensions.width - newContainerDimensions.width
        };
        this.dimensions.container = {
            height: $("lightwindow_container").getHeight(),
            width: $("lightwindow_container").getWidth()
        };
        this.dimensions.cruft = {
            height: this.dimensions.container.height - $("lightwindow_contents").getHeight() + this.options.contentOffset.height,
            width: this.dimensions.container.width - $("lightwindow_contents").getWidth() + this.options.contentOffset.width
        };
        this._presetWindowSize();
        this._resizeWindowToFit();
        if (!this.windowActive) {
            $("lightwindow_container").setStyle({
                left: -(this.dimensions.container.width / 2) + "px",
                top: -(this.dimensions.container.height / 2) + "px"
            });
        }
        $("lightwindow_container").setStyle({
            height: this.dimensions.container.height + "px",
            width: this.dimensions.container.width + "px"
        });
        this._displayLightWindow("block", "visible");
        this._animateLightWindow();
    },
    _animateLightWindow: function () {
        if (this.options.animationHandler) {
            this.options.animationHandler().bind(this);
        } else {
            this._defaultAnimationHandler();
        }
    },
    _handleNavigation: function (display) {
        if (this.options.navigationHandler) {
            this.options.navigationHandler().bind(this, display);
        } else {
            this._defaultDisplayNavigation(display);
        }
    },
    _handleTransition: function () {
        if (this.options.transitionHandler) {
            this.options.transitionHandler().bind(this);
        } else {
            this._defaultTransitionHandler();
        }
    },
    _handleFinalWindowAnimation: function (delay) {
        if (this.options.finalAnimationHandler) {
            this.options.finalAnimationHandler().bind(this, delay);
        } else {
            this._defaultfinalWindowAnimationHandler(delay);
        }
    },
    _handleGalleryAnimation: function (list) {
        if (this.options.galleryAnimationHandler) {
            this.options.galleryAnimationHandler().bind(this, list);
        } else {
            this._defaultGalleryAnimationHandler(list);
        }
    },
    _defaultDisplayNavigation: function (display) {
        if (display) {
            $("lightwindow_navigation").setStyle({
                display: "block",
                height: $("lightwindow_contents").getHeight() + "px",
                width: "100%",
                marginTop: this.options.dimensions.titleHeight + "px"
            });
        } else {
            $("lightwindow_navigation").setStyle({
                display: "none",
                height: "auto",
                width: "auto"
            });
        }
    },
    _defaultAnimationHandler: function () {
        if (this.element.caption || this.element.author || (this.activeGallery && this.options.showGalleryCount)) {
            $("lightwindow_data_slide").setStyle({
                display: "none",
                width: "auto"
            });
            this.dimensions.dataEffects.push(new Effect.SlideDown("lightwindow_data_slide", {
                sync: true
            }), new Effect.Appear("lightwindow_data_slide", {
                sync: true,
                from: 0,
                to: 1
            }));
        }
        $("lightwindow_title_bar_inner").setStyle({
            height: "0px",
            marginTop: this.options.dimensions.titleHeight + "px"
        });
        this.dimensions.dataEffects.push(new Effect.Morph("lightwindow_title_bar_inner", {
            sync: true,
            style: {
                height: this.options.dimensions.titleHeight + "px",
                marginTop: "0px"
            }
        }), new Effect.Appear("lightwindow_title_bar_inner", {
            sync: true,
            from: 0,
            to: 1
        }));
        if (!this.options.hideGalleryTab) {
            this._handleGalleryAnimation(false);
            if ($("lightwindow_galleries_tab_container").getHeight() == 0) {
                this.dimensions.dataEffects.push(new Effect.Morph("lightwindow_galleries_tab_container", {
                    sync: true,
                    style: {
                        height: "20px",
                        marginTop: "0px"
                    }
                }));
                $("lightwindow_galleries").setStyle({
                    width: "0px"
                });
            }
        }
        var resized = false;
        var ratio = this.dimensions.container.width - $("lightwindow_contents").getWidth() + this.resizeTo.width + this.options.contentOffset.width;
        if (ratio != $("lightwindow_container").getWidth()) {
            new Effect.Parallel([new Effect.Scale("lightwindow_contents", 100 * (this.resizeTo.width / $("lightwindow_contents").getWidth()), {
                scaleFrom: 100 * ($("lightwindow_contents").getWidth() / ($("lightwindow_contents").getWidth() + (this.options.contentOffset.width))),
                sync: true,
                scaleY: false,
                scaleContent: false
            }), new Effect.Scale("lightwindow_container", 100 * (ratio / (this.dimensions.container.width)), {
                sync: true,
                scaleY: false,
                scaleFromCenter: true,
                scaleContent: false
            })], {
                duration: this.duration,
                delay: 0.25,
                queue: {
                    position: "end",
                    scope: "lightwindowAnimation"
                }
            });
        }
        ratio = this.dimensions.container.height - $("lightwindow_contents").getHeight() + this.resizeTo.height + this.options.contentOffset.height;
        if (ratio != $("lightwindow_container").getHeight()) {
            new Effect.Parallel([new Effect.Scale("lightwindow_contents", 100 * (this.resizeTo.height / $("lightwindow_contents").getHeight()), {
                scaleFrom: 100 * ($("lightwindow_contents").getHeight() / ($("lightwindow_contents").getHeight() + (this.options.contentOffset.height))),
                sync: true,
                scaleX: false,
                scaleContent: false
            }), new Effect.Scale("lightwindow_container", 100 * (ratio / (this.dimensions.container.height)), {
                sync: true,
                scaleX: false,
                scaleFromCenter: true,
                scaleContent: false
            })], {
                duration: this.duration,
                afterFinish: function () {
                    if (this.dimensions.dataEffects.length > 0) {
                        if (!this.options.hideGalleryTab) {
                            $("lightwindow_galleries").setStyle({
                                width: this.resizeTo.width + "px"
                            });
                        }
                        new Effect.Parallel(this.dimensions.dataEffects, {
                            duration: this.duration,
                            afterFinish: function () {
                                this._finishWindow();
                            }.bind(this),
                            queue: {
                                position: "end",
                                scope: "lightwindowAnimation"
                            }
                        });
                    }
                }.bind(this),
                queue: {
                    position: "end",
                    scope: "lightwindowAnimation"
                }
            });
            resized = true;
        }
        if (!resized && this.dimensions.dataEffects.length > 0) {
            new Effect.Parallel(this.dimensions.dataEffects, {
                duration: this.duration,
                beforeStart: function () {
                    if (!this.options.hideGalleryTab) {
                        $("lightwindow_galleries").setStyle({
                            width: this.resizeTo.width + "px"
                        });
                    }
                    if (this.containerChange.height != 0 || this.containerChange.width != 0) {
                        new Effect.MoveBy("lightwindow_container", this.containerChange.height, this.containerChange.width, {
                            transition: Effect.Transitions.sinoidal
                        });
                    }
                }.bind(this),
                afterFinish: function () {
                    this._finishWindow();
                }.bind(this),
                queue: {
                    position: "end",
                    scope: "lightwindowAnimation"
                }
            });
        }
    },
    _defaultfinalWindowAnimationHandler: function (delay) {
        if (this.windowType == "media" || this._getParameter("lightwindow_loading_animation")) {
            Element.hide("lightwindow_loading");
            this._handleNavigation(this.activeGallery);
            this._setStatus(false);
        } else {
            Effect.Fade("lightwindow_loading", {
                duration: 0.75,
                delay: 1,
                afterFinish: function () {
                    if (this.windowType != "image" && this.windowType != "media" && this.windowType != "external") {
                        $("lightwindow_contents").setStyle({
                            overflow: "auto"
                        });
                    }
                    this._handleNavigation(this.activeGallery);
                    this._defaultGalleryAnimationHandler();
                    this._setStatus(false);
                }.bind(this),
                queue: {
                    position: "end",
                    scope: "lightwindowAnimation"
                }
            });
        }
    },
    _defaultGalleryAnimationHandler: function (list) {
        if (this.activeGallery) {
            $("lightwindow_galleries").setStyle({
                display: "block",
                marginBottom: $("lightwindow_data_slide").getHeight() + this.options.contentOffset.height / 2 + "px"
            });
            $("lightwindow_navigation").setStyle({
                height: $("lightwindow_contents").getHeight() - 20 + "px"
            });
        } else {
            $("lightwindow_galleries").setStyle({
                display: "none"
            });
            $("lightwindow_galleries_tab_container").setStyle({
                height: "0px",
                marginTop: "20px"
            });
            $("lightwindow_galleries_list").setStyle({
                height: "0px"
            });
            return false;
        }
        if (list) {
            if ($("lightwindow_galleries_list").getHeight() == 0) {
                var height = $("lightwindow_contents").getHeight() * 0.8;
                $("lightwindow_galleries_tab_span").className = "down";
            } else {
                var height = 0;
                $("lightwindow_galleries_tab_span").className = "up";
            }
            new Effect.Morph("lightwindow_galleries_list", {
                duration: this.duration,
                transition: Effect.Transitions.sinoidal,
                style: {
                    height: height + "px"
                },
                beforeStart: function () {
                    $("lightwindow_galleries_list").setStyle({
                        overflow: "hidden"
                    });
                },
                afterFinish: function () {
                    $("lightwindow_galleries_list").setStyle({
                        overflow: "auto"
                    });
                },
                queue: {
                    position: "end",
                    scope: "lightwindowAnimation"
                }
            });
        }
    },
    _defaultTransitionHandler: function () {
        this.dimensions.dataEffects = [];
        if ($("lightwindow_data_slide").getStyle("display") != "none") {
            this.dimensions.dataEffects.push(new Effect.SlideUp("lightwindow_data_slide", {
                sync: true
            }), new Effect.Fade("lightwindow_data_slide", {
                sync: true,
                from: 1,
                to: 0
            }));
        }
        if (!this.options.hideGalleryTab) {
            if ($("lightwindow_galleries").getHeight() != 0 && !this.options.hideGalleryTab) {
                this.dimensions.dataEffects.push(new Effect.Morph("lightwindow_galleries_tab_container", {
                    sync: true,
                    style: {
                        height: "0px",
                        marginTop: "20px"
                    }
                }));
            }
            if ($("lightwindow_galleries_list").getHeight() != 0) {
                $("lightwindow_galleries_tab_span").className = "up";
                this.dimensions.dataEffects.push(new Effect.Morph("lightwindow_galleries_list", {
                    sync: true,
                    style: {
                        height: "0px"
                    },
                    transition: Effect.Transitions.sinoidal,
                    beforeStart: function () {
                        $("lightwindow_galleries_list").setStyle({
                            overflow: "hidden"
                        });
                    },
                    afterFinish: function () {
                        $("lightwindow_galleries_list").setStyle({
                            overflow: "auto"
                        });
                    }
                }));
            }
        }
        this.dimensions.dataEffects.push(new Effect.Morph("lightwindow_title_bar_inner", {
            sync: true,
            style: {
                height: "0px",
                marginTop: this.options.dimensions.titleHeight + "px"
            }
        }), new Effect.Fade("lightwindow_title_bar_inner", {
            sync: true,
            from: 1,
            to: 0
        }));
        new Effect.Parallel(this.dimensions.dataEffects, {
            duration: this.duration,
            afterFinish: function () {
                this._loadWindow();
            }.bind(this),
            queue: {
                position: "end",
                scope: "lightwindowAnimation"
            }
        });
    },
    _defaultFormHandler: function (e) {
        var element = Event.element(e).parentNode;
        var parameterString = Form.serialize(this._getParameter("lightwindow_form", element.getAttribute("params")));
        if (this.options.formMethod == "post") {
            var newAJAX = new Ajax.Request(element.href, {
                method: "post",
                postBody: parameterString,
                onComplete: this.openWindow.bind(this, element)
            });
        } else {
            if (this.options.formMethod == "get") {
                var newAJAX = new Ajax.Request(element.href, {
                    method: "get",
                    parameters: parameterString,
                    onComplete: this.openWindow.bind(this, element)
                });
            }
        }
    },
    _finishWindow: function () {
        if (this.windowType == "external") {
            $("lightwindow_iframe").setAttribute("src", this.element.href);
            this._handleFinalWindowAnimation(1);
        } else {
            if (this.windowType == "media") {
                var outerObject = document.createElement("object");
                outerObject.setAttribute("classid", this.options.classids[this._fileExtension(this.contentToFetch)]);
                outerObject.setAttribute("codebase", this.options.codebases[this._fileExtension(this.contentToFetch)]);
                outerObject.setAttribute("id", "lightwindow_media_primary");
                outerObject.setAttribute("name", "lightwindow_media_primary");
                outerObject.setAttribute("width", this.resizeTo.width);
                outerObject.setAttribute("height", this.resizeTo.height);
                outerObject = this._addParamToObject("movie", this.contentToFetch, outerObject);
                outerObject = this._addParamToObject("src", this.contentToFetch, outerObject);
                outerObject = this._addParamToObject("controller", "true", outerObject);
                outerObject = this._addParamToObject("wmode", "transparent", outerObject);
                outerObject = this._addParamToObject("cache", "false", outerObject);
                outerObject = this._addParamToObject("quality", "high", outerObject);
                if (!Prototype.Browser.IE) {
                    var innerObject = document.createElement("object");
                    innerObject.setAttribute("type", this.options.mimeTypes[this._fileExtension(this.contentToFetch)]);
                    innerObject.setAttribute("data", this.contentToFetch);
                    innerObject.setAttribute("id", "lightwindow_media_secondary");
                    innerObject.setAttribute("name", "lightwindow_media_secondary");
                    innerObject.setAttribute("width", this.resizeTo.width);
                    innerObject.setAttribute("height", this.resizeTo.height);
                    innerObject = this._addParamToObject("controller", "true", innerObject);
                    innerObject = this._addParamToObject("wmode", "transparent", innerObject);
                    innerObject = this._addParamToObject("cache", "false", innerObject);
                    innerObject = this._addParamToObject("quality", "high", innerObject);
                    outerObject.appendChild(innerObject);
                }
                if (this._getParameter("lightwindow_iframe_embed")) {
                    this._appendIframe("no");
                    this._writeToIframe(this._convertToMarkup(outerObject, "object"));
                } else {
                    this._appendObject(outerObject, "object", $("lightwindow_contents"));
                }
                this._handleFinalWindowAnimation(0);
            } else {
                this._handleFinalWindowAnimation(0);
            }
        }
        this._setupActions();
    }
};
Event.observe(window, "load", lightwindowInit, false);
var myLightWindow = null;

function lightwindowInit() {
    myLightWindow = new lightwindow();
}
