/*****************************************************************************
scalable Inman Flash Replacement (sIFR) version 3, revision 436.

Copyright 2006 – 2008 Mark Wubben, <http://novemberborn.net/>

Older versions:
* IFR by Shaun Inman
* sIFR 1.0 by Mike Davidson, Shaun Inman and Tomas Jogin
* sIFR 2.0 by Mike Davidson, Shaun Inman, Tomas Jogin and Mark Wubben

See also <http://novemberborn.net/sifr3> and <http://wiki.novemberborn.net/sifr3>.

This software is licensed and provided under the CC-GNU LGPL.
See <http://creativecommons.org/licenses/LGPL/2.1/>
*****************************************************************************/

var sIFR = new
function() {
    var O = this;
    var E = {
        ACTIVE: "sIFR-active",
        REPLACED: "sIFR-replaced",
        IGNORE: "sIFR-ignore",
        ALTERNATE: "sIFR-alternate",
        CLASS: "sIFR-class",
        LAYOUT: "sIFR-layout",
        FLASH: "sIFR-flash",
        FIX_FOCUS: "sIFR-fixfocus",
        DUMMY: "sIFR-dummy"
    };
    E.IGNORE_CLASSES = [E.REPLACED, E.IGNORE, E.ALTERNATE];
    this.MIN_FONT_SIZE = 6;
    this.MAX_FONT_SIZE = 126;
    this.FLASH_PADDING_BOTTOM = 5;
    this.VERSION = "436";
    this.isActive = false;
    this.isEnabled = true;
    this.fixHover = true;
    this.autoInitialize = true;
    this.setPrefetchCookie = true;
    this.cookiePath = "/";
    this.domains = [];
    this.forceWidth = true;
    this.fitExactly = false;
    this.forceTextTransform = true;
    this.useDomLoaded = true;
    this.useStyleCheck = false;
    this.hasFlashClassSet = false;
    this.repaintOnResize = true;
    this.replacements = [];
    var L = 0;
    var R = false;
    function Y() {}
    function D(c) {
        function d(e) {
            return e.toLocaleUpperCase()
        }
        this.normalize = function(e) {
            return e.replace(/\n|\r|\xA0/g, D.SINGLE_WHITESPACE).replace(/\s+/g, D.SINGLE_WHITESPACE)
        };
        this.textTransform = function(e, f) {
            switch (e) {
            case "uppercase":
                return f.toLocaleUpperCase();
            case "lowercase":
                return f.toLocaleLowerCase();
            case "capitalize":
                return f.replace(/^\w|\s\w/g, d)
            }
            return f
        };
        this.toHexString = function(e) {
            if (e.charAt(0) != "#" || e.length != 4 && e.length != 7) {
                return e
            }
            e = e.substring(1);
            return "0x" + (e.length == 3 ? e.replace(/(.)(.)(.)/, "$1$1$2$2$3$3") : e)
        };
        this.toJson = function(g, f) {
            var e = "";
            switch (typeof(g)) {
            case "string":
                e = '"' + f(g) + '"';
                break;
            case "number":
            case "boolean":
                e = g.toString();
                break;
            case "object":
                e = [];
                for (var h in g) {
                    if (g[h] == Object.prototype[h]) {
                        continue
                    }
                    e.push('"' + h + '":' + this.toJson(g[h]))
                }
                e = "{" + e.join(",") + "}";
                break
            }
            return e
        };
        this.convertCssArg = function(e) {
            if (!e) {
                return {}
            }
            if (typeof(e) == "object") {
                if (e.constructor == Array) {
                    e = e.join("")
                } else {
                    return e
                }
            }
            var l = {};
            var m = e.split("}");
            for (var h = 0; h < m.length; h++) {
                var k = m[h].match(/([^\s{]+)\s*\{(.+)\s*;?\s*/);
                if (!k || k.length != 3) {
                    continue
                }
                if (!l[k[1]]) {
                    l[k[1]] = {}
                }
                var g = k[2].split(";");
                for (var f = 0; f < g.length; f++) {
                    var n = g[f].match(/\s*([^:\s]+)\s*\:\s*([^;]+)/);
                    if (!n || n.length != 3) {
                        continue
                    }
                    l[k[1]][n[1]] = n[2].replace(/\s+$/, "")
                }
            }
            return l
        };
        this.extractFromCss = function(g, f, i, e) {
            var h = null;
            if (g && g[f] && g[f][i]) {
                h = g[f][i];
                if (e) {
                    delete g[f][i]
                }
            }
            return h
        };
        this.cssToString = function(f) {
            var g = [];
            for (var e in f) {
                var j = f[e];
                if (j == Object.prototype[e]) {
                    continue
                }
                g.push(e, "{");
                for (var i in j) {
                    if (j[i] == Object.prototype[i]) {
                        continue
                    }
                    var h = j[i];
                    if (D.UNIT_REMOVAL_PROPERTIES[i]) {
                        h = parseInt(h, 10)
                    }
                    g.push(i, ":", h, ";")
                }
                g.push("}")
            }
            return g.join("")
        };
        this.escape = function(e) {
            return escape(e).replace(/\+/g, "%2B")
        };
        this.encodeVars = function(e) {
            return e.join("&").replace(/%/g, "%25")
        };
        this.copyProperties = function(g, f) {
            for (var e in g) {
                if (f[e] === undefined) {
                    f[e] = g[e]
                }
            }
            return f
        };
        this.domain = function() {
            var f = "";
            try {
                f = document.domain
            } catch(g) {}
            return f
        };
        this.domainMatches = function(h, g) {
            if (g == "*" || g == h) {
                return true
            }
            var f = g.lastIndexOf("*");
            if (f > -1) {
                g = g.substr(f + 1);
                var e = h.lastIndexOf(g);
                if (e > -1 && (e + g.length) == h.length) {
                    return true
                }
            }
            return false
        };
        this.uriEncode = function(e) {
            return encodeURI(decodeURIComponent(e))
        };
        this.delay = function(f, h, g) {
            var e = Array.prototype.slice.call(arguments, 3);
            setTimeout(function() {
                h.apply(g, e)
            },
            f)
        }
    }
    D.UNIT_REMOVAL_PROPERTIES = {
        leading: true,
        "margin-left": true,
        "margin-right": true,
        "text-indent": true
    };
    D.SINGLE_WHITESPACE = " ";
    function U(e) {
        var d = this;
        function c(g, j, h) {
            var k = d.getStyleAsInt(g, j, e.ua.ie);
            if (k == 0) {
                k = g[h];
                for (var f = 3; f < arguments.length; f++) {
                    k -= d.getStyleAsInt(g, arguments[f], true)
                }
            }
            return k
        }
        this.getBody = function() {
            return document.getElementsByTagName("body")[0] || null
        };
        this.querySelectorAll = function(f) {
            return window.parseSelector(f)
        };
        this.addClass = function(f, g) {
            if (g) {
                g.className = ((g.className || "") == "" ? "": g.className + " ") + f
            }
        };
        this.removeClass = function(f, g) {
            if (g) {
                g.className = g.className.replace(new RegExp("(^|\\s)" + f + "(\\s|$)"), "").replace(/^\s+|(\s)\s+/g, "$1")
            }
        };
        this.hasClass = function(f, g) {
            return new RegExp("(^|\\s)" + f + "(\\s|$)").test(g.className)
        };
        this.hasOneOfClassses = function(h, g) {
            for (var f = 0; f < h.length; f++) {
                if (this.hasClass(h[f], g)) {
                    return true
                }
            }
            return false
        };
        this.ancestorHasClass = function(g, f) {
            g = g.parentNode;
            while (g && g.nodeType == 1) {
                if (this.hasClass(f, g)) {
                    return true
                }
                g = g.parentNode
            }
            return false
        };
        this.create = function(f, g) {
            var h = document.createElementNS ? document.createElementNS(U.XHTML_NS, f) : document.createElement(f);
            if (g) {
                h.className = g
            }
            return h
        };
        this.getComputedStyle = function(h, i) {
            var f;
            if (document.defaultView && document.defaultView.getComputedStyle) {
                var g = document.defaultView.getComputedStyle(h, null);
                f = g ? g[i] : null
            } else {
                if (h.currentStyle) {
                    f = h.currentStyle[i]
                }
            }
            return f || ""
        };
        this.getStyleAsInt = function(g, i, f) {
            var h = this.getComputedStyle(g, i);
            if (f && !/px$/.test(h)) {
                return 0
            }
            return parseInt(h) || 0
        };
        this.getWidthFromStyle = function(f) {
            return c(f, "width", "offsetWidth", "paddingRight", "paddingLeft", "borderRightWidth", "borderLeftWidth")
        };
        this.getHeightFromStyle = function(f) {
            return c(f, "height", "offsetHeight", "paddingTop", "paddingBottom", "borderTopWidth", "borderBottomWidth")
        };
        this.getDimensions = function(j) {
            var h = j.offsetWidth;
            var f = j.offsetHeight;
            if (h == 0 || f == 0) {
                for (var g = 0; g < j.childNodes.length; g++) {
                    var k = j.childNodes[g];
                    if (k.nodeType != 1) {
                        continue
                    }
                    h = Math.max(h, k.offsetWidth);
                    f = Math.max(f, k.offsetHeight)
                }
            }
            return {
                width: h,
                height: f
            }
        };
        this.getViewport = function() {
            return {
                width: window.innerWidth || document.documentElement.clientWidth || this.getBody().clientWidth,
                height: window.innerHeight || document.documentElement.clientHeight || this.getBody().clientHeight
            }
        };
        this.blurElement = function(g) {
            try {
                g.blur();
                return
            } catch(h) {}
            var f = this.create("input");
            f.style.width = "0px";
            f.style.height = "0px";
            g.parentNode.appendChild(f);
            f.focus();
            f.blur();
            f.parentNode.removeChild(f)
        }
    }
    U.XHTML_NS = "http://www.w3.org/1999/xhtml";
    function H(r) {
        var g = navigator.userAgent.toLowerCase();
        var q = (navigator.product || "").toLowerCase();
        var h = navigator.platform.toLowerCase();
        this.parseVersion = H.parseVersion;
        this.macintosh = /^mac/.test(h);
        this.windows = /^win/.test(h);
        this.linux = /^linux/.test(h);
        this.quicktime = false;
        this.opera = /opera/.test(g);
        this.konqueror = /konqueror/.test(g);
        this.ie = false
        /*@cc_on||true@*/
        ;
        this.ieSupported = this.ie && !/ppc|smartphone|iemobile|msie\s5\.5/.test(g)
        /*@cc_on&&@_jscript_version>=5.5@*/
        ;
        this.ieWin = this.ie && this.windows
        /*@cc_on&&@_jscript_version>=5.1@*/
        ;
        this.windows = this.windows && (!this.ie || this.ieWin);
        this.ieMac = this.ie && this.macintosh
        /*@cc_on&&@_jscript_version<5.1@*/
        ;
        this.macintosh = this.macintosh && (!this.ie || this.ieMac);
        this.safari = /safari/.test(g);
        this.webkit = !this.konqueror && /applewebkit/.test(g);
        this.khtml = this.webkit || this.konqueror;
        this.gecko = !this.khtml && q == "gecko";
        this.ieVersion = this.ie && /.*msie\s(\d\.\d)/.exec(g) ? this.parseVersion(RegExp.$1) : "0";
        this.operaVersion = this.opera && /.*opera(\s|\/)(\d+\.\d+)/.exec(g) ? this.parseVersion(RegExp.$2) : "0";
        this.webkitVersion = this.webkit && /.*applewebkit\/(\d+).*/.exec(g) ? this.parseVersion(RegExp.$1) : "0";
        this.geckoVersion = this.gecko && /.*rv:\s*([^\)]+)\)\s+gecko/.exec(g) ? this.parseVersion(RegExp.$1) : "0";
        this.konquerorVersion = this.konqueror && /.*konqueror\/([\d\.]+).*/.exec(g) ? this.parseVersion(RegExp.$1) : "0";
        this.flashVersion = 0;
        if (this.ieWin) {
            var l;
            var o = false;
            try {
                l = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")
            } catch(m) {
                try {
                    l = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
                    this.flashVersion = this.parseVersion("6");
                    l.AllowScriptAccess = "always"
                } catch(m) {
                    o = this.flashVersion == this.parseVersion("6")
                }
                if (!o) {
                    try {
                        l = new ActiveXObject("ShockwaveFlash.ShockwaveFlash")
                    } catch(m) {}
                }
            }
            if (!o && l) {
                this.flashVersion = this.parseVersion((l.GetVariable("$version") || "").replace(/^\D+(\d+)\D+(\d+)\D+(\d+).*/g, "$1.$2.$3"))
            }
        } else {
            if (navigator.plugins && navigator.plugins["Shockwave Flash"]) {
                var n = navigator.plugins["Shockwave Flash"].description.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                var p = n.replace(/^\D*(\d+\.\d+).*$/, "$1");
                if (/r/.test(n)) {
                    p += n.replace(/^.*r(\d*).*$/, ".$1")
                } else {
                    if (/d/.test(n)) {
                        p += ".0"
                    }
                }
                this.flashVersion = this.parseVersion(p);
                var j = false;
                for (var k = 0, c = this.flashVersion >= H.MIN_FLASH_VERSION; c && k < navigator.mimeTypes.length; k++) {
                    var f = navigator.mimeTypes[k];
                    if (f.type != "application/x-shockwave-flash") {
                        continue
                    }
                    if (f.enabledPlugin) {
                        j = true;
                        if (f.enabledPlugin.description.toLowerCase().indexOf("quicktime") > -1) {
                            c = false;
                            this.quicktime = true
                        }
                    }
                }
                if (this.quicktime || !j) {
                    this.flashVersion = this.parseVersion("0")
                }
            }
        }
        this.flash = this.flashVersion >= H.MIN_FLASH_VERSION;
        this.transparencySupport = this.macintosh || this.windows || this.linux && (this.flashVersion >= this.parseVersion("10") && (this.gecko && this.geckoVersion >= this.parseVersion("1.9") || this.opera));
        this.computedStyleSupport = this.ie || !!document.defaultView.getComputedStyle;
        this.fixFocus = this.gecko && this.windows;
        this.nativeDomLoaded = this.gecko || this.webkit && this.webkitVersion >= this.parseVersion("525") || this.konqueror && this.konquerorMajor > this.parseVersion("03") || this.opera;
        this.mustCheckStyle = this.khtml || this.opera;
        this.forcePageLoad = this.webkit && this.webkitVersion < this.parseVersion("523");
        this.properDocument = typeof(document.location) == "object";
        this.supported = this.flash && this.properDocument && (!this.ie || this.ieSupported) && this.computedStyleSupport && (!this.opera || this.operaVersion >= this.parseVersion("9.61")) && (!this.webkit || this.webkitVersion >= this.parseVersion("412")) && (!this.gecko || this.geckoVersion >= this.parseVersion("1.8.0.12")) && (!this.konqueror)
    }
    H.parseVersion = function(c) {
        return c.replace(/(^|\D)(\d+)(?=\D|$)/g,
        function(f, e, g) {
            f = e;
            for (var d = 4 - g.length; d >= 0; d--) {
                f += "0"
            }
            return f + g
        })
    };
    H.MIN_FLASH_VERSION = H.parseVersion("8");
    function F(c) {
        this.fix = c.ua.ieWin && window.location.hash != "";
        var d;
        this.cache = function() {
            d = document.title
        };
        function e() {
            document.title = d
        }
        this.restore = function() {
            if (this.fix) {
                setTimeout(e, 0)
            }
        }
    }
    function S(l) {
        var e = null;
        function c() {
            try {
                if (l.ua.ie || document.readyState != "loaded" && document.readyState != "complete") {
                    document.documentElement.doScroll("left")
                }
            } catch(n) {
                return setTimeout(c, 10)
            }
            i()
        }
        function i() {
            if (l.useStyleCheck) {
                h()
            } else {
                if (!l.ua.mustCheckStyle) {
                    d(null, true)
                }
            }
        }
        function h() {
            e = l.dom.create("div", E.DUMMY);
            l.dom.getBody().appendChild(e);
            m()
        }
        function m() {
            if (l.dom.getComputedStyle(e, "marginLeft") == "42px") {
                g()
            } else {
                setTimeout(m, 10)
            }
        }
        function g() {
            if (e && e.parentNode) {
                e.parentNode.removeChild(e)
            }
            e = null;
            d(null, true)
        }
        function d(n, o) {
            l.initialize(o);
            if (n && n.type == "load") {
                if (document.removeEventListener) {
                    document.removeEventListener("DOMContentLoaded", d, false)
                }
                if (window.removeEventListener) {
                    window.removeEventListener("load", d, false)
                }
            }
        }
        function j() {
            l.prepareClearReferences();
            if (document.readyState == "interactive") {
                document.attachEvent("onstop", f);
                setTimeout(function() {
                    document.detachEvent("onstop", f)
                },
                0)
            }
        }
        function f() {
            document.detachEvent("onstop", f);
            k()
        }
        function k() {
            l.clearReferences()
        }
        this.attach = function() {
            if (window.addEventListener) {
                window.addEventListener("load", d, false)
            } else {
                window.attachEvent("onload", d)
            }
            if (!l.useDomLoaded || l.ua.forcePageLoad || l.ua.ie && window.top != window) {
                return
            }
            if (l.ua.nativeDomLoaded) {
                document.addEventListener("DOMContentLoaded", i, false)
            } else {
                if (l.ua.ie || l.ua.khtml) {
                    c()
                }
            }
        };
        this.attachUnload = function() {
            if (!l.ua.ie) {
                return
            }
            window.attachEvent("onbeforeunload", j);
            window.attachEvent("onunload", k)
        }
    }
    var Q = "sifrFetch";
    function N(c) {
        var e = false;
        this.fetchMovies = function(f) {
            if (c.setPrefetchCookie && new RegExp(";?" + Q + "=true;?").test(document.cookie)) {
                return
            }
            try {
                e = true;
                d(f)
            } catch(g) {}
            if (c.setPrefetchCookie) {
                document.cookie = Q + "=true;path=" + c.cookiePath
            }
        };
        this.clear = function() {
            if (!e) {
                return
            }
            try {
                var f = document.getElementsByTagName("script");
                for (var g = f.length - 1; g >= 0; g--) {
                    var h = f[g];
                    if (h.type == "sifr/prefetch") {
                        h.parentNode.removeChild(h)
                    }
                }
            } catch(j) {}
        };
        function d(f) {
            for (var g = 0; g < f.length; g++) {
                document.write('<script defer type="sifr/prefetch" src="' + f[g].src + '"><\/script>')
            }
        }
    }
    function b(e) {
        var g = e.ua.ie;
        var f = g && e.ua.flashVersion < e.ua.parseVersion("9.0.115");
        var d = {};
        var c = {};
        this.fixFlash = f;
        this.register = function(h) {
            if (!g) {
                return
            }
            var i = h.getAttribute("id");
            this.cleanup(i, false);
            c[i] = h;
            delete d[i];
            if (f) {
                window[i] = h
            }
        };
        this.reset = function() {
            if (!g) {
                return false
            }
            for (var j = 0; j < e.replacements.length; j++) {
                var h = e.replacements[j];
                var k = c[h.id];
                if (!d[h.id] && (!k.parentNode || k.parentNode.nodeType == 11)) {
                    h.resetMovie();
                    d[h.id] = true
                }
            }
            return true
        };
        this.cleanup = function(l, h) {
            var i = c[l];
            if (!i) {
                return
            }
            for (var k in i) {
                if (typeof(i[k]) == "function") {
                    i[k] = null
                }
            }
            c[l] = null;
            if (f) {
                window[l] = null
            }
            if (i.parentNode) {
                if (h && i.parentNode.nodeType == 1) {
                    var j = document.createElement("div");
                    j.style.width = i.offsetWidth + "px";
                    j.style.height = i.offsetHeight + "px";
                    i.parentNode.replaceChild(j, i)
                } else {
                    i.parentNode.removeChild(i)
                }
            }
        };
        this.prepareClearReferences = function() {
            if (!f) {
                return
            }
            __flash_unloadHandler = function() {};
            __flash_savedUnloadHandler = function() {}
        };
        this.clearReferences = function() {
            if (f) {
                var j = document.getElementsByTagName("object");
                for (var h = j.length - 1; h >= 0; h--) {
                    c[j[h].getAttribute("id")] = j[h]
                }
            }
            for (var k in c) {
                if (Object.prototype[k] != c[k]) {
                    this.cleanup(k, true)
                }
            }
        }
    }
    function K(d, g, f, c, e) {
        this.sIFR = d;
        this.id = g;
        this.vars = f;
        this.movie = null;
        this.__forceWidth = c;
        this.__events = e;
        this.__resizing = 0
    }
    K.prototype = {
        getFlashElement: function() {
            return document.getElementById(this.id)
        },
        getAlternate: function() {
            return document.getElementById(this.id + "_alternate")
        },
        getAncestor: function() {
            var c = this.getFlashElement().parentNode;
            return ! this.sIFR.dom.hasClass(E.FIX_FOCUS, c) ? c: c.parentNode
        },
        available: function() {
            var c = this.getFlashElement();
            return c && c.parentNode
        },
        call: function(c) {
            var d = this.getFlashElement();
            if (!d[c]) {
                return false
            }
            return Function.prototype.apply.call(d[c], d, Array.prototype.slice.call(arguments, 1))
        },
        attempt: function() {
            if (!this.available()) {
                return false
            }
            try {
                this.call.apply(this, arguments)
            } catch(c) {
                if (this.sIFR.debug) {
                    throw c
                }
                return false
            }
            return true
        },
        updateVars: function(c, e) {
            for (var d = 0; d < this.vars.length; d++) {
                if (this.vars[d].split("=")[0] == c) {
                    this.vars[d] = c + "=" + e;
                    break
                }
            }
            var f = this.sIFR.util.encodeVars(this.vars);
            this.movie.injectVars(this.getFlashElement(), f);
            this.movie.injectVars(this.movie.html, f)
        },
        storeSize: function(c, d) {
            this.movie.setSize(c, d);
            this.updateVars(c, d)
        },
        fireEvent: function(c) {
            if (this.available() && this.__events[c]) {
                this.sIFR.util.delay(0, this.__events[c], this, this)
            }
        },
        resizeFlashElement: function(c, d, e) {
            if (!this.available()) {
                return
            }
            this.__resizing++;
            var f = this.getFlashElement();
            f.setAttribute("height", c);
            this.getAncestor().style.minHeight = "";
            this.updateVars("renderheight", c);
            this.storeSize("height", c);
            if (d !== null) {
                f.setAttribute("width", d);
                this.movie.setSize("width", d)
            }
            if (this.__events.onReplacement) {
                this.sIFR.util.delay(0, this.__events.onReplacement, this, this);
                delete this.__events.onReplacement
            }
            if (e) {
                this.sIFR.util.delay(0,
                function() {
                    this.attempt("scaleMovie");
                    this.__resizing--
                },
                this)
            } else {
                this.__resizing--
            }
        },
        blurFlashElement: function() {
            if (this.available()) {
                this.sIFR.dom.blurElement(this.getFlashElement())
            }
        },
        resetMovie: function() {
            this.sIFR.util.delay(0, this.movie.reset, this.movie, this.getFlashElement(), this.getAlternate())
        },
        resizeAfterScale: function() {
            if (this.available() && this.__resizing == 0) {
                this.sIFR.util.delay(0, this.resize, this)
            }
        },
        resize: function() {
            if (!this.available()) {
                return
            }
            this.__resizing++;
            var g = this.getFlashElement();
            var f = g.offsetWidth;
            if (f == 0) {
                return
            }
            var e = g.getAttribute("width");
            var l = g.getAttribute("height");
            var m = this.getAncestor();
            var o = this.sIFR.dom.getHeightFromStyle(m);
            g.style.width = "1px";
            g.style.height = "1px";
            m.style.minHeight = o + "px";
            var c = this.getAlternate().childNodes;
            var n = [];
            for (var k = 0; k < c.length; k++) {
                var h = c[k].cloneNode(true);
                n.push(h);
                m.appendChild(h)
            }
            var d = this.sIFR.dom.getWidthFromStyle(m);
            for (var k = 0; k < n.length; k++) {
                m.removeChild(n[k])
            }
            g.style.width = g.style.height = m.style.minHeight = "";
            g.setAttribute("width", this.__forceWidth ? d: e);
            g.setAttribute("height", l);
            if (sIFR.ua.ie) {
                g.style.display = "none";
                var j = g.offsetHeight;
                g.style.display = ""
            }
            if (d != f) {
                if (this.__forceWidth) {
                    this.storeSize("width", d)
                }
                this.attempt("resize", d)
            }
            this.__resizing--
        },
        replaceText: function(g, j) {
            var d = this.sIFR.util.escape(g);
            if (!this.attempt("replaceText", d)) {
                return false
            }
            this.updateVars("content", d);
            var f = this.getAlternate();
            if (j) {
                while (f.firstChild) {
                    f.removeChild(f.firstChild)
                }
                for (var c = 0; c < j.length; c++) {
                    f.appendChild(j[c])
                }
            } else {
                try {
                    f.innerHTML = g
                } catch(h) {}
            }
            return true
        },
        changeCSS: function(c) {
            c = this.sIFR.util.escape(this.sIFR.util.cssToString(this.sIFR.util.convertCssArg(c)));
            this.updateVars("css", c);
            return this.attempt("changeCSS", c)
        },
        remove: function() {
            if (this.movie && this.available()) {
                this.movie.remove(this.getFlashElement(), this.id)
            }
        }
    };
    var X = new
    function() {
        this.create = function(p, n, j, i, f, e, g, o, l, h, m) {
            var k = p.ua.ie ? d: c;
            return new k(p, n, j, i, f, e, g, o, ["flashvars", l, "wmode", h, "bgcolor", m, "allowScriptAccess", "always", "quality", "best"])
        };
        function c(s, q, l, h, f, e, g, r, n) {
            var m = s.dom.create("object", E.FLASH);
            var p = ["type", "application/x-shockwave-flash", "id", f, "name", f, "data", e, "width", g, "height", r];
            for (var o = 0; o < p.length; o += 2) {
                m.setAttribute(p[o], p[o + 1])
            }
            var j = m;
            if (h) {
                j = W.create("div", E.FIX_FOCUS);
                j.appendChild(m)
            }
            for (var o = 0; o < n.length; o += 2) {
                if (n[o] == "name") {
                    continue
                }
                var k = W.create("param");
                k.setAttribute("name", n[o]);
                k.setAttribute("value", n[o + 1]);
                m.appendChild(k)
            }
            l.style.minHeight = r + "px";
            while (l.firstChild) {
                l.removeChild(l.firstChild)
            }
            l.appendChild(j);
            this.html = j.cloneNode(true)
        }
        c.prototype = {
            reset: function(e, f) {
                e.parentNode.replaceChild(this.html.cloneNode(true), e)
            },
            remove: function(e, f) {
                e.parentNode.removeChild(e)
            },
            setSize: function(e, f) {
                this.html.setAttribute(e, f)
            },
            injectVars: function(e, g) {
                var h = e.getElementsByTagName("param");
                for (var f = 0; f < h.length; f++) {
                    if (h[f].getAttribute("name") == "flashvars") {
                        h[f].setAttribute("value", g);
                        break
                    }
                }
            }
        };
        function d(p, n, j, h, f, e, g, o, k) {
            this.dom = p.dom;
            this.broken = n;
            this.html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="' + f + '" width="' + g + '" height="' + o + '" class="' + E.FLASH + '"><param name="movie" value="' + e + '"></param></object>';
            var m = "";
            for (var l = 0; l < k.length; l += 2) {
                m += '<param name="' + k[l] + '" value="' + k[l + 1] + '"></param>'
            }
            this.html = this.html.replace(/(<\/object>)/, m + "$1");
            j.style.minHeight = o + "px";
            j.innerHTML = this.html;
            this.broken.register(j.firstChild)
        }
        d.prototype = {
            reset: function(f, g) {
                g = g.cloneNode(true);
                var e = f.parentNode;
                e.innerHTML = this.html;
                this.broken.register(e.firstChild);
                e.appendChild(g)
            },
            remove: function(e, f) {
                this.broken.cleanup(f)
            },
            setSize: function(e, f) {
                this.html = this.html.replace(e == "height" ? /(height)="\d+"/: /(width)="\d+"/, '$1="' + f + '"')
            },
            injectVars: function(e, f) {
                if (e != this.html) {
                    return
                }
                this.html = this.html.replace(/(flashvars(=|\"\svalue=)\")[^\"]+/, "$1" + f)
            }
        }
    };
    this.errors = new Y(O);
    var A = this.util = new D(O);
    var W = this.dom = new U(O);
    var T = this.ua = new H(O);
    var G = {
        fragmentIdentifier: new F(O),
        pageLoad: new S(O),
        prefetch: new N(O),
        brokenFlashIE: new b(O)
    };
    this.__resetBrokenMovies = G.brokenFlashIE.reset;
    var J = {
        kwargs: [],
        replaceAll: function(d) {
            for (var c = 0; c < this.kwargs.length; c++) {
                O.replace(this.kwargs[c])
            }
            if (!d) {
                this.kwargs = []
            }
        }
    };
    this.activate = function() {
        if (!T.supported || !this.isEnabled || this.isActive || !C() || a()) {
            return
        }
        G.prefetch.fetchMovies(arguments);
        this.isActive = true;
        this.setFlashClass();
        G.fragmentIdentifier.cache();
        G.pageLoad.attachUnload();
        if (!this.autoInitialize) {
            return
        }
        G.pageLoad.attach()
    };
    this.setFlashClass = function() {
        if (this.hasFlashClassSet) {
            return
        }
        W.addClass(E.ACTIVE, W.getBody() || document.documentElement);
        this.hasFlashClassSet = true
    };
    this.removeFlashClass = function() {
        if (!this.hasFlashClassSet) {
            return
        }
        W.removeClass(E.ACTIVE, W.getBody());
        W.removeClass(E.ACTIVE, document.documentElement);
        this.hasFlashClassSet = false
    };
    this.initialize = function(c) {
        if (!this.isActive || !this.isEnabled) {
            return
        }
        if (R) {
            if (!c) {
                J.replaceAll(false)
            }
            return
        }
        R = true;
        J.replaceAll(c);
        if (O.repaintOnResize) {
            if (window.addEventListener) {
                window.addEventListener("resize", Z, false)
            } else {
                window.attachEvent("onresize", Z)
            }
        }
        G.prefetch.clear()
    };
    this.replace = function(x, u) {
        if (!T.supported) {
            return
        }
        if (u) {
            x = A.copyProperties(x, u)
        }
        if (!R) {
            return J.kwargs.push(x)
        }
        if (this.onReplacementStart) {
            this.onReplacementStart(x)
        }
        var AM = x.elements || W.querySelectorAll(x.selector);
        if (AM.length == 0) {
            return
        }
        var w = M(x.src);
        var AR = A.convertCssArg(x.css);
        var v = B(x.filters);
        var AN = x.forceSingleLine === true;
        var AS = x.preventWrap === true && !AN;
        var q = AN || (x.fitExactly == null ? this.fitExactly: x.fitExactly) === true;
        var AD = q || (x.forceWidth == null ? this.forceWidth: x.forceWidth) === true;
        var s = x.ratios || [];
        var AE = x.pixelFont === true;
        var r = parseInt(x.tuneHeight) || 0;
        var z = !!x.onRelease || !!x.onRollOver || !!x.onRollOut;
        if (q) {
            A.extractFromCss(AR, ".sIFR-root", "text-align", true)
        }
        var t = A.extractFromCss(AR, ".sIFR-root", "font-size", true) || "0";
        var e = A.extractFromCss(AR, ".sIFR-root", "background-color", true) || "#FFFFFF";
        var o = A.extractFromCss(AR, ".sIFR-root", "kerning", true) || "";
        var AW = A.extractFromCss(AR, ".sIFR-root", "opacity", true) || "100";
        var k = A.extractFromCss(AR, ".sIFR-root", "cursor", true) || "default";
        var AP = parseInt(A.extractFromCss(AR, ".sIFR-root", "leading")) || 0;
        var AJ = x.gridFitType || (A.extractFromCss(AR, ".sIFR-root", "text-align") == "right") ? "subpixel": "pixel";
        var h = this.forceTextTransform === false ? "none": A.extractFromCss(AR, ".sIFR-root", "text-transform", true) || "none";
        t = /^\d+(px)?$/.test(t) ? parseInt(t) : 0;
        AW = parseFloat(AW) < 1 ? 100 * parseFloat(AW) : AW;
        var AC = x.modifyCss ? "": A.cssToString(AR);
        var AG = x.wmode || "";
        if (!AG) {
            if (x.transparent) {
                AG = "transparent"
            } else {
                if (x.opaque) {
                    AG = "opaque"
                }
            }
        }
        if (AG == "transparent") {
            if (!T.transparencySupport) {
                AG = "opaque"
            } else {
                e = "transparent"
            }
        } else {
            if (e == "transparent") {
                e = "#FFFFFF"
            }
        }
        for (var AV = 0; AV < AM.length; AV++) {
            var AF = AM[AV];
            if (W.hasOneOfClassses(E.IGNORE_CLASSES, AF) || W.ancestorHasClass(AF, E.ALTERNATE)) {
                continue
            }
            var AO = W.getDimensions(AF);
            var f = AO.height;
            var c = AO.width;
            var AA = W.getComputedStyle(AF, "display");
            if (!f || !c || !AA || AA == "none") {
                continue
            }
            c = W.getWidthFromStyle(AF);
            var n,
            AH;
            if (!t) {
                var AL = I(AF);
                n = Math.min(this.MAX_FONT_SIZE, Math.max(this.MIN_FONT_SIZE, AL.fontSize));
                if (AE) {
                    n = Math.max(8, 8 * Math.round(n / 8))
                }
                AH = AL.lines
            } else {
                n = t;
                AH = 1
            }
            var d = W.create("span", E.ALTERNATE);
            var AX = AF.cloneNode(true);
            AF.parentNode.appendChild(AX);
            for (var AU = 0, AT = AX.childNodes.length; AU < AT; AU++) {
                var m = AX.childNodes[AU];
                if (!/^(style|script)$/i.test(m.nodeName)) {
                    d.appendChild(m.cloneNode(true))
                }
            }
            if (x.modifyContent) {
                x.modifyContent(AX, x.selector)
            }
            if (x.modifyCss) {
                AC = x.modifyCss(AR, AX, x.selector)
            }
            var p = P(AX, h, x.uriEncode);
            AX.parentNode.removeChild(AX);
            if (x.modifyContentString) {
                p.text = x.modifyContentString(p.text, x.selector)
            }
            if (p.text == "") {
                continue
            }
            var AK = Math.round(AH * V(n, s) * n) + this.FLASH_PADDING_BOTTOM + r;
            if (AH > 1 && AP) {
                AK += Math.round((AH - 1) * AP)
            }
            var AB = AD ? c: "100%";
            var AI = "sIFR_replacement_" + L++;
            var AQ = ["id=" + AI, "content=" + A.escape(p.text), "width=" + c, "renderheight=" + AK, "link=" + A.escape(p.primaryLink.href || ""), "target=" + A.escape(p.primaryLink.target || ""), "size=" + n, "css=" + A.escape(AC), "cursor=" + k, "tunewidth=" + (x.tuneWidth || 0), "tuneheight=" + r, "offsetleft=" + (x.offsetLeft || ""), "offsettop=" + (x.offsetTop || ""), "fitexactly=" + q, "preventwrap=" + AS, "forcesingleline=" + AN, "antialiastype=" + (x.antiAliasType || ""), "thickness=" + (x.thickness || ""), "sharpness=" + (x.sharpness || ""), "kerning=" + o, "gridfittype=" + AJ, "flashfilters=" + v, "opacity=" + AW, "blendmode=" + (x.blendMode || ""), "selectable=" + (x.selectable == null || AG != "" && !sIFR.ua.macintosh && sIFR.ua.gecko && sIFR.ua.geckoVersion >= sIFR.ua.parseVersion("1.9") ? "true": x.selectable === true), "fixhover=" + (this.fixHover === true), "events=" + z, "delayrun=" + G.brokenFlashIE.fixFlash, "version=" + this.VERSION];
            var y = A.encodeVars(AQ);
            var g = new K(O, AI, AQ, AD, {
                onReplacement: x.onReplacement,
                onRollOver: x.onRollOver,
                onRollOut: x.onRollOut,
                onRelease: x.onRelease
            });
            g.movie = X.create(sIFR, G.brokenFlashIE, AF, T.fixFocus && x.fixFocus, AI, w, AB, AK, y, AG, e);
            this.replacements.push(g);
            this.replacements[AI] = g;
            if (x.selector) {
                if (!this.replacements[x.selector]) {
                    this.replacements[x.selector] = [g]
                } else {
                    this.replacements[x.selector].push(g)
                }
            }
            d.setAttribute("id", AI + "_alternate");
            AF.appendChild(d);
            W.addClass(E.REPLACED, AF)
        }
        G.fragmentIdentifier.restore()
    };
    this.getReplacementByFlashElement = function(d) {
        for (var c = 0; c < O.replacements.length; c++) {
            if (O.replacements[c].id == d.getAttribute("id")) {
                return O.replacements[c]
            }
        }
    };
    this.redraw = function() {
        for (var c = 0; c < O.replacements.length; c++) {
            O.replacements[c].resetMovie()
        }
    };
    this.prepareClearReferences = function() {
        G.brokenFlashIE.prepareClearReferences()
    };
    this.clearReferences = function() {
        G.brokenFlashIE.clearReferences();
        G = null;
        J = null;
        delete O.replacements
    };
    function C() {
        if (O.domains.length == 0) {
            return true
        }
        var d = A.domain();
        for (var c = 0; c < O.domains.length; c++) {
            if (A.domainMatches(d, O.domains[c])) {
                return true
            }
        }
        return false
    }
    function a() {
        if (document.location.protocol == "file:") {
            if (O.debug) {
                O.errors.fire("isFile")
            }
            return true
        }
        return false
    }
    function M(c) {
        if (T.ie && c.charAt(0) == "/") {
            c = window.location.toString().replace(/([^:]+)(:\/?\/?)([^\/]+).*/, "$1$2$3") + c
        }
        return c
    }
    function V(d, e) {
        for (var c = 0; c < e.length; c += 2) {
            if (d <= e[c]) {
                return e[c + 1]
            }
        }
        return e[e.length - 1] || 1
    }
    function B(g) {
        var e = [];
        for (var d in g) {
            if (g[d] == Object.prototype[d]) {
                continue
            }
            var c = g[d];
            d = [d.replace(/filter/i, "") + "Filter"];
            for (var f in c) {
                if (c[f] == Object.prototype[f]) {
                    continue
                }
                d.push(f + ":" + A.escape(A.toJson(c[f], A.toHexString)))
            }
            e.push(d.join(","))
        }
        return A.escape(e.join(";"))
    }
    function Z(d) {
        var e = Z.viewport;
        var c = W.getViewport();
        if (e && c.width == e.width && c.height == e.height) {
            return
        }
        Z.viewport = c;
        if (O.replacements.length == 0) {
            return
        }
        if (Z.timer) {
            clearTimeout(Z.timer)
        }
        Z.timer = setTimeout(function() {
            delete Z.timer;
            for (var f = 0; f < O.replacements.length; f++) {
                O.replacements[f].resize()
            }
        },
        200)
    }
    function I(f) {
        var g = W.getComputedStyle(f, "fontSize");
        var d = g.indexOf("px") == -1;
        var e = f.innerHTML;
        if (d) {
            f.innerHTML = "X"
        }
        f.style.paddingTop = f.style.paddingBottom = f.style.borderTopWidth = f.style.borderBottomWidth = "0px";
        f.style.lineHeight = "2em";
        f.style.display = "block";
        g = d ? f.offsetHeight / 2: parseInt(g, 10);
        if (d) {
            f.innerHTML = e
        }
        var c = Math.round(f.offsetHeight / (2 * g));
        f.style.paddingTop = f.style.paddingBottom = f.style.borderTopWidth = f.style.borderBottomWidth = f.style.lineHeight = f.style.display = "";
        if (isNaN(c) || !isFinite(c) || c == 0) {
            c = 1
        }
        return {
            fontSize: g,
            lines: c
        }
    }
    function P(c, g, s) {
        s = s || A.uriEncode;
        var q = [],
        m = [];
        var k = null;
        var e = c.childNodes;
        var o = false,
        p = false;
        var j = 0;
        while (j < e.length) {
            var f = e[j];
            if (f.nodeType == 3) {
                var t = A.textTransform(g, A.normalize(f.nodeValue)).replace(/</g, "&lt;");
                if (o && p) {
                    t = t.replace(/^\s+/, "")
                }
                m.push(t);
                o = /\s$/.test(t);
                p = false
            }
            if (f.nodeType == 1 && !/^(style|script)$/i.test(f.nodeName)) {
                var h = [];
                var r = f.nodeName.toLowerCase();
                var n = f.className || "";
                if (/\s+/.test(n)) {
                    if (n.indexOf(E.CLASS) > -1) {
                        n = n.match("(\\s|^)" + E.CLASS + "-([^\\s$]*)(\\s|$)")[2]
                    } else {
                        n = n.match(/^([^\s]+)/)[1]
                    }
                }
                if (n != "") {
                    h.push('class="' + n + '"')
                }
                if (r == "a") {
                    var d = s(f.getAttribute("href") || "");
                    var l = f.getAttribute("target") || "";
                    h.push('href="' + d + '"', 'target="' + l + '"');
                    if (!k) {
                        k = {
                            href: d,
                            target: l
                        }
                    }
                }
                m.push("<" + r + (h.length > 0 ? " ": "") + h.join(" ") + ">");
                p = true;
                if (f.hasChildNodes()) {
                    q.push(j);
                    j = 0;
                    e = f.childNodes;
                    continue
                } else {
                    if (!/^(br|img)$/i.test(f.nodeName)) {
                        m.push("</", f.nodeName.toLowerCase(), ">")
                    }
                }
            }
            if (q.length > 0 && !f.nextSibling) {
                do {
                    j = q.pop();
                    e = f.parentNode.parentNode.childNodes;
                    f = e[j];
                    if (f) {
                        m.push("</", f.nodeName.toLowerCase(), ">")
                    }
                }
                while (j == e.length - 1 && q.length > 0)
            }
            j++
        }
        return {
            text: m.join("").replace(/^\s+|\s+$|\s*(<br>)\s*/g, "$1"),
            primaryLink: k || {}
        }
    }
};
var parseSelector = (function() {
    var B = /\s*,\s*/;
    var A = /\s*([\s>+~(),]|^|$)\s*/g;
    var L = /([\s>+~,]|[^(]\+|^)([#.:@])/g;
    var F = /(^|\))[^\s>+~]/g;
    var M = /(\)|^)/;
    var K = /[\s#.:>+~()@]|[^\s#.:>+~()@]+/g;
    function H(R, P) {
        P = P || document.documentElement;
        var S = R.split(B),
        X = [];
        for (var U = 0; U < S.length; U++) {
            var N = [P],
            W = G(S[U]);
            for (var T = 0; T < W.length;) {
                var Q = W[T++],
                O = W[T++],
                V = "";
                if (W[T] == "(") {
                    while (W[T++] != ")" && T < W.length) {
                        V += W[T]
                    }
                    V = V.slice(0, -1)
                }
                N = I(N, Q, O, V)
            }
            X = X.concat(N)
        }
        return X
    }
    function G(N) {
        var O = N.replace(A, "$1").replace(L, "$1*$2").replace(F, D);
        return O.match(K) || []
    }
    function D(N) {
        return N.replace(M, "$1 ")
    }
    function I(N, P, Q, O) {
        return (H.selectors[P]) ? H.selectors[P](N, Q, O) : []
    }
    var E = {
        toArray: function(O) {
            var N = [];
            for (var P = 0; P < O.length; P++) {
                N.push(O[P])
            }
            return N
        }
    };
    var C = {
        isTag: function(O, N) {
            return (N == "*") || (N.toLowerCase() == O.nodeName.toLowerCase())
        },
        previousSiblingElement: function(N) {
            do {
                N = N.previousSibling
            }
            while (N && N.nodeType != 1);
            return N
        },
        nextSiblingElement: function(N) {
            do {
                N = N.nextSibling
            }
            while (N && N.nodeType != 1);
            return N
        },
        hasClass: function(N, O) {
            return (O.className || "").match("(^|\\s)" + N + "(\\s|$)")
        },
        getByTag: function(N, O) {
            return O.getElementsByTagName(N)
        }
    };
    var J = {
        "#": function(N, P) {
            for (var O = 0; O < N.length; O++) {
                if (N[O].getAttribute("id") == P) {
                    return [N[O]]
                }
            }
            return []
        },
        " ": function(O, Q) {
            var N = [];
            for (var P = 0; P < O.length; P++) {
                N = N.concat(E.toArray(C.getByTag(Q, O[P])))
            }
            return N
        },
        ">": function(O, R) {
            var N = [];
            for (var Q = 0, S; Q < O.length; Q++) {
                S = O[Q];
                for (var P = 0, T; P < S.childNodes.length; P++) {
                    T = S.childNodes[P];
                    if (T.nodeType == 1 && C.isTag(T, R)) {
                        N.push(T)
                    }
                }
            }
            return N
        },
        ".": function(O, Q) {
            var N = [];
            for (var P = 0, R; P < O.length; P++) {
                R = O[P];
                if (C.hasClass([Q], R)) {
                    N.push(R)
                }
            }
            return N
        },
        ":": function(N, P, O) {
            return (H.pseudoClasses[P]) ? H.pseudoClasses[P](N, O) : []
        }
    };
    H.selectors = J;
    H.pseudoClasses = {};
    H.util = E;
    H.dom = C;
    return H
})();