//////////////////////////////////////////////////////////////////////
// hogemonia_mk2式 "get_server_time.js" 適当制作２０分えでぃしょん  //
//                Ver.0.0.0.1beta   <UTF-8BOM無版>                  //
//                      Webサーバ時間取得スクリプト                 //
//                       http://blog.mct-lab.com/                   //
//                   Copyright 2007 by HoGeMoNiA_mkII               //
//////////////////////////////////////////////////////////////////////

// ～～～実際に利用する際は以下コメントを消していただいて大丈夫です～～～
//               - １～７行目は消さないようお願いします -

// ～説明～
//
// このスクリプト"get_server_time.js"と"get_server_time.php"
// の２つのスクリプトを使用することで、Webサーバに設定されている時刻
//（今貴方が使っているPC<以下コメントでは"ローカルPC"と呼ぶ>の時刻ではない）
// をhttp経由で取得することができます。
// ただし、回線によるタイムラグやスクリプトの処理にかかる時間があるので、
// 絶対に正確な訳ではありません。１秒ずれることは無くとも、100ミリ秒ぐらいは
// ずれると思います。
// また、phpファイルを利用するので、利用にはphpが動くサーバが必要です。
//
// ～使用方法～
// このスクリプト「get_server_time.js」の設定項目SEV_php_urlを正しく設定した上
// get_server_time.phpをphpが利用可能なWebサーバにアップロードした後、
// 任意のHTMLファイルにこのjsファイル「get_server_time.js」を読み込ませると、
// グローバル変数SEV_T_plusminusにサーバ時間とローカルPC時間の時間差が
// ミリ秒の単位（1000分の1秒単位）で代入されるので、必要に応じて利用してください。
// 以下に使用例を載せて起きます。
// get_server_time.jsは読み込ませるHTMLファイルと同じ文字コードである必要があります。
// このスクリプトの初期状態での文字コードは３行目に書いてあります。
//
// ～使用例１～
// adhgm_clock.jsを使ってWebサーバ時刻を表示させる例
// get_server_time.phpをWebサーバにアップロードし、
// このget_server_time.jsの設定項目SEV_php_urlを正しく設定した上、
// adhgm_clock.jsを読み込ませるHTMLファイルと同じフォルダにこのget_server_time.jsを
// アップロードし、このget_server_time.jsをHTMLファイルの
// <HEAD>～</HEAD>の間に以下のソースを貼り付けることで読み込ませてください。
//
// <script type="text/javascript" src="get_server_time.js"></script>
//
// ～使用例２～
// Webサーバの時間をリアルタイム（っぽく）ページに表示させる例
// get_server_time.phpをWebサーバにアップロードし、
// このget_server_time.jsの設定項目SEV_php_urlを正しく設定した上、
// 以下のHTMLファイルをこのget_server_time.jsと同じフォルダに置いてください
//
// ============================ HTML ここから ==================================
//
// <HTML>
// <HEAD> 
// <TITLE>Webサーバの時計とローカルPCの時計</TITLE>
// <script type="text/javascript" src="get_server_time.js"></script>
// </HEAD> 
// <BODY onLoad="Clock()"> 
// <SCRIPT TYPE="text/javascript"><!-- 
// function Clock(){ 
//  now = new Date();     //ローカルPCの現在時刻を取得
//  server = new Date();  //サーバ時間のほうもひとまず現在時刻を取得
// 
//  server.setTime(server.getTime() - SEV_T_plusminus); //サーバとの時間差がグローバル変数SEV_T_plusminusから得ることが出来ます。
// 
//  clock1 = now.toLocaleString();     // ローカルPC時間 
//  clock2 = server.toLocaleString();  // サーバ時間
// 
//  if (SEV_T_plusminus < 0){jikansa_mojiretu = (SEV_T_plusminus * -1) + "ミリ秒遅れています";} //SEV_T_plusminusがマイナスのときはローカルPC時間がサーバ時間に対して遅れているときです。
//  else if (SEV_T_plusminus > 0){jikansa_mojiretu = SEV_T_plusminus + "ミリ秒進んでいます";} //SEV_T_plusminusがプラスのときはローカルPC時間がサーバ時間に対して遅れているときです。
//  else if (SEV_T_plusminus == 0){jikansa_mojiretu = "０ミリ秒進んでいます（時間差無し）";}
//  else {jikansa_mojiretu ="現在情報取得中です...";}
// 
//  document.hoge.local_pc_time.value = clock1; // ローカルPC時間
//  document.hoge.server_time.value = clock2;   // サーバ時間
//  document.hoge.jikansa.value = SEV_T_plusminus + "ミリ秒"; //サーバとの時間差
//  document.hoge.jikansa2.value = jikansa_mojiretu; //サーバとの時間差
//  document.hoge.local_pc_time_toumeibox.value = clock1; // ローカルPC時間
//  document.hoge.server_time_toumeibox.value = clock2; // サーバ時間
//  document.hoge.jikansa_toumeibox.value = SEV_T_plusminus + "ミリ秒"; //サーバとの時間差
//  document.hoge.jikansa2_toumeibox.value = jikansa_mojiretu; //サーバとの時間差
// 
// setTimeout("Clock()", 200); 
// } 
// // --></SCRIPT> 
// <FORM NAME="hoge">
// テキストボックスに表示するとこんな感じです。 <BR><BR>
// <INPUT TYPE="text" NAME="local_pc_time" SIZE="40" READONLY> ローカルPC時間<BR>
// <INPUT TYPE="text" NAME="server_time" SIZE="40" READONLY> サーバ時間<BR>
// <INPUT TYPE="text" NAME="jikansa" SIZE="40" READONLY> サーバとの時間差<BR>
// お使いのコンピュータはWebサーバの時間より<INPUT TYPE="text" NAME="jikansa2" SIZE="40" READONLY><BR>
// <BR>
// テキストボックス内に表示させたくない人は、以下のようにテキストボックスを透明化すると、<BR>
// 如何にも、時計の文字だけが表示されているように見えます。<BR><BR>
// ローカルPC時間： <INPUT TYPE="text" NAME="local_pc_time_toumeibox" SIZE="40" STYLE="background-color:transparent;border:none;" READONLY><BR>
// サーバ時間： <INPUT TYPE="text" NAME="server_time_toumeibox" SIZE="40" STYLE="background-color:transparent;border:none;" READONLY><BR>
// サーバとの時間差： <INPUT TYPE="text" NAME="jikansa_toumeibox" SIZE="40" STYLE="background-color:transparent;border:none;" READONLY><BR>
// お使いのコンピュータはWebサーバの時間より<INPUT TYPE="text" NAME="jikansa2_toumeibox" SIZE="40" STYLE="background-color:transparent;border:none;" READONLY><BR>
// </FORM>
// </BODY>
// </HTML>
//
// ============================ HTML ここまで ==================================
//
// このスクリプトはjavascriptを普段ほとんどjavascriptを触らない、
// かつ、真面目にjavascriptを勉強したことがない人間ことhogemonia_mk2が
// ノリと気分と成り行きで、実にテキトーに（「適当」ではない）、
// こんな感じで動くんじゃない？うん、多分。とかなんとか言いつつリファレンス片手に
// ２０分で書いたものです。
// また、本スクリプトを使用して起きた不具合や問題について、
// hogemonia_mk2は一切責任を負いませんので、ご注意ください。
// なお、このスクリプトはhogemonia_mk2作、これまた、いい加減に５分チョイで、
// 実に貧弱な持ち合わせのphpの知識で作られた"get_server_time.php"の使用を
// 前提として書いています。
//
// このスクリプトは修正BSDライセンスです。なので改変・再配布はご自由にどうぞ。
// ただし、著作権表記＆アドレスは消さないようお願いしますね。
// 事後報告でもいいので、ご一報いただけたら嬉しいです。
//
// 質問等ありましたら、http://blog.mct-lab.com/rnote.php?u=contact/contact.htm
// のコンタクトフォームからご連絡ください。
//
// また、このjsファイルを作る際に以下のサイトにお世話になりました。
// この場を借りてお礼申し上げます。ありがとうございました。
//
//  Ajaxを勉強しよう : http://www.openspc2.org/JavaScript/Ajax/Ajax_study/
//
// ～説明ここまで～

// ～～～実際に利用する際は以上コメントを消していただいて大丈夫です～～～
//               - １～７行目は消さないようお願いします -


//get_server_time.phpの場所を指定（状況に応じて変更してください）
var SEV_php_url = "get_server_time.php"; //Ajax自体の制限により、このjsファイルを置くWebサーバと同じドメインのphpしか指定できません。



//以下、特に変更の必要なし。汚いスクリプトですいません...
function loadTimeData(){
	TimeDATA_httpObj = createXMLHttpRequest(getTimeDATA);
	if (TimeDATA_httpObj)
	{
		TimeDATA_httpObj.open("GET",SEV_php_url,true);
		TimeDATA_httpObj.send(null);
	}	
}

function getTimeDATA()
{
		if ((TimeDATA_httpObj.readyState == 4) && (TimeDATA_httpObj.status == 200))
		{
			date_moto_data = TimeDATA_httpObj.responseText;
			date_local  = new Date();
			temp_server = date_moto_data.match(/\S+/g); //get_server_time.phpから得られるデータをそれぞれ、年、月、日、時、分、秒、マイクロ秒に分離して、temp_server配列に放り込む。
			date_server = new Date(temp_server[0],temp_server[1]-1,temp_server[2],temp_server[3],temp_server[4],temp_server[5],Math.round(temp_server[6]*1000,0)); //マイクロ秒の部分は細か過ぎるので適当に四捨五入して使用。
			SEV_T_plusminus = date_local.getTime() - date_server.getTime(); //毎回（毎秒ごとに）その時の時間をサーバから得る方法では、サーバに激しく負荷がかかるので、ローカル時間とサーバ時間の時間差を求め、以後はその時間差を元にローカル時間からサーバ時間を計算して表示。
		}
}

function createXMLHttpRequest(cbFunc)
{
	var XMLhttpObject = null;
	try{
		XMLhttpObject = new XMLHttpRequest();
	}catch(e){
	try{
		XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");
		}catch(e){
			return null;
				}
			}
		}
	if (XMLhttpObject) XMLhttpObject.onreadystatechange = cbFunc;
	return XMLhttpObject;
}

var SEV_T_plusminus;
getTimeDATA_temp_dd = new Date();
SEV_php_url = SEV_php_url + "?" + getTimeDATA_temp_dd.toString();
loadTimeData();
