var nn_hs = {
    lang: {
        loadingText: 'Veuillez patienter pendant le chargement...',
        loadingTitle: 'Click to cancel',
        focusTitle: 'Click to bring to front',
        fullExpandTitle: 'Expand to actual size',
        creditsText: 'Powered by <i>Highslide JS</i>',
        creditsTitle: 'Go to the Highslide JS homepage',
        previousText: 'Previous',
        nextText: 'Next',
        moveText: 'D&eacute;placer',
        closeText: 'Fermer',
        closeTitle: 'Fermer (esc)',
        resizeTitle: 'Resize',
        playText: 'Play',
        playTitle: 'Play slideshow (spacebar)',
        pauseText: 'Pause',
        pauseTitle: 'Pause slideshow (spacebar)',
        previousTitle: 'Previous (arrow left)',
        nextTitle: 'Next (arrow right)',
        moveTitle: 'D&eacute;placer',
        fullExpandText: 'Full size',
        restoreTitle: 'Click to close image, click and drag to move. Use arrow keys for next and previous.'
    },
    graphicsDir: 'plugins/system/modalizer/modals/highslide/images/',
    restoreCursor: 'zoomout.cur',
    expandSteps: 10,
    expandDuration: 250,
    restoreSteps: 10,
    restoreDuration: 250,
    marginLeft: 15,
    marginRight: 15,
    marginTop: 15,
    marginBottom: 15,
    zIndexCounter: 1050,
    loadingOpacity: 0.75,
    allowMultipleInstances: true,
    numberOfImagesToPreload: 5,
    outlineWhileAnimating: 2,
    outlineStartOffset: 3,
    fullExpandPosition: 'bottom right',
    fullExpandOpacity: 1,
    padToMinWidth: false,
    showCredits: false,
    creditsHref: 'http://highslide.com',
    enableKeyListener: true,
    allowWidthReduction: false,
    allowHeightReduction: true,
    preserveContent: true,
    objectLoadTime: 'before',
    cacheAjax: true,
    dragByHeading: true,
    minWidth: 200,
    minHeight: 200,
    allowSizeReduction: true,
    outlineType: '',
    wrapperClassName: 'highslide-wrapper',
    skin: {
        contentWrapper: '<div class="highslide-header"><ul>' + '<li class="highslide-previous">' + '<a href="#" title="{nn_hs.lang.previousTitle}" onclick="return nn_hs.previous(this)">' + '<span>{nn_hs.lang.previousText}</span></a>' + '</li>' + '<li class="highslide-next">' + '<a href="#" title="{nn_hs.lang.nextTitle}" onclick="return nn_hs.next(this)">' + '<span>{nn_hs.lang.nextText}</span></a>' + '</li>' + '<li class="highslide-move">' + '<a href="#" title="{nn_hs.lang.moveTitle}" onclick="return false">' + '<span>{nn_hs.lang.moveText}</span></a>' + '</li>' + '<li class="highslide-close">' + '<a href="#" title="{nn_hs.lang.closeTitle}" onclick="return nn_hs.close(this)">' + '<span>{nn_hs.lang.closeText}</span></a>' + '</li>' + '</ul></div>' + '<div class="highslide-body"></div>' + '<div class="highslide-footer"><div>' + '<span class="highslide-resize" title="{nn_hs.lang.resizeTitle}"><span></span></span>' + '</div></div>'
    },
    preloadTheseImages: [],
    continuePreloading: true,
    expanders: [],
    overrides: ['allowSizeReduction', 'outlineType', 'outlineWhileAnimating', 'captionId', 'captionText', 'captionEval', 'captionOverlay', 'expandDuration', 'restoreDuration', 'headingId', 'headingText', 'headingEval', 'headingOverlay', 'dragByHeading', 'contentId', 'width', 'height', 'allowWidthReduction', 'allowHeightReduction', 'preserveContent', 'maincontentId', 'maincontentText', 'maincontentEval', 'objectType', 'cacheAjax', 'objectWidth', 'objectHeight', 'objectLoadTime', 'swfOptions', 'wrapperClassName', 'minWidth', 'minHeight', 'maxWidth', 'maxHeight', 'slideshowGroup', 'easing', 'easingClose', 'fadeInOut', 'src'],
    overlays: [],
    idCounter: 0,
    oPos: {
        x: ['leftpanel', 'left', 'center', 'right', 'rightpanel'],
        y: ['above', 'top', 'middle', 'bottom', 'below']
    },
    mouse: {},
    headingOverlay: {},
    captionOverlay: {},
    swfOptions: {
        flashvars: {},
        params: {},
        attributes: {}
    },
    faders: [],
    pendingOutlines: {},
    sleeping: [],
    preloadTheseAjax: [],
    cacheBindings: [],
    cachedGets: {},
    clones: {},
    ie: (document.all && !window.opera),
    safari: /Safari/.test(navigator.userAgent),
    geckoMac: /Macintosh.+rv:1\.[0-8].+Gecko/.test(navigator.userAgent),
    $: function (a) {
        return document.getElementById(a)
    },
    push: function (a, b) {
        a[a.length] = b
    },
    createElement: function (a, b, c, d, e) {
        var f = document.createElement(a);
        if (b) nn_hs.setAttribs(f, b);
        if (e) nn_hs.setStyles(f, {
            padding: 0,
            border: 'none',
            margin: 0
        });
        if (c) nn_hs.setStyles(f, c);
        if (d) d.appendChild(f);
        return f
    },
    setAttribs: function (a, b) {
        for (var x in b) a[x] = b[x]
    },
    setStyles: function (a, b) {
        for (var x in b) {
            if (nn_hs.ie && x == 'opacity') {
                if (b[x] > 0.99) a.style.removeAttribute('filter');
                else a.style.filter = 'alpha(opacity=' + (b[x] * 100) + ')'
            } else a.style[x] = b[x]
        }
    },
    ieVersion: function () {
        var a = navigator.appVersion.split("MSIE");
        return a[1] ? parseFloat(a[1]) : null
    },
    getPageSize: function () {
        var d = document,
            w = window,
            iebody = d.compatMode && d.compatMode != 'BackCompat' ? d.documentElement : d.body;
        var a = nn_hs.ie ? iebody.clientWidth : (d.documentElement.clientWidth || self.innerWidth),
        height = nn_hs.ie ? iebody.clientHeight : self.innerHeight;
        return {
            width: a,
            height: height,
            scrollLeft: nn_hs.ie ? iebody.scrollLeft : pageXOffset,
            scrollTop: nn_hs.ie ? iebody.scrollTop : pageYOffset
        }
    },
    getPosition: function (a) {
        var p = {
            x: a.offsetLeft,
            y: a.offsetTop
        };
        while (a.offsetParent) {
            a = a.offsetParent;
            p.x += a.offsetLeft;
            p.y += a.offsetTop;
            if (a != document.body && a != document.documentElement) {
                p.x -= a.scrollLeft;
                p.y -= a.scrollTop
            }
        }
        return p
    },
    expand: function (a, b, c, d) {
        if (!a) a = nn_hs.createElement('a', null, {
            display: 'none'
        },
        nn_hs.container);
        if (typeof a.getParams == 'function') return b;
        if (d == 'html') {
            for (var i = 0; i < nn_hs.sleeping.length; i++) {
                if (nn_hs.sleeping[i] && nn_hs.sleeping[i].a == a) {
                    nn_hs.sleeping[i].awake();
                    nn_hs.sleeping[i] = null;
                    return false
                }
            }
            nn_hs.hasHtmlExpanders = true
        }
        try {
            new nn_hs.Expander(a, b, c, d);
            return false
        } catch(e) {
            return true
        }
    },
    htmlExpand: function (a, b, c) {
        return nn_hs.expand(a, b, c, 'html')
    },
    getSelfRendered: function () {
        return nn_hs.createElement('div', {
            className: 'highslide-html-content',
            innerHTML: nn_hs.replaceLang(nn_hs.skin.contentWrapper)
        })
    },
    getElementByClass: function (a, b, c) {
        var d = a.getElementsByTagName(b);
        for (var i = 0; i < d.length; i++) {
            if ((new RegExp(c)).test(d[i].className)) {
                return d[i]
            }
        }
        return null
    },
    replaceLang: function (s) {
        s = s.replace(/\s/g, ' ');
        var a = /{nn_hs\.lang\.([^}]+)\}/g,
            matches = s.match(a),
            lang;
        for (var i = 0; i < matches.length; i++) {
            lang = matches[i].replace(a, "$1");
            if (typeof nn_hs.lang[lang] != 'undefined') s = s.replace(matches[i], nn_hs.lang[lang])
        }
        return s
    },
    getCacheBinding: function (a) {
        for (var i = 0; i < nn_hs.cacheBindings.length; i++) {
            if (nn_hs.cacheBindings[i][0] == a) {
                var c = nn_hs.cacheBindings[i][1];
                nn_hs.cacheBindings[i][1] = c.cloneNode(1);
                return c
            }
        }
        return null
    },
    preloadAjax: function (e) {
        var b = nn_hs.getAnchors();
        for (var i = 0; i < b.htmls.length; i++) {
            var a = b.htmls[i];
            if (nn_hs.getParam(a, 'objectType') == 'ajax' && nn_hs.getParam(a, 'cacheAjax')) nn_hs.push(nn_hs.preloadTheseAjax, a)
        }
        nn_hs.preloadAjaxElement(0)
    },
    preloadAjaxElement: function (i) {
        if (!nn_hs.preloadTheseAjax[i]) return;
        var a = nn_hs.preloadTheseAjax[i];
        var b = nn_hs.getNode(nn_hs.getParam(a, 'contentId'));
        if (!b) b = nn_hs.getSelfRendered();
        var c = new nn_hs.Ajax(a, b, 1);
        c.onError = function () {};
        c.onLoad = function () {
            nn_hs.push(nn_hs.cacheBindings, [a, b]);
            nn_hs.preloadAjaxElement(i + 1)
        };
        c.run()
    },
    focusTopmost: function () {
        var a = 0,
            topmostKey = -1;
        for (var i = 0; i < nn_hs.expanders.length; i++) {
            if (nn_hs.expanders[i]) {
                if (nn_hs.expanders[i].wrapper.style.zIndex && nn_hs.expanders[i].wrapper.style.zIndex > a) {
                    a = nn_hs.expanders[i].wrapper.style.zIndex;
                    topmostKey = i
                }
            }
        }
        if (topmostKey == -1) nn_hs.focusKey = -1;
        else nn_hs.expanders[topmostKey].focus()
    },
    getParam: function (a, b) {
        a.getParams = a.onclick;
        var p = a.getParams ? a.getParams() : null;
        a.getParams = null;
        return (p && typeof p[b] != 'undefined') ? p[b] : (typeof nn_hs[b] != 'undefined' ? nn_hs[b] : null)
    },
    getSrc: function (a) {
        var b = nn_hs.getParam(a, 'src');
        if (b) return b;
        return a.href
    },
    getNode: function (b) {
        var c = nn_hs.$(b),
            clone = nn_hs.clones[b],
            a = {};
        if (!c && !clone) return null;
        if (!clone) {
            clone = c.cloneNode(true);
            clone.id = '';
            nn_hs.clones[b] = clone;
            return c
        } else {
            return clone.cloneNode(true)
        }
    },
    discardElement: function (d) {
        nn_hs.garbageBin.appendChild(d);
        nn_hs.garbageBin.innerHTML = ''
    },
    previousOrNext: function (a, b) {
        nn_hs.updateAnchors();
        var c = nn_hs.last = nn_hs.getExpander(a);
        try {
            var d = nn_hs.upcoming = c.getAdjacentAnchor(b);
            d.onclick()
        } catch(e) {
            nn_hs.last = nn_hs.upcoming = null
        }
        try {
            c.close()
        } catch(e) {}
        return false
    },
    previous: function (a) {
        return nn_hs.previousOrNext(a, -1)
    },
    next: function (a) {
        return nn_hs.previousOrNext(a, 1)
    },
    keyHandler: function (e) {
        if (!e) e = window.event;
        if (!e.target) e.target = e.srcElement;
        if (e.target.form) return true;
        var a = null;
        switch (e.keyCode) {
        case 32:
        case 34:
        case 39:
        case 40:
            a = 1;
            break;
        case 8:
        case 33:
        case 37:
        case 38:
            a = -1;
            break;
        case 27:
        case 13:
            a = 0
        }
        if (a !== null) {
            nn_hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', nn_hs.keyHandler);
            if (!nn_hs.enableKeyListener) return true;
            if (e.preventDefault) e.preventDefault();
            else e.returnValue = false;
            var b = nn_hs.getExpander();
            if (b) {
                if (a == 0) {
                    b.close()
                } else {
                    nn_hs.previousOrNext(b.key, a)
                }
                return false
            }
        }
        return true
    },
    registerOverlay: function (a) {
        nn_hs.push(nn_hs.overlays, a)
    },
    getWrapperKey: function (a, b) {
        var c, re = /^highslide-wrapper-([0-9]+)$/;
        c = a;
        while (c.parentNode) {
            if (c.id && re.test(c.id)) return c.id.replace(re, "$1");
            c = c.parentNode
        }
        if (!b) {
            c = a;
            while (c.parentNode) {
                if (c.tagName && nn_hs.isHsAnchor(c)) {
                    for (var d = 0; d < nn_hs.expanders.length; d++) {
                        var e = nn_hs.expanders[d];
                        if (e && e.a == c) return d
                    }
                }
                c = c.parentNode
            }
        }
        return null
    },
    getExpander: function (a, b) {
        if (typeof a == 'undefined') return nn_hs.expanders[nn_hs.focusKey] || null;
        if (typeof a == 'number') return nn_hs.expanders[a] || null;
        if (typeof a == 'string') a = nn_hs.$(a);
        return nn_hs.expanders[nn_hs.getWrapperKey(a, b)] || null
    },
    isHsAnchor: function (a) {
        return (a.onclick && a.onclick.toString().replace(/\s/g, ' ').match(/nn_hs.(htmlE|e)xpand/))
    },
    reOrder: function () {
        for (var i = 0; i < nn_hs.expanders.length; i++) if (nn_hs.expanders[i] && nn_hs.expanders[i].isExpanded) nn_hs.focusTopmost()
    },
    mouseClickHandler: function (e) {
        if (!e) e = window.event;
        if (e.button > 1) return true;
        if (!e.target) e.target = e.srcElement;
        var a = e.target;
        while (a.parentNode && !(/highslide-(image|move|html|resize)/.test(a.className))) {
            a = a.parentNode
        }
        var b = nn_hs.getExpander(a);
        if (b && (b.isClosing || !b.isExpanded)) return true;
        if (b && e.type == 'mousedown') {
            if (e.target.form) return true;
            var c = a.className.match(/highslide-(image|move|resize)/);
            if (c) {
                nn_hs.dragArgs = {
                    exp: b,
                    type: c[1],
                    left: b.x.min,
                    width: b.x.span,
                    top: b.y.min,
                    height: b.y.span,
                    clickX: e.clientX,
                    clickY: e.clientY
                };
                nn_hs.addEventListener(document, 'mousemove', nn_hs.dragHandler);
                if (e.preventDefault) e.preventDefault();
                if (/highslide-(image|html)-blur/.test(b.content.className)) {
                    b.focus();
                    nn_hs.hasFocused = true
                }
                return false
            } else if (/highslide-html/.test(a.className) && nn_hs.focusKey != b.key) {
                b.focus();
                b.redoShowHide()
            }
        } else if (e.type == 'mouseup') {
            nn_hs.removeEventListener(document, 'mousemove', nn_hs.dragHandler);
            if (nn_hs.dragArgs) {
                if (nn_hs.dragArgs.type == 'image') nn_hs.dragArgs.exp.content.style.cursor = nn_hs.styleRestoreCursor;
                var d = nn_hs.dragArgs.hasDragged;
                if (!d && !nn_hs.hasFocused && !/(move|resize)/.test(nn_hs.dragArgs.type)) {
                    b.close()
                } else if (d || (!d && nn_hs.hasHtmlExpanders)) {
                    nn_hs.dragArgs.exp.redoShowHide()
                }
                if (nn_hs.dragArgs.exp.releaseMask) nn_hs.dragArgs.exp.releaseMask.style.display = 'none';
                nn_hs.hasFocused = false;
                nn_hs.dragArgs = null
            } else if (/highslide-image-blur/.test(a.className)) {
                a.style.cursor = nn_hs.styleRestoreCursor
            }
        }
        return false
    },
    dragHandler: function (e) {
        if (!nn_hs.dragArgs) return true;
        if (!e) e = window.event;
        var a = nn_hs.dragArgs,
            exp = a.exp;
        if (exp.iframe) {
            if (!exp.releaseMask) exp.releaseMask = nn_hs.createElement('div', null, {
                position: 'absolute',
                width: exp.x.span + 'px',
                height: exp.y.span + 'px',
                left: 0,
                top: 0,
                zIndex: 4,
                background: (nn_hs.ie ? 'white' : 'none'),
                opacity: 0.01
            },
            exp.wrapper, true);
            if (exp.releaseMask.style.display == 'none') exp.releaseMask.style.display = ''
        }
        a.dX = e.clientX - a.clickX;
        a.dY = e.clientY - a.clickY;
        var b = Math.sqrt(Math.pow(a.dX, 2) + Math.pow(a.dY, 2));
        if (!a.hasDragged) a.hasDragged = (a.type != 'image' && b > 0) || (b > (nn_hs.dragSensitivity || 5));
        if (a.hasDragged && e.clientX > 5 && e.clientY > 5) {
            if (a.type == 'resize') exp.resize(a);
            else exp.move(a)
        }
        return false
    },
    wrapperMouseHandler: function (e) {
        try {
            if (!e) e = window.event;
            var a = /mouseover/i.test(e.type);
            if (!e.target) e.target = e.srcElement;
            if (nn_hs.ie) e.relatedTarget = a ? e.fromElement : e.toElement;
            var b = nn_hs.getExpander(e.target);
            if (!b.isExpanded) return;
            if (!b || !e.relatedTarget || nn_hs.getExpander(e.relatedTarget, true) == b || nn_hs.dragArgs) return;
            for (var i = 0; i < b.overlays.length; i++) {
                var o = nn_hs.$('hsId' + b.overlays[i]);
                if (o && o.hideOnMouseOut) {
                    var c = a ? 0 : o.opacity,
                    to = a ? o.opacity : 0;
                    nn_hs.fade(o, c, to)
                }
            }
        } catch(e) {}
    },
    addEventListener: function (a, b, c) {
        try {
            a.addEventListener(b, c, false)
        } catch(e) {
            try {
                a.detachEvent('on' + b, c);
                a.attachEvent('on' + b, c)
            } catch(e) {
                a['on' + b] = c
            }
        }
    },
    removeEventListener: function (a, b, c) {
        try {
            a.removeEventListener(b, c, false)
        } catch(e) {
            try {
                a.detachEvent('on' + b, c)
            } catch(e) {
                a['on' + b] = null
            }
        }
    },
    preloadFullImage: function (i) {
        if (nn_hs.continuePreloading && nn_hs.preloadTheseImages[i] && nn_hs.preloadTheseImages[i] != 'undefined') {
            var a = document.createElement('img');
            a.onload = function () {
                a = null;
                nn_hs.preloadFullImage(i + 1)
            };
            a.src = nn_hs.preloadTheseImages[i]
        }
    },
    preloadImages: function (a) {
        if (a && typeof a != 'object') nn_hs.numberOfImagesToPreload = a;
        var b = nn_hs.getAnchors();
        for (var i = 0; i < b.images.length && i < nn_hs.numberOfImagesToPreload; i++) {
            nn_hs.push(nn_hs.preloadTheseImages, nn_hs.getSrc(b.images[i]))
        }
        if (nn_hs.outlineType) new nn_hs.Outline(nn_hs.outlineType, function () {
            nn_hs.preloadFullImage(0)
        });
        else nn_hs.preloadFullImage(0);
        var c = nn_hs.createElement('img', {
            src: nn_hs.graphicsDir + nn_hs.restoreCursor
        })
    },
    init: function () {
        if (!nn_hs.container) {
            nn_hs.container = nn_hs.createElement('div', {
                className: 'highslide-container'
            },
            {
                position: 'absolute',
                left: 0,
                top: 0,
                width: '100%',
                zIndex: nn_hs.zIndexCounter,
                direction: 'ltr'
            },
            document.body, true);
            nn_hs.loading = nn_hs.createElement('a', {
                className: 'highslide-loading',
                title: nn_hs.lang.loadingTitle,
                innerHTML: nn_hs.lang.loadingText,
                href: 'javascript:;'
            },
            {
                position: 'absolute',
                top: '-9999px',
                opacity: nn_hs.loadingOpacity,
                zIndex: 1
            },
            nn_hs.container);
            nn_hs.garbageBin = nn_hs.createElement('div', null, {
                display: 'none'
            },
            nn_hs.container);
            nn_hs.clearing = nn_hs.createElement('div', null, {
                clear: 'both',
                paddingTop: '1px'
            },
            null, true);
            Math.linearTween = function (t, b, c, d) {
                return c * t / d + b
            };
            Math.easeInQuad = function (t, b, c, d) {
                return c * (t /= d) * t + b
            };
            for (var x in nn_hs.langDefaults) {
                if (typeof nn_hs[x] != 'undefined') nn_hs.lang[x] = nn_hs[x];
                else if (typeof nn_hs.lang[x] == 'undefined' && typeof nn_hs.langDefaults[x] != 'undefined') nn_hs.lang[x] = nn_hs.langDefaults[x]
            }
            nn_hs.ie6SSL = (nn_hs.ie && nn_hs.ieVersion() <= 6 && location.protocol == 'https:')
        }
    },
    domReady: function () {
        nn_hs.isDomReady = true;
        if (nn_hs.onDomReady) nn_hs.onDomReady()
    },
    updateAnchors: function () {
        var a = document.getElementsByTagName('*'),
            all = [],
            images = [],
            htmls = [],
            groups = {},
            re;
        for (var i = 0; i < a.length; i++) {
            re = nn_hs.isHsAnchor(a[i]);
            if (re) {
                nn_hs.push(all, a[i]);
                if (re[0] == 'nn_hs.expand') nn_hs.push(images, a[i]);
                else if (re[0] == 'nn_hs.htmlExpand') nn_hs.push(htmls, a[i]);
                var g = nn_hs.getParam(a[i], 'slideshowGroup') || 'none';
                if (!groups[g]) groups[g] = [];
                nn_hs.push(groups[g], a[i])
            }
        }
        nn_hs.anchors = {
            all: all,
            groups: groups,
            images: images,
            htmls: htmls
        };
        return nn_hs.anchors
    },
    getAnchors: function () {
        return nn_hs.anchors || nn_hs.updateAnchors()
    },
    fade: function (a, o, b, c, i, d) {
        if (typeof i == 'undefined') {
            if (typeof c != 'number') c = 250;
            if (c < 25) {
                nn_hs.setStyles(a, {
                    opacity: b
                });
                return
            }
            i = nn_hs.faders.length;
            d = b > o ? 1 : -1;
            var e = (25 / (c - c % 25)) * Math.abs(o - b)
        }
        o = parseFloat(o);
        var f = (a.fade === 0 || a.fade === false || (a.fade == 2 && nn_hs.ie));
        a.style.visibility = ((f ? b : o) <= 0) ? 'hidden' : 'visible';
        if (f || o < 0 || (d == 1 && o > b)) return;
        if (a.fading && a.fading.i != i) {
            clearTimeout(nn_hs.faders[a.fading.i]);
            o = a.fading.o
        }
        a.fading = {
            i: i,
            o: o,
            step: (e || a.fading.step)
        };
        a.style.visibility = (o <= 0) ? 'hidden' : 'visible';
        nn_hs.setStyles(a, {
            opacity: o
        });
        nn_hs.faders[i] = setTimeout(function () {
            nn_hs.fade(a, o + a.fading.step * d, b, null, i, d)
        },
        25)
    },
    close: function (a) {
        var b = nn_hs.getExpander(a);
        if (b) b.close();
        return false
    }
};
nn_hs.Outline = function (a, b) {
    this.onLoad = b;
    this.outlineType = a;
    var v = nn_hs.ieVersion(),
        tr;
    this.hasAlphaImageLoader = nn_hs.ie && v >= 5.5 && v < 7;
    if (!a) {
        if (b) b();
        return
    }
    nn_hs.init();
    this.table = nn_hs.createElement('table', {
        cellSpacing: 0
    },
    {
        visibility: 'hidden',
        position: 'absolute',
        borderCollapse: 'collapse',
        width: 0
    },
    nn_hs.container, true);
    var c = nn_hs.createElement('tbody', null, null, this.table, 1);
    this.td = [];
    for (var i = 0; i <= 8; i++) {
        if (i % 3 == 0) tr = nn_hs.createElement('tr', null, {
            height: 'auto'
        },
        c, true);
        this.td[i] = nn_hs.createElement('td', null, null, tr, true);
        var d = i != 4 ? {
            lineHeight: 0,
            fontSize: 0
        } : {
            position: 'relative'
        };
        nn_hs.setStyles(this.td[i], d)
    }
    this.td[4].className = a;
    this.preloadGraphic()
};
nn_hs.Outline.prototype = {
    preloadGraphic: function () {
        var a = nn_hs.graphicsDir + (nn_hs.outlinesDir || "outlines/") + this.outlineType + ".png";
        var b = nn_hs.safari ? nn_hs.container : null;
        this.graphic = nn_hs.createElement('img', null, {
            position: 'absolute',
            left: '-9999px',
            top: '-9999px'
        },
        b, true);
        var c = this;
        this.graphic.onload = function () {
            c.onGraphicLoad()
        };
        this.graphic.src = a
    },
    onGraphicLoad: function () {
        var o = this.offset = this.graphic.width / 4,
            pos = [[0, 0], [0, -4], [-2, 0], [0, -8], 0, [-2, -8], [0, -2], [0, -6], [-2, -2]],
    dim = {
    height: (2 * o) + 'px',
    width: (2 * o) + 'px'
};
nn_hs.discardElement(this.graphic);
for (var i = 0; i <= 8; i++) {
    if (pos[i]) {
        if (this.hasAlphaImageLoader) {
            var w = (i == 1 || i == 7) ? '100%' : this.graphic.width + 'px';
            var a = nn_hs.createElement('div', null, {
                width: '100%',
                height: '100%',
                position: 'relative',
                overflow: 'hidden'
            },
            this.td[i], true);
            nn_hs.createElement('div', null, {
                filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale, src='" + this.graphic.src + "')",
                position: 'absolute',
                width: w,
                height: this.graphic.height + 'px',
                left: (pos[i][0] * o) + 'px',
                top: (pos[i][1] * o) + 'px'
            },
            a, true)
        } else {
            nn_hs.setStyles(this.td[i], {
                background: 'url(' + this.graphic.src + ') ' + (pos[i][0] * o) + 'px ' + (pos[i][1] * o) + 'px'
            })
        }
        if (window.opera && (i == 3 || i == 5)) nn_hs.createElement('div', null, dim, this.td[i], true);
        nn_hs.setStyles(this.td[i], dim)
    }
}
if (nn_hs.pendingOutlines[this.outlineType]) nn_hs.pendingOutlines[this.outlineType].destroy();
nn_hs.pendingOutlines[this.outlineType] = this;
if (this.onLoad) this.onLoad()
},
setPosition: function (a, b, c) {
    b = b || {
        x: a.x.min,
        y: a.y.min,
        w: a.x.span + a.x.p1 + a.x.p2,
        h: a.y.span + a.y.p1 + a.y.p2
    };
    if (c) this.table.style.visibility = (b.h >= 4 * this.offset) ? 'visible' : 'hidden';
    nn_hs.setStyles(this.table, {
        left: (b.x - this.offset) + 'px',
        top: (b.y - this.offset) + 'px',
        width: (b.w + 2 * (a.x.cb + this.offset)) + 'px'
    });
    b.w += 2 * (a.x.cb - this.offset);
    b.h += +2 * (a.y.cb - this.offset);
    nn_hs.setStyles(this.td[4], {
        width: b.w >= 0 ? b.w + 'px' : 0,
        height: b.h >= 0 ? b.h + 'px' : 0
    });
    if (this.hasAlphaImageLoader) this.td[3].style.height = this.td[5].style.height = this.td[4].style.height
},
destroy: function (a) {
    if (a) this.table.style.visibility = 'hidden';
    else nn_hs.discardElement(this.table)
}
};
nn_hs.Expander = function (a, b, c, d) {
    if (document.readyState && nn_hs.ie && !nn_hs.isDomReady) {
        nn_hs.onDomReady = function () {
            new nn_hs.Expander(a, b, c, d)
        };
        return
    }
    this.a = a;
    this.custom = c;
    this.contentType = d || 'image';
    this.isHtml = (d == 'html');
    this.isImage = !this.isHtml;
    nn_hs.continuePreloading = false;
    this.overlays = [];
    nn_hs.init();
    var e = this.key = nn_hs.expanders.length;
    for (var i = 0; i < nn_hs.overrides.length; i++) {
        var f = nn_hs.overrides[i];
        this[f] = b && typeof b[f] != 'undefined' ? b[f] : nn_hs[f]
    }
    if (!this.src) this.src = a.href;
    var g = (b && b.thumbnailId) ? nn_hs.$(b.thumbnailId) : a;
    g = this.thumb = g.getElementsByTagName('img')[0] || g;
    this.thumbsUserSetId = g.id || a.id;
    for (var i = 0; i < nn_hs.expanders.length; i++) {
        if (nn_hs.expanders[i] && nn_hs.expanders[i].a == a) {
            nn_hs.expanders[i].focus();
            return false
        }
    }
    for (var i = 0; i < nn_hs.expanders.length; i++) {
        if (nn_hs.expanders[i] && nn_hs.expanders[i].thumb != g && !nn_hs.expanders[i].onLoadStarted) {
            nn_hs.expanders[i].cancelLoading()
        }
    }
    nn_hs.expanders[this.key] = this;
    if (!nn_hs.allowMultipleInstances) {
        if (nn_hs.expanders[e - 1]) nn_hs.expanders[e - 1].close();
        if (typeof nn_hs.focusKey != 'undefined' && nn_hs.expanders[nn_hs.focusKey]) nn_hs.expanders[nn_hs.focusKey].close()
    }
    var h = nn_hs.getPosition(g);
    var x = this.x = {};
    x.t = g.width ? parseInt(g.width) : g.offsetWidth;
    x.tpos = h.x;
    x.tb = (g.offsetWidth - x.t) / 2;
    var y = this.y = {};
    y.t = g.height ? parseInt(g.height) : g.offsetHeight;
    y.tpos = h.y;
    y.tb = (g.offsetHeight - y.t) / 2;
    x.p1 = x.p2 = y.p1 = y.p2 = 0;
    nn_hs.page = nn_hs.getPageSize();
    if (x.t == 0 && x.tpos == 0) {
        x.tpos = (nn_hs.page.width / 2) + nn_hs.page.scrollLeft;
        y.tpos = (nn_hs.page.height / 2) + nn_hs.page.scrollTop
    };
    this.wrapper = nn_hs.createElement('div', {
        id: 'highslide-wrapper-' + this.key,
        className: this.wrapperClassName
    },
    {
        visibility: 'hidden',
        position: 'absolute',
        zIndex: nn_hs.zIndexCounter++
    },
    null, true);
    this.wrapper.onmouseover = this.wrapper.onmouseout = nn_hs.wrapperMouseHandler;
    if (this.contentType == 'image' && this.outlineWhileAnimating == 2) this.outlineWhileAnimating = 0;
    if (!this.outlineType) {
        this[this.contentType + 'Create']()
    } else if (nn_hs.pendingOutlines[this.outlineType]) {
        this.connectOutline();
        this[this.contentType + 'Create']()
    } else {
        this.showLoading();
        var j = this;
        new nn_hs.Outline(this.outlineType, function () {
            j.connectOutline();
            j[j.contentType + 'Create']()
        })
    }
    return true
};
nn_hs.Expander.prototype = {
    connectOutline: function (x, y) {
        var o = this.outline = nn_hs.pendingOutlines[this.outlineType];
        o.table.style.zIndex = this.wrapper.style.zIndex;
        nn_hs.pendingOutlines[this.outlineType] = null
    },
    showLoading: function () {
        if (this.onLoadStarted || this.loading) return;
        this.loading = nn_hs.loading;
        var a = this;
        this.loading.onclick = function () {
            a.cancelLoading()
        };
        var a = this,
            l = (this.x.tpos + this.x.tb + (this.x.t - this.loading.offsetWidth) / 2) + 'px',
            t = (this.y.tpos + (this.y.t - this.loading.offsetHeight) / 2) + 'px';
        setTimeout(function () {
            if (a.loading) nn_hs.setStyles(a.loading, {
                left: l,
                top: t,
                zIndex: nn_hs.zIndexCounter++
            })
        },
        100)
    },
    imageCreate: function () {
        var a = this;
        var b = document.createElement('img');
        this.content = b;
        b.onload = function () {
            if (nn_hs.expanders[a.key]) a.contentLoaded()
        };
        if (nn_hs.blockRightClick) b.oncontextmenu = function () {
            return false
        };
        b.className = 'highslide-image';
        nn_hs.setStyles(b, {
            visibility: 'hidden',
            display: 'block',
            position: 'absolute',
            maxWidth: '9999px',
            zIndex: 3
        });
        b.title = nn_hs.lang.restoreTitle;
        if (nn_hs.safari) nn_hs.container.appendChild(b);
        if (nn_hs.ie && nn_hs.flushImgSize) b.src = null;
        b.src = this.src;
        this.showLoading()
    },
    htmlCreate: function () {
        this.content = nn_hs.getCacheBinding(this.a);
        if (!this.content) this.content = nn_hs.getNode(this.contentId);
        if (!this.content) this.content = nn_hs.getSelfRendered();
        this.getInline(['maincontent']);
        if (this.maincontent) {
            var a = nn_hs.getElementByClass(this.content, 'div', 'highslide-body');
            if (a) a.appendChild(this.maincontent);
            this.maincontent.style.display = 'block'
        }
        this.innerContent = this.content;
        if (/(swf|iframe)/.test(this.objectType)) this.setObjContainerSize(this.innerContent);
        nn_hs.container.appendChild(this.wrapper);
        nn_hs.setStyles(this.wrapper, {
            position: 'static',
            padding: '0 ' + nn_hs.marginRight + 'px 0 ' + nn_hs.marginLeft + 'px'
        });
        this.content = nn_hs.createElement('div', {
            className: 'highslide-html'
        },
        {
            position: 'relative',
            zIndex: 3,
            overflow: 'hidden'
        },
        this.wrapper);
        this.mediumContent = nn_hs.createElement('div', null, null, this.content, 1);
        this.mediumContent.appendChild(this.innerContent);
        nn_hs.setStyles(this.innerContent, {
            position: 'relative',
            display: 'block'
        });
        if (this.width) this.innerContent.style.width = this.width + 'px';
        if (this.height) this.innerContent.style.height = this.height + 'px';
        if (this.innerContent.offsetWidth < this.minWidth) this.innerContent.style.width = this.minWidth + 'px';
        if (this.objectType == 'ajax' && !nn_hs.getCacheBinding(this.a)) {
            this.showLoading();
            var b = new nn_hs.Ajax(this.a, this.innerContent);
            var c = this;
            b.onLoad = function () {
                if (nn_hs.expanders[c.key]) c.contentLoaded()
            };
            b.onError = function () {
                location.href = c.src
            };
            b.run()
        } else if (this.objectType == 'iframe' && this.objectLoadTime == 'before') {
            this.writeExtendedContent()
        } else this.contentLoaded()
    },
    contentLoaded: function () {
        try {
            if (!this.content) return;
            this.content.onload = null;
            if (this.onLoadStarted) return;
            else this.onLoadStarted = true;
            var x = this.x,
                y = this.y;
            if (this.loading) {
                nn_hs.setStyles(this.loading, {
                    top: '-9999px'
                });
                this.loading = null
            }
            this.marginBottom = nn_hs.marginBottom;
            if (this.isImage) {
                x.full = this.content.width;
                y.full = this.content.height;
                nn_hs.setStyles(this.content, {
                    width: this.x.t + 'px',
                    height: this.y.t + 'px'
                })
            } else if (this.htmlGetSize) this.htmlGetSize();
            this.wrapper.appendChild(this.content);
            nn_hs.setStyles(this.wrapper, {
                left: this.x.tpos + 'px',
                top: this.y.tpos + 'px'
            });
            nn_hs.container.appendChild(this.wrapper);
            x.cb = (this.content.offsetWidth - this.x.t) / 2;
            y.cb = (this.content.offsetHeight - this.y.t) / 2;
            var a = nn_hs.marginRight + 2 * x.cb;
            this.marginBottom += 2 * y.cb;
            this.getOverlays();
            var b = x.full / y.full;
            var c = this.allowSizeReduction ? this.minWidth : x.full;
            var d = this.allowSizeReduction ? this.minHeight : y.full;
            var f = {
                x: 'auto',
                y: 'auto'
            };
            x.min = x.tpos - x.cb + x.tb;
            x.span = Math.min(x.full, this.maxWidth || x.full);
            x.minSpan = Math.min(x.full, c);
            x.marginMin = nn_hs.marginLeft;
            x.marginMax = a;
            x.scroll = nn_hs.page.scrollLeft;
            x.clientSpan = nn_hs.page.width;
            this.justify(x);
            y.min = y.tpos - y.cb + y.tb;
            y.span = Math.min(y.full, this.maxHeight || y.full);
            y.minSpan = Math.min(y.full, d);
            y.marginMin = nn_hs.marginTop;
            y.marginMax = this.marginBottom;
            y.scroll = nn_hs.page.scrollTop;
            y.clientSpan = nn_hs.page.height;
            this.justify(y);
            if (this.isHtml) this.htmlSizeOperations();
            if (this.overlayBox) this.sizeOverlayBox(0, 1);
            if (this.allowSizeReduction) {
                if (this.isImage) this.correctRatio(b);
                else this.fitOverlayBox();
                if (this.isImage && this.x.full > this.x.span) {
                    this.createFullExpand();
                    if (this.overlays.length == 1) this.sizeOverlayBox()
                }
            }
            this.show()
        } catch(e) {
            window.location.href = this.src
        }
    },
    setObjContainerSize: function (a, b) {
        var c = nn_hs.getElementByClass(a, 'DIV', 'highslide-body');
        if (/(iframe|swf)/.test(this.objectType)) {
            if (this.objectWidth) c.style.width = this.objectWidth + 'px';
            if (this.objectHeight) c.style.height = this.objectHeight + 'px'
        }
    },
    writeExtendedContent: function () {
        if (this.hasExtendedContent) return;
        var b = this;
        this.body = nn_hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body');
        if (this.objectType == 'iframe') {
            this.showLoading();
            var c = nn_hs.clearing.cloneNode(1);
            this.body.appendChild(c);
            this.newWidth = this.innerContent.offsetWidth;
            if (!this.objectWidth) this.objectWidth = c.offsetWidth;
            var d = this.innerContent.offsetHeight - this.body.offsetHeight,
                h = this.objectHeight || (nn_hs.getPageSize()).height - d - nn_hs.marginTop - nn_hs.marginBottom,
                onload = this.objectLoadTime == 'before' ? ' onload="if (nn_hs.expanders[' + this.key + ']) nn_hs.expanders[' + this.key + '].contentLoaded()" ' : '';
            this.body.innerHTML += '<iframe name="nn_hs' + (new Date()).getTime() + '" frameborder="0" key="' + this.key + '" ' + ' allowtransparency="true" style="width:' + this.objectWidth + 'px; height:' + h + 'px" ' + onload + ' src="' + this.src + '"></iframe>';
            this.ruler = this.body.getElementsByTagName('div')[0];
            this.iframe = this.body.getElementsByTagName('iframe')[0];
            if (this.objectLoadTime == 'after') this.correctIframeSize()
        }
        if (this.objectType == 'swf') {
            this.body.id = this.body.id || 'nn_hs-flash-id-' + this.key;
            var a = this.swfOptions;
            if (typeof a.params.wmode == 'undefined') a.params.wmode = 'transparent';
            if (swfobject) swfobject.embedSWF(this.src, this.body.id, this.objectWidth, this.objectHeight, a.version || '7', a.expressInstallSwfurl, a.flashvars, a.params, a.attributes)
        }
        this.hasExtendedContent = true
    },
    htmlGetSize: function () {
        if (this.iframe && !this.objectHeight) {
            this.iframe.style.height = this.body.style.height = this.getIframePageHeight() + 'px'
        }
        this.innerContent.appendChild(nn_hs.clearing);
        if (!this.x.full) this.x.full = this.innerContent.offsetWidth;
        this.y.full = this.innerContent.offsetHeight;
        this.innerContent.removeChild(nn_hs.clearing);
        if (nn_hs.ie && this.newHeight > parseInt(this.innerContent.currentStyle.height)) {
            this.newHeight = parseInt(this.innerContent.currentStyle.height)
        }
        nn_hs.setStyles(this.wrapper, {
            position: 'absolute',
            padding: '0'
        });
        nn_hs.setStyles(this.content, {
            width: this.x.t + 'px',
            height: this.y.t + 'px'
        })
    },
    getIframePageHeight: function () {
        var h;
        try {
            var a = this.iframe.contentDocument || this.iframe.contentWindow.document;
            var b = a.createElement('div');
            b.style.clear = 'both';
            a.body.appendChild(b);
            h = b.offsetTop;
            if (nn_hs.ie) h += parseInt(a.body.currentStyle.marginTop) + parseInt(a.body.currentStyle.marginBottom) - 1
        } catch(e) {
            h = 300
        }
        return h
    },
    correctIframeSize: function () {
        var a = this.innerContent.offsetWidth - this.ruler.offsetWidth;
        if (a < 0) a = 0;
        var b = this.innerContent.offsetHeight - this.body.offsetHeight;
        nn_hs.setStyles(this.iframe, {
            width: (this.x.span - a) + 'px',
            height: (this.y.span - b) + 'px'
        });
        nn_hs.setStyles(this.body, {
            width: this.iframe.style.width,
            height: this.iframe.style.height
        });
        this.scrollingContent = this.iframe;
        this.scrollerDiv = this.scrollingContent
    },
    htmlSizeOperations: function () {
        this.setObjContainerSize(this.innerContent);
        if (this.objectType == 'swf' && this.objectLoadTime == 'before') this.writeExtendedContent();
        if (this.x.span < this.x.full && !this.allowWidthReduction) this.x.span = this.x.full;
        if (this.y.span < this.y.full && !this.allowHeightReduction) this.y.span = this.y.full;
        this.scrollerDiv = this.innerContent;
        nn_hs.setStyles(this.mediumContent, {
            width: this.x.span + 'px',
            position: 'relative',
            left: (this.x.min - this.x.tpos) + 'px',
            top: (this.y.min - this.y.tpos) + 'px'
        });
        nn_hs.setStyles(this.innerContent, {
            border: 'none',
            width: 'auto',
            height: 'auto'
        });
        var a = nn_hs.getElementByClass(this.innerContent, 'DIV', 'highslide-body');
        if (a && !/(iframe|swf)/.test(this.objectType)) {
            var b = a;
            a = nn_hs.createElement(b.nodeName, null, {
                overflow: 'hidden'
            },
            null, true);
            b.parentNode.insertBefore(a, b);
            a.appendChild(nn_hs.clearing);
            a.appendChild(b);
            var c = this.innerContent.offsetWidth - a.offsetWidth;
            var d = this.innerContent.offsetHeight - a.offsetHeight;
            a.removeChild(nn_hs.clearing);
            var e = nn_hs.safari || navigator.vendor == 'KDE' ? 1 : 0;
            nn_hs.setStyles(a, {
                width: (this.x.span - c - e) + 'px',
                height: (this.y.span - d) + 'px',
                overflow: 'auto',
                position: 'relative'
            });
            if (e && b.offsetHeight > a.offsetHeight) {
                a.style.width = (parseInt(a.style.width) + e) + 'px'
            }
            this.scrollingContent = a;
            this.scrollerDiv = this.scrollingContent
        }
        if (this.iframe && this.objectLoadTime == 'before') this.correctIframeSize();
        if (!this.scrollingContent && this.y.span < this.mediumContent.offsetHeight) this.scrollerDiv = this.content;
        if (this.scrollerDiv == this.content && !this.allowWidthReduction && !/(iframe|swf)/.test(this.objectType)) {
            this.x.span += 17
        }
        if (this.scrollerDiv && this.scrollerDiv.offsetHeight > this.scrollerDiv.parentNode.offsetHeight) {
            setTimeout("try { nn_hs.expanders[" + this.key + "].scrollerDiv.style.overflow = 'auto'; } catch(e) {}", this.expandDuration)
        }
    },
    justify: function (p, a) {
        var b, tgt = p.target,
            dim = p == this.x ? 'x' : 'y';
        var c = false;
        var d = nn_hs.allowSizeReduction;
        p.min = Math.round(p.min - ((p.span + p.p1 + p.p2 - p.t) / 2));
        if (p.min < p.scroll + p.marginMin) {
            p.min = p.scroll + p.marginMin;
            c = true
        }
        if (!a && p.span < p.minSpan) {
            p.span = p.minSpan;
            d = false
        }
        if (p.min + p.span + p.p1 + p.p2 > p.scroll + p.clientSpan - p.marginMax) {
            if (!a && c && d) {
                p.span = p.clientSpan - p.marginMin - p.marginMax
            } else if (p.span + p.p1 + p.p2 < p.clientSpan - p.marginMin - p.marginMax) {
                p.min = p.scroll + p.clientSpan - p.span - p.marginMax - p.p1 - p.p2
            } else {
                p.min = p.scroll + p.marginMin;
                if (!a && d) p.span = p.clientSpan - p.marginMin - p.marginMax
            }
        }
        if (!a && p.span < p.minSpan) {
            p.span = p.minSpan;
            d = false
        }
        if (p.min < p.marginMin) {
            var e = p.min;
            p.min = p.marginMin;
            if (d && !a) p.span = p.span - (p.min - e)
        }
    },
    correctRatio: function (a) {
        var x = this.x,
            y = this.y;
        var b = false;
        if (x.span / y.span > a) {
            x.span = y.span * a;
            if (x.span < x.minSpan) {
                x.span = x.minSpan;
                y.span = x.span / a
            }
            b = true
        } else if (x.span / y.span < a) {
            var c = y.span;
            y.span = x.span / a;
            b = true
        }
        this.fitOverlayBox(a);
        if (b) {
            x.min = x.tpos - x.cb + x.tb;
            x.minSpan = x.span;
            this.justify(x, true);
            y.min = y.tpos - y.cb + y.tb;
            y.minSpan = y.span;
            this.justify(y, true);
            if (this.overlayBox) this.sizeOverlayBox()
        }
    },
    fitOverlayBox: function (a) {
        var x = this.x,
            y = this.y;
        if (this.overlayBox) {
            while (y.span > this.minHeight && x.span > this.minWidth && y.marginMin + y.p1 + y.span + y.p2 + y.marginMax > y.clientSpan) {
                y.span -= 10;
                if (a) x.span = y.span * a;
                this.sizeOverlayBox(0, 1)
            }
        }
    },
    show: function () {
        var a = {
            x: this.x.min - 20,
            y: this.y.min - 20,
            w: this.x.span + 40 + this.x.p1 + this.x.p2,
            h: this.y.span + 40 + this.y.p1 + this.y.p2
        };
        nn_hs.hideSelects = (nn_hs.ie && nn_hs.ieVersion() < 7);
        if (nn_hs.hideSelects) this.showHideElements('SELECT', 'hidden', a);
        nn_hs.hideIframes = ((window.opera && navigator.appVersion < 9) || navigator.vendor == 'KDE' || (nn_hs.ie && nn_hs.ieVersion() < 5.5));
        if (nn_hs.hideIframes) this.showHideElements('IFRAME', 'hidden', a);
        if (nn_hs.geckoMac) this.showHideElements('*', 'hidden', a);
        this.changeSize(1, {
            xmin: this.x.tpos + this.x.tb - this.x.cb,
            ymin: this.y.tpos + this.y.tb - this.y.cb,
            xspan: this.x.t,
            yspan: this.y.t,
            xp1: 0,
            xp2: 0,
            yp1: 0,
            yp2: 0,
            o: nn_hs.outlineStartOffset
        },
        {
            xmin: this.x.min,
            ymin: this.y.min,
            xspan: this.x.span,
            yspan: this.y.span,
            xp1: this.x.p1,
            yp1: this.y.p1,
            xp2: this.x.p2,
            yp2: this.y.p2,
            o: this.outline ? this.outline.offset : 0
        },
        this.expandDuration, nn_hs.expandSteps)
    },
    changeSize: function (b, c, d, e, f) {
        if (this.outline && !this.outlineWhileAnimating) {
            if (b) this.outline.setPosition(this);
            else this.outline.destroy((this.isHtml && this.preserveContent))
        }
        if (!b && this.overlayBox) {
            if (this.isHtml && this.preserveContent) {
                this.overlayBox.style.top = '-9999px';
                nn_hs.container.appendChild(this.overlayBox)
            } else nn_hs.discardElement(this.overlayBox)
        }
        if (this.fadeInOut) {
            c.op = b ? 0 : 1;
            d.op = b
        }
        var t, exp = this,
            easing = Math[this.easing] || Math.easeInQuad;
        if (!b) easing = Math[this.easingClose] || easing;
        for (var i = 1; i <= f; i++) {
            t = Math.round(i * (e / f));
            (function () {
                var a = i,
                    size = {};
                for (var x in c) {
                    size[x] = easing(t, c[x], d[x] - c[x], e);
                    if (!/^op$/.test(x)) size[x] = Math.round(size[x])
                }
                setTimeout(function () {
                    if (b && a == 1) {
                        exp.content.style.visibility = 'visible';
                        exp.a.className += ' highslide-active-anchor'
                    }
                    exp.setSize(size)
                },
                t)
            })()
        }
        if (b) {
            setTimeout(function () {
                if (exp.outline) exp.outline.table.style.visibility = "visible"
            },
            t);
            setTimeout(function () {
                exp.afterExpand()
            },
            t + 50)
        } else setTimeout(function () {
            exp.afterClose()
        },
        t)
    },
    setSize: function (a) {
        try {
            if (a.op) nn_hs.setStyles(this.wrapper, {
                opacity: a.op
            });
            nn_hs.setStyles(this.wrapper, {
                width: (a.xspan + a.xp1 + a.xp2 + 2 * this.x.cb) + 'px',
                height: (a.yspan + a.yp1 + a.yp2 + 2 * this.y.cb) + 'px',
                left: a.xmin + 'px',
                top: a.ymin + 'px'
            });
            nn_hs.setStyles(this.content, {
                top: a.yp1 + 'px',
                left: a.xp1 + 'px',
                width: a.xspan + 'px',
                height: a.yspan + 'px'
            });
            if (this.isHtml) {
                nn_hs.setStyles(this.mediumContent, {
                    left: (this.x.min - a.xmin + this.x.p1 - a.xp1) + 'px',
                    top: (this.y.min - a.ymin + this.y.p1 - a.yp1) + 'px'
                });
                this.innerContent.style.visibility = 'visible'
            }
            if (this.outline && this.outlineWhileAnimating) {
                var o = this.outline.offset - a.o;
                this.outline.setPosition(this, {
                    x: a.xmin + o,
                    y: a.ymin + o,
                    w: a.xspan + a.xp1 + a.xp2 + -2 * o,
                    h: a.yspan + a.yp1 + a.yp2 + -2 * o
                },
                1)
            }
            this.wrapper.style.visibility = 'visible'
        } catch(e) {
            window.location.href = this.src
        }
    },
    afterExpand: function () {
        this.isExpanded = true;
        this.focus();
        if (this.isHtml && this.objectLoadTime == 'after') this.writeExtendedContent();
        if (this.isHtml) {
            if (this.iframe) {
                try {
                    var a = this,
                        doc = this.iframe.contentDocument || this.iframe.contentWindow.document;
                    nn_hs.addEventListener(doc, 'mousedown', function () {
                        if (nn_hs.focusKey != a.key) a.focus()
                    })
                } catch(e) {}
                if (nn_hs.ie && typeof this.isClosing != 'boolean') this.iframe.style.width = (this.objectWidth - 1) + 'px'
            }
        }
        this.prepareNextOutline();
        var p = nn_hs.page,
            mX = nn_hs.mouse.x + p.scrollLeft,
            mY = nn_hs.mouse.y + p.scrollTop;
        this.mouseIsOver = this.x.min < mX && mX < this.x.min + this.x.p1 + this.x.span + this.x.p2 && this.y.min < mY && mY < this.y.min + this.y.p1 + this.y.span + this.y.p2;
        if (this.overlayBox) this.showOverlays()
    },
    prepareNextOutline: function () {
        var a = this.key;
        var b = this.outlineType;
        new nn_hs.Outline(b, function () {
            try {
                nn_hs.expanders[a].preloadNext()
            } catch(e) {}
        })
    },
    preloadNext: function () {
        var a = this.getAdjacentAnchor(1);
        if (a && a.onclick.toString().match(/nn_hs\.expand/)) var b = nn_hs.createElement('img', {
            src: nn_hs.getSrc(a)
        })
    },
    getAdjacentAnchor: function (a) {
        var b = this.getAnchorIndex(),
            as = nn_hs.anchors.groups[this.slideshowGroup || 'none'];
        if (!as[b + a] && this.slideshow && this.slideshow.repeat) {
            if (a == 1) return as[0];
            else if (a == -1) return as[as.length - 1]
        }
        return as[b + a] || null
    },
    getAnchorIndex: function () {
        var a = nn_hs.anchors.groups[this.slideshowGroup || 'none'];
        for (var i = 0; i < a.length; i++) {
            if (a[i] == this.a) return i
        }
        return null
    },
    cancelLoading: function () {
        nn_hs.expanders[this.key] = null;
        if (this.loading) nn_hs.loading.style.left = '-9999px'
    },
    writeCredits: function () {
        this.credits = nn_hs.createElement('a', {
            href: nn_hs.creditsHref,
            className: 'highslide-credits',
            innerHTML: nn_hs.lang.creditsText,
            title: nn_hs.lang.creditsTitle
        });
        this.createOverlay({
            overlayId: this.credits,
            position: 'top left'
        })
    },
    getInline: function (a, b) {
        for (var i = 0; i < a.length; i++) {
            var c = a[i],
                s = null;
            if (!this[c + 'Id'] && this.thumbsUserSetId) this[c + 'Id'] = c + '-for-' + this.thumbsUserSetId;
            if (this[c + 'Id']) this[c] = nn_hs.getNode(this[c + 'Id']);
            if (!this[c] && !this[c + 'Text'] && this[c + 'Eval']) try {
                s = eval(this[c + 'Eval'])
            } catch(e) {}
            if (!this[c] && this[c + 'Text']) {
                s = this[c + 'Text']
            }
            if (!this[c] && !s) {
                var d = this.a.nextSibling;
                while (d && !nn_hs.isHsAnchor(d)) {
                    if ((new RegExp('highslide-' + c)).test(d.className || null)) {
                        this[c] = d.cloneNode(1);
                        break
                    }
                    d = d.nextSibling
                }
            }
            if (!this[c] && s) this[c] = nn_hs.createElement('div', {
                className: 'highslide-' + c,
                innerHTML: s
            });
            if (b && this[c]) {
                var o = {
                    position: (c == 'heading') ? 'above' : 'below'
                };
                for (var x in this[c + 'Overlay']) o[x] = this[c + 'Overlay'][x];
                o.overlayId = this[c];
                this.createOverlay(o)
            }
        }
    },
    showHideElements: function (a, b, c) {
        var d = document.getElementsByTagName(a);
        var e = a == '*' ? 'overflow' : 'visibility';
        for (var i = 0; i < d.length; i++) {
            if (e == 'visibility' || (document.defaultView.getComputedStyle(d[i], "").getPropertyValue('overflow') == 'auto' || d[i].getAttribute('hidden-by') != null)) {
                var f = d[i].getAttribute('hidden-by');
                if (b == 'visible' && f) {
                    f = f.replace('[' + this.key + ']', '');
                    d[i].setAttribute('hidden-by', f);
                    if (!f) d[i].style[e] = d[i].origProp
                } else if (b == 'hidden') {
                    var g = nn_hs.getPosition(d[i]);
                    g.w = d[i].offsetWidth;
                    g.h = d[i].offsetHeight;
                    var h = (g.x + g.w < c.x || g.x > c.x + c.w);
                    var j = (g.y + g.h < c.y || g.y > c.y + c.h);
                    var k = nn_hs.getWrapperKey(d[i]);
                    if (!h && !j && k != this.key) {
                        if (!f) {
                            d[i].setAttribute('hidden-by', '[' + this.key + ']');
                            d[i].origProp = d[i].style[e];
                            d[i].style[e] = 'hidden'
                        } else if (!f.match('[' + this.key + ']')) {
                            d[i].setAttribute('hidden-by', f + '[' + this.key + ']')
                        }
                    } else if (f == '[' + this.key + ']' || nn_hs.focusKey == k) {
                        d[i].setAttribute('hidden-by', '');
                        d[i].style[e] = d[i].origProp || ''
                    } else if (f && f.match('[' + this.key + ']')) {
                        d[i].setAttribute('hidden-by', f.replace('[' + this.key + ']', ''))
                    }
                }
            }
        }
    },
    focus: function () {
        this.wrapper.style.zIndex = nn_hs.zIndexCounter++;
        for (var i = 0; i < nn_hs.expanders.length; i++) {
            if (nn_hs.expanders[i] && i == nn_hs.focusKey) {
                var a = nn_hs.expanders[i];
                a.content.className += ' highslide-' + a.contentType + '-blur';
                if (a.isImage) {
                    a.content.style.cursor = nn_hs.ie ? 'hand' : 'pointer';
                    a.content.title = nn_hs.lang.focusTitle
                }
            }
        }
        if (this.outline) this.outline.table.style.zIndex = this.wrapper.style.zIndex;
        this.content.className = 'highslide-' + this.contentType;
        if (this.isImage) {
            this.content.title = nn_hs.lang.restoreTitle;
            nn_hs.styleRestoreCursor = window.opera ? 'pointer' : 'url(' + nn_hs.graphicsDir + nn_hs.restoreCursor + '), pointer';
            if (nn_hs.ie && nn_hs.ieVersion() < 6) nn_hs.styleRestoreCursor = 'hand';
            this.content.style.cursor = nn_hs.styleRestoreCursor
        }
        nn_hs.focusKey = this.key;
        nn_hs.addEventListener(document, window.opera ? 'keypress' : 'keydown', nn_hs.keyHandler)
    },
    move: function (e) {
        this.x.min = e.left + e.dX;
        this.y.min = e.top + e.dY;
        if (e.type == 'image') this.content.style.cursor = 'move';
        nn_hs.setStyles(this.wrapper, {
            left: this.x.min + 'px',
            top: this.y.min + 'px'
        });
        if (this.outline) this.outline.setPosition(this)
    },
    resize: function (e) {
        var w, h, r = e.width / e.height;
        w = Math.max(e.width + e.dX, Math.min(this.minWidth, this.x.full));
        if (this.isImage && Math.abs(w - this.x.full) < 12) w = this.x.full;
        h = this.isHtml ? e.height + e.dY : w / r;
        if (h < Math.min(this.minHeight, this.y.full)) {
            h = Math.min(this.minHeight, this.y.full);
            if (this.isImage) w = h * r
        }
        this.x.span = w;
        this.y.span = h;
        if (this.isHtml) {
            var d = this.scrollerDiv;
            if (typeof this.wDiff == 'undefined') {
                this.wDiff = this.innerContent.offsetWidth - d.offsetWidth;
                this.hDiff = this.innerContent.offsetHeight - d.offsetHeight
            }
            nn_hs.setStyles(d, {
                width: (this.x.span - this.wDiff) + 'px',
                height: (this.y.span - this.hDiff) - 7 + 'px'
            })
        }
        var a = {
            width: this.x.span + 'px',
            height: this.y.span + 'px'
        };
        nn_hs.setStyles(this.content, a);
        if (this.releaseMask) nn_hs.setStyles(this.releaseMask, a);
        if (this.isHtml) {
            this.mediumContent.style.width = 'auto';
            if (this.body) nn_hs.setStyles(this.body, {
                width: 'auto',
                height: 'auto'
            })
        }
        if (this.overlayBox) this.sizeOverlayBox(true);
        nn_hs.setStyles(this.wrapper, {
            width: (this.x.p1 + this.x.p2 + 2 * this.x.cb + this.x.span) + 'px',
            height: (this.y.p1 + this.y.p2 + 2 * this.y.cb + this.y.span) + 'px'
        });
        if (this.outline) this.outline.setPosition(this)
    },
    close: function () {
        if (this.isClosing || !this.isExpanded) return;
        this.isClosing = true;
        nn_hs.removeEventListener(document, window.opera ? 'keypress' : 'keydown', nn_hs.keyHandler);
        try {
            if (this.isHtml) this.htmlPrepareClose();
            this.content.style.cursor = 'default';
            this.changeSize(0, {
                xmin: this.x.min,
                ymin: this.y.min,
                xspan: this.x.span,
                yspan: parseInt(this.content.style.height),
                xp1: this.x.p1,
                yp1: this.y.p1,
                xp2: this.x.p2,
                yp2: this.y.p2,
                o: this.outline ? this.outline.offset : 0
            },
            {
                xmin: this.x.tpos - this.x.cb + this.x.tb,
                ymin: this.y.tpos - this.y.cb + this.y.tb,
                xspan: this.x.t,
                yspan: this.y.t,
                xp1: 0,
                yp1: 0,
                xp2: 0,
                yp2: 0,
                o: nn_hs.outlineStartOffset
            },
            this.restoreDuration, nn_hs.restoreSteps)
        } catch(e) {
            this.afterClose()
        }
    },
    htmlPrepareClose: function () {
        if (nn_hs.geckoMac) {
            if (!nn_hs.mask) nn_hs.mask = nn_hs.createElement('div', null, {
                position: 'absolute'
            },
            nn_hs.container);
            nn_hs.setStyles(nn_hs.mask, {
                width: this.x.span + 'px',
                height: this.y.span + 'px',
                left: this.x.min + 'px',
                top: this.y.min + 'px',
                display: 'block'
            })
        }
        if (this.objectType == 'swf') try {
            nn_hs.$(this.body.id).StopPlay()
        } catch(e) {}
        if (this.objectLoadTime == 'after' && !this.preserveContent) this.destroyObject();
        if (this.scrollerDiv && this.scrollerDiv != this.scrollingContent) this.scrollerDiv.style.overflow = 'hidden'
    },
    destroyObject: function () {
        if (nn_hs.ie && this.iframe) try {
            this.iframe.contentWindow.document.body.innerHTML = ''
        } catch(e) {}
        if (this.objectType == 'swf') swfobject.removeSWF(this.body.id);
        this.body.innerHTML = ''
    },
    sleep: function () {
        if (this.outline) this.outline.table.style.display = 'none';
        this.releaseMask = null;
        this.wrapper.style.display = 'none';
        nn_hs.push(nn_hs.sleeping, this)
    },
    awake: function () {
        nn_hs.expanders[this.key] = this;
        if (!nn_hs.allowMultipleInstances && nn_hs.focusKey != this.key) {
            try {
                nn_hs.expanders[nn_hs.focusKey].close()
            } catch(e) {}
        }
        var z = nn_hs.zIndexCounter++,
            stl = {
            display: '',
            zIndex: z
        };
        nn_hs.setStyles(this.wrapper, stl);
        this.isClosing = false;
        var o = this.outline || 0;
        if (o) {
            if (!this.outlineWhileAnimating) stl.visibility = 'hidden';
            nn_hs.setStyles(o.table, stl)
        }
        this.show()
    },
    createOverlay: function (o) {
        var a = o.overlayId;
        if (typeof a == 'string') a = nn_hs.getNode(a);
        if (!a || typeof a == 'string') return;
        a.style.display = 'block';
        this.genOverlayBox();
        var b = o.width && /^[0-9]+(px|%)$/.test(o.width) ? o.width : 'auto';
        if (/^(left|right)panel$/.test(o.position) && !/^[0-9]+px$/.test(o.width)) b = '200px';
        var c = nn_hs.createElement('div', {
            id: 'hsId' + nn_hs.idCounter++,
            hsId: o.hsId
        },
        {
            position: 'absolute',
            visibility: 'hidden',
            width: b
        },
        this.overlayBox, true);
        c.appendChild(a);
        nn_hs.setAttribs(c, {
            hideOnMouseOut: o.hideOnMouseOut,
            opacity: o.opacity || 1,
            hsPos: o.position,
            fade: o.fade
        });
        if (this.gotOverlays) {
            this.positionOverlay(c);
            if (!c.hideOnMouseOut || this.mouseIsOver) nn_hs.fade(c, 0, c.opacity)
        }
        nn_hs.push(this.overlays, nn_hs.idCounter - 1)
    },
    positionOverlay: function (a) {
        var p = a.hsPos || 'middle center';
        if (/left$/.test(p)) a.style.left = 0;
        if (/center$/.test(p)) nn_hs.setStyles(a, {
            left: '50%',
            marginLeft: '-' + Math.round(a.offsetWidth / 2) + 'px'
        });
        if (/right$/.test(p)) a.style.right = 0;
        if (/^leftpanel$/.test(p)) {
            nn_hs.setStyles(a, {
                right: '100%',
                marginRight: this.x.cb + 'px',
                top: -this.y.cb + 'px',
                bottom: -this.y.cb + 'px',
                overflow: 'auto'
            });
            this.x.p1 = a.offsetWidth
        } else if (/^rightpanel$/.test(p)) {
            nn_hs.setStyles(a, {
                left: '100%',
                marginLeft: this.x.cb + 'px',
                top: -this.y.cb + 'px',
                bottom: -this.y.cb + 'px',
                overflow: 'auto'
            });
            this.x.p2 = a.offsetWidth
        }
        if (/^top/.test(p)) a.style.top = 0;
        if (/^middle/.test(p)) nn_hs.setStyles(a, {
            top: '50%',
            marginTop: '-' + Math.round(a.offsetHeight / 2) + 'px'
        });
        if (/^bottom/.test(p)) a.style.bottom = 0;
        if (/^above$/.test(p)) {
            nn_hs.setStyles(a, {
                left: (-this.x.p1 - this.x.cb) + 'px',
                right: (-this.x.p2 - this.x.cb) + 'px',
                bottom: '100%',
                marginBottom: this.y.cb + 'px',
                width: 'auto'
            });
            this.y.p1 = a.offsetHeight
        } else if (/^below$/.test(p)) {
            nn_hs.setStyles(a, {
                position: 'relative',
                left: (-this.x.p1 - this.x.cb) + 'px',
                right: (-this.x.p2 - this.x.cb) + 'px',
                top: '100%',
                marginTop: this.y.cb + 'px',
                width: 'auto'
            });
            this.y.p2 = a.offsetHeight;
            a.style.position = 'absolute'
        }
    },
    getOverlays: function () {
        this.getInline(['heading', 'caption'], true);
        if (this.heading && this.dragByHeading) this.heading.className += ' highslide-move';
        if (nn_hs.showCredits) this.writeCredits();
        for (var i = 0; i < nn_hs.overlays.length; i++) {
            var o = nn_hs.overlays[i],
                tId = o.thumbnailId,
                sg = o.slideshowGroup;
            if ((!tId && !sg) || (tId && tId == this.thumbsUserSetId) || (sg && sg === this.slideshowGroup)) {
                if (this.isImage || (this.isHtml && o.useOnHtml)) this.createOverlay(o)
            }
        }
        var a = [];
        for (var i = 0; i < this.overlays.length; i++) {
            var o = nn_hs.$('hsId' + this.overlays[i]);
            if (/panel$/.test(o.hsPos)) this.positionOverlay(o);
            else nn_hs.push(a, o)
        }
        var b = this.x.p1 + this.x.full + this.x.p2;
        if (nn_hs.padToMinWidth && b < nn_hs.minWidth) {
            this.x.p1 += (nn_hs.minWidth - b) / 2;
            this.x.p2 += (nn_hs.minWidth - b) / 2
        }
        for (var i = 0; i < a.length; i++) this.positionOverlay(a[i]);
        this.gotOverlays = true
    },
    genOverlayBox: function () {
        if (!this.overlayBox) this.overlayBox = nn_hs.createElement('div', null, {
            position: 'absolute',
            width: this.x.span ? this.x.span + 'px' : this.x.full + 'px',
            height: 0,
            visibility: 'hidden',
            overflow: 'hidden',
            zIndex: nn_hs.ie ? 4 : null
        },
        nn_hs.container, true)
    },
    sizeOverlayBox: function (a, b) {
        nn_hs.setStyles(this.overlayBox, {
            width: this.x.span + 'px',
            height: this.y.span + 'px'
        });
        if (a || b) {
            for (var i = 0; i < this.overlays.length; i++) {
                var o = nn_hs.$('hsId' + this.overlays[i]);
                if (o && /^(above|below)$/.test(o.hsPos)) {
                    if (nn_hs.ie && (nn_hs.ieVersion() <= 6 || document.compatMode == 'BackCompat')) {
                        o.style.width = (this.overlayBox.offsetWidth + 2 * this.x.cb + this.x.p1 + this.x.p2) + 'px'
                    }
                    this.y[o.hsPos == 'above' ? 'p1' : 'p2'] = o.offsetHeight
                }
            }
        }
        if (a) {
            nn_hs.setStyles(this.content, {
                top: this.y.p1 + 'px'
            });
            nn_hs.setStyles(this.overlayBox, {
                top: (this.y.p1 + this.y.cb) + 'px'
            })
        }
    },
    showOverlays: function () {
        var b = this.overlayBox;
        nn_hs.setStyles(b, {
            top: (this.y.p1 + this.y.cb) + 'px',
            left: (this.x.p1 + this.x.cb) + 'px',
            overflow: 'visible'
        });
        if (nn_hs.safari) b.style.visibility = 'visible';
        this.wrapper.appendChild(b);
        for (var i = 0; i < this.overlays.length; i++) {
            var o = nn_hs.$('hsId' + this.overlays[i]);
            o.style.zIndex = 4;
            if (!o.hideOnMouseOut || this.mouseIsOver) nn_hs.fade(o, 0, o.opacity)
        }
    },
    createFullExpand: function () {
        this.fullExpandLabel = nn_hs.createElement('a', {
            href: 'javascript:nn_hs.expanders[' + this.key + '].doFullExpand();',
            title: nn_hs.lang.fullExpandTitle,
            className: 'highslide-full-expand'
        });
        this.createOverlay({
            overlayId: this.fullExpandLabel,
            position: nn_hs.fullExpandPosition,
            hideOnMouseOut: true,
            opacity: nn_hs.fullExpandOpacity
        })
    },
    doFullExpand: function () {
        try {
            if (this.fullExpandLabel) nn_hs.discardElement(this.fullExpandLabel);
            this.focus();
            this.x.min = parseInt(this.wrapper.style.left) - (this.x.full - this.content.width) / 2;
            if (this.x.min < nn_hs.marginLeft) this.x.min = nn_hs.marginLeft;
            this.wrapper.style.left = this.x.min + 'px';
            nn_hs.setStyles(this.content, {
                width: this.x.full + 'px',
                height: this.y.full + 'px'
            });
            this.x.span = this.x.full;
            this.y.span = this.y.full;
            if (this.overlayBox) this.sizeOverlayBox(true);
            nn_hs.setStyles(this.wrapper, {
                width: (this.x.p1 + 2 * this.x.cb + this.x.span + this.x.p2) + 'px',
                height: (this.y.p1 + 2 * this.y.cb + this.y.span + this.y.p2) + 'px'
            });
            if (this.outline) this.outline.setPosition(this);
            this.redoShowHide()
        } catch(e) {
            window.location.href = this.content.src
        }
    },
    redoShowHide: function () {
        var a = {
            x: parseInt(this.wrapper.style.left) - 20,
            y: parseInt(this.wrapper.style.top) - 20,
            w: this.content.offsetWidth + 40 + this.x.p1 + this.x.p2,
            h: this.content.offsetHeight + 40 + this.y.p1 + this.y.p2
        };
        if (nn_hs.hideSelects) this.showHideElements('SELECT', 'hidden', a);
        if (nn_hs.hideIframes) this.showHideElements('IFRAME', 'hidden', a);
        if (nn_hs.geckoMac) this.showHideElements('*', 'hidden', a)
    },
    afterClose: function () {
        this.a.className = this.a.className.replace('highslide-active-anchor', '');
        if (nn_hs.hideSelects) this.showHideElements('SELECT', 'visible');
        if (nn_hs.hideIframes) this.showHideElements('IFRAME', 'visible');
        if (nn_hs.geckoMac) this.showHideElements('*', 'visible');
        if (this.isHtml && this.preserveContent) this.sleep();
        else {
            if (this.outline && this.outlineWhileAnimating) this.outline.destroy();
            nn_hs.discardElement(this.wrapper)
        }
        if (nn_hs.mask) nn_hs.mask.style.display = 'none';
        nn_hs.expanders[this.key] = null;
        nn_hs.reOrder()
    }
};
nn_hs.Ajax = function (a, b, c) {
    this.a = a;
    this.content = b;
    this.pre = c
};
nn_hs.Ajax.prototype = {
    run: function () {
        if (!this.src) this.src = nn_hs.getSrc(this.a);
        if (this.src.match('#')) {
            var a = this.src.split('#');
            this.src = a[0];
            this.id = a[1]
        }
        if (nn_hs.cachedGets[this.src]) {
            this.cachedGet = nn_hs.cachedGets[this.src];
            if (this.id) this.getElementContent();
            else this.loadHTML();
            return
        }
        try {
            this.xmlHttp = new XMLHttpRequest()
        } catch(e) {
            try {
                this.xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")
            } catch(e) {
                try {
                    this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")
                } catch(e) {
                    this.onError()
                }
            }
        }
        var b = this;
        this.xmlHttp.onreadystatechange = function () {
            if (b.xmlHttp.readyState == 4) {
                if (b.id) b.getElementContent();
                else b.loadHTML()
            }
        };
        this.xmlHttp.open("GET", this.src, true);
        this.xmlHttp.send(null)
    },
    getElementContent: function () {
        nn_hs.init();
        var a = window.opera || nn_hs.ie6SSL ? {
            src: 'about:blank'
        } : null;
        this.iframe = nn_hs.createElement('iframe', a, {
            position: 'absolute',
            top: '-9999px'
        },
        nn_hs.container);
        this.loadHTML()
    },
    loadHTML: function () {
        var s = this.cachedGet || this.xmlHttp.responseText;
        if (this.pre) nn_hs.cachedGets[this.src] = s;
        if (!nn_hs.ie || nn_hs.ieVersion() >= 5.5) {
            s = s.replace(/\s/g, ' ').replace(new RegExp('<link[^>]*>', 'gi'), '').replace(new RegExp('<script[^>]*>.*?</script>', 'gi'), '');
            if (this.iframe) {
                var a = this.iframe.contentDocument;
                if (!a && this.iframe.contentWindow) a = this.iframe.contentWindow.document;
                if (!a) {
                    var b = this;
                    setTimeout(function () {
                        b.loadHTML()
                    },
                    25);
                    return
                }
                a.open();
                a.write(s);
                a.close();
                try {
                    s = a.getElementById(this.id).innerHTML
                } catch(e) {
                    try {
                        s = this.iframe.document.getElementById(this.id).innerHTML
                    } catch(e) {}
                }
            } else {
                s = s.replace(new RegExp('^.*?<body[^>]*>(.*?)</body>.*?$', 'i'), '$1')
            }
        }
        nn_hs.getElementByClass(this.content, 'DIV', 'highslide-body').innerHTML = s;
        this.onLoad();
        for (var x in this) this[x] = null
    }
};
if (document.readyState && nn_hs.ie) {
    (function () {
        try {
            document.documentElement.doScroll('left')
        } catch(e) {
            setTimeout(arguments.callee, 50);
            return
        }
        nn_hs.domReady()
    })()
}
nn_hs.langDefaults = nn_hs.lang;
var HsExpander = nn_hs.Expander;
nn_hs.addEventListener(document, 'mousemove', function (e) {
    nn_hs.mouse = {
        x: e.clientX,
        y: e.clientY
    }
});
nn_hs.addEventListener(document, 'mousedown', nn_hs.mouseClickHandler);
nn_hs.addEventListener(document, 'mouseup', nn_hs.mouseClickHandler);
nn_hs.addEventListener(window, 'load', nn_hs.preloadImages);
nn_hs.addEventListener(window, 'load', nn_hs.preloadAjax);