// Written by Juha Laakso, 2006

var pluginArchitecture = null;

// addEvent function written by Scott Andrew
function addEvent(obj, evType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, false);
        return true;
    }
    else if (obj.attachEvent) {
        var r = obj.attachEvent("on" + evType, fn);
        return r;
    }
    else {
        return false;
    }
}

function isWMPInstalled(mime) {
    // Internet Explorer ActiveX
    try {
        var asv = new ActiveXObject("MediaPlayer.MediaPlayer.1");
        pluginArchitecture = "ActiveXControl";
        return true;
    }
    catch(e) {
    }
    // Others NPAPI
    var p1 = navigator.mimeTypes["video/x-ms-asf-plugin"];
    var p2 = navigator.mimeTypes["application/x-mplayer2"];
    if ((p1 && p1.enabledPlugin) || (p2 && p2.enabledPlugin)) {
        pluginArchitecture = "NPAPI";
        return true;
    }
    return false;
}

function getMimeType(url) {
    var mime = null;
    url = url.toLowerCase();
    if ((url.indexOf(".asf") !=-1) || (url.indexOf(".asx") !=-1)) { mime = "video/x-ms-asf"; }
    else if (url.indexOf(".wma") !=-1) { mime = "audio/x-ms-wma"; }
    else if (url.indexOf(".wax") !=-1) { mime = "audio/x-ms-wax"; }
    else if (url.indexOf(".wmv") !=-1) { mime = "video/x-ms-wmv"; }
    else if (url.indexOf(".wvx") !=-1) { mime = "video/x-ms-wvx"; }
    else if (url.indexOf(".wm") !=-1) { mime = "video/x-ms-wm"; }
    return mime;
}

function assignVideoLinks() {
    if (!isWMPInstalled()) {
        return true;
    }

    // Since Media Player plug-in is installed remove info text
    var pinfo = document.getElementById("playerinfo");
    pinfo.parentNode.removeChild(pinfo);

    // Find video links & add onClick events calls to player
    var links = document.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        if (getMimeType(links[i].href))
        {
            links[i].onclick = playMeEmbedded;
        }
    }
}

function playMeEmbedded(e) {
    var event;
    if (!e) event = window.event;
    else event = e;
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;

    if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) {
        return true;
    }

    // Remove play symbol from previous link
    if (document.getElementById("playing")) {
        var tmp = document.getElementById("playing");
        tmp.parentNode.removeChild(tmp);
    }

    // Add play symbol to link
    var play = createElement("span");
    play.setAttribute("id", "playing");
    play.setAttribute("title", "Toistetaan");
    play.appendChild(document.createTextNode("\u25ba"));
    if (targ.nodeName == "A" || targ.nodeName == "a") {
        targ.insertBefore(play, targ.firstChild);
    }
    else if (targ.nodeName == "IMG" || targ.nodeName == "img") {
        targ.parentNode.insertBefore(play, targ);
    }

    var playerContainer = document.getElementById("playercontainer");

    // Remove old player object
    if (document.getElementById("WMP")) {
        var tmp = document.getElementById("WMP");
        tmp.parentNode.removeChild(tmp);
    }

    if (pluginArchitecture == "ActiveXControl") {
        // appendChild can’t be used with object-element in IE 5.x so let's use innerHTML
        playerContainer.innerHTML = '<object id="WMP" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="' + playerContainer.offsetWidth + '" height="' + playerContainer.offsetHeight+ '"><param name="URL" value="' + this.getAttribute("href") + '"></param></object>';
        return false;
    }
    if (pluginArchitecture == "NPAPI") {
        var mime = getMimeType(this.getAttribute("href"));
        var p = navigator.mimeTypes[mime];
        // If specific MIME-type is not supported, then try generic type 
        if (!(p && p.enabledPlugin)) {
            mime = "application/x-mplayer2";
        }

        // Support some legacy browser engines
        var ua = navigator.userAgent;
        var reg1 = /Opera(\s|\/)7\.[1-2]/;
        var reg2 = /KHTML\/3\.[0-3]/;
        var reg3 = /WebKit\/(85\.|100|124|125\.)/;
        if (reg1.test(ua) || reg2.test(ua) || reg3.test(ua)) {
            playerContainer.innerHTML = '<embed type="' + mime +'" src="' +  this.getAttribute("href") +'" width="' + playerContainer.offsetWidth + '" height="' + playerContainer.offsetHeight+ '" showstatusbar="1"></embed>';
        }
        // DOM standard-compliant browsers
        else {
            var wmpo = createElement("object");
            wmpo.setAttribute("id", "WMP");
            wmpo.setAttribute("type", mime);
            wmpo.setAttribute("data", this.getAttribute("href"));
            wmpo.setAttribute("width", playerContainer.offsetWidth);
            wmpo.setAttribute("height", playerContainer.offsetHeight);
            wmpo.style.width = playerContainer.offsetWidth + "px";
            wmpo.style.height = playerContainer.offsetHeight + "px";
            wmpo.appendChild(createParam("src", this.getAttribute("href"))); //Needed by some browsers
            // This is needed to mimic uiMode full, which is default in IE-plug-in
            wmpo.appendChild(createParam("ShowStatusBar", "1"));
            playerContainer.appendChild(wmpo);
        }
        return false;
    }
}

function createParam(name, value) {
    var param = createElement("param");
    param.setAttribute("name", name); 
    param.setAttribute("value", value);
    return param;
}

function createElement(el) {
    // For documents delivered as text/html use the createElement
    // For documents delivered as application/xhtml+xml use the createElementNS
    // application/xhtml+xml = lowercase elements in the DOM
    var head = document.getElementsByTagName("head");
    if (document.createElementNS && head[0].tagName == "head") {
        return document.createElementNS("http://www.w3.org/1999/xhtml", el);
    }
    else {
        return document.createElement(el);
    }
}

addEvent(window, 'load', assignVideoLinks);