﻿/**
        Frédéric Saunier
        [url="http://www.tekool.net/javascript/backtothehtml"]http://www.tekool.net/javascript/backtothehtml[/url]

        This program is part of a free software; you can redistribute it and/or
        modify it under the terms of the GNU General Public License
        as published by the Free Software Foundation; either version 2
        of the License, or (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

**/

/*****************************************************************************
* BackToTheHtml Command
*///**************************************************************************
function BackToTheHtml(node)
{
        if(node == null)
                this.node = document; 
        else
                this.node = node; 
};
BackToTheHtml.prototype.node = null;

BackToTheHtml.prototype.execute = function()
{
        this.activateObject();
}

BackToTheHtml.prototype.activateObject = function(domObject)
{
        var aDomObject = this.node.getElementsByTagName('object');
        var activationObject;
        for(var i=0; i<aDomObject.length; i++)
                if
                (
                        aDomObject[i].getAttributeNode('BackToTheHtml') == null
                        &&
                        (activationObject = this.getActivationObject(aDomObject[i])) != null
                )
                        activationObject.execute();
};

BackToTheHtml.prototype.getActivationObject = function(domObject)
{
        var classid = domObject.classid.toUpperCase().substr('clsid:'.length);
        var mimeType = domObject.type.toLowerCase();

        switch(true)
        {
                case 
                        classid == 'D27CDB6E-AE6D-11CF-96B8-444553540000' 
                        ||
                        mimeType == 'application/x-shockwave-flash'
                :
                        return new ActivateObjectFlash(domObject);

                default :
                        return null;
        }
};

BackToTheHtml.uniqueID = function(prefix)
{
        var sPrefix;
        if(prefix == null)
                sPrefix = 'uniqueId';
        else
                sPrefix = prefix;
                
        var i=0;
        while(document.getElementById(sPrefix + (i++)))
        ;
        return sPrefix + (i-1);
};

BackToTheHtml.isParentOf = function(parent,child)
{
        var found = false;
        for(var i=0; i<parent.childNodes.length; i++)
                if(parent.childNodes[i] == child)
                        return true;
                else
                        found = arguments.callee(parent.childNodes[i],child);

        return found;
}

/*****************************************************************************
* ActivateObject Command
*///**************************************************************************
function ActivateObject(domObject)
{
        this.domObject = domObject;
}

ActivateObject.prototype.domObject = null;
ActivateObject.prototype.classid = null;
ActivateObject.prototype.aHtmlAttribute = ['accessKey','align','alt','archive','border','code','codeBase','codeType','declare','dir','height','hideFocus','hspace','lang','language','name','standby','tabIndex','title','useMap','vspace','width'];
ActivateObject.prototype.aObjectProperty = null;

ActivateObject.prototype.execute = function()
{
        this.xndObjectId = BackToTheHtml.uniqueID();
        this.setTextHtml();
        this.writeObject();

        this.xndObject = document.getElementById(this.xndObjectId);
        this.setSpecialProperties();
        this.removeOriginalObject();
}

ActivateObject.prototype.setTextHtml = function()
{
        var str = '';
        str += '<object BackToTheHtml ' + '\n';
        str += ' classid="clsid:' + this.classid + '" ' + '\n';

        //Add HTML attributes to the <object> tag
        for(var i=0; i<this.aHtmlAttribute.length; i++)
        {
                var name = this.aHtmlAttribute[i];
                if(typeof this.domObject[name] != 'undefined' && this.domObject[name].toString() != '')
                        str += '\t' + name + '="' + this.domObject[name].toString() + '" ' + '\n';
        }

        str += 'id="' + this.xndObjectId + '" ' + '\n';
        str += '>';

        for(var i=0; i<this.aObjectProperty.length; i++)
        {
                var name = this.aObjectProperty[i];
                if(typeof this.domObject[name] != 'undefined' && this.domObject[name].toString() != '' )
                        str += '\t<param name="' + name + '" value="' + this.domObject[name].toString() + '"></param>' + '\n';
        }
        str += '</object>';

        this.textHtml = str;
};

ActivateObject.prototype.writeObject = function()
{
        this.domObject.insertAdjacentHTML("afterEnd",this.textHtml);
};

ActivateObject.prototype.setSpecialProperties = function()
{
        if(typeof this.domObject.className != 'undefined' && this.domObject.className.toString() != '')
                this.xndObject.className = this.domObject.className

        if(typeof this.domObject.style.cssText != 'undefined' && this.domObject.style.cssText.toString() != '')
                this.xndObject.style.cssText = this.domObject.style.cssText;

        if(typeof this.domObject.SWRemote != 'undefined' && this.domObject.SWRemote.toString() != '')
                this.xndObject.FlashVars = this.domObject.SWRemote;

        if(typeof this.domObject.codebase == 'undefined' || this.domObject.codebase.toString() == '')
                this.xndObject.codebase = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,24,0';

        if(typeof this.domObject.id != 'undefined' && this.domObject.id.toString() != '')
                this.xndObject.id = this.domObject.id;

};

ActivateObject.prototype.removeOriginalObject = function()
{
        this.domObject.parentNode.removeChild(this.domObject);
};

/*****************************************************************************
* ActivateObjectFlash Command
*///**************************************************************************
function ActivateObjectFlash(domObject)
{
        ActivateObject.call(this,domObject);
}
ActivateObjectFlash.prototype = new ActivateObject;
ActivateObjectFlash.prototype.aObjectProperty = ['FrameNum','Playing','Quality','Quality2','Scalemode','Scale','AlignMode','SAlign','BackgroundColor','BGColor','Loop','Movie','WMode','Base','DeviceFont','EmbedMovie','SWRemote','FlashVars','AllowScriptAccess'];
ActivateObjectFlash.prototype.classid = 'D27CDB6E-AE6D-11CF-96B8-444553540000';


/*****************************************************************************
* Script initialisation
*///**************************************************************************
if(typeof ActiveXObject != 'undefined' && typeof Function.call != 'undefined')
{
        var styleId = BackToTheHtml.uniqueID();
        document.write('<style id="' + styleId + '" ></style>');
        var domStyle = document.getElementById(styleId);

        var isHead = false;
        var aHead = document.getElementsByTagName('head');
        for(var i=0; i<aHead.length; i++)
                if(BackToTheHtml.isParentOf(aHead[i],domStyle))
                        isHead = true;

        if(isHead)
        {
                document.write('<style type="text/css">OBJECT{visibility:hidden;}</style>');
                document.onreadystatechange = function()
                {
                        if(document.readyState == 'complete')
                        {
                                new BackToTheHtml().execute();
                                document.styleSheets[document.styleSheets.length-1].addRule("OBJECT","visibility:visible;");
                                //alert('head');
                                //alert(document.body.innerHTML);
                        }
                }
        }
        else
        {
                new BackToTheHtml().execute();
                //alert('body');
                //alert(document.body.innerHTML);
        }
        
        domStyle.parentNode.removeChild(domStyle);

}
