(function($) {
    $.fn.InsertObject = function(settings) {
        var fn = new Object();
        var o = this;

        settings = jQuery.extend({
            bgcolor: '#ffffff',
            quality: 'high',
            cache: 'true',
            autoplay: 'true',
            controller: 'true',
            scale: 'tofit',
            version: '9,0,0,0',
            allowscriptaccess: 'always',
            wmode: 'transparent',
            loop: 'false',
            append: false,
            flashVars: null,
            type: null,
            classid: null,
            other: null,
            src: null
        }, settings);

        fn.createObject = function(param, classid, codebase) {
            var object = new String();
            if ($.browser.msie) {
                if (classid) {
                    classid = ' classid="' + classid + '"';
                } else {
                    classid = '';
                }
                if (codebase) {
                    codebase = ' codebase="' + codebase + '"';
                } else {
                    codebase = '';
                }
                object += '<object id="objInsert_' + o.attr('id') + '"' + classid + codebase + settings.type + ' height="' + settings.height + '" width="' + settings.width + '">\n';
                for (var i = 0; i < param.length; i++) {
                    object += '<param name="' + param[i][0] + '" value="' + param[i][1] + '">\n';
                }
                object += '</object>\n';
            } else {
                if (settings.type) {
                    settings.type = ' type="' + settings.type + '"';
                } else {
                    settings.type = '';
                }
                if (settings.src) {
                    settings.src = ' src="' + settings.src + '"';
                } else {
                    settings.src = '';
                }
                object += '<embed name="objInsert_' + o.attr('id') + '"' + settings.src + settings.type + ' width="' + settings.width + '" height="' + settings.height + '" ';
                for (var i = 0; i < param.length; i++) {
                    object += param[i][0] + '="' + param[i][1] + '" ';
                }
                object += ' />\n';
            }
            return object;
        };

        fn.createParams = function() {
            var param = new Array();
            var classid, codebase;

            if (settings.type) {
                classid = settings.classid;
                codebase = null;
            } else if (settings.src.indexOf('.mov') != -1 || settings.src.indexOf('.mp3') != -1 || settings.src.indexOf('.mp4') != -1 || settings.src.indexOf('.m4v') != -1) {
                classid = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
                codebase = 'http://www.apple.com/qtactivex/qtplugin.cab';
                param[0] = ['pluginspage', 'http://www.apple.com/quicktime/download/'];
                param[1] = ['src', settings.src];
                param[2] = ['controller', settings.controller];
                param[3] = ['autoplay', settings.autoplay];
                param[4] = ['cache', settings.cache];
                param[5] = ['scale', settings.scale];
                param[6] = ['type', 'video/quicktime'];
            } else if (settings.src.indexOf('.swf') != -1) {
                classid = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';
                codebase = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=' + settings.version;
                param[0] = ['pluginspage', 'http://www.macromedia.com/go/getflashplayer'];
                param[1] = ['movie', settings.src];
                param[2] = ['quality', settings.quality];
                param[3] = ['bgcolor', settings.bgcolor];
                param[4] = ['allowscriptaccess', settings.allowscriptaccess];
                param[5] = ['flashvars', settings.flashVars];
                param[6] = ['wmode', settings.wmode];
                param[7] = ['scale', settings.scale];
                param[8] = ['type', 'application/x-shockwave-flash'];
            }
            if (settings.other) {
                for (var paramName in settings.other) {
                    param[param.length] = [paramName, settings.other[paramName]];
                }
            }

            if ($.browser.msie) {
                o.each(function() {
                    if (!settings.append) {
                        this.innerHTML = fn.createObject(param, classid, codebase);
                    } else {
                        this.innerHTML += fn.createObject(param, classid, codebase);
                    }
                });
            } else {
                if (!settings.append) {
                    o.html(fn.createObject(param, classid, codebase));
                } else {
                    o.append(fn.createObject(param, classid, codebase));
                }
            }
        };
        fn.createParams();
    }
})(jQuery);
