/*

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";



function insertFlash(url, width, height, flashVars, quality)

{

	var url       = url       || 'about:blank',

	    width     = width     || 100,

	    height    = height    || 100,

	    flashVars = flashVars || false,

		quality   = quality   || 'high';

	

	var flashVarsObject = (flashVars) ? '<param name="FlashVars" value="' + flashVars + '">' : '',

        flashVarsEmbed  = (flashVars) ? ' flashVars="' + flashVars + '" ' : '';

		

	var flash = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="' + width + '" height="' + height + '">'

	         + '<param name="movie" value="' + url + '" />'

			 + '<param name="quality" value="' + quality + '" />'

			 + flashVarsObject

			 + '<embed src="' + url + '" quality="' + quality + '"' + flashVarsEmbed + ' pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="' + width + '" height="' + height + '"></embed>'

			 + '</object>';

	

	document.write(flash);	

}