    /*!
     * Ext JS Library 3.3.0
     * Copyright(c) 2006-2010 Ext JS, Inc.
     * licensing@extjs.com
     * http://www.extjs.com/license
     */
    /**
     * @class Ext.FlashComponent
     * @extends Ext.BoxComponent
     * @constructor
     * @xtype flash
     */
    Ext.FlashComponent = Ext.extend(Ext.BoxComponent, {
        /**
         * @cfg {String} flashVersion
         * Indicates the version the flash content was published for. Defaults to '9.0.115'.
         */
        flashVersion : '9.0.115',

        /**
         * @cfg {String} backgroundColor
         * The background color of the chart. Defaults to '#ffffff'.
         */
        backgroundColor: '#ffffff',

        /**
         * @cfg {String} wmode
         * The wmode of the flash object. This can be used to control layering. Defaults to 'opaque'.
         */
        wmode: 'opaque',

        /**
         * @cfg {Object} flashVars
         * A set of key value pairs to be passed to the flash object as flash variables. Defaults to undefined.
         */
        flashVars: undefined,

        /**
         * @cfg {Object} flashParams
         * A set of key value pairs to be passed to the flash object as parameters. Possible parameters can be found here:
         * http://kb2.adobe.com/cps/127/tn_12701.html Defaults to undefined.
         */
        flashParams: undefined,

        /**
         * @cfg {String} url
         * The URL of the chart to include. Defaults to undefined.
         */
        url: undefined,
        swfId : undefined,
        swfWidth: '100%',
        swfHeight: '100%',

        /**
         * @cfg {Boolean} expressInstall
         * True to prompt the user to install flash if not installed. Note that this uses
         * Ext.FlashComponent.EXPRESS_INSTALL_URL, which should be set to the local resource. Defaults to false.
         */
        expressInstall: false,

        initComponent : function(){
            Ext.FlashComponent.superclass.initComponent.call(this);

            this.addEvents(
                /**
                 * @event initialize
                 *
                 * @param {Chart} this
                 */
                'initialize'
            );
        },

        onRender : function(){
            Ext.FlashComponent.superclass.onRender.apply(this, arguments);

            var params = Ext.apply({
                allowScriptAccess: 'always',
                bgcolor: this.backgroundColor,
                wmode: this.wmode
            }, this.flashParams), vars = Ext.apply({
                allowedDomain: document.location.hostname,
                YUISwfId: this.getId(),
                YUIBridgeCallback: 'Ext.FlashEventProxy.onEvent'
            }, this.flashVars);

            new swfobject.embedSWF(this.url, this.id, this.swfWidth, this.swfHeight, this.flashVersion,
                this.expressInstall ? Ext.FlashComponent.EXPRESS_INSTALL_URL : undefined, vars, params);

            this.swf = Ext.getDom(this.id);
            this.el = Ext.get(this.swf);
        },

        getSwfId : function(){
            return this.swfId || (this.swfId = "extswf" + (++Ext.Component.AUTO_ID));
        },

        getId : function(){
            return this.id || (this.id = "extflashcmp" + (++Ext.Component.AUTO_ID));
        },

        onFlashEvent : function(e){
            switch(e.type){
                case "swfReady":
                    this.initSwf();
                    return;
                case "log":
                    return;
            }
            e.component = this;
            this.fireEvent(e.type.toLowerCase().replace(/event$/, ''), e);
        },

        initSwf : function(){
            this.onSwfReady(!!this.isInitialized);
            this.isInitialized = true;
            this.fireEvent('initialize', this);
        },

        beforeDestroy: function(){
            if(this.rendered){
                swfobject.removeSWF(this.swf.id);
            }
            Ext.FlashComponent.superclass.beforeDestroy.call(this);
        },

        onSwfReady : Ext.emptyFn
    });

    /**
     * Sets the url for installing flash if it doesn't exist. This should be set to a local resource.
     * @static
     * @type String
     */
    Ext.FlashComponent.EXPRESS_INSTALL_URL = 'http:/' + '/swfobject.googlecode.com/svn/trunk/swfobject/expressInstall.swf';

    Ext.reg('flash', Ext.FlashComponent);