if (!window.X) { X = {}; }
X.flash = {};

X.flash.getSWF = function(swfName)
{
    var swf = null;    
    /*
    window.document[movieName]      // (on Mozilla browsers such as Netscape)
    window[movieName]               // (on Internet Explorer as of ver 5)
    document.embeds[movieName]      // Mozilla Netscape, Firefox or Opera
    */
    if (window.document[swfName])
    {
        swf = window.document[swfName] || null;
    }
    else if (document.embeds && document.embeds[swfName])
    {
        swf = document.embeds[swfName] || null;
    }
    else
    {
        swf = window[swfName] || null;
    }
    
    return swf;
};

// Returns jQuery chain if setting callback (second arg is a function)
jQuery.fn.flashCallback = function(name, func)
// Else returns result of callback
{
    var flashCallbacks = this.data('flashCallbacks');
    if (typeof(name) !== 'string')
    {
        for (var prop in name)
        {
            this.flashCallback(prop, name[prop]);
        }
    }
    else
    {
        if (jQuery.isFunction(func))
        {
            if (!flashCallbacks)
            {
                flashCallbacks = {};
                this.data('flashCallbacks', flashCallbacks);
            }
            flashCallbacks[name] = func;
            return this;
        }
        else
        {
            if (!flashCallbacks || !jQuery.isFunction(flashCallbacks[name])) { return; }
            return flashCallbacks[name](data);
        }
    }
};

// Registers a callback (or calls) for when a swf is loaded
X.flash.loadCallback = function(swfId, func)
{
    if (jQuery.isFunction(func))
    {
        X.flash.loadCallback[swfId] = func;
    }
    else if (jQuery.isFunction(X.flash.loadCallback[swfId]))
    {
        X.flash.loadCallback[swfId]();
    }
};

// Calls function in flash
// Returns results of function
X.flash.callMethod = function(swfId, ns, methodName)
{
    var swf = X.flash.getSWF(swfId);
    //alert(jQuery.isFunction(swf.jsProxy));
    if (!swf || !jQuery.isFunction(swf.jsProxy)) { return; }
    
    var args = jQuery.makeArray(arguments).slice(2); 
    //alert(methodName+','+args);
    return swf.jsProxy(methodName, args, ns||null);
}; 

jQuery.fn.bindFlash = function(type, handler)
{
    return this.bind('flashEvent_' + type, function(evt, flashEvt)
    {
        handler.call(this, flashEvt);
    });
};
// Triggers a flash event - called from flash player
// returns nothing
X.flash.triggerFlash = function(swfId, evt)
{   
    jQuery('#' + swfId).triggerHandler('flashEvent_' + evt.type, evt);
}; 