/*!	SWFObject v2.0 <http://code.google.com/p/swfobject/>
Copyright(c)2007 Geoff Stearns,Michael Williams,and Bobby van der Sluis
This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*/
var swfobject=function(){
var UNDEF="undefined",
OBJECT="object",
SHOCKWAVE_FLASH="Shockwave Flash",
SHOCKWAVE_FLASH_AX="ShockwaveFlash.ShockwaveFlash",
FLASH_MIME_TYPE="application/x-shockwave-flash",
EXPRESS_INSTALL_ID="SWFObjectExprInst",
win=window,
doc=document,
nav=navigator,
domLoadFnArr=[],
regObjArr=[],
timer=null,
storedAltContent=null,
storedAltContentId=null,
isDomLoaded=false,
isExpressInstallActive=false;
/* Centralized function for browser feature detection
- Proprietary feature detection(conditional compiling)is used to detect Internet Explorer's features
- User agent string detection is only used when no alternative is possible
- Is executed directly for optimal performance
*/
var ua=function(){
var w3cdom=typeof doc.getElementById !=UNDEF && typeof doc.getElementsByTagName !=UNDEF && typeof doc.createElement !=UNDEF && typeof doc.appendChild !=UNDEF && typeof doc.replaceChild !=UNDEF && typeof doc.removeChild !=UNDEF && typeof doc.cloneNode !=UNDEF,
playerVersion=[0,0,0],
d=null;
if(typeof nav.plugins !=UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH]==OBJECT){
d=nav.plugins[SHOCKWAVE_FLASH].description;
if(d){
d=d.replace(/^.*\s+(\S+\s+\S+$)/,"$1");
playerVersion[0]=parseInt(d.replace(/^(.*)\..*$/,"$1"),10);
playerVersion[1]=parseInt(d.replace(/^.*\.(.*)\s.*$/,"$1"),10);
playerVersion[2]=/r/.test(d)? parseInt(d.replace(/^.*r(.*)$/,"$1"),10): 0;
}
}
else if(typeof win.ActiveXObject !=UNDEF){
var a=null,fp6Crash=false;
try{
a=new ActiveXObject(SHOCKWAVE_FLASH_AX+".7");
}
catch(e){
try{
a=new ActiveXObject(SHOCKWAVE_FLASH_AX+".6");
playerVersion=[6,0,21];
a.AllowScriptAccess="always";  // Introduced in fp6.0.47
}
catch(e){
if(playerVersion[0]==6){
fp6Crash=true;
}
}
if(!fp6Crash){
try{
a=new ActiveXObject(SHOCKWAVE_FLASH_AX);
}
catch(e){}
}
}
if(!fp6Crash && a){// a will return null when ActiveXis disabled
try{
d=a.GetVariable("$version");  // Will crash fp6.0.21/23/29
if(d){
d=d.split(" ")[1].split(",");
playerVersion=[parseInt(d[0],10),parseInt(d[1],10),parseInt(d[2],10)];
}
}
catch(e){}
}
}
var u=nav.userAgent.toLowerCase(),
p=nav.platform.toLowerCase(),
webkit=/webkit/.test(u)? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")): false,// returns either the webkit version or false if not webkit
ie=false,
windows=p ? /win/.test(p): /win/.test(u),
mac=p ? /mac/.test(p): /mac/.test(u);
/*@cc_on
ie=true;
@if(@_win32)
windows=true;
@elif(@_mac)
mac=true;
@end
@*/
return{w3cdom:w3cdom,pv:playerVersion,webkit:webkit,ie:ie,win:windows,mac:mac};
}();
/* Cross-browser onDomLoad
- Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/
- Will fire an event as soon as the DOM of a page is loaded(supported by Gecko based browsers - like Firefox-,IE,Opera9+,Safari)
*/
var onDomLoad=function(){
if(!ua.w3cdom){
return;
}
addDomLoadEvent(main);
if(ua.ie && ua.win){
try{// Avoid a possible Operation Aborted error
doc.write("<scr"+"ipt id=__ie_ondomload defer=true src=//:></scr"+"ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors
var s=getElementById("__ie_ondomload");
if(s){
s.onreadystatechange=function(){
if(this.readyState=="complete"){
this.parentNode.removeChild(this);
callDomLoadFunctions();
}
};
}
}
catch(e){}
}
if(ua.webkit && typeof doc.readyState !=UNDEF){
timer=setInterval(function(){if(/loaded|complete/.test(doc.readyState)){callDomLoadFunctions();}},10);
}
if(typeof doc.addEventListener !=UNDEF){
doc.addEventListener("DOMContentLoaded",callDomLoadFunctions,null);
}
addLoadEvent(callDomLoadFunctions);
}();
function callDomLoadFunctions(){
if(isDomLoaded){
return;
}
if(ua.ie && ua.win){// Test if we can really add elements to the DOM; we don't want to fire it too early
var s=createElement("span");
try{// Avoid a possible Operation Aborted error
var t=doc.getElementsByTagName("body")[0].appendChild(s);
t.parentNode.removeChild(t);
}
catch(e){
return;
}
}
isDomLoaded=true;
if(timer){
clearInterval(timer);
timer=null;
}
var dl=domLoadFnArr.length;
for(var i=0; i < dl; i++){
domLoadFnArr[i]();
}
}
function addDomLoadEvent(fn){
if(isDomLoaded){
fn();
}
else{
domLoadFnArr[domLoadFnArr.length]=fn; // Array.push()is only available in IE5.5+
}
}
/* Cross-browser onload
- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
- Will fire an event as soon as a web page including all of its assets are loaded
*/
function addLoadEvent(fn){
if(typeof win.addEventListener !=UNDEF){
win.addEventListener("load",fn,false);
}
else if(typeof doc.addEventListener !=UNDEF){
doc.addEventListener("load",fn,false);
}
else if(typeof win.attachEvent !=UNDEF){
win.attachEvent("onload",fn);
}
else if(typeof win.onload=="function"){
var fnOld=win.onload;
win.onload=function(){
fnOld();
fn();
};
}
else{
win.onload=fn;
}
}
/* Main function
- Will preferably execute onDomLoad,otherwise onload(as a fallback)
*/
function main(){// Static publishing only
var rl=regObjArr.length;
for(var i=0; i < rl; i++){// For each registered object element
var id=regObjArr[i].id;
if(ua.pv[0] > 0){
var obj=getElementById(id);
if(obj){
regObjArr[i].width=obj.getAttribute("width")? obj.getAttribute("width"): "0";
regObjArr[i].height=obj.getAttribute("height")? obj.getAttribute("height"): "0";
if(hasPlayerVersion(regObjArr[i].swfVersion)){// Flash plug-in version >=Flash content version: Houston,we have a match!
if(ua.webkit && ua.webkit < 312){// Older webkit engines ignore the object element's nested param elements
fixParams(obj);
}
setVisibility(id,true);
}
else if(regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65")&&(ua.win||ua.mac)){// Show the Adobe Express Install dialog if set by the web page author and if supported(fp6.0.65+on Win/Mac OS only)
showExpressInstall(regObjArr[i]);
}
else{// Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content
displayAltContent(obj);
}
}
}
else{// If no fp is installed,we let the object element do its job(show alternative content)
setVisibility(id,true);
}
}
}
/* Fixnested param elements,which are ignored by older webkit engines
- This includes Safari up to and including version 1.2.2 on Mac OS 10.3
- Fall back to the proprietary embed element
*/
function fixParams(obj){
var nestedObj=obj.getElementsByTagName(OBJECT)[0];
if(nestedObj){
var e=createElement("embed"),a=nestedObj.attributes;
if(a){
var al=a.length;
for(var i=0; i < al; i++){
if(a[i].nodeName.toLowerCase()=="data"){
e.setAttribute("src",a[i].nodeValue);
}
else{
e.setAttribute(a[i].nodeName,a[i].nodeValue);
}
}
}
var c=nestedObj.childNodes;
if(c){
var cl=c.length;
for(var j=0; j < cl; j++){
if(c[j].nodeType==1 && c[j].nodeName.toLowerCase()=="param"){
e.setAttribute(c[j].getAttribute("name"),c[j].getAttribute("value"));
}
}
}
obj.parentNode.replaceChild(e,obj);
}
}
/* Fixhanging audio/video threads and force open sockets and NetConnections to disconnect
- Occurs when unloading a web page in IE using fp8+and innerHTML/outerHTML
- Dynamic publishing only
*/
function fixObjectLeaks(id){
if(ua.ie && ua.win && hasPlayerVersion("8.0.0")){
win.attachEvent("onunload",function(){
var obj=getElementById(id);
if(obj){
for(var i in obj){
if(typeof obj[i]=="function"){
obj[i]=function(){};
}
}
obj.parentNode.removeChild(obj);
}
});
}
}
/* Show the Adobe Express Install dialog
- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
*/
function showExpressInstall(regObj){
isExpressInstallActive=true;
var obj=getElementById(regObj.id);
if(obj){
if(regObj.altContentId){
var ac=getElementById(regObj.altContentId);
if(ac){
storedAltContent=ac;
storedAltContentId=regObj.altContentId;
}
}
else{
storedAltContent=abstractAltContent(obj);
}
if(!(/%$/.test(regObj.width))&& parseInt(regObj.width,10)< 310){
regObj.width="310";
}
if(!(/%$/.test(regObj.height))&& parseInt(regObj.height,10)< 137){
regObj.height="137";
}
doc.title=doc.title.slice(0,47)+" - Flash Player Installation";
var pt=ua.ie && ua.win ? "ActiveX" : "PlugIn",
dt=doc.title,
fv="MMredirectURL="+win.location+"&MMplayerType="+pt+"&MMdoctitle="+dt,
replaceId=regObj.id;
// For IE when a SWF is loading(AND: not available in cache)wait for the onload event to fire to remove the original object element
// In IE you cannot properly cancel a loading SWF file without breaking browser load references,also obj.onreadystatechange doesn't work
if(ua.ie && ua.win && obj.readyState !=4){
var newObj=createElement("div");
replaceId+="SWFObjectNew";
newObj.setAttribute("id",replaceId);
obj.parentNode.insertBefore(newObj,obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf
obj.style.display="none";
win.attachEvent("onload",function(){obj.parentNode.removeChild(obj);});
}
createSWF({data:regObj.expressInstall,id:EXPRESS_INSTALL_ID,width:regObj.width,height:regObj.height},{flashvars:fv},replaceId);
}
}
/* Functions to abstract and display alternative content
*/
function displayAltContent(obj){
if(ua.ie && ua.win && obj.readyState !=4){
// For IE when a SWF is loading(AND: not available in cache)wait for the onload event to fire to remove the original object element
// In IE you cannot properly cancel a loading SWF file without breaking browser load references,also obj.onreadystatechange doesn't work
var el=createElement("div");
obj.parentNode.insertBefore(el,obj); // Insert placeholder div that will be replaced by the alternative content
el.parentNode.replaceChild(abstractAltContent(obj),el);
obj.style.display="none";
win.attachEvent("onload",function(){obj.parentNode.removeChild(obj);});
}
else{
obj.parentNode.replaceChild(abstractAltContent(obj),obj);
}
}
function abstractAltContent(obj){
var ac=createElement("div");
if(ua.win && ua.ie){
ac.innerHTML=obj.innerHTML;
}
else{
var nestedObj=obj.getElementsByTagName(OBJECT)[0];
if(nestedObj){
var c=nestedObj.childNodes;
if(c){
var cl=c.length;
for(var i=0; i < cl; i++){
if(!(c[i].nodeType==1 && c[i].nodeName.toLowerCase()=="param")&& !(c[i].nodeType==8)){
ac.appendChild(c[i].cloneNode(true));
}
}
}
}
}
return ac;
}
/* Cross-browser dynamic SWF creation
*/
function createSWF(attObj,parObj,id){
var r,el=getElementById(id);
if(typeof attObj.id==UNDEF){// if no 'id' is defined for the object element,it will inherit the 'id' from the alternative content
attObj.id=id;
}
if(ua.ie && ua.win){// IE,the object element and W3C DOM methods do not combine: fall back to outerHTML
var att="";
for(var i in attObj){
if(attObj[i] !=Object.prototype[i]){// Filter out prototype additions from other potential libraries,like Object.prototype.toJSONString=function(){}
if(i=="data"){
parObj.movie=attObj[i];
}
else if(i.toLowerCase()=="styleclass"){// 'class' is an ECMA4 reserved keyword
att+=' class="'+attObj[i]+'"';
}
else if(i !="classid"){
att+=' '+i+'="'+attObj[i]+'"';
}
}
}
var par="";
for(var j in parObj){
if(parObj[j] !=Object.prototype[j]){// Filter out prototype additions from other potential libraries
par+='<param name="'+j+'" value="'+parObj[j]+'" />';
}
}
el.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+att+'>'+par+'</object>';
fixObjectLeaks(attObj.id); // This bug affects dynamic publishing only
r=getElementById(attObj.id);
}
else if(ua.webkit && ua.webkit < 312){// Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element
var e=createElement("embed");
e.setAttribute("type",FLASH_MIME_TYPE);
for(var k in attObj){
if(attObj[k] !=Object.prototype[k]){// Filter out prototype additions from other potential libraries
if(k=="data"){
e.setAttribute("src",attObj[k]);
}
else if(k.toLowerCase()=="styleclass"){// 'class' is an ECMA4 reserved keyword
e.setAttribute("class",attObj[k]);
}
else if(k !="classid"){// Filter out IE specific attribute
e.setAttribute(k,attObj[k]);
}
}
}
for(var l in parObj){
if(parObj[l] !=Object.prototype[l]){// Filter out prototype additions from other potential libraries
if(l !="movie"){// Filter out IE specific param element
e.setAttribute(l,parObj[l]);
}
}
}
el.parentNode.replaceChild(e,el);
r=e;
}
else{// Well-behaving browsers
var o=createElement(OBJECT);
o.setAttribute("type",FLASH_MIME_TYPE);
for(var m in attObj){
if(attObj[m] !=Object.prototype[m]){// Filter out prototype additions from other potential libraries
if(m.toLowerCase()=="styleclass"){// 'class' is an ECMA4 reserved keyword
o.setAttribute("class",attObj[m]);
}
else if(m !="classid"){// Filter out IE specific attribute
o.setAttribute(m,attObj[m]);
}
}
}
for(var n in parObj){
if(parObj[n] !=Object.prototype[n] && n !="movie"){// Filter out prototype additions from other potential libraries and IE specific param element
createObjParam(o,n,parObj[n]);
}
}
el.parentNode.replaceChild(o,el);
r=o;
}
return r;
}
function createObjParam(el,pName,pValue){
var p=createElement("param");
p.setAttribute("name",pName);
p.setAttribute("value",pValue);
el.appendChild(p);
}
function getElementById(id){
return doc.getElementById(id);
}
function createElement(el){
return doc.createElement(el);
}
function hasPlayerVersion(rv){
var pv=ua.pv,v=rv.split(".");
v[0]=parseInt(v[0],10);
v[1]=parseInt(v[1],10);
v[2]=parseInt(v[2],10);
return(pv[0] > v[0]||(pv[0]==v[0] && pv[1] > v[1])||(pv[0]==v[0] && pv[1]==v[1] && pv[2] >=v[2]))? true : false;
}
/* Cross-browser dynamic CSS creation
- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
*/
function createCSS(sel,decl){
if(ua.ie && ua.mac){
return;
}
var h=doc.getElementsByTagName("head")[0],s=createElement("style");
s.setAttribute("type","text/css");
s.setAttribute("media","screen");
if(!(ua.ie && ua.win)&& typeof doc.createTextNode !=UNDEF){
s.appendChild(doc.createTextNode(sel+"{"+decl+"}"));
}
h.appendChild(s);
if(ua.ie && ua.win && typeof doc.styleSheets !=UNDEF && doc.styleSheets.length > 0){
var ls=doc.styleSheets[doc.styleSheets.length - 1];
if(typeof ls.addRule==OBJECT){
ls.addRule(sel,decl);
}
}
}
function setVisibility(id,isVisible){
var v=isVisible ? "visible" : "hidden";
if(isDomLoaded){
getElementById(id).style.visibility=v;
}
else{
createCSS("#"+id,"visibility:"+v);
}
}
function getTargetVersion(obj){
if(!obj)
return 0;
var c=obj.childNodes;
var cl=c.length;
for(var i=0; i < cl; i++){
if(c[i].nodeType==1 && c[i].nodeName.toLowerCase()=="object"){
c=c[i].childNodes;
cl=c.length;
i=0;
}
if(c[i].nodeType==1 && c[i].nodeName.toLowerCase()=="param" && c[i].getAttribute("name")=="swfversion"){
return c[i].getAttribute("value");
}
}
return 0;
}
function getExpressInstall(obj){
if(!obj)
return "";
var c=obj.childNodes;
var cl=c.length;
for(var i=0; i < cl; i++){
if(c[i].nodeType==1 && c[i].nodeName.toLowerCase()=="object"){
c=c[i].childNodes;
cl=c.length;
i=0;
}
if(c[i].nodeType==1 && c[i].nodeName.toLowerCase()=="param" && c[i].getAttribute("name")=="expressinstall"){
return c[i].getAttribute("value");
}
}
return "";
}
return{
/* Public API
- Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
*/
registerObject: function(objectIdStr,swfVersionStr,xiSwfUrlStr){
if(!ua.w3cdom||!objectIdStr){
return;
}
var obj=document.getElementById(objectIdStr);
var xi=getExpressInstall(obj);
var regObj={};
regObj.id=objectIdStr;
regObj.swfVersion=swfVersionStr ? swfVersionStr : getTargetVersion(obj);
regObj.expressInstall=xiSwfUrlStr ? xiSwfUrlStr :((xi !="")? xi : false);
regObjArr[regObjArr.length]=regObj;
setVisibility(objectIdStr,false);
},
getObjectById: function(objectIdStr){
var r=null;
if(ua.w3cdom && isDomLoaded){
var o=getElementById(objectIdStr);
if(o){
var n=o.getElementsByTagName(OBJECT)[0];
if(!n||(n && typeof o.SetVariable !=UNDEF)){
r=o;
}
else if(typeof n.SetVariable !=UNDEF){
r=n;
}
}
}
return r;
},
embedSWF: function(swfUrlStr,replaceElemIdStr,widthStr,heightStr,swfVersionStr,xiSwfUrlStr,flashvarsObj,parObj,attObj){
if(!ua.w3cdom||!swfUrlStr||!replaceElemIdStr||!widthStr||!heightStr||!swfVersionStr){
return;
}
widthStr+=""; // Auto-convert to string to make it idiot proof
heightStr+="";
if(hasPlayerVersion(swfVersionStr)){
setVisibility(replaceElemIdStr,false);
var att=(typeof attObj==OBJECT)? attObj :{};
att.data=swfUrlStr;
att.width=widthStr;
att.height=heightStr;
var par=(typeof parObj==OBJECT)? parObj :{};
if(typeof flashvarsObj==OBJECT){
for(var i in flashvarsObj){
if(flashvarsObj[i] !=Object.prototype[i]){// Filter out prototype additions from other potential libraries
if(typeof par.flashvars !=UNDEF){
par.flashvars+="&"+i+"="+flashvarsObj[i];
}
else{
par.flashvars=i+"="+flashvarsObj[i];
}
}
}
}
addDomLoadEvent(function(){
createSWF(att,par,replaceElemIdStr);
if(att.id==replaceElemIdStr){
setVisibility(replaceElemIdStr,true);
}
});
}
else if(xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65")&&(ua.win||ua.mac)){
setVisibility(replaceElemIdStr,false);
addDomLoadEvent(function(){
var regObj={};
regObj.id=regObj.altContentId=replaceElemIdStr;
regObj.width=widthStr;
regObj.height=heightStr;
regObj.expressInstall=xiSwfUrlStr;
showExpressInstall(regObj);
});
}
},
getFlashPlayerVersion: function(){
return{major:ua.pv[0],minor:ua.pv[1],release:ua.pv[2]};
},
hasFlashPlayerVersion:hasPlayerVersion,
createSWF: function(attObj,parObj,replaceElemIdStr){
if(ua.w3cdom && isDomLoaded){
return createSWF(attObj,parObj,replaceElemIdStr);
}
else{
return undefined;
}
},
createCSS: function(sel,decl){
if(ua.w3cdom){
createCSS(sel,decl);
}
},
addDomLoadEvent:addDomLoadEvent,
addLoadEvent:addLoadEvent,
getQueryParamValue: function(param){
var q=doc.location.search||doc.location.hash;
if(param==null){
return q;
}
if(q){
var pairs=q.substring(1).split("&");
for(var i=0; i < pairs.length; i++){
if(pairs[i].substring(0,pairs[i].indexOf("="))==param){
return pairs[i].substring((pairs[i].indexOf("=")+1));
}
}
}
return "";
},
// For internal usage only
expressInstallCallback: function(){
if(isExpressInstallActive && storedAltContent){
var obj=getElementById(EXPRESS_INSTALL_ID);
if(obj){
obj.parentNode.replaceChild(storedAltContent,obj);
if(storedAltContentId){
setVisibility(storedAltContentId,true);
if(ua.ie && ua.win){
storedAltContent.style.display="block";
}
}
storedAltContent=null;
storedAltContentId=null;
isExpressInstallActive=false;
}
}
}
};
}();