﻿// ads用
google_ad_client = "pub-2028288171521864";
google_ad_slot = "4341558188";
google_ad_width = 160;
google_ad_height = 600;

// analyze用
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-15157446-2']);
_gaq.push(['_trackPageview']);
(function() {
	var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
	ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

// analyze用
(function () {
	var acclog_cgi_url = 'http://hakuhin.jp/acc/acclog.cgi';
	create_beacon();
	function create_beacon() {
		var img = document.createElement("img");
		img.src = acclog_cgi_url + "?referrer=" + document.referrer + "&width=" + screen.width + "&height=" + screen.height + "&color=" + screen.colorDepth + "&epoch=" + new Date().getTime();
	}
})();

// 変数
var unique_id = 0;


if(document.addEventListener){
	document.addEventListener("DOMContentLoaded", function(e){
		DOMContentLoadComplete();
	}, false);
}

window.onload = function(){
	DOMContentLoadComplete();
}

function DOMContentLoadComplete(){
	AttachMenuNew();
	AttachMenuPr();
	AttachMcsTopic();
	HatenaBookmarkStart();
}


function AttachComment(){
	var div = document.getElementById("comment_message");
	if(!div)	return;
	if(div.attach_complete)	return;
	div.attach_complete = true;

	div.innerHTML = "稼働中なう～";
}

function AttachHeader(){
	AttachComment();
	AttachHistory();
	AttachSearch();
}

function AttachHistory(){
	var div = document.getElementById("history_message");
	if(!div)	return;
	if(div.attach_complete)	return;
	div.attach_complete = true;

	div.innerHTML = '<PRE style="width:1px;">\
2012/02/15 … JS講座に<a href="http://hakuhin.jp/js/video.html">「HTMLVideoElement について」</a>を追加しました。\n\
2012/02/14 … JS講座に<a href="http://hakuhin.jp/js/audio.html">「HTMLAudioElement について」</a>を追加しました。\n\
2012/02/12 … JS講座に<a href="http://hakuhin.jp/js/application_cache.html">「アプリケーションキャッシュについて」</a>を追加しました。\n\
           … JS講座に<a href="http://hakuhin.jp/js/image.html">「HTMLImageElement について」</a>を追加しました。\n\
2012/01/31 … JS講座に<a href="http://hakuhin.jp/js/element.html">「エレメントの基本的な制御について」</a>を追加しました。\n\
2012/01/28 … JS講座の<a href="http://hakuhin.jp/js/upload.html">「ファイルのアップロードについて」</a>に Ruby と Python の例を追加しました。\n\
2012/01/26 … JS講座の<A HREF="http://hakuhin.jp/js/dialog.html#DIALOG_03">ファイル参照のダイアログボックスを開く</A>に FileAPI についての情報を追加しました。\n\
           … JS講座に<A HREF="http://hakuhin.jp/js/upload.html">ファイルのアップロードについて</A>を追加しました。\n\
</PRE>\n\
\n\
\n\
<span style="font-size:12px;"><A HREF="http://hakuhin.jp/history.html">過去の履歴はこちら</A></span>\n\
';
}

var hatena_bookmark_cue = new Array();
function AttachHatenaBookmark(param){
	unique_id++;
	var name = "hatena_bookmark_" + unique_id;
	var w = 10;
	var h = 10;
	var url = "http://b.hatena.ne.jp/entry/" + param.url;
	var url_image = "http://b.hatena.ne.jp/entry/image/" + param.url;
	document.write("<span id=\"" + name + "\"><\/span>");

	hatena_bookmark_cue.push({
		url:param.url,
		link:url,
		name:name
	});
}

function HatenaBookmarkStart(){
	var i;
	var num = hatena_bookmark_cue.length;
	for(i=0;i<num;i++){
		HatenaBookmarkLoad(hatena_bookmark_cue[i])
	}
}

var hatena_bookmark_id = 0;
function HatenaBookmarkLoad(obj){
	var div = document.getElementById(obj.name);
	if(div.attach_complete)	return;
	div.attach_complete = true;

	var cb_name = "HatenaBookmarkCB" + hatena_bookmark_id;
	hatena_bookmark_id += 1;
	this[cb_name] = function (count){
		if(!count)	return;
		
		var d = count / 1000;
		if(d < 0)	d = 0;
		if(d > 1)	d = 1;
		var font_size = 10 + d * 5;
		var str = "\<a href=\"" + obj.link + "\"\>";
		if(count > 1)	str += count + "users";
		else			str += count + "user";
		str += "\<\/a\>";
		div.className = "hatena_b";
		div.style.fontSize = font_size + "px";
		div.innerHTML = str;
		delete script;
		delete this[cb_name];
	}

	var url = "http://api.b.st-hatena.com/entry.count?url=" + escape(obj.url) + "&callback=" + cb_name;

	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = url;
	div.appendChild(script);
}



function AttachObjectFlash(param){
	unique_id++;
	var name = "swf_player_" + unique_id;
	var wmode = (param.wmode) ? (param.wmode):"direct";
	var base = (param.base) ? (param.base):"./";
	var swf_tag = "<object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"\
		codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0\"\
		width=\"" + param.width + "\" height=\"" + param.height + "\" id=\"" + param.id + "\" align=\"middle\"> \
		<param name=\"allowScriptAccess\" value=\"sameDomain\" /> \
		<param name=\"allowFullScreen\" value=\"true\" /> \
		<param name=\"movie\" value=\"" + param.url + "\" />\
		<param name=\"base\" value=\"" + base + "\" />\
		<param name=\"quality\" value=\"high\" />\
		<param name=\"wmode\" value=\"" + wmode + "\" />\
		<param name=\"bgcolor\" value=\"#ffffff\" />\
		<embed src=\"" + param.url + "\" quality=\"high\" wmode=\"" + wmode + "\" bgcolor=\"#ffffff\" width=\"" + param.width + "\" height=\"" + param.height + "\" name=\"" + param.id + "\"\
		align=\"middle\" allowScriptAccess=\"sameDomain\" allowFullScreen=\"true\" base=\"" + base + "\"\
		type=\"application/x-shockwave-flash\" pluginspage=\"http://www.adobe.com/go/getflashplayer_jp\" /> \
	</object>";
	
	document.write("<DIV id=\"" + name + "\" style=\"padding : 0px 0px 0px 0px; margin:0px auto; border:1px #000000 solid; width:" + (param.width) + "px; height:" + (param.height) + "px; \"></div>");
	var div = document.getElementById(name);

	var show = false;
	setInterval(function(){
		var r = div.getBoundingClientRect();
		var ax_min = r.left;
		var ax_max = r.right;
		var ay_min = r.top;
		var ay_max = r.bottom;
		
		var bx_min = 0 + 0;
		var bx_max = document.documentElement.clientWidth - 0;
		var by_min = 0 + 0;
		var by_max = document.documentElement.clientHeight - 0;
		
		var hit = false;
		if(ax_max < bx_min){
		}else if(bx_max < ax_min){
		}else if(ay_max < by_min){
		}else if(by_max < ay_min){
		}else{
			hit = true;
		}

		// 表示中
		if(show){
			if(!hit){
				show = false;
				div.innerHTML = "";
			}

		// 非表示中
		}else{
			if(hit){
				show = true;
				div.innerHTML = swf_tag;
				div.focus();
			}

		}
	},100);
}


function AttachObject(param){
	unique_id++;
	var name = "object_" + unique_id;
	var width = (param.width) ? (param.width+"px"):"100%";
	document.write("<DIV style=\"width:" + width + "; height:" + param.height + "px; margin:0px auto;\"><DIV id=\"" + name + "\" style=\"width:" + width + "; height:"+ param.height + "px;\"></div></div>");
	var div = document.getElementById(name);

	var show = false;
	setInterval(function(){
		var r = div.getBoundingClientRect();
		var ax_min = r.left;
		var ax_max = r.right;
		var ay_min = r.top;
		var ay_max = r.bottom;
		
		var bx_min = 0 + 0;
		var bx_max = document.documentElement.clientWidth - 0;
		var by_min = 0 + 0;
		var by_max = document.documentElement.clientHeight - 0;
		
		var hit = false;
		if(ax_max < bx_min){
		}else if(bx_max < ax_min){
		}else if(ay_max < by_min){
		}else if(by_max < ay_min){
		}else{
			hit = true;
		}

		// 表示中
		if(show){
			if(!hit){
				show = false;
				if(param.destructor)	param.destructor(param);
				div.innerHTML = "";
			}

		// 非表示中
		}else{
			if(hit){
				show = true;
				div.innerHTML = param.tag;
				if(param.initialize)	param.initialize(param);
				div.focus();
			}

		}
	},100);
}


function OpenWindow(param){
	var win = window.open(param.url,"swf_windows",'width='+ param.width +',height=' + param.height + ',toolbar=no,scrollbars=no,resizable=yes,menubar=no,status=no,directories=no,location=no');
	win.focus();
}

var js_source_id = 0;
function AttachSourceJavaScript(script){

	var str = script;
	str = str.replace(/(<!--)/g, "");
	str = str.replace(/(-->)/g, "");
	
	document.write("<div class=\"js_sample\">");
	document.write("<div class=\"js_sample_head\">サンプル</div>");
	document.write("<div class=\"js_sample_foot\">");
	document.write(str);
	document.write("</div></div>");

	var str = script;
	str = str.replace(/</g, "&lt;");
	str = str.replace(/>/g, "&gt;");
	str = str.replace(/(&lt;!--)/g, "<span class=\"comment\">$1<\/span>");
	str = str.replace(/([/][/])(.*)/g, "<span class=\"comment\">$1$2<\/span>");

	var id = js_source_id;
	js_source_id ++;
	
	document.write("<div id=\"js_source" + id + "\" class=\"js_source\" onclick=\"func()\">");
	document.write("<div id=\"js_source_head" + id + "\" class=\"js_source_head\">ソースを開く（クリック）</div>");
	document.write("</div>");
	
	var element = document.getElementById("js_source" + id);
	element.onclick = function(){
		var head = document.getElementById("js_source_head" + id);
		head.innerText = "ソース";

		var foot = document.createElement('div');
		foot.className = "js_source_foot";
		foot.innerHTML = "<pre class = \"js_source_code\">" + str + "</PRE>";
		element.appendChild(foot);
		element.onclick = null;
	}
}


function AttachSearch(){
	var input = document.getElementById('input_search');
	var output = document.getElementById('search_result');
	var attention;

	input.onfocus = function(){
		if(attention){
			input.value = "";
			input.style.color = "#000000";
		}
		attention = false;
	}

	input.onblur = function(){
		if(!input.value){
			InputInit();
		}
	}

	function InputInit(){
		input.style.color = "#C0C0C0";
		input.value = "検索したいワードを入力";
		attention = true;
	}

	InputInit();

	var attached = false;

	google.load('search', '1', {language : 'ja'});
	google.setOnLoadCallback(function() {


		var customSearchControl = new google.search.CustomSearchControl('001801027233803208759:6nsu1ed9o_k');
		customSearchControl.setResultSetSize(google.search.Search.SMALL_RESULTSET);
		var options = new google.search.DrawOptions();
		options.setAutoComplete(true);

		var search;
		search = new GwebSearch();
		search.setSiteRestriction("001801027233803208759:nep_dhuvxxg");
		search.setUserDefinedLabel("AS1.0講座");
		customSearchControl.addSearcher(search);

		search = new GwebSearch();
		search.setSiteRestriction("001801027233803208759:rhm1kkoyu3m");
		search.setUserDefinedLabel("AS3.0講座");
		customSearchControl.addSearcher(search);

		search = new GwebSearch();
		search.setSiteRestriction("001801027233803208759:3opn0yurffy");
		search.setUserDefinedLabel("AIR講座");
		customSearchControl.addSearcher(search);

		search = new GwebSearch();
		search.setSiteRestriction("001801027233803208759:cmyjheigcis");
		search.setUserDefinedLabel("JS講座");
		customSearchControl.addSearcher(search);

		search = new GwebSearch();
		search.setSiteRestriction("001801027233803208759:tuiozqa3hts");
		search.setUserDefinedLabel("問答収集");
		customSearchControl.addSearcher(search);

		customSearchControl.draw('cse', options);

		options.setInput(input);
		customSearchControl.draw(output, options);

		customSearchControl.setSearchCompleteCallback(this,function(ctrl,searcher) {
			if(attached)	return;
			attached = true;
			
			var div = document.createElement("div");
			div.innerHTML = "検索結果";
			div.className = "search_head";
			
			NodeInsertBefore(div,output);
			output.className = "search_result";
		});

	}, true);
}

function AttachReferenceTab(params){
	var obj = new Object();
	obj.as  = {normal_color:"#CFDAE4", over_color:"#DFEAF4", label:"ActionScript1.0～2.0"	};
	obj.as3 = {normal_color:"#C6DDC6", over_color:"#D6EDD6", label:"ActionScript3.0"		};
	obj.air = {normal_color:"#D0BFBB", over_color:"#E0CFCB", label:"Adobe AIR"				};
	obj.js  = {normal_color:"#DCCAD5", over_color:"#ECDAE5", label:"JavaScript"				};
	
	
	var num = params.length;
	
	document.write('<div><table cellspacing="0"><tr>');
	
	var i;
	for(i=0;i<num;i++){
		var param = params[i];
		document.write('<td style="padding:0px;" valign="bottom">');
		if(i != 0){
			document.write('<a href="../' + param.folder + '/' + param.file + '" style="text-decoration: none;">');
			document.write('<div style="color:#000; padding:5px 20px; margin:0px 0px 0px 5px; font-size:12px; font-weight:bold; -webkit-border-radius: 10px 10px 0px 0px; -moz-border-radius: 10px 10px 0px 0px; border-radius: 10px 10px 0px 0px; background:' + obj[param.folder].normal_color + ';" onmouseover="this.style.background=\'' + obj[param.folder].over_color + '\'; this.style.padding=\'8px 20px\';" onmouseout="this.style.background=\'' + obj[param.folder].normal_color + '\'; this.style.padding=\'5px 20px\';">' + obj[param.folder].label + '</div>');
			document.write('</a>');
		}else{
			document.write('<div style="padding:8px 20px; font-size:14px; font-weight:bold; font-weight:bold; -webkit-border-radius: 10px 10px 0px 0px; -moz-border-radius: 10px 10px 0px 0px; border-radius: 10px 10px 0px 0px; background:' + obj[param.folder].normal_color + ';">' + obj[param.folder].label + '</div>');
		}
		document.write('</td>');
	}

	document.write('</tr></table></div>');
}

function AttachReferenceTabRoot(params){
	var obj = new Object();
	obj.as  = {normal_color:"#CFDAE4", over_color:"#DFEAF4", label:"ActionScript1.0～2.0"	};
	obj.as3 = {normal_color:"#C6DDC6", over_color:"#D6EDD6", label:"ActionScript3.0"		};
	obj.air = {normal_color:"#D0BFBB", over_color:"#E0CFCB", label:"Adobe AIR"				};
	obj.js  = {normal_color:"#DCCAD5", over_color:"#ECDAE5", label:"JavaScript"				};
	
	
	var num = params.length;
	
	document.write('<div><table cellspacing="0"><tr>');
	
	var i;
	for(i=0;i<num;i++){
		var param = params[i];
		document.write('<td style="padding:0px;" valign="bottom">');
		if(i != 0){
			document.write('<a href="./' + param.file + '" style="text-decoration: none;">');
			document.write('<div style="color:#000; padding:5px 20px; margin:0px 0px 0px 5px; font-size:12px; font-weight:bold; -webkit-border-radius: 10px 10px 0px 0px; -moz-border-radius: 10px 10px 0px 0px; border-radius: 10px 10px 0px 0px; background:' + obj[param.folder].normal_color + ';" onmouseover="this.style.background=\'' + obj[param.folder].over_color + '\'; this.style.padding=\'8px 20px\';" onmouseout="this.style.background=\'' + obj[param.folder].normal_color + '\'; this.style.padding=\'5px 20px\';">' + obj[param.folder].label + '</div>');
			document.write('</a>');
		}else{
			document.write('<div style="padding:8px 20px; font-size:14px; font-weight:bold; font-weight:bold; -webkit-border-radius: 10px 10px 0px 0px; -moz-border-radius: 10px 10px 0px 0px; border-radius: 10px 10px 0px 0px; background:' + obj[param.folder].normal_color + ';">' + obj[param.folder].label + '</div>');
		}
		document.write('</td>');
	}

	document.write('</tr></table></div>');
}

function AttachReceive(){
	document.write(
		'<div class="receive">' + 
		'<div class="receive_head">このページに関するご意見やご感想がありましたらどうぞ。（非公開）<input type="button" id = "receive_button" class = "receive_button" value="送信" onclick="ReceiveSend()"></div>' + 
		'<div class="receive_foot" >' + 
		'	<textarea id = "receive_text" class = "receive_text" rows="5"></textarea>' + 
		'	</td></tr></table>' + 
		'</div>' + 
		'</div>'
	);
}


function AttachSponsor(){
	document.write(
		'<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>'
	);
}

function XmlHttpRequestCreate() {
	var xmlhttp = null;
	if(window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	}else if(window.ActiveXObject) {
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlhttp;
}

function ReceiveSend(){
	
	var receive_url = "http://hakuhin.jp/receive/receive.cgi"
	
	var element_text = document.getElementById("receive_text");
	var element_buttion = document.getElementById("receive_button");

	// 処理済
	if(!element_text)				return;
	if(!element_buttion)			return;
	if(element_buttion.disabled)	return;

	// エラーチェック
	var input = ReceiveErrorCheck();
	if(input){
		input.focus();
		return;
	}

	// メッセージを送る
	var param = "";
	param += "type=receive";
	param += "&";
	param += "message=" + encodeURIComponent(element_text.value);
	param += "&";
	param += "url=" + encodeURIComponent(document.location);

	var request = XmlHttpRequestCreate();
	request.onreadystatechange = function() {
		if (request.readyState == 4){

			if(request.status == 200) {

				var ary = request.responseText.split("&");
				var res = new Object();
				for(var i=0;i<ary.length;i++){
					var p = ary[i].split("=");
					res[p[0]] = p[1];
				}

				if(res.result){
					alert("送信が完了しました。");
				}else{
					alert("CGI がエラーを返しました\n\n" + res.error);
					element_buttion.disabled = false;
				}
			}else{
				alert("送信に失敗しました。\n\nHTTP:" + request.status);
				element_buttion.disabled = false;
			}
		}
	}
	
	request.open("POST", receive_url, true);
	request.send(param);

	element_buttion.disabled = true;
}


function ReceiveErrorCheck(){
	var element_text = document.getElementById("receive_text");
	var element_buttion = document.getElementById("receive_button");

	if(!(element_text.value))	return element_text;

	return null;
}



function AttachMcsTopic(){
	
	try{
		var topic_url = "http://hakuhin.jp/mcs/flash/topic.cgi"

		var div = document.getElementById("menu_mcs");

		// なし
		if(!div)	return;
		if(div.attach_complete)	return;
		div.attach_complete = true;

		var request = XmlHttpRequestCreate();
		request.onreadystatechange = function() {

			if (request.readyState == 4){
				if(request.status == 200) {

					div.innerHTML =
						'<div style="width:150px; background:#FFFFFF; margin:0px auto; text-align:left; padding:5px;  line-height:1.2;">' +
						'回答求ム！<br><span style="font-size:13px;">Flashプログラミング全般の質問:</span><hr><span style="font-size:16px;">' + request.responseText + '</span></div>';
				}
			}
		}
	
		request.open("GET", topic_url, true);
		request.send();
	}catch(e){
	}
}

function AttachMenuNew(){
	var div = document.getElementById("menu_new");

	// なし
	if(!div)	return;
	if(div.attach_complete)	return;
	div.attach_complete = true;

	div.innerHTML = 
		'<div style="line-height:1.5; padding:10px; font-size:14px; text-align:left;">' +
		'PageExpand リリース！' +
		'<hr>' +
		'「Internet Explorer」 ' +
		'「Mozilla Firefox」' +
		'「Opera」用<BR>' +
		'<A HREF = "http://userscripts.org/scripts/show/86954" ><IMG src="http://hakuhin.jp/graphic/down/page_expand_00.png" class="image" width="150" height="134" alt="PageExpand"></A><BR>' +
		'<hr>' +
		'「Google Chrome」用<BR>' +
		'<A HREF = "https://chrome.google.com/extensions/detail/bjnobgdfhefpilajplncgjjeopakpepc?hl=ja" ><IMG src="http://hakuhin.jp/graphic/down/page_expand_00.png" class="image" width="150" height="134" alt="PageExpand"></A><BR>' +
		'<hr>' +
		'画像のリンクがあればサムネイル化してポップアップ表示します。<hr>Youtubeやニコニコ動画などのサイトへのリンクがあればインライン展開して動画を表示します。' +
		'</div>';
}


function AttachMenuPr(){
	var div = document.getElementById("menu_pr");

	// なし
	if(!div)	return;
	if(div.attach_complete)	return;
	div.attach_complete = true;

	var ary = [
		'<A HREF = "http://hakuhin.jp/mcs/flash/" ><IMG src="http://hakuhin.jp/link/mcs_flash_banner00.png" class="image" width = "180" height="400" alt="問答収集"></A><BR>',
		'<div style="line-height:1.5; padding:10px; font-size:14px;">アクションゲーム<BR>ぽとん<hr><A HREF = "http://www.vector.co.jp/soft/winnt/game/se488685.html" ><IMG src="http://hakuhin.jp/link/poton.png" class="image" width="160" height="120" alt="ぽとん"></A><hr>製作:meme6 さん</div>',
		'<div style="line-height:1.5; padding:10px; font-size:14px;">Flash 格闘ゲーム<BR>SCF v2.0<hr><A HREF = "http://2nd.geocities.jp/susinori2007/scf.html" ><IMG src="http://hakuhin.jp/link/scf.png" class="image" width = "160" height="120" alt="Super Chaos Fighters"></A><hr>チーム：海苔寿司</div>'
	];

	var id = Math.floor(Math.random() * ary.length);
	div.innerHTML = ary[id];
}

function AttachContentsMenu(){
	
	var params = [
		{id:"contents_menu_top"			,border_color:"#CB3232",bg_color:"#F4E1E1",info:"トップページです。更新情報など。"},
		{id:"contents_menu_game"		,border_color:"#CB8532",bg_color:"#F4EBE1",info:"Hakuhin と 日新礼符 が製作もしくは関わっている Flash ゲームの作品集です。"},
		{id:"contents_menu_movie"		,border_color:"#BBCB32",bg_color:"#F3F4E1",info:"Hakuhin と 日新礼符 が製作したFlashアニメーションや動画サイトに投稿したものを公開しています。"},
		{id:"contents_menu_as1"			,border_color:"#6CCB32",bg_color:"#E9F4E1",info:"Flash の ActionScrpt1.0 に関するリファレンス講座と、ゲームプログラミングや２Ｄ系の算術アルゴリズムなどを解説した２つの講座をミックス。各項目には、Fla ファイルのサンプルが付いています。"},
		{id:"contents_menu_as3"			,border_color:"#32CB4B",bg_color:"#E1F4E4",info:"Flash の ActionScrpt3.0 に関するリファレンス講座。ゲームプログラミングといいつつまだコンテンツとしてありません。"},
		{id:"contents_menu_air"			,border_color:"#32CBA1",bg_color:"#E1F4EE",info:"Flash と ActionScrpt3.0 を使った AIR アプリケーションを作る為のリファレンス講座です。"},
		{id:"contents_menu_js"			,border_color:"#32A5CB",bg_color:"#E1EFF4",info:"JavaScript のプログラミング講座ページです。Ajax や HTML5 など。"},
		{id:"contents_menu_flash_ext"	,border_color:"#324FCB",bg_color:"#E1E6F4",info:"自作の Flash 拡張機能(Flash Extension) をソースとともに公開しています。"},
		{id:"contents_menu_browser_ext"	,border_color:"#6832CB",bg_color:"#EAE4F5",info:"自作のブラウザ用拡張機能を公開しています。"},
		{id:"contents_menu_app"			,border_color:"#BB32CB",bg_color:"#F1E1F4",info:"Windows 用アプリケーションを公開しています。現在休止中です。"},
		{id:"contents_menu_mcs"			,border_color:"#CB3288",bg_color:"#F4E1EC",info:"Flashのプログラミングに関する質問や回答ができる投稿掲示板です。現在休止中です。"}
	];
	
	var element_info = null;
	function ElementInfoRemove(){
		if(element_info){
			element_info.parentNode.removeChild(element_info);
			element_info = null;
		}
	}
	function ElementInfoCreate(target,param){
		ElementInfoRemove();
		element_info = document.createElement("div");
		element_info.style.width = "270px";
		element_info.style.height = "150px";
		element_info.style.position = "absolute";
		element_info.style.Zindex = 1;
		element_info.style.backgroundColor = param.bg_color;
		element_info.style.padding = "15px";
		element_info.style.border = "4px " + param.border_color + " solid";
		element_info.style.borderRadius = element_info.style.WebkitBorderRadius = element_info.style.MozBorderRadius = "10px";
		element_info.style.boxShadow = element_info.style.webkitBoxShadow = element_info.style.MozBoxShadow = "4px 4px 4px #888";
		document.body.appendChild(element_info);
		
		var r = target.getBoundingClientRect();
		var p = ScrollGetPos();
		element_info.style.left = Math.floor(p.x + r.left - 300 - 17) + "px";
		element_info.style.top  = Math.floor(p.y + r.top  - 90 + 25) + "px";
		element_info.innerHTML = param.info;
		
		var element = document.createElement("div");
		element.style.width = "13px";
		element.style.height = "42px";
		element.style.position = "absolute";
		element.style.Zindex = 2;
		element.style.backgroundColor = param.bg_color;
		element.style.borderTop = "4px " + param.border_color + " solid";
		element.style.borderBottom = "4px " + param.border_color + " solid";
		element.style.left = "300px";
		element.style.top  = "61px";
		element_info.appendChild(element);
	}

	var i;
	var num = params.length;
	for(i=0;i<num;i++){

		(function(){

			var param = params[i];

			// エレメントを取得
			var element = document.getElementById(param.id);

			var old = 0;
			var pos = 0;
			var spd = 0;
			var tar = 0;

			// マウスオーバー
			element.onmouseover = function(){
				tar = -160;
				pos = -160;
				ElementInfoCreate(element,param);
			}
			// マウスアウト
			element.onmouseout = function(){
				tar = 0;
				spd -= 10;
				ElementInfoRemove();
			}

			setInterval(function(){
				var spd_add = 5.0;
				var spd_max = 50.0;
				var spd_dec = 0.5;
				var sub = tar - pos;
				sub *= spd_dec;
				if(sub > 0){
					spd += spd_add;
					if(spd > spd_max)	spd = spd_max;
					if(spd > sub)		spd = sub;
				}else{
					spd -= spd_add;
					if(spd <-spd_max)	spd =-spd_max;
					if(spd < sub)		spd = sub;
				}

				pos += spd;
				var v = Math.floor(pos + 0.5);
				if(old != v){
					element.style.backgroundPosition = v + "px 0px";
					old = v;
				}

			},1000/60);

		})();
	}
	
	
	
}


// ------------------------------------------------------------
// 「基点ノード」の直前に「新しいノード」を登録する関数
//
// 第01引数 新しいノード
// 第02引数 基点ノード
// 返り値 成功すれば true、失敗すれば false
// ------------------------------------------------------------
function NodeInsertBefore(node_new,node_ref){
	var parent = node_ref.parentNode;
	if(!parent)	return false;

	var node =  parent.insertBefore(node_new,node_ref);
	return (node == node_new);
}


// ------------------------------------------------------------
// スクロール位置を取得
// ------------------------------------------------------------
function ScrollGetPos(){
	return{
		x:document.body.scrollLeft || document.documentElement.scrollLeft,
		y:document.body.scrollTop  || document.documentElement.scrollTop
	};
}

