/**
* flashembed 1.0.0. Adobe Flash embedding script
* 
* Copyright (c) 2009 Tero Piirainen
* http://flowplayer.org/tools/flash-embed.html
*
* Dual licensed under MIT and GPL 2+ licenses
* http://www.opensource.org/licenses
*
* Launch  : March 2008
* Version : 1.0.0 - Tue Feb 03 2009 10:48:10 GMT-0000 (GMT+00:00)
*/
(function () {
    var jQ = typeof jQuery == 'function';
    function isDomReady() {
        if (domReady.done) {
            return false;
        }
        var d = document;
        if (d && d.getElementsByTagName && d.getElementById && d.body) {
            clearInterval(domReady.timer);
            domReady.timer = null;
            for (var i = 0; i < domReady.ready.length; i++) {
                domReady.ready[i].call();
            }
            domReady.ready = null;
            domReady.done = true;
        }
    }
    var domReady = jQ ? jQuery : function (f) {
        if (domReady.done) {
            return f();
        }
        if (domReady.timer) {
            domReady.ready.push(f);
        }
        else {
            domReady.ready = [f];
            domReady.timer = setInterval(isDomReady, 13);
        }
    };
    function extend(to, from) {
        if (from) {
            for (key in from) {
                if (from.hasOwnProperty(key)) {
                    to[key] = from[key];
                }
            }
        }
        return to;
    }
    function asString(obj) {
        switch (typeOf(obj)) {
            case 'string':
                obj = obj.replace(new RegExp('(["\\\\])', 'g'), '\\$1');
                obj = obj.replace(/^\s?(\d+)%/, "$1pct");
                return '"' + obj + '"';
            case 'array':
                return '[' + map(obj, function (el) {
                    return asString(el);
                }).join(',') + ']';
            case 'function':
                return '"function()"';
            case 'object':
                var str = [];
                for (var prop in obj) {
                    if (obj.hasOwnProperty(prop)) {
                        str.push('"' + prop + '":' + asString(obj[prop]));
                    }
                }
                return '{' + str.join(',') + '}';
        }
        return String(obj).replace(/\s/g, " ").replace(/\'/g, "\"");
    }

    function typeOf(obj) {
        if (obj === null || obj === undefined) {
            return false;
        }
        var type = typeof obj;
        return (type == 'object' && obj.push) ? 'array' : type;
    }
    if (window.attachEvent) {
        window.attachEvent("onbeforeunload", function () {
            __flash_unloadHandler = function () { };
            __flash_savedUnloadHandler = function () { };
        });
    } function map(arr, func) {
        var newArr = [];
        for (var i in arr) {
            if (arr.hasOwnProperty(i)) {
                newArr[i] = func(arr[i]);
            }
        }
        return newArr;
    }
    function getHTML(p, c) {
        var ie = document.all;
        var html = '<object width="' + p.width + '" height="' + p.height + '"';
        if (ie && !p.id) {
            p.id = "_" + ("" + Math.random()).substring(9);
        }
        if (p.id) {
            html += ' id="' + p.id + '"';
        }
        if (p.w3c || !ie) {
            html += ' data="' + p.src + '" type="application/x-shockwave-flash"';
        }
        else {
            html += ' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
        }
        html += '>';
        if (p.w3c || ie) {
            html += '<param name="movie" value="' + p.src + '" />';
        }
        var e = extend({}, p);
        e.width = e.height = e.id = e.w3c = e.src = null;
        for (var k in e) {
            if (e[k] !== null) {
                html += '<param name="' + k + '" value="' + e[k] + '" />';
            }
        } var vars = "";
        if (c) {
            for (var key in c) {
                if (c[key] !== null) {
                    vars += key + '=' + (typeof c[key] == 'object' ? asString(c[key]) : c[key]) + '&';
                }
            }
            vars = vars.substring(0, vars.length - 1);
            html += '<param name="flashvars" value=\'' + vars + '\' />';
        }
        html += "</object>";
        return html;
    }

    function Flash(root, opts, flashvars) {
        var version = flashembed.getVersion();
        extend(this,
        { getContainer:
        function () {
            return root;
        }, getConf: function () {
            return conf;
        }, getVersion: function () {
            return version;
        }, getFlashvars: function () {
            return flashvars;
        }, getApi: function () {
            return root.firstChild;
        }, getHTML: function () {
            return getHTML(opts, flashvars);
        }
        });
        var required = opts.version;
        var express = opts.expressInstall;
        var ok = !required || flashembed.isSupported(required);
        if (ok) {
            opts.onFail = opts.version = opts.expressInstall = null;
            root.innerHTML = getHTML(opts, flashvars);
        }
        else if (required && express && flashembed.isSupported([6, 65])) {
            extend(opts, { src: express });
            flashvars = { MMredirectURL: location.href, MMplayerType: 'PlugIn', MMdoctitle: document.title };
            root.innerHTML = getHTML(opts, flashvars);
        } else {
            if (root.innerHTML.replace(/\s/g, '') !== '')
            { }
            else {
                root.innerHTML = "<h2>Flash version " + required + " or greater is required</h2>" + "<h3>" + (version[0] > 0 ? "Your version is " + version : "You have no flash plugin installed") + "</h3>" + "<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>";
            }
        }
        if (!ok && opts.onFail) {
            var ret = opts.onFail.call(this);
            if (typeof ret == 'string') {
                root.innerHTML = ret;
            }
        }
    }

    window.flashembed = function (root, conf, flashvars) {
        if (typeof root == 'string') {
            var el = document.getElementById(root);
            if (el) {
                root = el;
            } else {
                domReady(function () {
                    flashembed(root, conf, flashvars);
                });
                return;
            }
        } if (!root) {
            return;
        } var opts = { width: '100%', height: '100%', allowfullscreen: true, allowscriptaccess: 'always', quality: 'high', version: null, onFail: null, expressInstall: null, w3c: false };
        if (typeof conf == 'string') {
            conf = { src: conf };
        } extend(opts, conf);
        return new Flash(root, opts, flashvars);
    };
    extend(window.flashembed, { getVersion: function () {
        var version = [0, 0];
        if (navigator.plugins && typeof navigator.plugins["Shockwave Flash"] == "object") {
            var _d = navigator.plugins["Shockwave Flash"].description;
            if (typeof _d != "undefined") {
                _d = _d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                var _m = parseInt(_d.replace(/^(.*)\..*$/, "$1"), 10);
                var _r = /r/.test(_d) ? parseInt(_d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
                version = [_m, _r];
            }
        } else if (window.ActiveXObject) {
            try {
                var _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
            } catch (e) {
                try {
                    _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
                    version = [6, 0];
                    _a.AllowScriptAccess = "always";
                } catch (ee) {
                    if (version[0] == 6) {
                        return;
                    }
                } try {
                    _a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
                } catch (eee) { }
            } if (typeof _a == "object") {
                _d = _a.GetVariable("$version");
                if (typeof _d != "undefined") {
                    _d = _d.replace(/^\S+\s+(.*)$/, "$1").split(",");
                    version = [parseInt(_d[0], 10), parseInt(_d[2], 10)];
                }
            }
        } return version;
    }, isSupported: function (version) {
        var now = flashembed.getVersion();
        var ret = (now[0] > version[0]) || (now[0] == version[0] && now[1] >= version[1]);
        return ret;
    }, domReady: domReady, asString: asString, getHTML: getHTML
    });
    if (jQ) {
        jQuery.prototype.flashembed = function (conf, flashvars) {
            return this.each(function () {
                flashembed(this, conf, flashvars);
            });
        };
    }
})();
