var Swiff = function(source, props){
if (!Swiff.fixed) Swiff.fix();
var instance = Swiff.nextInstance();
Swiff.vars[instance] = {};
props = $merge({
width: 1,
height: 1,
id: instance,
wmode: 'transparent',
bgcolor: '#ffffff',
allowScriptAccess: 'sameDomain',
callBacks: {'onLoad': Class.empty},
params: {}
}, props || {});
var append = [];
if (window.ie) append.push('__salt=' + $time());
for (var p in props.callBacks){
Swiff.vars[instance][p] = props.callBacks[p];
append.push(p + '=Swiff.vars.' + instance + '.' + p);
}
var vars = "";
if(props.vars) {
for(var p in props.vars) {
vars += p+"="+props.vars[p]+"&";
}
}
if (props.params) append.push(Object.toQueryString(props.params));
var swf = source + (source.contains('?') ? '&' : '?') + append.join('&');
if(window.ie) {
return new Element('div').setHTML(
'<object width="',props.width,'" height="', props.height,'" codebase="http://fpdownloadocument.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">'
,'<param name="movie" value="', swf,'"/>'
,'<param name="quality" value="high"/>'
,'<param name="bgcolor" value="', props.bgcolor, '" />'
,'<param name="scale" value="noscale" />'
,'<param name="salign" value="lt" />'
,'<param name="AllowScriptAccess" value="', props.allowScriptAccess, '"/>'
,'<param name="flashvars" value="', vars, '"/>'
,'<param name="wmode" value="', props.wmode, '" />'
,'</object>').firstChild;
} else {
return new Element('div').setHTML(
'<object width="', props.width, '" height="', props.height, '" id="', props.id, '" type="application/x-shockwave-flash" data="', swf, '">'
,'<param name="allowScriptAccess" value="', props.allowScriptAccess, '" />'
,'<param name="movie" value="', swf, '" />'
,'<param name="bgcolor" value="', props.bgcolor, '" />'
,'<param name="scale" value="noscale" />'
,'<param name="flashvars" value="', vars, '" />'
,'<param name="salign" value="lt" />'
,'<param name="wmode" value="', props.wmode, '" />'
,'</object>').firstChild;
}
};
Swiff.extend = $extend;
Swiff.extend({
count: 0,
callBacks: {},
vars: {},
nextInstance: function(){
return 'Swiff' + Swiff.count++;
},
fix: function(){
Swiff.fixed = true;
window.addEvent('beforeunload', function(){
__flash_unloadHandler = __flash_savedUnloadHandler = Class.empty;
});
if (!window.ie) return;
window.addEvent('unload', function(){
$each(document.getElementsByTagName("object"), function(swf){
if(swf) {
swf.style.display = 'none';
for (var p in swf){
if (typeof swf[p] == 'function') swf[p] = Class.empty;
}
swf.parentNode.removeChild(swf);
}
});
});
},
getVersion: function(){
if (!Swiff.pluginVersion) {
var x;
if(navigator.plugins && navigator.mimeTypes.length){
x = navigator.plugins["Shockwave Flash"];
if(x && x.description) x = x.description;
} else if (window.ie){
try {
x = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
x = x.GetVariable("$version");
} catch(e){}
}
Swiff.pluginVersion = ($type(x) == 'string') ? parseInt(x.match(/\d+/)[0]) : 0;
}
return Swiff.pluginVersion;
},
remote: function(obj, fn){
var rs = obj.CallFunction("<invoke name=\"" + fn + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 2) + "</invoke>");
return eval(rs);
}});