/*****************************************************************
/　●Ｓ２Ｗ標準JavaScriptライブラリ
/　　このファイルは株式会社Ｓ２Ｗが製造するシステムで標準的な
/　　JavaScript関数等を提供するライブラリです。
/　　このライブラリに関する著作権は基本的に株式会社Ｓ２Ｗに
/　　あります。
/
/    イベントのハンドリング、マウスドラッグ等の処理は、以下の
/    サイトを参考にしています。一部に関してはサンプルコードを
/    利用させていただいております。
/
/    Hotwired Webmonkey プログラミング JavaScript
/      http://hotwired.goo.ne.jp/webmonkey/programming/javascript/
/
/    AJAX関係の技術はSam Stephenson氏のprototype.jsを利用させて
/    いただいております。
/
/    利用させていただいたプロダクトの関係者の方々へここにお礼を
/　　申し上げます。
/                                              株式会社Ｓ２Ｗ
/
/　　Copyright (C) 2006 S2W Corporation. All Rights Reserved.
/****************************************************************/

/*****************************************************************
/ 各関数・クラスの定義を行います。
/****************************************************************/

//////////////////////////////////////////////////////////////////
// 関数名：doKeyDown (キーダウンイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：有効なイベントモードをチェックし、グローバル変数に格納し
//       ます。その後各イベントハンドラを定義します。
// 返値：true(有効なキー入力) false(無効なキー入力)
//////////////////////////////////////////////////////////////////
// キーコードが数値キーであるか？
function isNumkey(key,shift) {
	 return (((key>95)&&(key<106))
			||(((key>47)&&(key<58))&&(shift==false))
			||(key==8)
			||(key==13)
			||(key==37)
			||(key==39)
			||(key==46)
			||(key==9));
}
// キーダウンイベントハンドラ
function doKeyDown(e) {
	var k;
	var id;
	var classname;
	var shiftKey;

	// ブラウザ毎に違う処理を行う
	if (event_mode=="IE4+") {
    	e = window.event;
		// キーコードを取得
		k = parseInt(e.keyCode);
		// idを取得 
		id = e.srcElement.id;
		// classを取得 
		classname = e.srcElement.className;
		// シフトキーの取得
		shiftKey = e.shiftKey;
	} else {
		// キーコードを取得
		k = parseInt(e.keyCode);
		// idを取得 
		id = e.target.id;
		// classを取得 
		classname = e.target.className;
		// シフトキーの取得
		if (event_mode=="NN4") {
			shiftKey = ((e.modifiers & Event.SHIFT_MASK) 
						== Event.SHIFT_MASK);
		} else {
			shiftKey = e.shiftKey;
		}
	}
	// テキストボックスに設定したidに対応した戻り値をかえす。
	if (classname=="login" || classname=="password")
		return (((k>64)&&(k<91)) || isNumkey(k,shiftKey)); 
	else if (classname=="number" || classname=="date" || classname=="time")
		return (isNumkey(k,shiftKey));
	else if (classname=="mail")
		return (((k>64)&&(k<91)) || isNumkey(k,shiftKey) || (k==192) || (k==190)); 
	else if (classname=="tel" || classname=="fax")
		return (isNumkey(k,shiftKey) || (k==109) || (k==189));
	else {
		return true;
	}

}

//////////////////////////////////////////////////////////////////
// 関数名：doMouseClick (マウスクリックイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：有効なイベントモードをチェックし、グローバル変数に格納し
//       ます。その後各イベントハンドラを定義します。
// 返値：true(マウスクリックＯＫ) false(マウスクリックキャンセル)
//////////////////////////////////////////////////////////////////
// マウスクリックイベントハンドラ
function doMouseClick(e) {
	var bRClick;
	var type;
	var id;
	var classname;
	var shiftKey;
	var oTarget;

	// ブラウザ毎に違う処理を行う
	if (event_mode=="IE4+") {
    	e = window.event;
		// マウスボタンを判別
		bRClick = (e.button == 2);
		// idを取得 
		id = e.srcElement.id;
		// classを取得 
		classname = e.srcElement.className;
		// typeを取得 
		type = e.srcElement.type;
		// オブジェクトを取得
		oTarget = e.srcElement;
	} else {
		// idを取得 
		id = e.target.id;
		// classを取得 
		classname = e.target.className;
		// マウスボタンを判別
		bRClick = (event_mode=="NN4") ? (e.which > 1) : (e.button == 2);
		// typeを取得 
		type = e.target.type;
		// オブジェクトを取得
		oTarget = e.target;
	}
	// テキストボックスに設定したidに対応した戻り値をかえす。
	if (bRClick) {
		// 右ボタンクリック
		return true;
	} else { 
		switch (classname) {
			case "popup_close":
				closePopUp();
				break;
			case "popup_x_close":
				closePopUp();
				break;

			default:
				// 各アプリケーションで設定
				onClickFunction(classname,id,bRClick,type,oTarget);		
				break;


		}
			
		return true;
	}

}

//////////////////////////////////////////////////////////////////
// 関数名：doMouseDown (マウスダウンイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：マウスダウン時の処理を行います。
//       
// 返値：true(マウスクリックＯＫ) false(マウスクリックキャンセル)
//////////////////////////////////////////////////////////////////
// マウスダウンイベントハンドラ
function doMouseDown(e) {
	var bRClick;
	var type;
	var id;
	var classname;
	var shiftKey;
	var oTarget;

	var x;
	var y;


	// ブラウザ毎に違う処理を行う
	if (event_mode=="IE4+") {
    	e = window.event;
		// マウスボタンを判別
		bRClick = (e.button == 2);
		// idを取得 
		id = e.srcElement.id;
		// classを取得 
		classname = e.srcElement.className;
		// typeを取得 
		type = e.srcElement.type;
		// オブジェクトを取得
		oTarget = e.srcElement;
	} else {
		// idを取得 
		id = e.target.id;
		// classを取得 
		classname = e.target.className;
		// マウスボタンを判別
		bRClick = (event_mode=="NN4") ? (e.which > 1) : (e.button == 2);
		// typeを取得 
		type = e.target.type;
		// オブジェクトを取得
		oTarget = e.target;
	}
	// テキストボックスに設定したidに対応した戻り値をかえす。
	if (bRClick) {
		// 右ボタンダウン
		return true;
	} else { 
		switch (classname) {
			case "popup":
			case "popup_x":
				switch (event_mode) {
					case "NN4":
						document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP );
						document.onmousemove = moveMouseH;
						document.onmouseup = stopDragH;
						break;
					case "IE4+":

						//var dId = id.replace("drag","popup");
						//elementToDrag = document.getElementById(dId);
						elementToDrag = oTarget.parentNode.parentNode.parentNode.parentNode;

						oTarget.style.cursor = "move";

						x = parseInt(elementToDrag.style.left);
						y = parseInt(elementToDrag.style.top);
						deltaX = e.clientX - x;
						deltaY = e.clientY - y;
      
						document.onmousemove = moveMouseH;
						document.onmouseup = stopDragH;

						window.event.cancelBubble = true;
						break;
					case "W3C":
						//var dId = id.replace("drag","popup");
						//elementToDrag = document.getElementById(dId);
						elementToDrag = oTarget.parentNode.parentNode.parentNode.parentNode;
						
						oTarget.style.cursor = "move";

						x = parseInt(elementToDrag.style.left);
						y = parseInt(elementToDrag.style.top);
						deltaX = e.clientX - x;
						deltaY = e.clientY - y;

						document.addEventListener("mousemove", moveMouseH, true);
						document.addEventListener("mouseup", stopDragH, true);

						e.stopPropagation();
					break; 
				}

				return false;
				break;

		}
			
	}

}

//////////////////////////////////////////////////////////////////
// 関数名：moveMouseH (マウスムーブイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：マウスムーブ時の処理を行います。ここではドラッグ用に
//       マウスダウンされた時にハンドラがセットされます。
//       
// 返値：false
//////////////////////////////////////////////////////////////////
// マウスムーブイベントハンドラ
function moveMouseH(e) {

	if (event_mode=="IE4+") e = window.event;

	if ((event_mode == "W3C")||(event_mode == "IE4+")) {
		elementToDrag.style.left = (e.clientX - deltaX) + "px";
		elementToDrag.style.top = (e.clientY - deltaY) + "px"; 
	}

	if (event_mode=="W3C")
		e.stopPropagation();
	else if (event_mode=="IE4+")
		window.event.cancelBubble = true;

	return false;
}

//////////////////////////////////////////////////////////////////
// 関数名：stopDragH (マウスアップイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：マウスアップ時の処理を行います。ここではドラッグ用に
//       マウスダウンされた時にハンドラがセットされます。
//       マウスがアップされた時にドラッグが終わったことにします。
// 返値：false
//////////////////////////////////////////////////////////////////
// マウスアップイベントハンドラ
function stopDragH(e) {
   switch (event_mode) {
   case "NN4":
		document.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP );
        document.onmousemove = null;
        document.onmouseup = null;
		alert("Dragging not supported in NN4.");
   break;
   case "IE4+":
      e = window.event;

	  e.srcElement.style.cursor = "default";

      document.onmousemove = null;
      document.onmouseup = null;

      window.event.cancelBubble = true;
   break;
   case "W3C":
      document.removeEventListener("mouseup", stopDragH, true);
      document.removeEventListener("mousemove", moveMouseH, true);

	  e.target.style.cursor = "default";

      e.stopPropagation();
   break; }

   return false;
}

//////////////////////////////////////////////////////////////////
// 関数名：doMouseOver (マウスオーバーイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：マウスカーソルオン時の処理を行います。
//       
// 返値：true
//////////////////////////////////////////////////////////////////
// マウスオーバーイベントハンドラ
function doMouseOver(e) {
	var bRClick;
	var type;
	var id;
	var classname;
	var shiftKey;
	var oTarget;

	var x;
	var y;


	// ブラウザ毎に違う処理を行う
	if (event_mode=="IE4+") {
    	e = window.event;
		// idを取得 
		id = e.srcElement.id;
		// classを取得 
		classname = e.srcElement.className;
		// typeを取得 
		type = e.srcElement.type;
		// オブジェクトを取得
		oTarget = e.srcElement;
	} else {
		// idを取得 
		id = e.target.id;
		// classを取得 
		classname = e.target.className;
		// typeを取得 
		type = e.target.type;
		// オブジェクトを取得
		oTarget = e.target;
	}
	// テキストボックスに設定したidに対応した戻り値をかえす。
	switch (classname) {
		case "popup":
			return true;
			break;
		case "buttonB":
			oTarget.parentNode.style.backgroundImage = "url(/images/button1.png)";
			break;

	}
			

}

//////////////////////////////////////////////////////////////////
// 関数名：doMouseOut (マウスアウトイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：マウスカーソルアウト時の処理を行います。
//       
// 返値：true
//////////////////////////////////////////////////////////////////
// マウスアウトイベントハンドラ
function doMouseOut(e) {
	var bRClick;
	var type;
	var id;
	var classname;
	var shiftKey;
	var oTarget;

	var x;
	var y;


	// ブラウザ毎に違う処理を行う
	if (event_mode=="IE4+") {
    	e = window.event;
		// idを取得 
		id = e.srcElement.id;
		// classを取得 
		classname = e.srcElement.className;
		// typeを取得 
		type = e.srcElement.type;
		// オブジェクトを取得
		oTarget = e.srcElement;
	} else {
		// idを取得 
		id = e.target.id;
		// classを取得 
		classname = e.target.className;
		// typeを取得 
		type = e.target.type;
		// オブジェクトを取得
		oTarget = e.target;
	}
	// テキストボックスに設定したidに対応した戻り値をかえす。
	switch (classname) {
		case "popup":
			return true;
			break;
		case "buttonB":
			oTarget.parentNode.style.backgroundImage = "url(/images/button0.png)";
			break;

	}
			

}

//////////////////////////////////////////////////////////////////
// 関数名：doChange (チェンジイベントハンドラ)
// 引数：e：イベントオブジェクト
// 説明：フォームアイテムの内容が変更された時の処理を行います。
//       
// 返値：true
//////////////////////////////////////////////////////////////////
// チェンジイベントハンドラ
function doChange(e) {


/*
	var bRClick;
	var type;
	var id;
	var classname;
	var shiftKey;
	var oTarget;

	var x;
	var y;


	// ブラウザ毎に違う処理を行う
	if (event_mode=="IE4+") {
    	e = window.event;
		// idを取得 
		id = e.srcElement.id;
		// classを取得 
		classname = e.srcElement.className;
		// typeを取得 
		type = e.srcElement.type;
		// オブジェクトを取得
		oTarget = e.srcElement;
	} else {
		// idを取得 
		id = e.target.id;
		// classを取得 
		classname = e.target.className;
		// typeを取得 
		type = e.target.type;
		// オブジェクトを取得
		oTarget = e.target;
	}


	// 設定したidに対応した戻り値をかえす。
	switch (classname) {
		case "popup":
			break;
		case "buttonB":
			break;

	}
			
*/

}

//////////////////////////////////////////////////////////////////
// 関数名： createPopUp (ポップアップウィンドウを表示)
// 引数：id,URL
// 説明：ポップアップウィンドウを表示し、中に指定されたＵＲＬの
//       ページを表示します。ポップアップにはid番号が付与されます。
// 返値：true
//////////////////////////////////////////////////////////////////
function createPopup(id,sMode,url) {

	var myAjax = new Ajax.Request(
		url,
		{
			method: 'post',
			parameters: 'target_no=' + id + "&mode=" + sMode,
			onComplete: dispPopup
		});

	return true;
}

function dispPopup(originalRequest) {

	var sDoc = originalRequest.responseText;

	document.getElementById("popup_area").innerHTML = sDoc;

}

//////////////////////////////////////////////////////////////////
// 関数名： closePopUp (ポップアップウィンドウを閉じる)
// 引数：id
// 説明：指定したポップアップウィンドウを閉じます。
// 返値：true
//////////////////////////////////////////////////////////////////
function closePopUp(id) {
	//document.getElementById(id).innerHTML="";
	document.getElementById("popup_area").innerHTML="";
	return true;
}

//////////////////////////////////////////////////////////////////
// 関数名：initializeHttpRequest (XMLHttpRequestの初期化)
// 引数：なし
// 説明：各ブラウザのXMLHttpRequestを初期化して、インスタンス
//       を返します。
// 返値：XMLHttpRequestオブジェクトのインスタンス
//       XMLHttpRequestオブジェクトが使えない場合はnullを返します。
//////////////////////////////////////////////////////////////////
function initializeHttpRequest() {
	if(window.ActiveXObject){
		//WinIE用
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				return new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e2) {
				return null;
			}
		}
	} else if(window.XMLHttpRequest){
		//WinIE以外
		return new XMLHttpRequest();
	} else {
		//AJAXの使えないブラウザ
		return null;
	}

}


//////////////////////////////////////////////////////////////////
// 関数名：initializeEvents (イベントハンドラの初期化)
// 引数：e：イベントオブジェクト
// 説明：有効なイベントモードをチェックし、グローバル変数に格納し
//       ます。その後各イベントハンドラを定義します。
// 返値：true
//////////////////////////////////////////////////////////////////
function initializeEvents(e) {
	// イベントハンドラの形式を判断します。
	event_mode = (e) ? (e.eventPhase) ? "W3C" : "NN4" : 
		(window.event) ? "IE4+" : "unknown";

	// NN4の場合のイベントキャプチャー前処理
	if (event_mode == "NN4") {
		document.captureEvents(Event.KEYDOWN);
		document.captureEvents(Event.CLICK);
		document.captureEvents(Event.MOUSEDOWN);
		document.captureEvents(Event.MOUSEOVER);
		document.captureEvents(Event.MOUSEOUT);
		document.captureEvents(Event.CHANGE);
	}

	// イベントハンドラの設定
	document.onkeydown = doKeyDown;
	document.onclick = doMouseClick;
	document.onmousedown = doMouseDown;
	document.onmouseover = doMouseOver;
	document.onmouseout = doMouseOut;
	document.onchange = doChange;

	// プログラム別初期化関数の呼び出し。※要オーバーライド
	initFunction();

	return true;

}

/*****************************************************************
/ 以下はHTML読込時に実行され、グローバル変数の定義や
/ イベントハンドラの初期化等を行います。
/****************************************************************/
// グローバル変数の宣言 
// event_mode 変数は　イベントハンドラの形式を表します。
// この変数に対してinitializeEvents関数で判断して以下のイベント
// ハンドラの形式を格納します。
// NN4  : Netscape4.xの形式です。
// IE4+ : IE4.0以降の形式です。IE5,IE6も含みます。
// W3C  : Mozilla,Netscape6以降,FireFox,サファリ等、W3C標準の形式
var event_mode;		

// ポップアップのドラッグ用
var elementToDrag;
var deltaX;
var deltaY;

// ポップアップのタイトル用
var sgPopupTitle;

// 呼び出し用オブジェクト
// 各プログラム別のJavaScriptファイル内でオーバーライドして使用します。
function initFunction(){};		// 初期化時に実行します。
// マウスクリックに実行します。
function onClickFunction(classname,id,bRClick,type,oTarget){};	

// イベントの初期化を行います。
window.onload = initializeEvents;

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


