/* 
	nas_tools.js お道具箱汎用データ操作・サービス 関数
イロイロ、共通でつかえる奴
基本的にWWWブラウザに依存するので、Javascript(ECMA-262)汎用系と切り分けます。
ただし。呼び出しの弁のため、nasオブジェクトのメソッドであることは変わらず。
このスクリプトをロードする前にnasオブジェクトの初期化は行うこと。

nas.updateBk() {
	エレメントの値をすべてバックアップ(正常な処理の最後に呼ぶ)
nas.Push_Log(str) {Log = Log.concat([str])}
	ログファイルへのプッシュ
nas.sliderVALUE(chnk)
	マウスドラグによるインプット値の編集開始
nas.sliderOFF()
	マウスドラグによるインプット値の編集終了

nas.MVSlider_NS(event)
nas.MVSlider_IE()
	マウススライダが呼び出すメソッド

nas_sizeToContent()
	ウィンドウサイズをあわせる一応汎用品(あやしい)

===================メッセージ (現在未使用）
フレームレートがロックされているので、リンクは解除できません。
解像度がロックされているので、リンクは解除できません。
ゼロは設定しないでください。
負の値は設定できません。
メッセージは不要かも
フラグを付けてプリファレンスで選択させるか?
===============================
*/
try {
//エレメントの値をすべてバックアップ(正常な処理の最後に呼ぶ)
function updateBk() {
	for (n = 1 ; n< BkValue.length ; n++) {
	elName = ElementName[n];
	BkValue[n] = document.nasExchg.elements[elName].value }
};

/*
	ログ関連
あまりつかってない
*/
//	ログ配列を初期化（）
Log_ = new Array() ;
nas.Log=Log_;
function Push_Log_(str) {this.Log = this.Log.concat([str])}
	nas.Push_Log	=Push_Log_	;//
//	ログ 初期化してみる
nas.Push_Log( "Program Started " + nas.VER);
nas.Push_Log( Date() );
nas.Push_Log( "  FrameRate" + nas.FRATE + "(" + nas.FRATE + ")");
//nas_Push_Log( "  Start Mode  [" + MODE + "]" );
//

/*
	マウスバリスライダ
書いてはみたが
これは ひょっとしてなんかのパテントにふれる様な気がしてならない。
要調査
これを使うinputオブジェクトは、以下の書式でsliderVALUEを呼ぶ
sliderVALUE([event,エレメント名,上限,下限,桁数(,初期値)]);
初期値の挿入とロック時の動作を追加TC関連の拡張まだ(04.06.06)
*/
function sliderVALUE_(chnk) {
//配列で受け渡し [イベント,エレメントID,上限,下限,桁数(,デフォルト値)]
	this.Xoffset = chnk[0].screenX;

	this.slfocus = document.getElementById[chnk[1]];
	this.slmax = 1*chnk[2];
	this.slmin = 1*chnk[3];
	this.slstp = 1*chnk[4];
//タイプが、テキスト以外だったりロックされていたらモード変更なしでリターン
if (this.slfocus.disabled == true || this.slfocus.type != "text" ) {return false}
//基準値取得
if (isNaN(this.slfocus.value)) {
	if (chnk.length == 6){this.baseValue = 1*chnk[5]} else {this.baseValue = slmin}
} else {
	this.baseValue = 1 * (this.slfocus.value);
}
//該当するエレメントのオンチェンジを保留してスライダモードに入る
	this.slfocus.blur();
//	document.nasExch.elements[slfocus].onchange = '';
switch (navigator.appName) {
case "Opera":
case "Microsoft Internet Explorer":
	document.body.onmousemove = this.MVSlider_IE;break;
case "Netscape":
	document.body.onmousemove = this.MVSlider_NS;break;
default:	return;
}
	document.body.onmouseup = sliderOFF;
}
	nas.sliderVALUE	=	sliderVALUE_	;

function sliderOFF_() {
//	document.nasExchg.elements[slfocus].focus();
	document.body.onmousemove = null;
	document.body.onmouseup = null;
//スライダモード終了して該当するエレメントのオンチェンジを復帰
//	this.slfocus.onchange = 'CHK_VALUE';
//スライダの値が前の値と異なっていた場合のみ更新
if (this.slfocus.value != this.baseValue) {this.CHK_VALUE()}
	return;
}
	nas.sliderOFF	=	sliderOFF_	;

function MVSlider_NS_(event) {
	this.diffValue = event.screenX - this.Xoffset;
	if (this.diffValue >= 0) {Flgl = 1} else {Flgl= -1}
//ガンマかけて値をとる
	var newValue = this.baseValue + (Flgl * (Math.pow(this.diffValue/100,2)*100));
//上限下限でおさえる
	if (newValue > this.slmax) {newValue = this.slmax} {
		if (newValue < this.slmin) {newValue = this.slmin}
	}
//ステップで桁だし
	var exN = Math.pow(10,this.slstp);
	newValue = Math.floor(newValue * exN)/exN;
if(this.slfocus.value != newValue) {
	this.slfocus.value = newValue ;
}
}
	nas.MVSlider_NS	=	MVSlider_NS_ ;


function MVSlider_IE_() {
	this.diffValue = event.screenX - this.Xoffset;
	if (this.diffValue >= 0) {Flgl = 1} else {Flgl= -1}
//ガンマかけて値をとる
	newValue = this.baseValue + (Flgl * (Math.pow(this.diffValue/100,2)*100));
//上限下限でおさえる
	if (newValue > this.slmax) {newValue = this.slmax} {
		if (newValue < this.slmin) {newValue = this.slmin}
	}
//ステップで桁だし
	var exN = Math.pow(10,this.slstp);
	newValue = Math.floor(newValue * exN)/exN;
if(this.slfocus.value != newValue) { this.slfocus.value = newValue }
}
	nas.MVSlider_IE	=	MVSlider_IE_	;//
//マウスバリスライダ関連終了

//ウインドウをコンテンツにフィットさせる関数、引数は特になし

function nas_sizeToContent(){
if (! MSIE){
//	if(ckUA()[1]!='MSIE'){}
//モジラ系の場合は、sizeToContent()を呼ぶだけ。
	try{sizeToContent();}catch(e){return;
	//alert(e);
	}
	}else{
//IE系の場合は大雑把にマッチ
//このプロパティはinnerWidth/Height と等価だった
		try{
	var WinW=document.getElementById("uiTable").clientWidth+60;
	var WinH=document.getElementById("uiTable").clientHeight+120;
	window.resizeTo(WinW,WinH);
		}catch(e){
	return e;
//	alert(e);
		}
	}
}
/*	cssルールセットから値を取得する関数
		nasメソッド
	nas.getCssRule( セレクタ, プロパティ, シートインデックス )
セレクタ	cssのセレクタを指定
プロパティ	プロパティを置く
シートインデック	"screen"=0 "print"=1
*** 	このメソッドは必0番にスクリーン用スタイルシート・1番にプリント用スタイルシートが
	ロード済みであることが前提条件　注意！！ IDの方が良いかも
*/
nas.getCssRule=function( selector, property, sheetindex ) {
	selector = selector.toLowerCase( )
	if( sheetindex == undefined ) sheetindex = 0;
	if( property.indexOf( "-" ) != -1 ) property = property.camelize( );
	var rules = document.styleSheets[ sheetindex ].rules //IE
	|| document.styleSheets[ sheetindex ].cssRules; //Mozilla

  for( var i = rules.length - 1; i >= 0; i-- ) {
      var rule = rules[i];
      if( rule.selectorText.toLowerCase( ) != selector
      || rule.style[ property ] == "" ) continue;
      return rule.style[ property ];
  }

  return null;
}

/*	cssにルールセットを追加する関数
		nasのメソッド
	nas.addCssRule( セレクタ, プロパティ, 適用範囲 )
セレクタ	cssのセレクタを指定
プロパティ	プロパティを置く
適用範囲	"screen""print"または"both"(0,1 or both)
*** 	このメソッドは必0番にスクリーン用スタイルシート・1番にプリント用スタイルシートが
	ロード済みであることが前提条件　注意！！ IDの方が良いかも
 */

nas.addCssRule= function( selector, property, region ) {
	if(! region){region="both"}

//	if(( document.styleSheets[0].addRule)&&(! Safari) ){}
//Safari３は、addRuleとinsertRule両方のメソッドを持っているが、Mozilla互換っぽいので判定変更
	if(MSIE){
//IE
switch(region){
case	"both":
	document.styleSheets[0].addRule( selector, "{" + property + "}" );
	document.styleSheets[1].addRule( selector, "{" + property + "}" );
	break;
case	"screen":
	document.styleSheets[0].addRule( selector, "{" + property + "}" );
	break;
case	"print":
	document.styleSheets[1].addRule( selector, "{" + property + "}" );
	break;
default:
	document.styleSheets[region].addRule( selector, "{" + property + "}" );
}
	return;
	}else{
		if( document.styleSheets[0].insertRule ){
//Mozilla
switch(region){
case	"both":
	document.styleSheets[0].insertRule( selector + "{" + property + "}", document.styleSheets[0].cssRules.length );
	document.styleSheets[1].insertRule( selector + "{" + property + "}", document.styleSheets[1].cssRules.length );
	break;
case	"screen":
	document.styleSheets[0].insertRule( selector + "{" + property + "}", document.styleSheets[0].cssRules.length );
	break;
case	"print":
	document.styleSheets[1].insertRule( selector + "{" + property + "}", document.styleSheets[1].cssRules.length );
	break;
default:
	document.styleSheets[region].insertRule( selector + "{" + property + "}", document.styleSheets[region].cssRules.length );
}
	return;
		}else{	return false;}
}}

//お道具箱汎用データ操作関数群オワリ
} catch(err){alert(err.toString());}
