var brightcoveJS = {
    servicesURL: 'http://console.brightcove.com/services',
    cdnURL: 'http://admin.brightcove.com',
    players: {},
    experienceNum: 0,
    majorVersion: 9,
    minorRevision: 28
};
brightcoveJS.createWidgets = function(pEvent, pElementID) {
    brightcoveJS.removeListeners();

    var pDefaultParam = {};
    pDefaultParam.width  = '100%';
    pDefaultParam.height = '100%';

    var pDefaultFParam = {};
    pDefaultFParam.allowScriptAccess = 'always';
    pDefaultFParam.allowFullScreen = 'true';
    pDefaultFParam.seamlessTabbing   = false;
    pDefaultFParam.swliveconnect     = true;
    pDefaultFParam.wmode   = 'window';
    pDefaultFParam.quality = 'high';
    pDefaultFParam.bgcolor = '#999999';

    var isIE = (window.ActiveXObject != undefined);
    var pMajorVersion = 0;
    var pMinorRevision = 0;
    var pVersions;
    if (typeof navigator.plugins != 'undefined' && navigator.plugins.length > 0) {
        if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
            var pSWFVersion = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
            var pDescription = navigator.plugins["Shockwave Flash" + pSWFVersion].description;
            pVersions = pDescription.split(" ");
            pMajorVersion = pVersions[2].split(".")[0];
            pMinorRevision = pVersions[3];
            if (pMinorRevision == "") {
                pMinorRevision = pVersions[4];
            }
            if (pMinorRevision[0] == "d") {
                pMinorRevision = pMinorRevision.substring(1);
            } else if (pMinorRevision[0] == "r") {
                pMinorRevision = pMinorRevision.substring(1);
                if (pMinorRevision.indexOf("d") > 0) {
                    pMinorRevision = pMinorRevision.substring(0, pMinorRevision.indexOf("d"));
                }
            }
        }
    } else if (isIE) {
        try {
            var pFlash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
            pVersions = / ([0-9]),[0-9],([0-9]+),/.exec(pFlash.GetVariable('$version'));
            pMajorVersion = pVersions[1];
            pMinorRevision = pVersions[2];
        } catch(e) {}
    }

    var pErrorObj  = brightcoveJS.createElement('div');
    var pErrorLink = brightcoveJS.createElement('a');
    var pErrorImg  = brightcoveJS.createElement('img');
    pErrorImg.src = brightcoveJS.i18n.FLASH_TOO_OLD_IMAGE;
    pErrorImg.alt = brightcoveJS.i18n.FLASH_TOO_OLD;
    pErrorLink.appendChild(pErrorImg);
    pErrorLink.href  = 'http://www.adobe.com/products/flashplayer';
    pErrorLink.title = brightcoveJS.i18n.GO_TO_ADOBE;
    pErrorObj.appendChild(pErrorLink);
    pErrorObj.className = 'bcPlayerError';

    var pPlayers = [];
    if (pElementID != null) {
        pPlayers.push(document.getElementById(pElementID));
    } else {
        var pAllObjects = document.getElementsByTagName('object');
        var pNumObjects = pAllObjects.length;
        for (var i = 0; i < pNumObjects; i++) {
            if(/\bBrightcoveWidget\b/.test(pAllObjects[i].className)) {
                pPlayers.push(pAllObjects[i]);
            }
        }
    }
    if (isIE) {
        var pParams = document.getElementsByTagName('param');
    }
    var pPlayer;
    var pPlayerID = brightcoveJS.getParameter("bcpid");
    var pTitleID = brightcoveJS.getParameter("bctid");
    var pLineupID = brightcoveJS.getParameter("bclid");
    var pNumPlayers = pPlayers.length;
    for (var i = 0; i < pNumPlayers; i++) {

        pPlayer = pPlayers[i];
        if (!pPlayer.params) pPlayer.params = {};
        if (!pPlayer.fParams) pPlayer.fParams = {};
        for (var j in pDefaultParam) {
            pPlayer.params[j] = pDefaultParam[j];
        }
        for (var j in pDefaultFParam) {
            pPlayer.fParams[j] = pDefaultFParam[j];
        }
        if (pPlayer.id.length > 0) {
            pPlayer.params.flashID = pPlayer.id;
        } else {
            pPlayer.id = pPlayer.params.flashID = 'bcPlayerObj' + (brightcoveJS.experienceNum++);
        }
        if (!isIE) {
            var pParams = pPlayer.getElementsByTagName('param');
        }
        var pNumParams = pParams.length;
        var pParam;
        for (var j = 0; j < pNumParams; j++) {
            pParam = pParams[j];
            if (isIE && pParam.parentNode.id != pPlayer.id) {
                continue;
            }
            pPlayer.params[pParam.name] = pParam.value;
        }
        if (pMajorVersion < brightcoveJS.majorVersion || pMinorRevision < brightcoveJS.minorRevision) {
            pPlayer.parentNode.replaceChild(pErrorObj.cloneNode(true), pPlayer);
            continue;
        }
        if (pPlayer.params.bgcolor != undefined) pPlayer.fParams.bgcolor = pPlayer.params.bgcolor;
        if (pPlayer.params.wmode != undefined) pPlayer.fParams.wmode = pPlayer.params.wmode;
        if (pPlayerID.length < 1  || (pPlayerID == pPlayer.params.playerID)) {
            if (pPlayerID != pPlayer.params.playerID && pPlayerID.length > 0) {
                pPlayer.params.playerID = pPlayerID;
            }
            if (pTitleID.length > 0) {
                pPlayer.params.videoID = pTitleID;
                pPlayer.params.autoStart = true;
                pPlayer.params.fromLink = true;
            }
            if (pLineupID.length > 0) {
                pPlayer.params.lineupID = pLineupID;
            }
        }

        var pFile = brightcoveJS.servicesURL + '/viewer/federated_f9';
        pFile += '?servicesURL=' + encodeURIComponent(brightcoveJS.servicesURL) +
            '&cdnURL=' + encodeURIComponent(brightcoveJS.cdnURL) + 
            brightcoveJS.getOverrides();

        for (var pConfig in pPlayer.params) {
            pFile += '&' + encodeURIComponent(pConfig) + '=' + encodeURIComponent(pPlayer.params[pConfig]);
        }

        var pPlayerElement;
        if (isIE) {
            var pContainer = document.createElement('span');
            if (pPlayer.params.height.charAt(pPlayer.params.height.length-1) == "%") {
                pContainer.style.display = 'block';
            } else {
                pContainer.style.display = 'inline-block';
            }
            pContainer.id = '_container' + i;
            pPlayer.fParams.movie = pFile;
            var pOptions = '';
            for (var pOption in pPlayer.fParams) {
                pOptions += '<param name="' + pOption + '" value="' + pPlayer.fParams[pOption] + '" />';
            }
            var pPlayerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
            + ' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"'
            + ' id="' + pPlayer.id + '"'
            + ' width="' + pPlayer.params.width + '"'
            + ' height="' + pPlayer.params.height + '"'
            + ' class="BrightcoveWidget">'
            + pOptions
            + '</object>';
            pPlayer.parentNode.replaceChild(pContainer, pPlayer);
            document.getElementById('_container' + i).innerHTML = pPlayerHTML;
            pPlayer.player = document.getElementById(pPlayer.id);
            brightcoveJS.players[pPlayer.id] = pContainer;
        } else {
            var pPlayerElement = document.createElementNS('http://www.w3.org/1999/xhtml', 'object');
            pPlayerElement.type = 'application/x-shockwave-flash';
            pPlayerElement.data = pFile;
            pPlayerElement.id = pPlayer.params.flashID;
            pPlayerElement.width = pPlayer.params.width;
            pPlayerElement.height = pPlayer.params.height;
            pPlayerElement.className = pPlayer.className;
            var pTempParam;
            for (var pConfig in pPlayer.fParams) {
                pTempParam = document.createElementNS('http://www.w3.org/1999/xhtml', 'param');
                pTempParam.name = pConfig;
                pTempParam.value = pPlayer.fParams[pConfig];
                pPlayerElement.appendChild(pTempParam);
            }
            pPlayer.parentNode.replaceChild(pPlayerElement, pPlayer);
            brightcoveJS.players[pPlayer.id] = pPlayerElement;
        }
    }
};

brightcoveJS.createWidget = function(pElement, pParentOrSibling, pAppend) {
    if (!pElement.id || pElement.id.length < 1) {
        pElement.id = 'bcPlayerObj' + (brightcoveJS.experienceNum++);
    }
    if (pAppend) {
        pParentOrSibling.appendChild(pElement);
    } else {
        pParentOrSibling.parentNode.insertBefore(pElement, pParentOrSibling);
    }
    brightcoveJS.createWidgets(null, pElement.id);
};

brightcoveJS.removeWidget = function(pID) {
    if (brightcoveJS.players[pID] != null) {
        brightcoveJS.players[pID].parentNode.removeChild(brightcoveJS.players[pID]);
    }
};

brightcoveJS.getURL = function() {
    var pURL;
    if (typeof window.location.search != 'undefined') {
        pURL = window.location.search;
    } else {
        pURL = /(\?.*)$/.exec(document.location.href);
    }
    return pURL;
}

brightcoveJS.getOverrides = function() {
    var pURL = brightcoveJS.getURL();
    var pQuery = new RegExp('@\\w+=\\w+', 'g');
    var pValue = pQuery.exec(pURL);
    var pOverrides = "";
    while (pValue != null) {
        pOverrides += "&" + pValue;
        pValue = pQuery.exec(pURL);
    }
    return pOverrides;
};

brightcoveJS.getParameter = function(pName, pDefaultValue) {
    if (pDefaultValue == null) pDefaultValue = "";
    var pURL = brightcoveJS.getURL();
    var pQuery = new RegExp(pName + '=([^&]*)');
    var pValue = pQuery.exec(pURL);
    if (pValue != null) {
        return pValue[1];
    } else {
        return pDefaultValue;
    }
};

brightcoveJS.createElement = function(el) {
    if (document.createElementNS) {
        return document.createElementNS('http://www.w3.org/1999/xhtml', el);
    } else {
        return document.createElement(el);
    }
};

brightcoveJS.i18n = {
    'BROWSER_TOO_OLD'      : 'The browser you are using is too old. Please upgrade to the latest version of your browser.',
    'FLASH_TOO_OLD'        : 'The version of Flash Player you have is too old. Please upgrade to the latest version and reload this page.',
    'FLASH_TOO_OLD_IMAGE'  : brightcoveJS.cdnURL + '/viewer/upgrade_flash_player.gif',
    'GO_TO_ADOBE'          : 'Go to the Adobe Flash Player Web site.'
};

brightcoveJS.removeListeners = function() {
    if (/KHTML/i.test(navigator.userAgent)) {
        clearInterval(checkLoad);
        document.removeEventListener('load', brightcoveJS.createWidgets, false);
    }
    if (typeof window.addEventListener != 'undefined') {
        document.removeEventListener('DOMContentLoaded', brightcoveJS.createWidgets, false);
        document.removeEventListener('load', brightcoveJS.createWidgets, false);
    } else if (typeof window.attachEvent != 'undefined') {
        window.detachEvent('onload', brightcoveJS.createWidgets);
    }
};

if (/KHTML/i.test(navigator.userAgent)) {
    var checkLoad = setInterval(function() { if(/loaded|complete/.test(document.readyState)) { clearInterval(checkLoad); brightcoveJS.createWidgets(); }}, 70);
    document.addEventListener('load', brightcoveJS.createWidgets, false);
}
if (typeof window.addEventListener != 'undefined') {
    document.addEventListener('DOMContentLoaded', brightcoveJS.createWidgets, false);
    document.addEventListener('load', brightcoveJS.createWidgets, false);
} else if (typeof window.attachEvent != 'undefined') {
    window.attachEvent('onload', brightcoveJS.createWidgets);
} else {
    alert(brightcoveJS.i18n.BROWSER_TOO_OLD);
}