/*Copyright (c) Copyright (c) 2007, Carl S. Yestrau All rights reserved.Code licensed under the BSD License: http://www.featureblend.com/license.txtVersion: 1.0.4*/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);            }        }    ];    /**     * Extract the ActiveX version of the plugin.     *      * @param {Object} The flash ActiveX object.     * @type String     */    var getActiveXVersion = function(activeXObj){        var version = -1;        try{            version = activeXObj.GetVariable("$version");        }catch(err){}        return version;    };    /**     * Try and retrieve an ActiveX object having a specified name.     *      * @param {String} name The ActiveX object name lookup.     * @return One of ActiveX object or a simple object having an attribute of activeXError with a value of true.     * @type Object     */    var getActiveXObject = function(name){        var obj = -1;        try{            obj = new ActiveXObject(name);        }catch(err){            obj = {activeXError:true};        }        return obj;    };    /**     * Parse an ActiveX $version string into an object.     *      * @param {String} str The ActiveX Object GetVariable($version) return value.      * @return An object having raw, major, minor, revision and revisionStr attributes.     * @type Object     */    var parseActiveXVersion = function(str){        var versionArray = str.split(",");//replace with regex        return {            "raw":str,            "major":parseInt(versionArray[0].split(" ")[1], 10),            "minor":parseInt(versionArray[1], 10),            "revision":parseInt(versionArray[2], 10),            "revisionStr":versionArray[2]        };    };    /**     * Parse a standard enabledPlugin.description into an object.     *      * @param {String} str The enabledPlugin.description value.     * @return An object having raw, major, minor, revision and revisionStr attributes.     * @type Object     */    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)        };    };    /**     * Parse the plugin revision string into an integer.     *      * @param {String} The revision in string format.     * @type Number     */    var parseRevisionStrToInt = function(str){        return parseInt(str.replace(/[a-zA-Z]/g, ""), 10) || self.revision;    };    /**     * Is the major version greater than or equal to a specified version.     *      * @param {Number} version The minimum required major version.     * @type Boolean     */    self.majorAtLeast = function(version){        return self.major >= version;    };    /**     * Is the minor version greater than or equal to a specified version.     *      * @param {Number} version The minimum required minor version.     * @type Boolean     */    self.minorAtLeast = function(version){        return self.minor >= version;    };    /**     * Is the revision version greater than or equal to a specified version.     *      * @param {Number} version The minimum required revision version.     * @type Boolean     */    self.revisionAtLeast = function(version){        return self.revision >= version;    };    /**     * Is the version greater than or equal to a specified major, minor and revision.     *      * @param {Number} major The minimum required major version.     * @param {Number} (Optional) minor The minimum required minor version.     * @param {Number} (Optional) revision The minimum required revision version.     * @type Boolean     */    self.versionAtLeast = function(major){        var properties = [self.major, self.minor, self.revision];        var len = Math.min(properties.length, arguments.length);        for(i=0; i<len; i++){            if(properties[i]>=arguments[i]){                if(i+1<len && properties[i]==arguments[i]){                    continue;                }else{                    return true;                }            }else{                return false;            }        }    };    /**     * Constructor, sets raw, major, minor, revisionStr, revision and installed public properties.     */    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(!obj.activeXError){                    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;                    }                }            }        }    }();};FlashDetect.JS_RELEASE = "1.0.4";