// ==UserScript==
// @name          MML Code Clipper
// @namespace     http://a-h.parfe.jp/einfach/
// @include       http://game10.2ch.net/test/read.cgi/gamestg/1134269690/*
// @include       http://game10.2ch.net/test/read.cgi/gamestg/1136614439/*
// @include       http://pc8.2ch.net/test/read.cgi/dtm/1135002098/*
// @include       http://tss.s172.xrea.com/pukiwiki146/pukiwiki.php*
// @include       http://pc8.2ch.net/test/read.cgi/dtm/1138522424/*
// ==/UserScript==

(function() {

var dts = document.getElementsByTagName('dt');
for(i=0;i<dts.length;i++){
	makeButton(dts[i]);
}

function makeButton(obj){
	var play = document.createElement('input');
	play.addEventListener('click', codeClip, true);
	play.setAttribute('type', 'button');
	play.setAttribute('value', 'Play');
	play.setAttribute('style', 'margin-left: 5px;');

	obj.appendChild(play);
}

function codeClip(){
	if(this.value == 'Play'){
		this.value = 'Stop';
		var obj = this.parentNode.nextSibling;
		var code = unescapeMML(obj.innerHTML);
		code = checkCode(code, obj);
		setClipboard(code);
		//alert(this.parentNode.nextSibling.innerHTML);
	}else{
		this.value = 'Play';
		setClipboard('@');
	}
}

function checkCode(code, obj) {
	//var x = prompt('',code);
	if(code.substr(-1,1)=='{'){
		var next = obj.nextSibling.nextSibling;
		if(next.nodeName=='DT')
			next = next.nextSibling;
		code += unescapeMML(next.innerHTML);
		code = checkCode(code, next);
	}
	return code;
}

function unescapeMML(str) {
    return str.replace( 
        /&lt;/g, "<"  ).replace( 
        /&gt;/g, ">" ).replace( 
        /&nbsp;/g, "" ).replace( 
        /<br>/g, "" ).replace( 
        /\n/g, "" ).replace( 
        / /g, "" );
}

/*
 setClipboard for Firefox
 LastModified : 2006-01-10
 http://la.ma.la/misc/js/setclipboard.txt
*/
function setClipboard(text){
	var url = [
		'data:text/html;charset=utf-8;base64,PGJvZHk+PC9ib2',
		'R5PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKGZ1',
		'bmN0aW9uKGVuY29kZWQpe3ZhciBzd2ZfZGF0YSA9IFsKICdkYX',
		'RhOmFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoO2Jhc2U2',
		'NCxRMWRUQjJ3JywKICdBQUFCNG5EUGdZbGpBd01qSTRNejAlMk',
		'YlMkY5JTJGZTJaZkJnYUdhV3dNRE1uNUthJywKICdrTU10TjRH',
		'ZGdaZ1NJTXdaWEZKYW01UUFFJTJCQm9iaTFCTG5uTXlDcFB6RW',
		'9oU0dJJywKICdQRnAlMkZBeHNEREJRa3BGWkRGUUZGQ2d1eVM4',
		'QXlqSTRBRVVCaXkwVndBJTNEJTNEJwpdLmpvaW4oIiIpOwpkb2',
		'N1bWVudC5ib2R5LmlubmVySFRNTCA9IFsKICc8ZW1iZWQgc3Jj',
		'PSInLHN3Zl9kYXRhLCciICcsCiAnRmxhc2hWYXJzPSJjb2RlPS',
		'csZW5jb2RlZCwnIj4nLAogJzwvZW1iZWQ+JwpdLmpvaW4oIiIp',
		'Owp9KSgi',btoa(encodeURIComponent(text)+'")</'+'script>')
	].join("");
	var tmp = document.createElement("div");
	tmp.innerHTML = '<iframe src="'+url+'" width="0" height="0"></iframe>';
	with(tmp.style){
		position ="absolute";
		left = "-10px";
		top  = "-10px";
		visibility = "hidden";
	};
	document.body.appendChild(tmp);
	setTimeout(function(){document.body.removeChild(tmp)},1000);
}
})();

