/** 
 * flashembed 0.31. Adobe Flash embedding script
 *
 * http://flowplayer.org/tools/flash-embed.html
 *
 * Copyright (c) 2008 Tero Piirainen (tipiirai@gmail.com)
 *
 * Released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 * >> Basically you can do anything you want but leave this header as is <<
 *
 * version 0.01 - 03/11/2008
 * version 0.31 - Tue Jul 22 2008 06:30:31 GMT+0200 (GMT+02:00)
 */
function flashembed(root, userParams, flashvars){
    function getHTML(){
        var html = "";
        if (typeof flashvars == 'function') {
            flashvars = flashvars();
        }
        if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
            html = '<embed type="application/x-shockwave-flash" ';
            if (params.id) {
                extend(params, {
                    name: params.id
                });
            }
            for (var key in params) {
                if (params[key] !== null) {
                    html += [key] + '="' + params[key] + '"\n\t';
                }
            }
            if (flashvars) {
                html += 'flashvars=\'' + concatVars(flashvars) + '\'';
            }
            html += '/>';
        }
        else {
            html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
            html += 'width="' + params.width + '" height="' + params.height + '"';
            if (!params.id && document.all) {
                params.id = "_" + ("" + Math.random()).substring(5);
            }
            if (params.id) {
                html += ' id="' + params.id + '"';
            }
            html += '>';
            html += '\n\t<param name="movie" value="' + params.src + '" />';
            params.id = params.src = params.width = params.height = null;
            for (var k in params) {
                if (params[k] !== null) {
                    html += '\n\t<param name="' + k + '" value="' + params[k] + '" />';
                }
            }
            if (flashvars) {
                html += '\n\t<param name="flashvars" value=\'' + concatVars(flashvars) + '\' />';
            }
            html += "</object>";
            if (debug) {
                alert(html);
            }
        }
        return html;
    }
    function init(name){
        var timer = setInterval(function(){
            var doc = document;
            var el = doc.getElementById(name);
            if (el) {
                flashembed(el, userParams, flashvars);
                clearInterval(timer);
            }
            else 
                if (doc && doc.getElementsByTagName && doc.getElementById && doc.body) {
                    clearInterval(timer);
                }
        }, 13);
        return true;
    }
    function extend(to, from){
        if (from) {
            for (key in from) {
                if (from.hasOwnProperty(key)) {
                    to[key] = from[key];
                }
            }
        }
    }
    var params = {
        src: '#',
        width: '100%',
        height: '100%',
        version: null,
        onFail: null,
        expressInstall: null,
        debug: false,
        bgcolor: '#000000',
        allowfullscreen: true,
        allowscriptaccess: 'always',
        quality: 'high',
        type: 'application/x-shockwave-flash',
        pluginspage: 'http://www.adobe.com/go/getflashplayer'
    };
    if (typeof userParams == 'string') {
        userParams = {
            src: userParams
        };
    }
    extend(params, userParams);
    var version = flashembed.getVersion();
    var required = params.version;
    var express = params.expressInstall;
    var debug = params.debug;
    if (typeof root == 'string') {
        var el = document.getElementById(root);
        if (el) {
            root = el;
        }
        else {
            return init(root);
        }
    }
    if (!root) {
        return;
    }
    if (!required || flashembed.isSupported(required)) {
        params.onFail = params.version = params.expressInstall = params.debug = null;
        root.innerHTML = getHTML();
        return root.firstChild;
    }
    else 
        if (params.onFail) {
            var ret = params.onFail.call(params, flashembed.getVersion(), flashvars);
            if (ret) {
                root.innerHTML = ret;
            }
        }
        else 
            if (required && express && flashembed.isSupported([6, 65])) {
                extend(params, {
                    src: express
                });
                flashvars = {
                    MMredirectURL: location.href,
                    MMplayerType: 'PlugIn',
                    MMdoctitle: document.title
                };
                root.innerHTML = getHTML();
            }
            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='" + params.pluginspage + "'>here</a></p>";
                }
            }
    function concatVars(vars){
        var out = "";
        for (var key in vars) {
            if (vars[key]) {
                out += [key] + '=' + asString(vars[key]) + '&';
            }
        }
        return out.substring(0, out.length - 1);
    }
    function asString(obj){
        switch (typeOf(obj)) {
            case 'string':
                return '"' + obj.replace(new RegExp('(["\\\\])', 'g'), '\\$1') + '"';
            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;
    }
    return root;
}

if (typeof jQuery == 'function') {
    (function($){
        $.fn.extend({
            flashembed: function(params, flashvars){
                return this.each(function(){
                    flashembed(this, params, flashvars);
                });
            }
        });
    })(jQuery);
}
flashembed = flashembed ||
{};
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;
};
flashembed.isSupported = function(version){
    var now = flashembed.getVersion();
    var ret = (now[0] > version[0]) || (now[0] == version[0] && now[1] >= version[1]);
    return ret;
};
