coins2.sid="10000708";
coins2.wsserver="wss://soc.webpush.jp/coins_websocket/push/";
coins2.cdn="https://cdn.webpush.jp";
Coins2.prototype.postReqest = function(url, data, callback) {
	fetch(url, {method: 'POST', body: data, mode:'cors'}).then(function(response){
		if (!response.ok){throw Error();}return response;
		}).then(function(response) {return response.text();
		}).then(function(text) {callback(text);
		}).catch(function(){});
};
Coins2.prototype.getuuid = function(callback) {
	if (coins2.uuid) {
		callback();return;
	}
	var uuid = '';
	var dc = document.cookie;
	if(dc != '') {
		var cs = dc.split('; ');
		for(var i=0; i<cs.length; i++) {
			var cookie = cs[i].split( '=' );
			if (cookie[0] != 'uuid'){continue;}
			uuid = decodeURIComponent(cookie[1]);
			break;
		}
	}
	if (uuid) {
		coins2.uuid = uuid;
		callback();return;
	}

	/**
	 * Fast UUID generator, RFC4122 version 4 compliant.
	 * @author Jeff Ward (jcward.com).
	 * @license MIT license
	 * @link http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
	 **/
	var UUID = (function() {
		var self = {};
		var lut = []; for (var i=0; i<256; i++) { lut[i] = (i<16?'0':'')+(i).toString(16); }
		self.generate = function() {
			var d0 = Math.random()*0xffffffff|0;
			var d1 = Math.random()*0xffffffff|0;
			var d2 = Math.random()*0xffffffff|0;
			var d3 = Math.random()*0xffffffff|0;
			return lut[d0&0xff]+lut[d0>>8&0xff]+lut[d0>>16&0xff]+lut[d0>>24&0xff]+'-'+
				lut[d1&0xff]+lut[d1>>8&0xff]+'-'+lut[d1>>16&0x0f|0x40]+lut[d1>>24&0xff]+'-'+
				lut[d2&0x3f|0x80]+lut[d2>>8&0xff]+'-'+lut[d2>>16&0xff]+lut[d2>>24&0xff]+
				lut[d3&0xff]+lut[d3>>8&0xff]+lut[d3>>16&0xff]+lut[d3>>24&0xff];
		}
		return self;
	})();

	script.onload = function() {
		var uuid = UUID.generate();
		var exp = new Date("12/31/2037");
		var domain = location.href.match(/^(.*?:\/\/)(.*?)([a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})[\:[0-9]*]?([\/].*?)?$/i);
		var rootDomain = domain[3];
		if (rootDomain == 'cosme.net') {
			document.cookie = 'uuid=' + uuid + '; expires=' + exp.toUTCString() + '; path=/' + '; domain=' + rootDomain;
		} else if (document.domain == 'ishimatsu.webpush.jp') { // for test
			document.cookie = 'uuid=' + uuid + '; expires=' + exp.toUTCString() + '; path=/' + '; domain=' + rootDomain;
		} else if (document.domain == 'ishimatsu2.webpush.jp') { // for test
			document.cookie = 'uuid=' + uuid + '; expires=' + exp.toUTCString() + '; path=/' + '; domain=' + rootDomain;
		} else {
			document.cookie = 'uuid=' + uuid + '; expires=' + exp.toUTCString() + '; path=/';
		}
		coins2.uuid = uuid;
		callback();return;
	}
}

Coins2.prototype.connectWS = function() {
	coins2.getuuid(function(){
		var uri = coins2.wsserver + coins2.sid + '/' + coins2.uuid + '/' + window.btoa(encodeURIComponent(coins2.url));
		coins2.socket = new WebSocket(uri);
		coins2.socket.onopen = coins2.onOpen;
		coins2.socket.onmessage = coins2.onMessage;
		coins2.socket.onclose = coins2.onClose;
	})
}

Coins2.prototype.onOpen = function() {
	var section = document.createElement('section');
	section.setAttribute('id', 'coins2socket');
	section.setAttribute('style', 'display:none');
	section.addEventListener('click', coins2.sendClick);
	document.body.appendChild(section);
	coins2.sendPageinfo();
}

Coins2.prototype.onMessage = function(event) {
	try {
		var data = JSON.parse(event.data);
	} catch (e) {
		return;
	}
	if (!data.type) {
		return;
	}
	if (!data.messageId || !data.html) {
		return;
	}
	if (data.type != 'show') {
		if (data.messageId != coins2.messageId) {
			return;
		}
		return coins2.hideMessage();
	}
	if (data.messageType == '3') {
		if (document.getElementById('coins2lb')) {
			var r = document.createEvent('HTMLEvents');
			r.initEvent('coins2lb', false, false);
			window.dispatchEvent(r);
			return coins2.showMessage(data);
		}
		var script = document.createElement('script');
		script.id = 'coins2lb';
		script.src = coins2.cdn + '/js/LivePlayer/player.js?t=' + (new Date).getTime();
		document.body.appendChild(script);
		script.onload = function() {
			return coins2.showMessage(data);
		}
		return;
	}
	if (!data.moviePlayer) {
		return coins2.showMessage(data);
	}
	if (document.getElementById('coins2mp' + data.moviePlayer)) {
		var r = document.createEvent('HTMLEvents');
		r.initEvent('coins2mp' + data.moviePlayer, false, false);
		window.dispatchEvent(r);
		return coins2.showMessage(data);
	}
	var script = document.createElement('script');
	script.id = 'coins2mp' + data.moviePlayer;
	script.src = coins2.cdn + '/js/Player/' + data.moviePlayer + '/player.js';
	document.body.appendChild(script);
	script.onload = function() {
		return coins2.showMessage(data);
	}
}

Coins2.prototype.onClose = function(event) {
}

Coins2.prototype.showMessage = function(data) {
	coins2.messageId = data.messageId;
	var section = document.getElementById('coins2socket');
	section.innerHTML = data.html;
	section.style.display="block";
	coins2.sendDisplay();
	coins2.clicked = false;

	var coins2script = document.getElementById('coins2script');
	if (!coins2script) {
		return;
	}
	coins2script.parentNode.removeChild(coins2script);
	var clone = document.createElement('script');
	clone.innerHTML = coins2script.innerHTML;
	section.appendChild(clone);
}

Coins2.prototype.hideMessage = function() {
	document.getElementById('coins2socket').style.display="none";
}

Coins2.prototype.sendDisplay = function() {
	var data = {'messageId' : coins2.messageId, 'type' : "display", url : coins2.url};
	coins2.socket.send(JSON.stringify(data));
}

Coins2.prototype.sendClick = function(e) {
	if ( !(e.target.className.match(/cwp-click-event/) && e.target.tagName === 'A')) {
		console.debug("coins: error not clicked");
		return;
	}
	if (coins2.clicked) {
		return;
	}
	coins2.clicked = true;
	var data = {'messageId' : coins2.messageId, 'type' : "click", url : coins2.url};
	coins2.socket.send(JSON.stringify(data));
}

Coins2.prototype.sendPageinfo = function() {
	var metas = document.getElementsByTagName("meta");
	var keywords;
	for (var i = 0; i < metas.length; ++i) {
		if (metas[i].name != 'keywords') {continue;}
		if (!metas[i].content) {continue;}
		keywords = metas[i].content.split(',');
		break;
	}
	var data = {'type' : "pageinfo", 'keywords' : keywords, 'title' : document.title};
	coins2.socket.send(JSON.stringify(data));
}

Coins2.prototype.Empty = function() {
	var elementNode = document.getElementById('coins2socket');
    while (elementNode.firstChild){
        elementNode.removeChild(elementNode.firstChild);
    }
}
