var ie = (document.defaultCharset && document.getElementById && !window.home);
var opera9 = false;
if (ie){
     //Check for ie 5.5 and exclude it from the script
     var ver=navigator.appVersion.split("MSIE")
     ver=parseFloat(ver[1])
     ie = (ver >=6)
}else if (navigator.userAgent.indexOf("Opera")!=-1) {
     //Check for Opera9 and include it in the ObjectSwap
     var versionindex=navigator.userAgent.indexOf("Opera")+6
     if (parseInt(navigator.userAgent.charAt(versionindex))>=9)
     opera9 = true;
}
//Perform ObjectSwap if the browser is IE or Opera (if not just check flashVersion)
var oswap = (ie || opera9)

//Hide the object to prevent it from loading twice
if (oswap){
     document.write ("<style id='hideObject'> object{display:none;} </style>");
}

/*Replace all flash objects on the page with the same flash object, 
by rewriting the outerHTML values
This bypasses the new IE ActiveX object activation issue*/
objectSwap = function(){
     if (!document.getElementsByTagName){
         return;
     }
     //An array of ids for flash detection
     var stripQueue = [];
     //Get a list of all ActiveX objects
     var objects = document.getElementsByTagName('object');
     for (var i=0; i<objects.length; i++){            
         var o = objects[i];    
         var h = o.outerHTML;
         //The outer html omits the param tags, so we must retrieve and insert these separately
         var params = "";
         var hasFlash = true;
         for (var j = 0; j<o.childNodes.length; j++) {
             var p = o.childNodes[j];
             if (p.tagName == "PARAM"){
                 //Check for version first - applies to all browsers
                 //For this to work, a new param needs to be included in the object with the name "flashVersion" eg:
                 //<param name="flashVersion" value="7" />
                 if (p.name == "flashVersion"){
                     hasFlash = detectFlash(p.value);
                     if (!hasFlash){
                         //Add the objects id to the list (create a new id if there's isn't one already)
                         o.id = (o.id == "") ? ("stripFlash"+i) : o.id;
                         stripQueue.push(o.id);
                         break;
                     }
                 } 
                 params += p.outerHTML;               
             }
         }    
         if (!hasFlash){
             continue;
         }        
         //Only target internet explorer
         if (!oswap){
             continue;
         } 
         //Avoid specified objects, marked with a "noswap" classname
         if (o.className.toLowerCase().indexOf ("noswap") != -1){
             continue;
         }        
         //Get the tag and attributes part of the outer html of the object
         var tag = h.split(">")[0] + ">";            
         //Add up the various bits that comprise the object:
         //The tag with the attributes, the params and it's inner html
         var newObject = tag + params + o.innerHTML + " </OBJECT>";    
         //And rewrite the outer html of the tag 
         o.outerHTML = newObject;
     }
     //Strip flash objects
     if (stripQueue.length) {
         stripFlash(stripQueue)
     }
     //Make the objects visible again
     if (oswap){
         document.getElementById("hideObject").disabled = true;
     }
}

detectFlash = function(version){
     if(navigator.plugins && navigator.plugins.length){
         //Non-IE flash detection.
         var plugin = navigator.plugins["Shockwave Flash"];
         if (plugin == undefined){
             return false;
         }
         var ver = navigator.plugins["Shockwave Flash"].description.split(" ")[2];
         return (Number(ver) >= Number(version))
     } else if (ie && typeof (ActiveXObject) == "function"){
     //IE flash detection.
         try{
             var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + version);
             return true;
         }
         catch(e){
             return false;
         }
     }
     //Catchall - skip detection
     return true;
}

//Loop through an array of ids to strip
//Replace the object by a div tag containing the same innerHTML.
//To display an alternative image, message for the user or a link to the flash installation page, place it inside the object tag.  
//For the usual object/embed pairs it needs to be enclosed in comments to hide from gecko based browsers.
stripFlash = function (stripQueue){
     if (!document.createElement){
         return;
     }
     for (var i=0; i<stripQueue.length; i++){
         var o = document.getElementById(stripQueue[i]);
         var newHTML = o.innerHTML;    
         //Strip the comments
         newHTML = newHTML.replace(/<!--\s/g, "");
         newHTML = newHTML.replace(/\s-->/g, "");
         //Neutralise the embed tag
         newHTML = newHTML.replace(/<embed/gi, "<span");        
         //Create a new div element with properties from the object
         var d = document.createElement("div");
         d.innerHTML = newHTML;
         d.className = o.className;
         d.id = o.id;
         //And swap the object with the new div
         o.parentNode.replaceChild(d, o);
     }
}

//Initiate the function without conflicting with the window.onload event of any preceding scripts
var tempFunc = window.onload;
window.onload = function(){
     if (typeof (tempFunc) == "function"){
         try{
             tempFunc();
         } catch(e){}
     }
     objectSwap();
}