/*global window, document, navigator */
var oclmidi = function() {
var safaritype = 0;
/* see http://simonwillison.net/2003/Jun/15/javascriptWithXML/ for explanation of following function */
function createElement(ns,element) {
  return ns ? document.createElementNS(ns,element) : document.createElement(element);
}
function createMarkup(div,mimetype,auto,autoon,autooff,width,height) {
var obj;
if (safaritype === 0) {
	if ((!navigator.vendor) || (navigator.vendor.indexOf('Apple') == -1)) {safaritype = 1;}
	else {
    window.addEventListener("unload",function () {},false);
		var oldsafari = navigator.userAgent.indexOf('Safari');
		if (oldsafari == -1) {safaritype = 2;}
		else if (parseInt(navigator.userAgent.substring(oldsafari + 7,navigator.userAgent.length),10) < 312) {safaritype = 3;}
		else {safaritype = 4;}
		}
	}
var newid = div.id + "noautoplay";
var uri = div.href;
var ns = document.createElementNS ? div.namespaceURI : false;
if (safaritype == 3) { /* safari 10.2.8 can't handle javascript dom, but can handle innerHTML */
	if (!document.links) {return true;}
	obj = createElement(ns, "span");
	obj.innerHTML = "<object type='" + mimetype +"' data='" + uri + "' height='" + height + "' width='" + width +
	   "' title='" + div.title + "'><param id='" + newid + "' name='" + auto +"' value='" + autoon + "'><\/object>";
	div.parentNode.replaceChild(obj,div);
	return false;
	}
obj = createElement(ns, 'object');
obj.width = width;
obj.height = height;
obj.data = uri;
obj.type = mimetype;
obj.title = div.title;
var p_m = createElement(ns, 'param');
p_m.setAttribute('name',auto);
p_m.setAttribute('value',autoon);
p_m.id = newid;
obj.appendChild(p_m);
if ((safaritype != 1) || (mimetype == "application/x-mplayer2")) {
	var p_2 = createElement(ns, 'param');
	p_2.setAttribute('name','src');
	p_2.setAttribute('value',uri);
	obj.appendChild(p_2);
}
var textnode = document.createTextNode("Click to ");
obj.appendChild(textnode);
var a = createElement(ns, 'a');
a.setAttribute('href',uri);
var clickhere = document.createTextNode("play");
a.appendChild(clickhere);
obj.appendChild(a);
div.parentNode.replaceChild(obj,div);
if (safaritype == 1) {window.setTimeout('document.getElementById("' + newid + '").value="'+autooff+'"',1000);}
return false;
}

function createMarkMid() {return createMarkup(this,'audio/x-midi','autoplay','true','false','120','60');}
function createMarkMp3() {return createMarkup(this,'audio/mpeg','autoplay','true','false','120','60');}
function createMarkMplayer2() {return createMarkup(this,'application/x-mplayer2','autostart','1','0','120','60');}

function initOthMid() {
var i;
if (arguments.callee.done) {return;} arguments.callee.done = true;
if ((!document.getElementById) || (!document.createElement && !document.createElementNS)) {return;}
if (!navigator.mimeTypes) {return;}
if ( (navigator.platform.indexOf("Mac") == -1) &&
     (navigator.platform.indexOf("Win") == -1) &&
     (navigator.platform.indexOf("iPhone") == -1) &&
     (navigator.platform.indexOf("iPod") == -1)
	) {return;}
var midsupported = navigator.mimeTypes['audio/x-midi'];
if (midsupported) {midsupported = midsupported.enabledPlugin;}
var mp3supported = navigator.mimeTypes['audio/mpeg'];
if (mp3supported) {mp3supported = mp3supported.enabledPlugin;}
var mp2supported = navigator.mimeTypes['application/x-mplayer2'];
var mp2mid, mp2mp3;
if (mp2supported && mp2supported.enabledPlugin) {
  var mp2suf = mp2supported.suffixes;
  mp2mid = (/\*/.test(mp2suf) || /mid/.test(mp2suf));
  mp2mp3 = (/\*/.test(mp2suf) || /mp3/.test(mp2suf)); // alert("mp2mid/mp3mid "+mp2mid+" "+mp2mp3);
  }
var a = document.getElementsByTagName('a');
if (mp3supported && !midsupported && !mp2mid) {
  for (i = 0; i < a.length; i++) {
    if (a[i].id.indexOf("repcvt") > -1) {a[i].href = a[i].href + ".mp3";}
    }
}
if ((navigator.platform.indexOf("iPhone") != -1) ||
    (navigator.platform.indexOf("iPod") != -1)
	) {return;}
for (i = 0; i < a.length; i++) {
	if (a[i].id.indexOf("rep") > - 1){
		if (/\.mid$/.test(a[i].href)) {
			if (midsupported)	{a[i].onclick = createMarkMid;}
			else if (mp2mid) {a[i].onclick = createMarkMplayer2;} }
		else if (/\.mp3$/.test(a[i].href)) {
			if (mp3supported)	{a[i].onclick = createMarkMp3;}
			else if (mp2mp3) {a[i].onclick = createMarkMplayer2;} }
	  }
	}
}

return {
initOthMidf: function() {initOthMid();}
}; 
}();

if (!document.getElementsByTagName) {}
else if (document.getElementsByTagName('a').length) {oclmidi.initOthMidf();}
else if (window.addEventListener) {document.addEventListener("DOMContentLoaded",oclmidi.initOthMidf,false);
                             window.addEventListener("load",oclmidi.initOthMidf,false);}