// These first three lines are auto-generated! DO NOT MODIFY
var QSP_LATEST_VER_COMPARABLE = '06011811';
var QSP_LATEST_VER = "6,1,18,11";

var qspUpgradeCB = null; // app callback during upgrades

// standard div names
QSP_ERROR_NOT_IE = 'qspErrorNotIE';
QSP_ERROR_NOT_WINDOWS = 'qspErrorNotWindows';
QSP_ERROR_NO_WMP9 = 'qspErrorNoWMP9';
QSP_ACTIVEX_PROMPT = 'qspActiveXPrompt';
QSP_ERROR_ACTIVEX_UNSAFE = 'qspErrorActiveXUnsafe';
QSP_ERROR_ACTIVEX_BLOCKED = 'qspErrorActiveXBlocked';
QSP_ERROR_TIME_OUT = 'qspErrorTimeOut';
QSP_UPGRADE_PROGRESS = 'qspUpgradeProgress';
QSP_INSTALL_DONE = 'qspInstallDone';

document.write('<OBJECT ID="qsp2iever" width="0" height="0" CLASSID="CLSID:e3e02f12-2adb-478c-8742-5f0819f9f0f4" ><PARAM name="VersionTest" value="1"></OBJECT>');

// During install/upgrades, we hide/show a bunch of divs depending on the current
// state. _QSPNextState "moves" to the next state by displaying the appropriate div
// and hiding the previous one, if any.
var prevStateID = null;
function _QSPShowDiv(id)
{
    if (document.getElementById(id))
        document.getElementById(id).style.display = 'block';
    prevStateID = id;
}

function _QSPHideDiv(id)
{
    if (document.getElementById(id))
        document.getElementById(id).style.display = 'none';
}

function _QSPNextState(id)
{   // hides the previously shown div & shows the next one
    if (id == prevStateID) return;
    if (prevStateID)
        _QSPHideDiv(prevStateID);
    _QSPShowDiv(id);
}

function QSPEmitObj(parentName, id, w, h)
{ // writes out an object tag to create a new QSP object
    s = '<OBJECT width="'+w+'" height="'+h+'" ID="'+id+'" CLASSID="CLSID:e473a65c-8087-49a3-affd-c5bc4a10669b" ></OBJECT>';
    document.getElementById(parentName).innerHTML = s;
}

function QSPCheck()
{   // returns 0 for no QSP, -1 for out-of-date, 1 for ok
    var ver = null;
    if (qsp2iever.RegistryVersion)
        ver = qsp2iever.RegistryVersion;
    if (!ver) return 0;
    if (ver >= QSP_LATEST_VER_COMPARABLE) return 1;
    return -1;
}

function _QSPCheckUpgradeProgress()
{
    _QSPNextState(QSP_UPGRADE_PROGRESS);
    var q = document.getElementById('qsp2iever');
    if (q && q.RegistryVersion >= QSP_LATEST_VER_COMPARABLE)
    {
        _QSPNextState(QSP_INSTALL_DONE);
        if (qspUpgradeCB)
            qspUpgradeCB(0, 'Upgrade complete', 1);
    }
    else
        setTimeout('_QSPCheckUpgradeProgress()', 1000);
}

function _QSPMakeURL(baseURL)
{
    url = baseURL;
    if (url.substr(url.length-1) != "/")
        url = url + '/';
    return url + "qsp2ie" + QSP_LATEST_VER_COMPARABLE + ".cab";
}

function QSPUpgradeStart(baseURL, upgradeFunc) // note that upgradeFunc is optional
{
    url = _QSPMakeURL(baseURL);
    qspUpgradeCB = upgradeFunc;

    if (upgradeFunc)
        qsp2iever.attachEvent('OnUpgradeProgress', upgradeFunc);
    qsp2iever.Upgrade(url);

    setTimeout('_QSPCheckUpgradeProgress()', 500);
}

var qspBaseURL = '';
function QSPInstallStart(baseURL, upgradeFunc)
{

    if (QSPCheck() == -1)
    {
        QSPUpgradeStart(baseURL, upgradeFunc);
        return;
    }

    // fresh install
    // Do some platform checking
    var ua = navigator.userAgent.toLowerCase();

    // Initial OS checks
    if (ua.indexOf('win') == -1)
    {
        _QSPNextState(QSP_ERROR_NOT_WINDOWS);
        return;
    }

    if (ua.indexOf('16bit') != -1)
    {   // win 3.1 or something
        _QSPNextState(QSP_ERROR_NOT_WINDOWS);
        return;
    }

    // We've reordered these to help prevent installation on vanilla win98 (win98se is ok). We
    // do this by detecting >=IE5.5 and presence of WMV9 first
    
    // browser checks
    var major = parseInt(navigator.appVersion);
    if ((ua.indexOf('opera') != -1 || ua.indexOf('msie') == -1) ||
        (major < 4 || ua.indexOf('msie 4') != -1 || ua.indexOf('msie 5.0') != -1))
    {
        _QSPNextState(QSP_ERROR_NOT_IE);
        return;
    }

    // <sigh> need WM9 (codecs at least)
    document.body.insertAdjacentHTML("beforeEnd", '<OBJECT WIDTH="0" HEIGHT="0" ID="WMPTest" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" TYPE="application/x-oleobject"><PARAM NAME="uiMode" VALUE="none"></OBJECT>');
    if(!(parseInt(document.WMPTest.versionInfo) >= 9))
    {
        _QSPNextState(QSP_ERROR_NO_WMP9);
        return;
    }

    //if ((ua.indexOf('win98') != -1 || ua.indexOf('windows 98') != -1) && (ua.indexOf('digext') == -1))
    //if ((ua.indexOf('win98') != -1 || ua.indexOf('windows 98') != -1) && (ua.indexOf('digext') == -1 && ua.indexOf('win 9x 4.9') == -1))
    //{   // win 98 first edition
    //    _QSPNextState(QSP_ERROR_NOT_WINDOWS);
    //    return;
    //}

    //if (ua.indexOf('win98') == -1 && ua.indexOf('win 9x 4.9') == -1 && ua.indexOf('windows 98') == -1 && ua.indexOf('windows nt 5') == -1)
    //{
    //    _QSPNextState(QSP_ERROR_NOT_WINDOWS);
    //    return;
    //}

    // Platform looks ok - start ye olde download
    qspBaseURL = _QSPMakeURL(baseURL);
    _QSPNextState(QSP_ACTIVEX_PROMPT);
    qspSpew = '<object id="qsp2ie" width="0" height="0" classid="CLSID:e473a65c-8087-49a3-affd-c5bc4a10669b" codebase="'+qspBaseURL+'#Version="'+QSP_LATEST_VER+'"></object>';
    document.body.insertAdjacentHTML('beforeEnd', qspSpew);
    window.status = 'Loading...';
    setTimeout('_QSPCheckInstallProgress(0)', 500);
}

function _QSPCheckInstallProgress(elapsedTime)
{
    // See if we're done
    var d = document.getElementById('qsp2ie');
    if (d && d.readyState >= 4) // 4 means it's loaded and ready
    {
        try
        {
            if (d.object && d.RegistryVersion && d.RegistryVersion >= QSP_LATEST_VER_COMPARABLE)
            {
                _QSPNextState(QSP_INSTALL_DONE);
                window.status = 'Installation complete.';
                return;
            }
        }
        catch(e)
        {
            _QSPNextState(QSP_ERROR_ACTIVEX_UNSAFE);
            window.status = 'Installation blocked by security settings.';
            return;
        }

        _QSPNextState(QSP_ERROR_ACTIVEX_BLOCKED);
        window.status = 'Installation blocked or canceled by user.';
        return;
    }

    if (elapsedTime > 120)
    {
        _QSPNextState(QSP_ERROR_TIME_OUT);
        window.status = 'Installation timed out.';
        return;
    }

    setTimeout('_QSPCheckInstallProgress(' + (elapsedTime+1) + ')', 1000);
}

