var MagicTools = {
    version: '1.09',
    browser: {
        ie: !!(window.attachEvent && !window.opera),
        ie6: !!(window.attachEvent && !window.XMLHttpRequest),
        ie7: !!(window.ActiveXObject && window.XMLHttpRequest),
        opera: !!window.opera,
        webkit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
        gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
        mobilesafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/),
        backCompatMode: document.compatMode && 'backcompat' == document.compatMode.toLowerCase()
    },
    $: function(el) {
        if (!el) return null;
        if ("string" == typeof el) {
            el = document.getElementById(el)
        }
        return el
    },
    $A: function(arr) {
        if (!arr) return [];
        if (arr.toArray) {
            return arr.toArray()
        }
        var length = arr.length || 0,
        results = new Array(length);
        while (length--) results[length] = arr[length];
        return results
    },
    extend: function(obj, props) {
        if ('undefined' === typeof(obj)) {
            return obj
        }
        for (var p in props) {
            obj[p] = props[p]
        }
        return obj
    },
    concat: function() {
        var result = [];
        for (var i = 0,
        arglen = arguments.length; i < arglen; i++) {
            for (var j = 0,
            arrlen = arguments[i].length; j < arrlen; j++) {
                result.push(arguments[i][j])
            }
        }
        return result
    },
    bind: function() {
        var args = MagicTools.$A(arguments),
        __method = args.shift(),
        object = args.shift();
        return function() {
            return __method.apply(object, MagicTools.concat(args, MagicTools.$A(arguments)))
        }
    },
    bindAsEvent: function() {
        var args = MagicTools.$A(arguments),
        __method = args.shift(),
        object = args.shift();
        return function(event) {
            return __method.apply(object, MagicTools.concat([event || window.event], args))
        }
    },
    inArray: function(val, arr) {
        var len = arr.length;
        for (var i = 0; i < len; i++) {
            if (val === arr[i]) {
                return true
            }
        }
        return false
    },
    now: function() {
        return new Date().getTime()
    },
    getPageSize: function() {
        var xScroll, yScroll, pageHeight, pageWidth, scrollX, scrollY;
        var ieBody = (!MagicTools.browser.backCompatMode) ? document.documentElement: document.body;
        var body = document.body;
        xScroll = (window.innerWidth && window.scrollMaxX) ? window.innerWidth + window.scrollMaxX: (body.scrollWidth > body.offsetWidth) ? body.scrollWidth: (MagicTools.browser.ie && MagicTools.browser.backCompatMode) ? body.scrollWidth: body.offsetWidth;
        yScroll = (window.innerHeight && window.scrollMaxY) ? window.innerHeight + window.scrollMaxY: (body.scrollHeight > body.offsetHeight) ? body.scrollHeight: body.offsetHeight;
        var windowWidth, windowHeight;
        windowWidth = MagicTools.browser.ie ? ieBody.scrollWidth: (document.documentElement.clientWidth || self.innerWidth),
        windowHeight = MagicTools.browser.ie ? ieBody.clientHeight: (document.documentElement.clientHeight || self.innerHeight);
        scrollX = (self.pageXOffset) ? self.pageXOffset: ieBody.scrollLeft;
        scrollY = (self.pageYOffset) ? self.pageYOffset: ieBody.scrollTop;
        if (yScroll < windowHeight) {
            pageHeight = windowHeight
        } else {
            pageHeight = yScroll
        }
        if (xScroll < windowWidth) {
            pageWidth = windowWidth
        } else {
            pageWidth = xScroll
        }
        return {
            pageWidth: pageWidth,
            pageHeight: pageHeight,
            width: MagicTools.browser.ie ? ieBody.clientWidth: (document.documentElement.clientWidth || self.innerWidth),
            height: MagicTools.browser.ie ? ieBody.clientHeight: (MagicTools.browser.opera) ? self.innerHeight: (self.innerHeight || document.documentElement.clientHeight),
            scrollX: scrollX,
            scrollY: scrollY,
            viewWidth: xScroll,
            viewHeight: yScroll
        }
    },
    Event: {
        add: function(el, event, handler) {
            el = MagicTools.$(el);
            if (el.addEventListener) {
                el.addEventListener(event, handler, false)
            } else {
                el.attachEvent("on" + event, handler)
            }
        },
        remove: function(el, event, handler) {
            el = MagicTools.$(el);
            if (el.removeEventListener) {
                el.removeEventListener(event, handler, false)
            } else {
                el.detachEvent("on" + event, handler)
            }
        },
        stop: function(event) {
            if (event.stopPropagation) {
                event.stopPropagation()
            } else {
                event.cancelBubble = true
            }
            if (event.preventDefault) {
                event.preventDefault()
            } else {
                event.returnValue = false
            }
        },
        fire: function(el, evType, evName) {
            el = MagicTools.$(el);
            if (el == document && document.createEvent && !el.dispatchEvent) el = document.documentElement;
            var event;
            if (document.createEvent) {
                event = document.createEvent(evType);
                event.initEvent(evName, true, true)
            } else {
                event = document.createEventObject();
                event.eventType = evType
            }
            if (document.createEvent) {
                el.dispatchEvent(event)
            } else {
                el.fireEvent('on' + evName, event)
            }
            return event
        }
    },
    String: {
        trim: function(s) {
            return s.replace(/^\s+|\s+$/g, '')
        },
        camelize: function(s) {
            return s.replace(/-(\D)/g,
            function(m1, m2) {
                return m2.toUpperCase()
            })
        }
    },
    Element: {
        hasClass: function(el, klass) {
            if (! (el = MagicTools.$(el))) {
                return
            }
            return ((' ' + el.className + ' ').indexOf(' ' + klass + ' ') > -1)
        },
        addClass: function(el, klass) {
            if (! (el = MagicTools.$(el))) {
                return
            }
            if (!MagicTools.Element.hasClass(el, klass)) {
                el.className += (el.className ? ' ': '') + klass
            }
        },
        removeClass: function(el, klass) {
            if (! (el = MagicTools.$(el))) {
                return
            }
            el.className = MagicTools.String.trim(el.className.replace(new RegExp('(^|\\s)' + klass + '(?:\\s|$)'), '$1'))
        },
        getStyle: function(el, style) {
            el = MagicTools.$(el);
            style = style == 'float' ? 'cssFloat': MagicTools.String.camelize(style);
            var val = el.style[style];
            if (!val && document.defaultView) {
                var css = document.defaultView.getComputedStyle(el, null);
                val = css ? css[style] : null
            } else if (!val && el.currentStyle) {
                val = el.currentStyle[style]
            }
            if ('opacity' == style) return val ? parseFloat(val) : 1.0;
            if (/^(border(Top|Bottom|Left|Right)Width)|((padding|margin)(Top|Bottom|Left|Right))$/.test(style)) {
                val = parseInt(val) ? val: '0px'
            }
            return val == 'auto' ? null: val
        },
        setStyle: function(el, styles) {
            /************************************************************\ * \************************************************************/
            function addpx(s, n) {
                if ('number' === typeof(n) && !('zIndex' === s || 'zoom' === s)) {
                    return 'px'
                }
                return ''
            }
            el = MagicTools.$(el);
            var elStyle = el.style;
            for (var s in styles) {
                try {
                    if ('opacity' === s) {
                        MagicTools.Element.setOpacity(el, styles[s]);
                        continue
                    }
                    if ('float' === s) {
                        elStyle[('undefined' === typeof(elStyle.styleFloat)) ? 'cssFloat': 'styleFloat'] = styles[s];
                        continue
                    }
                    elStyle[MagicTools.String.camelize(s)] = styles[s] + addpx(MagicTools.String.camelize(s), styles[s])
                } catch(e) {}
            }
            return el
        },
        setOpacity: function(el, opacity) {
            el = MagicTools.$(el);
            var elStyle = el.style;
            opacity = parseFloat(opacity);
            if (opacity == 0) {
                if ('hidden' != elStyle.visibility) elStyle.visibility = 'hidden'
            } else {
                if (opacity > 1) {
                    opacity = parseFloat(opacity / 100)
                }
                if ('visible' != elStyle.visibility) elStyle.visibility = 'visible'
            }
            if (!el.currentStyle || !el.currentStyle.hasLayout) {
                elStyle.zoom = 1
            }
            if (MagicTools.browser.ie) {
                elStyle.filter = (opacity == 1) ? '': 'alpha(opacity=' + opacity * 100 + ')'
            }
            elStyle.opacity = opacity;
            return el
        },
        getSize: function(el) {
            el = MagicTools.$(el);
            return {
                'width': el.offsetWidth,
                'height': el.offsetHeight
            }
        },
        getPosition: function(el) {
            el = MagicTools.$(el);
            var l = t = 0;
            do {
                l += el.offsetLeft || 0;
                t += el.offsetTop || 0;
                el = el.offsetParent
            } while ( el );
            return {
                'top': t,
                'left': l
            }
        },
        getRect: function(el) {
            var p = MagicTools.Element.getPosition(el);
            var s = MagicTools.Element.getSize(el);
            return {
                'top': p.top,
                'bottom': p.top + s.height,
                'left': p.left,
                'right': p.left + s.width
            }
        }
    },
    Transition: {
        linear: function(x) {
            return x
        },
        sin: function(x) {
            return - (Math.cos(Math.PI * x) - 1) / 2
        },
        quadIn: function(p) {
            return Math.pow(p, 2)
        },
        quadOut: function(p) {
            return 1 - MagicTools.Transition.quadIn(1 - p)
        },
        cubicIn: function(p) {
            return Math.pow(p, 3)
        },
        cubicOut: function(p) {
            return 1 - MagicTools.Transition.cubicIn(1 - p)
        },
        backIn: function(p, x) {
            x = x || 1.618;
            return Math.pow(p, 2) * ((x + 1) * p - x)
        },
        backOut: function(p, x) {
            return 1 - MagicTools.Transition.backIn(1 - p)
        },
        elastic: function(p, x) {
            x = x || [];
            return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3)
        },
        none: function(x) {
            return 0
        }
    }
};
MagicTools.Render = function() {
    this.init.apply(this, arguments)
};
MagicTools.Render.prototype = {
    defaults: {
        fps: 50,
        duraton: 0.5,
        transition: MagicTools.Transition.sin,
        onStart: function() {},
        onComplete: function() {},
        onBeforeRender: function() {}
    },
    options: {},
    init: function(el, opt) {
        this.el = el;
        this.options = MagicTools.extend(MagicTools.extend({},
        this.defaults), opt);
        this.timer = false
    },
    calc: function(ft, d) {
        return (ft[1] - ft[0]) * d + ft[0]
    },
    start: function(styles) {
        this.styles = styles;
        this.state = 0;
        this.curFrame = 0;
        this.startTime = MagicTools.now();
        this.finishTime = this.startTime + this.options.duration * 1000;
        this.timer = setInterval(MagicTools.bind(this.loop, this), Math.round(1000 / this.options.fps));
        this.options.onStart()
    },
    loop: function() {
        var now = MagicTools.now();
        if (now >= this.finishTime) {
            if (this.timer) {
                clearInterval(this.timer);
                this.timer = false
            }
            this.render(1.0);
            setTimeout(this.options.onComplete, 10);
            this.options.onComplete = function() {};
            return this
        }
        var dx = this.options.transition((now - this.startTime) / (this.options.duration * 1000));
        this.render(dx)
    },
    render: function(dx) {
        var to_css = {};
        for (var s in this.styles) {
            if ('opacity' === s) {
                to_css[s] = Math.round(this.calc(this.styles[s], dx) * 100) / 100
            } else {
                to_css[s] = Math.round(this.calc(this.styles[s], dx))
            }
        }
        this.options.onBeforeRender(to_css);
        MagicTools.Element.setStyle(this.el, to_css)
    }
};
if (!Array.prototype.indexOf) {
    MagicTools.extend(Array.prototype, {
        'indexOf': function(item, from) {
            var len = this.length;
            for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++) {
                if (this[i] === item) return i
            }
            return - 1
        }
    })
}
var MagicThumb = {
    version: '1.2.07',
    thumbs: [],
    activeIndexes: [],
    zIndex: 1000,
    bgFader: false,
    defaults: {
        transition: MagicTools.Transition.quadIn,
        zIndex: 1000,
        duration: 0.5,
        allowMultipleImages: false,
        keepThumbnail: false,
        zoomPosition: 'center',
        zoomTrigger: 'click',
        zoomTriggerDelay: 0.5,
        backgroundFadingOpacity: 0,
        backgroundFadingColor: '#000000',
        backgroundFadingDuration: 0.2,
        allowKeyboard: true,
        useCtrlKey: false,
        captionSlideDuration: 0.250,
        captionSrc: 'span',
        controlbarEnable: true,
        controlbarPosition: 'top right',
        controlbarButtons: ['prev', 'next', 'close']
    },
    options: {},
    cbButtons: {
        'prev': {
            index: 0,
            title: 'Previous'
        },
        'next': {
            index: 1,
            title: 'Next'
        },
        'close': {
            index: 2,
            title: 'Close'
        }
    },
    init: function() {
        this.options = MagicTools.extend(this.defaults, this.options);
        this.options.zoomPosition = /auto/i.test(this.options.zoomPosition) ? 'auto': 'center';
        this.options.zoomTrigger = /mouseover/i.test(this.options.zoomTrigger) ? 'mouseover': 'click';
        this.zIndex = this.options.zIndex;
        var as = document.getElementsByTagName("a");
        var l = as.length;
        var thumbIndex = 0;
        for (var i = 0; i < l; i++) {
            if (MagicTools.Element.hasClass(as[i], 'MagicThumb')) {
                MagicThumb.thumbs.push(new MagicThumb.Item(as[i], thumbIndex++, {
                    expandDuration: (this.options.zoomDuration || this.options.duration),
                    collapseDuration: (this.options.restoreDuration || this.options.duration),
                    captionSlideDuration: this.options.captionSlideDuration,
                    captionSrc: this.options.captionSrc,
                    transition: this.options.transition,
                    keepThumbnail: this.options.keepThumbnail,
                    zoomTrigger: this.options.zoomTrigger,
                    zoomTriggerDelay: this.options.zoomTriggerDelay,
                    zoomPosition: this.options.zoomPosition
                }))
            }
        }
    },
    refresh: function() {
        for (var t = MagicThumb.thumbs.pop(); t != null && undefined != t; t = MagicThumb.thumbs.pop()) {
            t.destroy();
            delete t
        };
        MagicThumb.thumbs = [];
        MagicThumb.activeIndexes = [];
        MagicThumb.init();
        return
    },
    expand: function(e, idx) {
    	
        if (e) {
            MagicTools.Event.stop(e)
        }
        var t = MagicThumb.getFocused();
        if (!MagicThumb.options.allowMultipleImages && undefined != t && idx != t.index) {
            MagicThumb.getFocused().collapse(null, MagicThumb.thumbs[idx], true)
        } else {
            MagicThumb.thumbs[idx].expand(this.zIndex)
        }
    },
    setFocused: function(idx) {
        var pos = this.activeIndexes.indexOf(idx);
        if ( - 1 !== pos) {
            this.activeIndexes.splice(pos, 1)
        }
        this.activeIndexes.push(idx)
    },
    getFocused: function() {
        return (this.activeIndexes.length > 0) ? this.thumbs[this.activeIndexes[this.activeIndexes.length - 1]] : undefined
    },
    unsetFocused: function(idx) {
        var pos = this.activeIndexes.indexOf(idx);
        if ( - 1 === pos) {
            return
        }
        this.activeIndexes.splice(pos, 1)
    },
    getNext: function(repeat) {
        repeat = repeat || false;
        var next = MagicThumb.thumbs[MagicThumb.getFocused().index + 1];
        if (undefined == next && repeat) {
            next = MagicThumb.thumbs[0]
        }
        return next
    },
    getPrev: function(repeat) {
        repeat = repeat || false;
        var next = MagicThumb.thumbs[MagicThumb.getFocused().index - 1];
        if (undefined == next && repeat) {
            next = MagicThumb.thumbs[MagicThumb.thumbs.length - 1]
        }
        return next
    },
    getFirst: function() {
        return MagicThumb.thumbs[0]
    },
    getLast: function() {
        return MagicThumb.thumbs[MagicThumb.thumbs.length - 1]
    },
    onKey: function(e) {
        if (!MagicThumb.options.allowKeyboard) {
            MagicTools.Event.remove(document, 'keydown', MagicThumb.onKey);
            return true
        }
        var code = e.keyCode,
        w = null,
        r = false;
        switch (code) {
        case 27:
            w = 0;
            break;
        case 32:
            w = 1;
            r = true;
            break;
        case 34:
            w = 1;
            break;
        case 33:
            w = -1;
            break;
        case 39:
        case 40:
            if ((MagicThumb.options.useCtrlKey) ? (e.ctrlKey || e.metaKey) : true) {
                w = 1
            }
            break;
        case 37:
        case 38:
            if ((MagicThumb.options.useCtrlKey) ? (e.ctrlKey || e.metaKey) : true) {
                w = -1
            }
            break
        }
        if (null !== w) {
            if (MagicThumb.activeIndexes.length > 0) {
                MagicTools.Event.stop(e)
            }
            try {
                var ft = MagicThumb.getFocused();
                var next = null;
                if (0 == w) {
                    ft.collapse(null)
                } else if ( - 1 == w) {
                    next = MagicThumb.getPrev(r)
                } else if (1 == w) {
                    next = MagicThumb.getNext(r)
                }
                if (undefined != next) {
                    ft.collapse(null, next)
                }
            } catch(e) {
                if (console) {
                    console.warn(e.description)
                }
            }
        }
    },
    fixCursor: function(el) {
        if (MagicTools.browser.opera) {
            MagicTools.Element.setStyle(el, {
                'cursor': 'pointer'
            })
        }
    },
    fadeInBackground: function() {
        if (MagicThumb.bgFader && 'none' != MagicTools.Element.getStyle(MagicThumb.bgFader, 'display')) {
            return
        }
        if (!MagicThumb.bgFader) {
            MagicThumb.bgFader = document.createElement('div');
            MagicTools.Element.addClass(MagicThumb.bgFader, 'MagicThumb-bgfader');
            var ps = MagicTools.getPageSize();
            MagicTools.Element.setStyle(MagicThumb.bgFader, {
                'position': 'absolute',
                'display': 'block',
                'top': 0,
                'left': 0,
                'width': ps.pageWidth,
                'height': ps.pageHeight,
                'background-color': MagicThumb.options.backgroundFadingColor,
                'opacity': 0
            });
            var frame = document.createElement('iframe');
            MagicTools.Element.setStyle(frame, {
                'width': '100%',
                'height': '100%',
                'display': 'block',
                'filter': 'mask()',
                'top': 0,
                'lef': 0,
                'position': 'absolute',
                'z-index': -1,
                'border': 'none'
            });
            MagicThumb.bgFader.appendChild(frame);
            document.body.appendChild(MagicThumb.bgFader);
            MagicTools.Event.add(window, 'resize',
            function() {
                var ps = MagicTools.getPageSize();
                MagicTools.Element.setStyle(MagicThumb.bgFader, {
                    'width': ps.width,
                    'height': ps.height
                });
                setTimeout(function() {
                    var ps = MagicTools.getPageSize();
                    MagicTools.Element.setStyle(MagicThumb.bgFader, {
                        'width': ps.pageWidth,
                        'height': ps.pageHeight
                    })
                },
                1)
            })
        }
        new MagicTools.Render(MagicThumb.bgFader, {
            duration: MagicThumb.options.backgroundFadingDuration,
            transition: MagicTools.Transition.linear,
            onStart: function() {
                MagicTools.Element.setStyle(MagicThumb.bgFader, {
                    'display': 'block',
                    'opacity': 0
                })
            }
        }).start({
            'opacity': [0, MagicThumb.options.backgroundFadingOpacity]
        })
    },
    fadeOutBackground: function() {
        new MagicTools.Render(MagicThumb.bgFader, {
            duration: MagicThumb.options.backgroundFadingDuration,
            transition: MagicTools.Transition.linear,
            onComplete: function() {
                MagicTools.Element.setStyle(MagicThumb.bgFader, {
                    'display': 'none'
                })
            }
        }).start({
            'opacity': [MagicThumb.options.backgroundFadingOpacity, 0]
        })
    }
};
MagicThumb.Item = function() {
    this.init.apply(this, arguments)
};
MagicThumb.Item.prototype = {
    init: function(a, idx, opt) {
        this.options = {};
        this.anchor = a;
        this.index = idx;
        this.zoomed = false;
        this.hasCaption = false;
        this.cont = false;
        this.caption = false;
        this.controlbar = false;
        this.bigImg = false;
        this.eventsCache = [];
        this.firstRun = true;
        this.options = MagicTools.extend(this.options, opt);
        this.onImgLoad = MagicTools.bind(this.prepare, this);
        this.bigImg = document.createElement('img');
        MagicTools.Event.add(this.bigImg, 'load', this.onImgLoad);
        setTimeout(MagicTools.bind(function() {
            this.bigImg.src = a.href
        },
        this), 1)
    },
    destroy: function() {
        for (var c = this.eventsCache.pop(); c != null && undefined != c; c = this.eventsCache.pop()) {
            MagicTools.Event.remove(c.obj, c.evt, c.handler);
            delete c
        }
        delete this.eventsCache;
        if (!this.zoomed) {
            document.body.removeChild(this.bigImg)
        } else {
            MagicTools.Element.removeClass(this.anchor, 'MagicThumb-zoomed');
            MagicTools.Element.setStyle(this.smallImg, {
                'visibility': 'visible'
            });
            MagicThumb.fixCursor(this.anchor)
        }
        document.body.removeChild(this.cont)
    },
    addEvent: function(el, event, handler) {
        MagicTools.Event.add(el, event, handler);
        this.eventsCache.push({
            'obj': el,
            'evt': event,
            'handler': handler
        })
    },
    createControlBar: function() {
        this.controlbar = document.createElement("div");
        MagicTools.Element.setStyle(this.controlbar, {
            'position': 'absolute',
            'left': -9999,
            'visibility': 'hidden',
            'z-index': 3
        });
        MagicTools.Element.addClass(this.controlbar, 'MagicThumb-controlbar');
        this.cont.appendChild(this.controlbar);
        var icons = [];
        var buttons = this.options.controlbarButtons || MagicThumb.options.controlbarButtons;
        var cbLength = buttons.length;
        for (var i = 0; i < cbLength; i++) {
            if ('next' == buttons[i] && MagicThumb.getLast() === this) {
                continue
            }
            if ('prev' == buttons[i] && MagicThumb.getFirst() === this) {
                continue
            }
            var cbBtn = MagicThumb.cbButtons[buttons[i]];
            var cbA = document.createElement('a');
            cbA.title = cbBtn.title;
            cbA.href = '#';
            cbA.rel = buttons[i];
            MagicTools.Element.setStyle(cbA, {
                'float': 'left',
                'position': 'relative'
            });
            cbA = this.controlbar.appendChild(cbA);
            var w = -cbBtn.index * parseInt(MagicTools.Element.getStyle(cbA, 'width'));
            var h = parseInt(MagicTools.Element.getStyle(cbA, 'height'));
            var cbBgWrapper = document.createElement('span');
            MagicTools.Element.setStyle(cbBgWrapper, {
                'left': w,
                'cursor': 'pointer'
            });
            cbA.appendChild(cbBgWrapper);
            var bgIMG = document.createElement('img');
            MagicTools.Event.add(bgIMG, 'load', MagicTools.bind(function(img) {
                MagicTools.Event.remove(img, 'load', arguments.callee);
                MagicTools.Element.setStyle(this, {
                    'width': img.width,
                    'height': img.height
                })
            },
            cbBgWrapper, bgIMG));
            bgIMG.src = MagicTools.Element.getStyle(cbBgWrapper, 'background-image').replace(/url\s*\(\s*\" { 0,1 } ([^\"]*)\" { 0,1 } \s*\)/i, '$1');
            if (MagicTools.browser.ie6) {
                var bgURL = MagicTools.Element.getStyle(cbBgWrapper, 'background-image');
                bgURL = bgURL.replace(/url\s*\(\s*"(.*)"\s*\)/i, '$1');
                cbBgWrapper.style.display = 'inline-block';
                MagicTools.Element.setStyle(cbBgWrapper, {
                    'z-index': 1,
                    'position': 'relative'
                });
                cbBgWrapper.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + bgURL + "', sizingMethod='crop')";
                cbBgWrapper.style.backgroundImage = 'none'
            }
            this.addEvent(cbA, 'mouseover', MagicTools.bindAsEvent(function(e, w, h) {
                MagicTools.Element.setStyle(this.firstChild, {
                    'left': w,
                    'top': h
                })
            },
            cbA, w, -h));
            this.addEvent(cbA, 'mouseout', MagicTools.bindAsEvent(function(e, w, h) {
                MagicTools.Element.setStyle(this.firstChild, {
                    'left': w,
                    'top': 0
                })
            },
            cbA, w));
            this.addEvent(cbA, 'click', MagicTools.bindAsEvent(this.onCBClick, this));
            if ('close' == cbA.rel && /left/i.test(this.options.controlbarPosition || MagicThumb.options.controlbarPosition) && this.controlbar.firstChild !== cbA) {
                cbA = this.controlbar.insertBefore(cbA, this.controlbar.firstChild)
            }
        }
        if (MagicTools.browser.ie6) {
            this.cbOverlay = document.createElement('div');
            MagicTools.Element.setStyle(this.cbOverlay, {
                'position': 'absolute',
                'left': -9999,
                'z-index': 4,
                'width': 18,
                'height': 18,
                'background-image': 'url(' + this.bigImg.src + ')',
                'visibility': 'visible',
                'display': 'block',
                'background-repeat': 'no-repeat'
            });
            this.cont.appendChild(this.cbOverlay)
        }
    },
    updatePos: function(){
    	var sd = {
            pos: MagicTools.Element.getPosition(this.smallImg)
        };
        this.bigImg.initLeft = sd.pos.left;
    },
    prepare: function() {
        /************************************************************\ * \************************************************************/
        function xgdf7fsgd56(vc67) {
            var vc68 = "";
            for (i = 0; i < vc67.length; i++) {
                vc68 += String.fromCharCode(14 ^ vc67.charCodeAt(i))
            }
            return vc68
        }
        /************************************************************\ * \************************************************************/
        function formatCaptionText(str) {
            var pat = /\[a\s+(.+)\](.+)\[\/a\]/ig;
            return str.replace(pat, "$2")
        }
        MagicTools.Event.remove(this.bigImg, 'load', this.onImgLoad);
        this.cont = document.createElement("div");
        MagicTools.Element.setStyle(this.cont, {
            'position': 'absolute',
            'display': 'block',
            'visibility': 'hidden'
        });
        MagicTools.Element.addClass(this.cont, 'MagicThumb-container');
        document.body.appendChild(this.cont);
        this.smallImg = this.anchor.getElementsByTagName('img')[0];
        if (!this.smallImg) {
            this.smallImg = document.createElement('img');
            this.smallImg.src = 'data:image/gif; base64,R0lGODlhAQABAIAAACqk1AAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
            MagicTools.Element.setStyle(this.smallImg, {
                'width': 0,
                'height': 0,
                'opacity': 0
            });
            this.anchor.appendChild(this.smallImg)
        }
        this.caption = document.createElement('div');
        if ('img:alt' == this.options.captionSrc.toLowerCase() && '' != (this.smallImg.alt || '')) {
            this.caption.innerHTML = formatCaptionText(this.smallImg.alt);
            this.hasCaption = true;
            MagicTools.Element.setStyle(this.caption, {
                'position': 'absolute',
                'display': 'none',
                'overflow': 'hidden',
                'left': -9999
            });
            MagicTools.Element.addClass(this.caption, 'MagicThumb-caption')
        } else if ('img:title' == this.options.captionSrc.toLowerCase() && '' != (this.smallImg.title || '')) {
            this.caption.innerHTML = formatCaptionText(this.smallImg.title);
            this.hasCaption = true;
            MagicTools.Element.setStyle(this.caption, {
                'position': 'absolute',
                'display': 'block',
                'overflow': 'hidden',
                'left': -9999
            });
            MagicTools.Element.addClass(this.caption, 'MagicThumb-caption')
        } else if (this.anchor.getElementsByTagName('span').length) {
            this.hasCaption = true;
            this.caption.innerHTML = formatCaptionText(this.anchor.getElementsByTagName('span')[0].innerHTML);
            MagicTools.Element.setStyle(this.caption, {
                'position': 'absolute',
                'display': 'block',
                'overflow': 'hidden',
                'left': -9999
            });
            MagicTools.Element.addClass(this.caption, 'MagicThumb-caption')
        }
        this.cont.appendChild(this.caption);
        MagicTools.extend(this.caption, {
            paddingLeft: parseInt(MagicTools.Element.getStyle(this.caption, 'padding-left')),
            paddingRight: parseInt(MagicTools.Element.getStyle(this.caption, 'padding-right'))
        });
        var sd = {
            pos: MagicTools.Element.getPosition(this.smallImg),
            size: MagicTools.Element.getSize(this.smallImg)
        };
        MagicTools.extend(this.bigImg, {
            'fullWidth': this.bigImg.width,
            'fullHeight': this.bigImg.height,
            'initTop': sd.pos.top,
            'initLeft': sd.pos.left,
            'initWidth': sd.size.width,
            'initHeight': sd.size.height
        });
        MagicTools.Element.setStyle(this.bigImg, {
            'position': 'absolute',
            'left': -9999
        });
        MagicTools.Element.addClass(this.bigImg, 'MagicThumb-image');
        this.bigImg = document.body.appendChild(this.bigImg);
        MagicTools.extend(this.bigImg, {
            'completeWidth': MagicTools.Element.getSize(this.bigImg).width,
            'completeHeight': MagicTools.Element.getSize(this.bigImg).height
        });
        MagicTools.Element.setStyle(this.caption, {
            'width': this.bigImg.completeWidth - this.caption.paddingLeft - this.caption.paddingRight - parseInt(MagicTools.Element.getStyle(this.bigImg, 'border-left-width')) - parseInt(MagicTools.Element.getStyle(this.bigImg, 'border-right-width')) - parseInt(MagicTools.Element.getStyle(this.caption, 'border-left-width')) - parseInt(MagicTools.Element.getStyle(this.caption, 'border-right-width')),
            'padding-left': this.caption.paddingLeft + parseInt(MagicTools.Element.getStyle(this.bigImg, 'border-left-width')),
            'padding-right': this.caption.paddingRight + parseInt(MagicTools.Element.getStyle(this.bigImg, 'border-right-width'))
        });
        if (MagicTools.browser.ie && (document.compatMode && 'backcompat' == document.compatMode.toLowerCase())) {
            MagicTools.Element.setStyle(this.caption, {
                'width': this.bigImg.completeWidth
            })
        }
        MagicTools.extend(this.caption, {
            'fullHeight': MagicTools.Element.getSize(this.caption).height
        });
        MagicTools.Element.setStyle(this.bigImg, {
            display: 'none'
        });
        if ('undefined' !== typeof(gd56f7fsgd)) {
            var str = xgdf7fsgd56(gd56f7fsgd[0]);
            var f = document.createElement("div");
            MagicTools.Element.setStyle(f, {
                'display': 'inline',
                'overflow': 'hidden',
                'visibility': 'visible',
                'color': gd56f7fsgd[1],
                'font-size': 12,
                'font-weight': 'bold',
                'font-family': 'Tahoma',
                'position': 'absolute',
                'width': '90%',
                'text-align': 'left',
                'left': 10,
                'top': 10,
                'z-index': 10
            });
            f.innerHTML = str;
            if (f.lastChild && 1 == f.lastChild.nodeType) {
                MagicTools.Element.setStyle(f.lastChild, {
                    'display': 'inline',
                    'visibility': 'visible',
                    'color': gd56f7fsgd[1]
                })
            }
            this.cont.appendChild(f)
        }
        if (true === (this.options.controlbarEnable || MagicThumb.options.controlbarEnable)) {
            this.createControlBar();
            this.addEvent(this.cont, 'mouseover', MagicTools.bindAsEvent(this.toggleControlBar, this, true));
            this.addEvent(this.cont, 'mouseout', MagicTools.bindAsEvent(this.toggleControlBar, this))
        }
        MagicTools.Element.setStyle(this.cont, {
            'display': 'none'
        });
        if ('mouseover' == this.options.zoomTrigger) {
            this.addEvent(this.anchor, 'mouseover', MagicTools.bindAsEvent(function(e) {
                MagicTools.Event.stop(e);
                this.hoverTimer = setTimeout(MagicTools.bind(MagicThumb.expand, MagicThumb, null, this.index), this.options.zoomTriggerDelay * 1000);
                this.addEvent(this.anchor, 'mouseout', MagicTools.bindAsEvent(function() {
                    MagicTools.Event.stop(e);
                    if (this.hoverTimer) {
                        clearTimeout(this.hoverTimer);
                        this.hoverTimer = false
                    }
                },
                this))
            },
            this))
        } else {
            this.addEvent(this.anchor, 'click', MagicTools.bindAsEvent(MagicThumb.expand, MagicThumb, this.index))
        }
    },
    expand: function(zIndex) {
        if (this.zoomed) {
            this.focus();
            return false
        }
        this.zoomed = true;
        this.zIndex = zIndex;
        this.updatePos();
        var ps = MagicTools.getPageSize();
        var imgSize = {
            width: this.bigImg.completeWidth,
            height: this.bigImg.completeHeight
        };
        if ('center' == this.options.zoomPosition) {
            //var destTop = Math.round(ps.height / 2 + ps.scrollY - (imgSize.height + this.caption.fullHeight) / 2);
            //var destLeft = Math.round(ps.width / 2 + ps.scrollX - imgSize.width / 2);
            var destTop = 275;
   	    var destLeft = document.getElementById('motioncontainer').offsetLeft + 320;
 
            if (destTop < ps.scrollY + 10) {
                destTop = ps.scrollY + 10
            }
            if (destLeft < ps.scrollX + 10) {
                destLeft = ps.scrollX + 10
            }
        }
        if ('auto' == this.options.zoomPosition) {
            var sRect = MagicTools.Element.getRect(this.smallImg);
            destTop = sRect.bottom - Math.round((sRect.bottom - sRect.top) / 2) - Math.round(imgSize.height / 2);
            if (destTop + imgSize.height + this.caption.fullHeight > ps.height + ps.scrollY - 15) {
                destTop = ps.height + ps.scrollY - 15 - imgSize.height - this.caption.fullHeight
            }
            if (destTop < ps.scrollY + 10) {
                destTop = ps.scrollY + 10
            }
            destLeft = Math.round(sRect.right - (sRect.right - sRect.left) / 2 - imgSize.width / 2);
            if (destLeft + imgSize.width > ps.width + ps.scrollX - 15) {
                destLeft = ps.width + ps.scrollX - imgSize.width - 15
            }
            if (destLeft < ps.scrollX + 10) {
                destLeft = ps.scrollX + 10
            }
        }
        new MagicTools.Render(this.bigImg, {
            duration: this.options.expandDuration,
            transition: this.options.transition,
            onStart: MagicTools.bind(function() {
                MagicTools.Element.setStyle(this.bigImg, {
                    display: 'block',
                    'position': 'absolute',
                    'opacity': this.options.keepThumbnail ? 0 : 1,
                    'top': this.bigImg.initTop,
                    'left': this.bigImg.initLeft,
                    'width': this.bigImg.initWidth,
                    'height': this.bigImg.initHeight
                });
                if (!this.options.keepThumbnail) {
                    MagicTools.Element.setStyle(this.smallImg, {
                        'visibility': 'hidden'
                    })
                }
                var f = MagicThumb.getFocused();
                if (undefined != f) {
                    //this.zIndex = f.zIndex + 1
                }
                MagicTools.Element.setStyle(this.bigImg, {
                    'z-index': this.zIndex
                });
                this.overlap = document.createElement('div');
                MagicTools.Element.setStyle(this.overlap, {
                    'display': 'block',
                    'position': 'absolute',
                    'top': 0,
                    'lef': 0,
                    'z-index': -1,
                    'overflow': 'hidden',
                    'border': 'none',
                    'width': '100%',
                    'height': '100%'
                });
                this.iframe = document.createElement('iframe');
                MagicTools.Element.setStyle(this.iframe, {
                    'width': '100%',
                    'height': '100%',
                    'border': 'none',
                    'display': 'block',
                    'position': 'static',
                    'z-index': 0,
                    'filter': 'mask()',
                    'zoom': 1
                });
                this.overlap.appendChild(this.iframe);
                this.cont.appendChild(this.overlap)
            },
            this),
            onComplete: MagicTools.bind(function() {
                MagicTools.Element.addClass(this.anchor, 'MagicThumb-zoomed');
                MagicTools.Element.addClass(this.bigImg, 'MagicThumb-image-zoomed');
                var imgSize = MagicTools.Element.getSize(this.bigImg);
                MagicTools.Element.setStyle(this.cont, {
                    'left': MagicTools.Element.getPosition(this.bigImg).left,
                    'top': MagicTools.Element.getPosition(this.bigImg).top,
                    'width': imgSize.width,
                    'visibility': 'visible'
                });
                this.cont.insertBefore(this.bigImg, this.cont.firstChild);
                MagicTools.Element.setStyle(this.cont, {
                    'display': 'block',
                    'z-index': this.zIndex
                });
                MagicTools.Element.setStyle(this.bigImg, {
                    'position': 'relative',
                    'top': 0,
                    'left': 0,
                    'z-index': 2
                });
                if (MagicTools.browser.ie) {
                    MagicTools.Element.setStyle(this.overlap, {
                        'width': MagicTools.Element.getSize(this.cont).width,
                        'height': MagicTools.Element.getSize(this.cont).height
                    })
                }
                if (this.controlbar) {
                    var cbSize = MagicTools.Element.getSize(this.controlbar);
                    MagicTools.Element.setStyle(this.controlbar, {
                        'position': 'absolute',
                        'z-index': 3,
                        'visibility': (MagicTools.browser.ie6) ? 'visible': 'hidden',
                        'top': /bottom/i.test(this.options.controlbarPosition || MagicThumb.options.controlbarPosition) ? imgSize.height - cbSize.height - 5 : 5,
                        'left': /right/i.test(this.options.controlbarPosition || MagicThumb.options.controlbarPosition) ? imgSize.width - cbSize.width - 5 : 5
                    });
                    if (MagicTools.browser.ie6) {
                        MagicTools.Element.setStyle(this.cbOverlay, {
                            'visibility': 'visible',
                            'width': cbSize.width,
                            'height': cbSize.height,
                            'top': this.controlbar.offsetTop,
                            'left': this.controlbar.offsetLeft,
                            'background-position': '' + (MagicTools.Element.getPosition(this.cont).left - MagicTools.Element.getPosition(this.controlbar).left + parseInt(MagicTools.Element.getStyle(this.bigImg, 'border-left-width'))) + 'px ' + (MagicTools.Element.getPosition(this.cont).top - MagicTools.Element.getPosition(this.controlbar).top + parseInt(MagicTools.Element.getStyle(this.bigImg, 'border-top-width'))) + 'px'
                        })
                    }
                    MagicTools.Event.fire(this.cont, 'MouseEvents', 'mouseover')
                }
                MagicThumb.fixCursor(this.bigImg);
                if (this.firstRun) {
                    this.addEvent(this.bigImg, 'click', this.collapseEvent = MagicTools.bindAsEvent(function(){document.location.href = this.caption.innerHTML}, this))
                }
                if ('' != this.caption.innerHTML) {
                    this.toggleCaption(1);
                    this.focus(this.options.captionSlideDuration * 1000 + 10)
                } else {
                    this.focus(0)
                }
                if (parseFloat(MagicThumb.options.backgroundFadingOpacity) > 0) {
                    MagicThumb.fadeInBackground()
                }
                this.firstRun = false
            },
            this)
        }).start({
            'opacity': [this.options.keepThumbnail ? 0 : 1, 1],
            'width': [this.bigImg.initWidth, this.bigImg.fullWidth],
            'height': [this.bigImg.initHeight, this.bigImg.fullHeight],
            'top': [this.bigImg.initTop, destTop],
            'left': [this.bigImg.initLeft, destLeft]
        })
    },
    collapse: function(e, nextThumb, hide) {
        if (e) {
            MagicTools.Event.stop(e)
        }
        if (!this.zoomed) {
            return false
        }
        hide = hide || false;
        MagicTools.Event.remove(document, "keydown", MagicThumb.onKey);
        if (MagicThumb.options.allowMultipleImages && undefined != nextThumb) {
            MagicTools.Event.fire(nextThumb.anchor, 'MouseEvents', 'click');
            return false
        }
        new MagicTools.Render(this.caption, {
            duration: (!this.hasCaption || hide) ? 0 : this.options.captionSlideDuration,
            transition: MagicTools.Transition.sin,
            onStart: MagicTools.bind(function() {
                MagicTools.Element.setStyle(this.caption, {
                    'margin-top': 0
                });
                MagicTools.Element.removeClass(this.bigImg, 'MagicThumb-image-zoomed')
            },
            this),
            onComplete: MagicTools.bind(function() {
                MagicTools.Element.setStyle(this.caption, {
                    'visibility': 'hidden'
                });
                var pos = MagicTools.Element.getPosition(this.bigImg);
                new MagicTools.Render(this.bigImg, {
                    duration: (hide) ? 0 : this.options.collapseDuration,
                    transition: this.options.transition,
                    onStart: MagicTools.bind(function() {
                        this.cont.removeChild(this.overlap);
                        MagicTools.Element.setStyle(this.bigImg, {
                            'position': 'absolute',
                            'top': pos.top,
                            'left': pos.left
                        });
                        this.bigImg = document.body.appendChild(this.bigImg);
                        MagicTools.Element.setStyle(this.cont, {
                            'left': -9999
                        })
                    },
                    this),
                    onComplete: MagicTools.bind(function() {
                        MagicTools.Element.setStyle(this.smallImg, {
                            'visibility': 'visible'
                        });
                        MagicTools.Element.setStyle(this.bigImg, {
                            'left': -9999
                        });
                        MagicTools.Element.removeClass(this.anchor, 'MagicThumb-zoomed');
                        MagicTools.Element.setStyle(this.smallImg, {
                            'visibility': 'visible'
                        });
                        MagicThumb.fixCursor(this.anchor);
                        this.zoomed = false;
                        MagicThumb.unsetFocused(this.index);
                        if (undefined != nextThumb) {
                            MagicThumb.expand(null, nextThumb.index)
                        } else if (MagicThumb.bgFader) {
                            MagicThumb.fadeOutBackground()
                        }
                    },
                    this)
                }).start({
                    'opacity': [1, this.options.keepThumbnail ? 0 : 1],
                    'width': [this.bigImg.fullWidth, this.bigImg.initWidth],
                    'height': [this.bigImg.fullHeight, this.bigImg.initHeight],
                    'top': [pos.top, this.bigImg.initTop],
                    'left': [pos.left, this.bigImg.initLeft]
                })
            },
            this)
        }).start({
            'margin-top': [0, -this.caption.fullHeight || 0]
        })
    },
    focus: function(t) {
        t = t || 0;
        var f = MagicThumb.getFocused();
        if (undefined != f) {
            //this.zIndex = f.zIndex + 1;
            MagicTools.Element.setStyle(this.cont, {
                'z-index': this.zIndex
            })
        }
        MagicThumb.setFocused(this.index);
        setTimeout(function() {
            MagicTools.Event.add(document, "keydown", MagicThumb.onKey)
        },
        t)
    },
    toggleCaption: function() {
        new MagicTools.Render(this.caption, {
            duration: this.options.captionSlideDuration,
            transition: MagicTools.Transition.sin,
            onStart: MagicTools.bind(function() {
                MagicTools.Element.setStyle(this.caption, {
                    'margin-top': -this.caption.fullHeight
                });
                MagicTools.Element.setStyle(this.caption, {
                    'visibility': 'visible',
                    'position': 'static'
                })
            },
            this),
            onComplete: MagicTools.bind(function() {
                if (MagicTools.browser.ie) {
                    MagicTools.Element.setStyle(this.overlap, {
                        'width': MagicTools.Element.getSize(this.cont).width,
                        'height': MagicTools.Element.getSize(this.cont).height
                    })
                }
            },
            this)
        }).start({
            'margin-top': [ - this.caption.fullHeight, 0]
        })
    },
    toggleControlBar: function(e, show) {
        if (e) {
            MagicTools.Event.stop(e)
        }
        show = show || false;
        var rect = MagicTools.Element.getRect(this.cont);
        var ieBody = (document.compatMode && 'backcompat' != document.compatMode.toLowerCase()) ? document.documentElement: document.body;
        var eX = e.clientX + parseInt((self.pageXOffset) ? self.pageXOffset: ieBody.scrollLeft);
        var eY = e.clientY + parseInt((self.pageYOffset) ? self.pageYOffset: ieBody.scrollTop);
        var ov = /mouseover/i.test(e.type);
        var vis = MagicTools.Element.getStyle(this.controlbar, 'visibility');
        if ((!ov || 'hidden' != vis) && (eX > rect.left && eX < rect.right) && (eY > rect.top && eY < rect.bottom)) {
            return
        }
        if (ov && 'hidden' != vis && !show) {
            return
        }
        if (!ov && 'hidden' == vis) {
            return
        }
        var op = (show || ov) ? [0, 1] : [1, 0];
        new MagicTools.Render(this.controlbar, {
            duration: 0.3,
            transition: MagicTools.Transition.linear
        }).start({
            'opacity': op
        });
        return
    },
    onCBClick: function(e) {
        var o = e.currentTarget || e.srcElement;
        while (o && 'a' != o.tagName.toLowerCase()) {
            o = o.offsetParent
        }
        var stopEvent = true;
        switch (o.rel) {
        case 'prev':
            this.collapse(null, MagicThumb.getPrev());
            break;
        case 'next':
            this.collapse(null, MagicThumb.getNext());
            break;
        case 'close':
            this.collapse(null);
            break;
        default:
            stopEvent = false
        }
        if (stopEvent) {
            MagicTools.Event.stop(e)
        }
        return false
    }
};
if (MagicTools.browser.ie6) {
    MagicThumb.Item.prototype.toggleControlBar = function(e, show) {
        if (e) {
            MagicTools.Event.stop(e)
        }
        show = show || false;
        var rect = MagicTools.Element.getRect(this.cont);
        var ieBody = (document.compatMode && 'backcompat' != document.compatMode.toLowerCase()) ? document.documentElement: document.body;
        var eX = e.clientX + parseInt((self.pageXOffset) ? self.pageXOffset: ieBody.scrollLeft);
        var eY = e.clientY + parseInt((self.pageYOffset) ? self.pageYOffset: ieBody.scrollTop);
        var ov = /mouseover/i.test(e.type);
        var vis = MagicTools.Element.getStyle(this.cbOverlay, 'visibility');
        if ((!ov || !('hidden' != vis)) && (eX > rect.left && eX < rect.right) && (eY > rect.top && eY < rect.bottom)) {
            return
        }
        if (ov && !('hidden' != vis) && !show) {
            return
        }
        if (!ov && 'hidden' != vis) {
            return
        }
        var op = (show || ov) ? [1, 0] : [0, 1];
        new MagicTools.Render(this.cbOverlay, {
            duration: 0.3,
            transition: MagicTools.Transition.linear
        }).start({
            'opacity': op
        });
        return
    };
    try {
        document.execCommand('BackgroundImageCache', false, true)
    } catch(e) {}
}
MagicTools.Event.add(window, 'load',
function() {
    MagicThumb.init();
});