//**************************************************************************
// Copyright (C) 2008 System Design Development co.,ltd , All right reserved
//
// システム名      ：地域流通活性化支援情報化モデル事業
// サブシステム名  ：共通JavaScript
//==========================================================================
//version       変更日付        変更者          変更内容
//--------------------------------------------------------------------------
//1.00          2008/11/04      S.T             新規作成
//**************************************************************************
// IE での document へのアクセスを高速にする。
/*@cc_on _d=document;eval('var document=_d')@*/
//==========================================================================
// Window onload処理
//--------------------------------------------------------------------------
// 説明  :Window onload処理
//
// 引数  :
//
// 戻り値:
//
//==========================================================================
window.onload = function()
{
	document.body.onkeydown = EnterToTab;
}
//==========================================================================
// エンター->ｔａｂ動作変換
//--------------------------------------------------------------------------
// 説明  :エンターをｔａｂに変換
//
// 引数  :
//
// 戻り値:
//
//==========================================================================
function EnterToTab(){

	this.skip = [ 'submit', 'button', 'image', 'textarea' ];
	var type = window.document.activeElement.type;
	if( event.keyCode == 13 ) {
		for(var i in this.skip) {
			if(type == this.skip[i]) return;
		}
		event.keyCode = 9;
	}
}
//--------------------------------------------------------------------------
// 機能呼び出し処理
//--------------------------------------------------------------------------
// 説明  :機能呼び出し処理
//
// 引数  :src 呼び出し先パス
//
// 戻り値:
//
//--------------------------------------------------------------------------
function jsCmnCall( src ){
    parent.right.location.href = 'mnu_call.php?&linksrc=' + src;
}

//--------------------------------------------------------------------------
// 機能呼び出し処理
//--------------------------------------------------------------------------
// 説明  :機能呼び出し処理
//
// 引数  :src 呼び出し先パス
//
// 戻り値:
//
//--------------------------------------------------------------------------
function Call( src ){
    parent.location.href = 'mnu_call.php?&linksrc=' + src;
}

//--------------------------------------------------------------------------
// ボタンクリック
//--------------------------------------------------------------------------
// 説明  :機能呼び出し処理
//
// 引数  :機能区分, フォーム名
//
// 戻り値:
//
//--------------------------------------------------------------------------
function ButtonClick( func, form ){

	// 二重クリック防止
	if (window.document.readyState != null && window.document.readyState != 'complete'){
		return false;
	}

    document.forms[form].elements["FUNC"].value = func;
	document.forms[form].submit();
	cancelEvent();
}

//--------------------------------------------------------------------------
// メッセージ表示
//--------------------------------------------------------------------------
// 説明  :メッセージ表示
//
// 引数  :メッセージ, フォーム名
//
// 戻り値:
//
//--------------------------------------------------------------------------
function setMessage( msg, form ){

	if ( msg == "0" ) {
		return;
	}

	if ( msg ) {
		document.forms[form].elements['ANSER'].value  = 'yes';
		document.forms[form].submit();
	} else {
		document.forms[form].elements['ANSER'].value  = 'no';
		document.forms[form].elements['FUNC'].value = '';
	}

}

//--------------------------------------------------------------------------
// フォーカス設定
//--------------------------------------------------------------------------
// 説明  :フォーカス設定
//
// 引数  :フォーカスする項目, フォーム名
//
// 戻り値:
//
//--------------------------------------------------------------------------
function setFocus( item, form, idx ){

	switch (arguments.length) {
		case 1:
			item = arguments[0];
			form = "";
			idx  = "";
			break;
		case 2:
			item = arguments[0];
			form = arguments[1];
			idx  = "";
			break;
		case 3:
			item = arguments[0];
			form = arguments[1];
			idx  = arguments[2];
			break;
	}

	if ( item == "" ) {
		return;
	}

	if ( idx != "" ){
		document.forms[form].elements[item][idx].focus();
		if ( document.forms[form].elements[item][idx].type == 'text' ) {
			document.forms[form].elements[item][idx].select();
		}
	}else{
		document.forms[form].elements[item].focus();
		if ( document.forms[form].elements[item].type == 'text' ) {
			document.forms[form].elements[item].select();
		}
	}
}

//==========================================================================
// フォーカスのあるテキストフィールドの色を変える
//--------------------------------------------------------------------------
// 説明  :フォーカスのあるテキストフィールドの色を変える
//
// 引数  :
//
// 戻り値:
//
//==========================================================================
function FocusColor() {
   var colorful = new ColorfulInput;
   addOnLoad( colorful.set() );
}

function ColorfulInput() {

	// 対象外のエレメントタイプを設定
	this.skip  = [ 'submit', 'radio', 'checkbox', 'select-one', 'button', 'image' ];
	this.skip_id = [ 'calc_message', 'err_message' ];

	this.color = { 'blur': '', 'focus': '#fffacd' };

	this.set = function() {
		var tag    = document.getElementsByTagName('input');
		var taglen = tag.length;
		for (var i = 0; i < taglen; i++) {
			var elm = tag[i]

			if(!this._checkSkip(elm)) continue;
			if(!this._checkSkip_id(elm)) continue;

			this._setColor(elm, 'focus');
			this._setColor(elm, 'blur');
   		}
	}

	this._checkSkip = function(elm) {
		for(var i in this.skip) {
			if(elm.type == this.skip[i]) return false;
		}
		return true;
	}

	this._checkSkip_id = function(elm) {
		for(var i in this.skip_id) {
			if(elm.id == this.skip_id[i]) return false;
		}
		return true;
	}

	this._setColor = function(elm, type) {
		var color = this.color[type];
		var event = function() { elm.style.backgroundColor = color; };

		if(elm.addEventListener) {
			elm.addEventListener(type, event, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, event);
		} else {
			elm['on'+type] = event;
		}
	}
}

//==========================================================================
// Window onloadにモジュール追加
//--------------------------------------------------------------------------
// 説明  :Window onloadにモジュール追加
//
// 引数  :
//
// 戻り値:
//
//==========================================================================
function addOnLoad(func) {
    if (typeof window.onload == "function") {
        var predefined_onloadfunc = window.onload;
        window.onload = function() {
            predefined_onloadfunc();
            func();
        };
    } else {
        window.onload = func;
    }
};

//--------------------------------------------------------------------------
// コンボボックス OPTION値追加
//--------------------------------------------------------------------------
// 説明  :
//
// 引数  :コンボボックスオブジェクト, value, テキスト
//
// 戻り値:
//
//--------------------------------------------------------------------------
function addSelOption( selObj, strValue, strText )
{
    selObj.length++;
    selObj.options[ selObj.length - 1].value = strValue ;
    selObj.options[ selObj.length - 1].text  = strText;

}

//--------------------------------------------------------------------------
// コンボボックス作成
//--------------------------------------------------------------------------
// 説明  :配列からコンボボックスデータ作成 ( 1, 2, 3 | name1, name2, name3 )
//
// 引数  :selectオブジェクト, 先頭行value, 先頭行name, 設定データ
//
// 戻り値:
//
//--------------------------------------------------------------------------
function createSelection( selObj, headcode, headname, data )
{
    selObj.length = 0;
    addSelOption( selObj, headcode, headname );

  	ret   = data.split("|");
  	codes = ret[0].split(",");
	names = ret[1].split(",");

    for( var i=0; i < codes.length; i++)
    {
        addSelOption ( selObj , codes[i], names[i]  );
    }
}

//--------------------------------------------------------------------------
// コンボボックス作成（code+name表示）
//--------------------------------------------------------------------------
// 説明  :配列からコンボボックスデータ作成 ( 1, 2, 3 | name1, name2, name3 )
//
// 引数  :selectオブジェクト, 先頭行value, 先頭行name, 設定データ
//
// 戻り値:
//
//--------------------------------------------------------------------------
function createSelectionCD( selObj, headcode, headname, data )
{
    selObj.length = 0;
    addSelOption( selObj, headcode, headname );

  	ret   = data.split("|");
  	codes = ret[0].split(",");
	names = ret[1].split(",");

    for( var i=0; i < codes.length; i++)
    {
        addSelOption ( selObj , codes[i], codes[i]+"　"+names[i]  );
    }
}
//--------------------------------------------------------------------------
// 作物、加工品コンボボックス制御
//--------------------------------------------------------------------------
// 説明  :コンボボックスを表示しない（単価マスタで使用）
//
// 引数  :
//
// 戻り値:
//
//--------------------------------------------------------------------------
function ComboChange1()
{
	document.getElementById('CROPS_CODE').style.display = "block";
	document.getElementById('KAKOU_CODE').style.display = "none";
}
function ComboChange2()
{
	document.getElementById('CROPS_CODE').style.display = "none";
	document.getElementById('KAKOU_CODE').style.display = "block";
}

//==========================================================================
// 数値・金額・日付入力カンマ編集処理(テキストボックスの値のみ)
//--------------------------------------------------------------------------
// 説明  :数値・金額カンマ編集、日付スラッシュ処理(テキストボックスの値のみ)
//        inputタグに 数値の場合は、id="number", 金額の場合は、id="money"
//        日付の場合はid="date"と指定しておけばいいです。
//        金額はフォーカス取得時はカンマと￥マークがとられ、
//        フォーカス喪失時にカンマ編集します。
//        PHP側で値を使用する場合は、PHP側でカンマを取る処理をして下さい。
// 引数  :
//
// 戻り値:
//
//==========================================================================
function NumberAndDateInput() {

	// 対象のＩＤを設定
	this.id  = [ 'mone', 'numb', 'date', 'yymm', 'time' ];

	this.set = function() {
		var tag    = document.getElementsByTagName('input');
		var taglen = tag.length;
		for (var i = 0; i < taglen; i++) {
			var elm = tag[i];

			if(!this._checkSkip(elm)) continue;

			// 日付
			if(elm.id.substring(0,4) == 'date'){
				this._setDate(elm, 'blur');
			// 日付(年月)
			} else if(elm.id.substring(0,4) == 'yymm'){
				this._setDate_ym(elm, 'blur');
			//時分
			} else if(elm.id.substring(0,4) == 'time'){
				this._setDate_hm(elm, 'blur');
			// 数値、金額
			} else {
				elm.value = elm.value.split(",").join("")
				elm.value = elm.value.split("¥").join("")
				// 数値以外は０にする
				if ( isNaN( elm.value ) ) {
					elm.value = 0;
				}

				this._setNumber(elm, 'focus');
				this._setNumber(elm, 'blur');


				// 初期表示時設定
				var len, value, loopend;
				loopend = elm.value.length/3;
	    		for(len = 0; len < loopend; len++){
	        		elm.value = elm.value.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2");
	    		}

				// 金額の場合は¥マークを先頭に追加
	    		if ( elm.value.length > 0 && elm.id.substring(0,4) == 'mone' ) {
	    			elm.value = "¥" + elm.value;
	    		}

	    		elm.style.textAlign = 'right';
			}
   		}
	}

	this._checkSkip = function(elm) {
		// IDが数値、金額以外は処理しない
		for(var i in this.id) {
			if(elm.type != 'text') return false;
			if(elm.id.substring(0,4) == this.id[i]) return true;
		}
		return false;
	}

	this._setNumber = function(elm, type) {
		var evt;

		if ( type == 'blur' ) {
			evt = function()
			{
	       		elm.value = elm.value.split(",").join("")
	       		elm.value = elm.value.split("¥").join("")
	       		// 数値以外は０にする
	       		if ( isNaN( elm.value ) ) {
	       			elm.value = 0;
	       		}

			    var i, value, loopend;
			    loopend = elm.value.length/3;
	    		for(i = 0; i < loopend; i++){
	        		elm.value = elm.value.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2");
	    		}

				// 金額の場合は¥マークを先頭に追加
	    		if ( elm.value.length > 0 && ( elm.id.substring(0,4) == 'mone' ) ) {
	    			elm.value = "¥" + elm.value;
	    		}

				var tag    = document.getElementsByTagName('input');
				var taglen = tag.length;
				for (var i = 0; i < taglen; i++) {

					var elm2 = tag[i];
					if(elm2.type != 'text') {
						continue;
					}

					if( elm2.id.substring(0,4) != 'numb' && elm2.id.substring(0,4) != 'mone' || elm.name == elm2.name){
						continue;
					}

					elm2.value = elm2.value.split(",").join("")
					elm2.value = elm2.value.split("¥").join("")

					var len, value, loopend;
					loopend = elm2.value.length/3;
		    		for(len = 0; len < loopend; len++){
		        		elm2.value = elm2.value.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2");
		    		}

					// 金額の場合は¥マークを先頭に追加
		    		if ( elm2.value.length > 0 && elm2.id.substring(0,4) == 'mone' ) {
		    			elm2.value = "¥" + elm2.value;
		    		}
				}
	    	};
	    } else if ( type == 'focus' ) {
			evt = function()
			{
	       		elm.value = elm.value.split(",").join("")
	       		elm.value = elm.value.split("¥").join("")
	       		elm.select();
	    	};
	    }

		// イベント追加
		if(elm.addEventListener) {
			elm.addEventListener(type, evt, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, evt);
		} else {
			elm['on'+type] = evt;
		}
	}

	this._setDate = function(elm, type) {
		var evt;
		var date;
		var year;
		var month;
		var day;

		evt = function()
		{
			if	(elm.value.length <= 0 ){
				return false;
			}

			m_d = elm.value.split("/");

			if	(m_d.length	== 1 ){
				if ( elm.value.length <= 2 ) {
					date = new Date();
					year = date.getFullYear();
					month = date.getMonth() + 1;
					month = month.toString();
					day = m_d[0];
				} else if ( elm.value.length == 4 ) {
					date = new Date();
					year  = date.getFullYear();
					month = elm.value.substr(0, 2);
					day   = elm.value.substr(2, 2);
				} else if ( elm.value.length == 6 ) {
					date  = new Date();
					year  = date.getFullYear();
					year  = year.toString().substr(0, 2) + elm.value.substr(0, 2);
					month = elm.value.substr(2, 2);
					day   = elm.value.substr(4, 2);
				} else if ( elm.value.length == 8 ) {
					date  = new Date();
					year  = elm.value.substr(0, 4);
					month = elm.value.substr(4, 2);
					day   = elm.value.substr(6, 2);
				}
			}

			if	(m_d.length	>= 4 ){
				alert("日付の入力が正しくありません。");
				elm.focus();
				elm.select();
				this.reset();
				return false;
			}

			if	(m_d.length	==	2){
				date = new Date();
				year = date.getFullYear();
				month = m_d[0];
				day = m_d[1];
			}

			if	(m_d.length	==	3){
				year = m_d[0];
				month = m_d[1];
				day = m_d[2];

		        if(!isNaN(year)){
		        	if (year.length < 4 ) {
						date = new Date();
						var y = date.getFullYear();
						y = y.toString();
						year = y.substr(0, 4 - year.length) + year;
		        	}
		        }
			}

			if	(month.length == 1){
				month = "0" + month;
			}

			if	(day.length == 1){
				day = "0" + day;
			}

			var datestr = year + "/" + month + "/" + day;
			var datecheck = false;

			// 日付チェック
		    if(!datestr.match(/^\d{4}\/\d{2}\/\d{2}$/)){
		        datecheck = false;
		    }

		    var vYear = datestr.substr(0, 4) - 0;
		    var vMonth = datestr.substr(5, 2) - 1; // Javascriptは、0-11で表現
		    var vDay = datestr.substr(8) - 0;
		    // 月,日の妥当性チェック
		    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){
		        var vDt = new Date(vYear, vMonth, vDay);
		        if(isNaN(vDt)){
		            datecheck = false;
		        }else if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){
		            datecheck = true;
		        }else{
		            datecheck = false;
		        }
		    }else{
		        datecheck = false;
		    }


			if ( !datecheck ) {
				alert("日付の入力が正しくありません。");
				elm.focus();
				elm.select();
				return false;
			}

			elm.value = datestr;
		}

		// イベント追加
		if(elm.addEventListener) {
			elm.addEventListener(type, evt, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, evt);
		} else {
			elm['on'+type] = evt;
		}
	}

	this._setDate_ym = function(elm, type) {
		var evt;

		evt = function()
		{
			if	(elm.value.length <= 0 ){
				return false;
			}

			m_d = elm.value.split("/");

			if	(m_d.length	> 2 ){
				alert("年月の入力が正しくありません。");
				elm.focus();
				elm.select();
				return false;
			}

			if	(m_d.length	==	1){
				var date = new Date();
				var year = date.getFullYear();
				var month = m_d[0];
				var day = 1;
			}

			if	(m_d.length	==	2){
				var year = m_d[0];
				var month = m_d[1];
				var day = 1;

		        if(!isNaN(year)){
		        	if (year.length < 4 ) {
						var date = new Date();
						var y = date.getFullYear();
						y = y.toString();
						year = y.substr(0, 4 - year.length) + year;
		        	}
		        }
			}

			if	(month.length == 1){
				month = "0" + month;
			}

			if	(day.length == 1){
				day = "0" + day;
			}

			var dateym = year + "/" + month;
			var datestr = year + "/" + month + "/" + day;
			var datecheck = false;

			// 日付チェック
		    if(!datestr.match(/^\d{4}\/\d{2}\/\d{2}$/)){
		        datecheck = false;
		    }

		    var vYear = datestr.substr(0, 4) - 0;
		    var vMonth = datestr.substr(5, 2) - 1; // Javascriptは、0-11で表現
		    var vDay = datestr.substr(8, 2) - 0;
		    // 月,日の妥当性チェック
		    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31){
		        var vDt = new Date(vYear, vMonth, vDay);
		        if(isNaN(vDt)){
		            datecheck = false;
		        }else if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay){
		            datecheck = true;
		        }else{
		            datecheck = false;
		        }
		    }else{
		        datecheck = false;
		    }


			if ( !datecheck ) {
				alert("年月の入力が正しくありません。");
				elm.focus();
				elm.select();
				return false;
			}

			elm.value = dateym;
		}

		// イベント追加
		if(elm.addEventListener) {
			elm.addEventListener(type, evt, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, evt);
		} else {
			elm['on'+type] = evt;
		}
	}

	this._setDate_hm = function(elm, type) {
		var evt;

		evt = function()
		{
			if	(elm.value.length <= 0 ){
				return false;
			}

			m_d = elm.value.split(":");

			if	(m_d.length	> 2 ){
				alert("時刻の入力が正しくありません。");
				elm.focus();
				elm.select();
				return false;
			}

			//コロン無し
			if	(m_d.length	==	1){
				var hour = m_d[0].substr(0,2);
				var minute = m_d[0].substr(2,2);
			}

			//コロン有り
			if	(m_d.length	==	2){
				var hour = m_d[0];
				var minute = m_d[1];
			}

			if	(hour.length == 1){
				hour = "0" + hour;
			}

			if	(minute.length == 1){
				minute = "0" + minute;
			}

			var time = hour + ":" + minute;
			var timecheck = true;

			// 日付チェック
		    if(!time.match(/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/)){
		        timecheck = false;
		    }

			if ( !timecheck ) {
				alert("時刻の入力が正しくありません。");
				elm.focus();
				elm.select();
				return false;
			}

			elm.value = time;
		}

		// イベント追加
		if(elm.addEventListener) {
			elm.addEventListener(type, evt, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, evt);
		} else {
			elm['on'+type] = evt;
		}
	}
}

//--------------------------------------------------------------------------
// 項目クリア
//--------------------------------------------------------------------------
// 説明  :クリアする
//
// 引数  :
//
// 戻り値:
//
//--------------------------------------------------------------------------
function ClearItem( id ){
	document.getElementById(id).value = "";
	document.getElementById(id).focus();
}
//--------------------------------------------------------------------------
// イメージボタン切り替え
//--------------------------------------------------------------------------
// 説明  :押されている状態と普通の状態を切り替える
//
// 引数  :
//
// 戻り値:
//
//--------------------------------------------------------------------------
function imageButton(){

	this.set = function() {
		var tag    = document.getElementsByTagName('input');
		var taglen = tag.length;
		for (var i = 0; i < taglen; i++) {
			var elm = tag[i];
			if(!this._checkSkip(elm)) continue;
			this._dwnButton(elm, 'mousedown');
			this._upButton(elm, 'mouseout');
   		}
	}

	this._checkSkip = function(elm) {
		if(elm.type != 'image') return false;
		if(elm.id.substring(0,4) == 'imgb') return true;
		return false;
	}

	this._dwnButton = function(elm, type) {
		var evt;
		evt = function()
		{
			filename = elm.name;
			elm.src = "../../img/" + filename + "2.gif";
		}

		if(elm.addEventListener) {
			elm.addEventListener(type, evt, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, evt);
		} else {
			elm['on'+type] = evt;
		}
	}

	this._upButton = function(elm, type) {
		var evt;
		evt = function()
		{
			filename = elm.name;
			elm.src = "../../img/" + filename + ".gif";
		}

		if(elm.addEventListener) {
			elm.addEventListener(type, evt, false);
		} else if(elm.attachEvent) {
			elm.attachEvent('on'+type, evt);
		} else {
			elm['on'+type] = evt;
		}
	}

}

//--------------------------------------------------------------------------
// 選択画像イメージ表示
//--------------------------------------------------------------------------
// 説明  :選択した画像をimgにセットする。
//
// 引数  :objImg:input type=fileオブジェクト imgid:選択画像表示imgのid imgflg:画像変更フラグ
//
// 戻り値:
//
//--------------------------------------------------------------------------
function setThumNail( objImg, imgid, imgflg ){

	var path = "";
	var filepath = (objImg.value);


	// 拡張子JPG以外認めない
	if ( filepath != "" ) {
		if ( !filepath.match( /\.(jpg)$/i ) ) {
			alert( "jpgファイル以外は選択できません。" );
			return;
		}
	}

	/* 変更された場合、元のパス削除 */
	document.getElementById(imgflg).value = "1";

	filepath.replace("\\", "\"\\");

	/* ローカルパス */
	if ( filepath.substring(1,3) == ":\\" ) {
		path = "file:///"+filepath.substring(3);
	/* ネットワークパス */
	} else if( filepath.substring(0,2) == "\\\\" ) {
		path = "file:///"+filepath.substring(2);
	}

	if ( path == "" ) {
		document.getElementById(imgid).style.display = "none";
		document.getElementById(imgid).src = "";
	} else {
		document.getElementById(imgid).style.display = "inline";
		document.getElementById(imgid).src = path;
	}
}

//--------------------------------------------------------------------------
// 選択画像削除
//--------------------------------------------------------------------------
// 説明  :選択画像削除
//
// 引数  :spanid:input fileを囲んでるspanのID imgid:選択画像表示imgのid imgflg:画像変更フラグ
//
// 戻り値:
//
//--------------------------------------------------------------------------
function imageDelete( spanid, imgid, imgflg ){

	document.getElementById(imgflg).value = "1";
	document.getElementById(imgid).style.display = "none";
	document.getElementById(imgid).src = "";

	/* input fileはクリアできないので作り直す */
	var obj = document.getElementById( spanid );
	var spn = obj.innerHTML;
	obj.innerHTML = spn;

}

//--------------------------------------------------------------------------
// 帳票プログラム実行
//--------------------------------------------------------------------------
// 説明  :帳票作成phpを別窓で開く
//
// 引数  :form 自分のフォーム名 url 帳票php
//
// 戻り値:
//
//--------------------------------------------------------------------------
function printPDF( form, url ) {

	var action = document.forms[form].action;
	document.forms[form].action = url;
	document.forms[form].target = "print";
	document.forms[form].submit();
	document.forms[form].action = action;
	document.forms[form].target = "_self";
}

//--------------------------------------------------------------------------
// カンマ区切り
//--------------------------------------------------------------------------
// 説明  :カンマ区切り
//
// 引数  :num カンマ区切りしたい数値
//
// 戻り値:
//
//--------------------------------------------------------------------------
function addFigure(str) {
	var num = new String(str).replace(/,/g, "");
	while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
	return num;
}

//--------------------------------------------------------------------------
// イベントキャンセル
//--------------------------------------------------------------------------
// 説明  :イベントキャンセル
//
// 引数  :
//
// 戻り値:
//
//--------------------------------------------------------------------------
function cancelEvent() {
	var bi = new BrowserInfo();
	if (bi.ie) {
		event.returnValue = false;
	}
}

function BrowserInfo(userAgent) {

	/*****************************************
	 * Geckoエンジンバージョンチェッカー
	 * (返値 int 合致しない場合は-1)
	 *****************************************/
	this.geckoVersionChecker = function(){
		var num = this.ua.match(new RegExp("Gecko/20[0-9]{6}"));
		return ( num == null ) ? -1 : parseInt(String(num).replace("Gecko/",""));
	}

	/*****************************************
	 * WebKitバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.webkitVersionChecker = function(){
		var num = this.ua.match(new RegExp("WebKit/[0-9]{1,4}(\.[0-9]{1,2})?"));
		return ( num == null ) ? -1 : parseFloat(String(num).replace("Firefox/",""));
	}

	/*****************************************
	 * IEバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.ieVersionChecker = function(){
		var ienum = this.ua.match(new RegExp("MSIE [0-9]{1,2}\.[0-9]{1,3}"));
		return ( ienum == null ) ? -1 : parseFloat(String(ienum).replace("MSIE ",""));
	}


	/*****************************************
	 * Firefoxバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.firefoxVersionChecker = function(){
		var num = this.ua.match(new RegExp("Firefox/[0-9]{1,2}\.[0-9]{1,2}"));
		return ( num == null ) ? -1 : parseFloat(String(num).replace("Firefox/",""));
	}

	/*****************************************
	 * Operaバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.operaVersionChecker = function(){
		var num = this.ua.match(new RegExp("Opera[/ ][0-9]{1,2}\.[0-9]{1,2}"));
		return ( num == null ) ? -1 : parseFloat(String(num).substr(6));
	}

	/*****************************************
	 * Safariバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.safariVersionChecker = function(){
		var num = this.ua.match(new RegExp("Safari/[0-9]{1,4}\.[0-9]{1,2}"));
		return ( num == null ) ? -1 : parseFloat(String(num).replace("Safari/",""));
	}

	/*****************************************
	 * Netscapeバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.netscapeVersionChecker = function(){
		var num = this.ua.match(new RegExp("Netscape[0-9]?/[0-9]{1,2}\.[0-9]{1,3}"));
		return ( num == null ) ? -1 : parseFloat(String(num).replace(new RegExp("Netscape[0-9]?/"),""));
	}

	/*****************************************
	 * Mozillaバージョンチェッカー
	 * (返値 float 合致しない場合は-1)
	 *****************************************/
	this.mozillaVersionChecker = function(){
		var num = this.ua.match(new RegExp("Mozilla/[0-9]{1,2}\.[0-9]{1,2}"));
		return ( num == null ) ? -1 : parseFloat(String(num).replace("Mozilla/",""));
	}
	// -- コンストラクタ --

	this.ua = (userAgent) ? userAgent : navigator.userAgent;

	this.geckoVersion = this.geckoVersionChecker();
	this.gecko = (this.geckoVersion > 0 );

	this.webkitVersion = this.webkitVersionChecker();
	this.webkit = (this.webkitVersion > 0 );

	this.ieVersion = this.ieVersionChecker();
	this.ieMVersion = Math.floor(this.ieVersion);
	this.ie = ( this.ieVersion >= 3 );
	this.macie = ( this.ua.match("Mac_PowerPC") != null );

	this.firefoxVersion = this.firefoxVersionChecker();
	this.firefoxMVersion = Math.floor(this.firefoxVersion);
	this.firefox = (this.firefoxVersion > 0 );

	this.safariVersion = this.safariVersionChecker();
	this.safariMVersion = Math.floor(this.safariVersion);
	this.safari = (this.safariVersion > 85 );

	this.operaVersion = this.operaVersionChecker();
	this.operaMVersion = Math.floor(this.operaVersion);
	this.opera = (this.operaVersion > 1 );

	this.netscapeVersion = this.netscapeVersionChecker();
	this.netscapeMVersion = Math.floor(this.netscapeVersion);
	this.netscape = (this.netscapeVersion > 1 );

	this.mozillaVersion = this.mozillaVersionChecker();
	this.mozilla = ( !this.firefox && !this.opera && !this.ie && !this.netscape && this.mozillaVersion > 0 );

	this.toString = function(){
		return ("[ua:"+this.ua+"  netscapeVersion:"+this.netscapeVersion+"  operaVersion:" + this.operaVersion + "  webkitVersion:"+ this.webkitVersion +"  safariVersion:"+this.safariVersion+"  ieVersion:"+ this.ieVersion +"  macie:" + this.macie  + "  geckoVersion:" +this.geckoVersion + " firefoxVersion:" +this.firefoxVersion +"]" );
	}
}