﻿var FlashDetect = new function() {
    var self = this;

    self.installed = false;
    self.raw = "";
    self.major = -1;
    self.minor = -1;
    self.revision = -1;
    self.revisionStr = "";

    var activeXDetectRules = [
		{
		    "name": "ShockwaveFlash.ShockwaveFlash.7",
		    "version": function(obj) {
		        return getActiveXVersion(obj);
		    }
		},
		{
		    "name": "ShockwaveFlash.ShockwaveFlash.6",
		    "version": function(obj) {
		        var version = "6,0,21";
		        try {
		            obj.AllowScriptAccess = "always";
		            version = getActiveXVersion(obj);
		        } catch (err) { }
		        return version;
		    }
		},
		{
		    "name": "ShockwaveFlash.ShockwaveFlash",
		    "version": function(obj) {
		        return getActiveXVersion(obj);
		    }
		}
	];

    var getActiveXVersion = function(activeXObj) {
        var version = -1;
        
        try {
            version = activeXObj.GetVariable("$version");
        } catch (err) { }
        
        return version;
    };

    var getActiveXObject = function(name) {
        var obj = -1;
        
        try {
            obj = new ActiveXObject(name);
        } catch (err) { }
        
        return obj;
    };

    var parseActiveXVersion = function(str) {
        var versionArray = str.split(",");
        return {
            "raw": str,
            "major": parseInt(versionArray[0].split(" ")[1], 10),
            "minor": parseInt(versionArray[1], 10),
            "revision": parseInt(versionArray[2], 10),
            "revisionStr": versionArray[2]
        };
    };

    var parseStandardVersion = function(str) {
        var descParts = str.split(/ +/);
        var majorMinor = descParts[2].split(/\./);
        var revisionStr = descParts[3];
        return {
            "raw": str,
            "major": parseInt(majorMinor[0], 10),
            "minor": parseInt(majorMinor[1], 10),
            "revisionStr": revisionStr,
            "revision": parseRevisionStrToInt(revisionStr)
        };
    };

    var parseRevisionStrToInt = function(str) {
        return parseInt(str.replace(/[a-zA-Z]/g, ""), 10) || self.revision;
    };

    self.majorAtLeast = function(version) {
        return self.major >= version;
    };
    
    self.FlashDetect = function() {
        if (navigator.plugins && navigator.plugins.length > 0) {
            var type = 'application/x-shockwave-flash';
            var mimeTypes = navigator.mimeTypes;
            if (mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin && mimeTypes[type].enabledPlugin.description) {
                var version = mimeTypes[type].enabledPlugin.description;
                var versionObj = parseStandardVersion(version);
                self.raw = versionObj.raw;
                self.major = versionObj.major;
                self.minor = versionObj.minor;
                self.revisionStr = versionObj.revisionStr;
                self.revision = versionObj.revision;
                self.installed = true;
            }
        } else if (navigator.appVersion.indexOf("Mac") == -1 && window.execScript) {
            var version = -1;
            for (var i = 0; i < activeXDetectRules.length && version == -1; i++) {
                var obj = getActiveXObject(activeXDetectRules[i].name);
                if (typeof obj == "object") {
                    self.installed = true;
                    version = activeXDetectRules[i].version(obj);
                    if (version != -1) {
                        var versionObj = parseActiveXVersion(version);
                        self.raw = versionObj.raw;
                        self.major = versionObj.major;
                        self.minor = versionObj.minor;
                        self.revision = versionObj.revision;
                        self.revisionStr = versionObj.revisionStr;
                    }
                }
            }
        }
    } ();
};

function writeImage(imageHref, imageSrc, imageName, width, height) {
    document.write('<a href="' + imageHref + '"><img src="' + imageSrc + '" height="' + height + '" width="' + width + '" alt="' + imageName + '" /></a>');
}

function writeFlash(flashSrc, width, height) {
    document.write('<object codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" wmode="opaque" width="' + width + '" height="' + height + '">');
    document.write('<param name="movie" value="' + flashSrc + '" />');
    document.write('<param name="wmode" value="opaque" />');
    document.write('<param name="allowScriptAccess" value="sameDomain" />');
    document.write('<embed  allowScriptAccess="sameDomain" src="' + flashSrc + '" width="' + width + '" height="' + height + '" menu="false" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" wmode="opaque" />');
    document.write('</embed></object>');
}

function writeFlashWithImage(flashSrc, width, height, imageHref, imageSrc, imageName, bgcolor) {
    if (FlashDetect.installed) {
        writeFlash(flashSrc, width, height);
    } else {
        writeImage(imageHref, imageSrc, imageName, width, height);
    }
}
