// DEPENDENCIES : wefunktoolbox.js (buildElementTree, removechildren)

function playembed_logappend(text) {
    var elul = document.getElementById('log');
    if (!elul) {return}
    var elli = document.createElement('li');
    elli.appendChild(document.createTextNode(text));
    elul.insertBefore(elli,elul.firstChild);
}

function playembed_detectmessage(msg) {
    var elmain = document.getElementById('playerembed');
    var el = document.createElement('span');
    var elch = typeof(msg) == 'object'? buildElementTree(msg) : 
               typeof(msg) == 'string'? document.createTextNode(msg) :
                                        document.createTextNode('detecting plugins...');
    el.appendChild(elch);
    el.className = 'pluginmsg';
    el.id = 'pluginmsg';
    elmain.appendChild(el);
}

function playembed_rundetect(order) {
    // var detected should already be defined as an empty object in the main document
    detected = detected || {};
    detected.detectpossible = canDetectPlugins();
    detected.bedynamic = detected.detectpossible && document.getElementById;
    detected.list = [];
    
    order = order || pluginprefs.order;
    
    if (detected.bedynamic) {
        for (var i in order) {
            var plugtype = order[i];
            playembed_logappend('Testing ' + plugtype);
            if (detectplug(plugtype)) {
                detected.list.push(plugtype);
                playembed_logappend(plugtype + ' FOUND');
            }
        }
    }
    return detected;
}

function playembed_loadplugin(elcontainer,plugtype,prefs) {
//return;
    var useobject = true;
    var objectparamsasattributes = false;
    var useobjectparams = true;
    var useembed = !detectableWithVB;
    var thiscontainer = elcontainer;
    var name, i;
    if (typeof(pluginprefs) == 'undefined') {
        var pluginprefs = prefs;
    }
    var output = {};
    
    removechildren(elcontainer);
    playembed_logappend('Loading ' + plugtype);
    if (pluginprefs[plugtype].html) {
        thiscontainer.innerHTML = pluginprefs[plugtype].html;
        playembed_logappend('plugin: ' + plugtype + ', setting innerHTML');
    		//thiscontainer = null;       		
    }
    else {
        if (useobject) {
            //if (pluginprefs[plugtype].objhtml) {
            //		thiscontainer.innerHTML = pluginprefs[plugtype].objhtml;            		
            //		thiscontainer = null;       		
           	//}
          	//else {
		            var elobj = document.createElement('object');
		            if (useobjectparams && !objectparamsasattributes) {
		                for (name in pluginprefs[plugtype].objparams) {
		                    var newparam = document.createElement('param');
		                    newparam.name = name;
		                    newparam.value = pluginprefs[plugtype].objparams[name];
		                    elobj.appendChild(newparam);
		                }
		            }
		            thiscontainer.appendChild(elobj); 
		            for (name in pluginprefs[plugtype].objattributes) {
		        				try { playembed_logappend('plugin: ' + plugtype + ', setting obj attribute ' + name + ' to ' + pluginprefs[plugtype].objattributes[name]); 
		        				      elobj[name] = pluginprefs[plugtype].objattributes[name]; }
		                catch(err) { playembed_logappend('*plugin: ' + plugtype + ', attribute: ' + name + ', error: ' + err.description) }
		            }
                    if (!elobj.className) {
        				try { elobj.className = 'plugin_' + plugtype; }
                        catch(err) { playembed_logappend('*plugin: ' + plugtype + ', attribute: class, error: ' + err.description) }
                    }
		            if (useobjectparams && objectparamsasattributes) {
		                for (name in pluginprefs[plugtype].objparams) {
		            				try { playembed_logappend('plugin: ' + plugtype + ', setting obj param ' + name + ' to ' + pluginprefs[plugtype].objparams[name]); 
		            				      elobj[name] = pluginprefs[plugtype].objparams[name]; }
		                    catch(err) { playembed_logappend('*plugin: ' + plugtype + ', attribute: ' + name + ', error: ' + err.description) }
		                }
		            }
		            thiscontainer = elobj;
          	//}
        }
        if (useembed) {
            //if (pluginprefs[plugtype].embedhtml) {
            //		thiscontainer.innerHTML = pluginprefs[plugtype].embedhtml;     
            //		thiscontainer = null;       		
           	//}
            //else {
                var elembed = document.createElement('embed');
                for (name in pluginprefs[plugtype].embedattributes) {
    				try { playembed_logappend('plugin: ' + plugtype + ', setting embed attribute ' + name + ' to ' + pluginprefs[plugtype].embedattributes[name]); 
        				      elembed[name] = pluginprefs[plugtype].embedattributes[name]; }
                    catch(err) { playembed_logappend('*plugin: ' + plugtype + ', attribute: ' + name + ', error: ' + err.description) }
                }
                if (!elembed.className) {
    				try { elembed.className = 'plugin_' + plugtype; }
                    catch(err) { playembed_logappend('*plugin: ' + plugtype + ', attribute: class, error: ' + err.description) }
                }
                thiscontainer.appendChild(elembed);
                if (pluginprefs[plugtype].postembedeval) {
                    window.setTimeout(pluginprefs[plugtype].postembedeval, 1);
                }
                thiscontainer = elembed;
            //}
        }
    
        // create alternate markup
        if (thiscontainer) {
            var el = document.createElement('p');
            el.appendChild(document.createTextNode(plugtype + ' plugin did not load successfully'));
            try { thiscontainer.appendChild(el); } catch(err) {} // alert('error: ' + err.description + ' (' + thiscontainer + ')')
        }
    }
    
    output.plugtype = plugtype;
    output.othertypes = [];
    for (i in detected.list) {
        if (detected.list[i] != plugtype) {
            output.othertypes.push(detected.list[i]);
        }
    }
    if (!pluginprefs.display.bare  &&  output.othertypes.length > 0) {
        // show list of other player types, if available
        thiscontainer = document.createElement('span');
        thiscontainer.className = 'playsection';
        el = document.createElement('span');
        el.className = 'playtitle';
        el.appendChild(document.createTextNode( pluginprefs.display.brief? 'Switch' : 'Other Players' ));
        thiscontainer.appendChild(el);
        for (i in output.othertypes) {
            el = playembed_createpluginlink(output.othertypes[i],pluginprefs);
            thiscontainer.appendChild(el);
        }
        elcontainer.appendChild(document.createElement('br'));
        elcontainer.appendChild(thiscontainer);
        el = document.createElement('br');
        el.className = 'clear';
        elcontainer.appendChild(el);
    }
    playembed_logappend(plugtype + ' loaded');
    playembed_setplugpref(plugtype);
    if (typeof(pluginprefs.onpluginload) == 'function') { pluginprefs.onpluginload(pluginprefs,output); }
    return output;
}

function playembed_setplugpref(plugtype) {
    var exp=new Date();
    //exp.setTime(exp.getTime() + 120*24*60*60*1000);
    exp.setTime(Date.parse(exp) + 120*24*60*60*1000);
    document.cookie = 'lastplayer=; expires=Sat, 01-Jan-2000 00:00:00 GMT; domain=wefunkradio.com';  // get rid of old path-based cookie
    document.cookie = 'lastplayer=' + escape(plugtype) + '; expires=' + exp.toUTCString() + '; domain=wefunkradio.com; path=/';
}

function playembed_getplugpref() {
    var s = 'lastplayer=';
    playembed_logappend('cookie is: ' + document.cookie);
    var i = document.cookie.indexOf(s);
    var j = document.cookie.indexOf(';',i+s.length);
    if (i >= 0) {
        if (j < 0) { j = document.cookie.length + 1; }
        return unescape(document.cookie.substring(i+s.length,j));
    }
    return '';
}

function playembed_createpluginlink(plugtype,pluginprefs,targetid) {
    var el = document.createElement('a');
    var elimg = document.createElement('img');
    elimg.setAttribute('src','/images-small/play_' + pluginprefs[plugtype].code + '.gif');
    elimg.setAttribute('width',16);
    elimg.setAttribute('height',16);
    elimg.setAttribute('alt',pluginprefs[plugtype].displayname);
    elimg.className = 'nu2 streamicon';
    el.appendChild(elimg);
    if (!pluginprefs.display.brief) {
        el.appendChild(document.createTextNode(pluginprefs[plugtype].displayname));
    }
    el.className = 'nu';
    var href;
    if (typeof(pluginprefs.display.alternatelink) != 'undefined') {
        href = pluginprefs.display.alternatelink;
    } else {
        href = '/show/' + stream.showdate + '/' + pluginprefs[plugtype].code2 + 'stream';
    }
    el.setAttribute('href',href);
    el.setAttribute('title','Play stream using ' + pluginprefs[plugtype].displayname);
    //el.onclick = new Function('playembed_loadplugin(document.getElementById("playerembed"),"' + plugtype + '"); return false');
    el.onclick = loadfromevent((targetid? targetid:'playerembed'),plugtype,pluginprefs);
    //el.onclick = new Function('return false');
    //addObjectEventListener(el,'click',ev);
    //el.onclick = ev;
    return el;
}

function loadfromevent(id,plugtype,pluginprefs) {
    return (function() {playembed_loadplugin(document.getElementById(id),plugtype,pluginprefs); return false});
}
