/*
 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.3
 */
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(",");//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]
        };
    };
    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;
                        }
                    }
                }
            }
    }();
};
FlashDetect.release = "1.0.3";

