/*	りまぴん・ユーティリティー関数群	*/
/*						*/
/*						*/
/*						*/
/*						*/
//フットスタンプクリア
clearFS=function(){
	if(FootMark){xUI.footstampClear()};
};
//タイムライン消去
clearTL=function(flg){
	var bkPos=xUI.Select.join("_");//現在のカーソルを記録
//フラグによる指定があった場合タイムラインの選択状態を調整する
switch(flg){
case	"all"	:xUI.selectCell("0_"+xUI.Select[1]);xUI.selection((XPS.xpsBody.length-1)+"_"+xUI.Select[1]);break;
case	"left"	:xUI.selection("0_"+xUI.Select[1]);break;
case	"right"	:xUI.selection((XPS.xpsBody.length-1)+"_"+xUI.Select[1]);break;
};
//消去対象を選択状態から取得
	var minID=(xUI.Selection[0]<0)?xUI.Select[0]+xUI.Selection[0] : xUI.Select[0];
	var maxID=(xUI.Selection[0]<0)?xUI.Select[0]+1 : xUI.Select[0]+xUI.Selection[0]+1;

	for(tId=minID;tId<maxID;tId++){
		xUI.selectCell(tId+"_0");//冒頭データに移動
		xUI.selection(tId+"_"+(XPS.duration()-1));//タイムライン末尾を選択
		xUI.cut();	//削除
//		if (xUI.edchg){xUI.put(this.eddt);}//更新
		if(xUI.getid("Selection")!="0_0") {xUI.selection();xUI.spinHi();};
//		選択範囲解除
		if(xUI.Focus) {xUI.focusCell();};
	};
	xUI.selectCell(bkPos);	//バックアップ位置へ復帰
	document.getElementById("iNputbOx").focus();
};
//タイムライン整形
/*
	タイムラインを標準シート表記にリフォーマットします。
	標準シート表記は以下のとおり
timing
-タイムシートセルには、そのフレームで使用する動画番号を記述すること。
-同じ動画番号が連続して記述される場合は動画番号を重複記述しないで縦線をひいて省略すること。
-動画を使用しないシートセルには「×」印を打って「カラセル」である事を明示すること。
-カラセルが連続する場合は波線で連続を表記すること。
-2コマおよび3コマ連続して同じ動画番号またはカラセルを指定する場合は、記述の簡略化と読みやすさの為、連続の縦線または波線自体を省略すること。
-空白コマおよび縦線で同要素の省略をしたシートセルは、動画入れ替えと紛らわしくない場合に限り注釈を書き込むことが出来る。
-原画番号は可能な限り丸囲い(または同等の強調表示)をする。
-数字の1は縦棒線と紛らわしいので原画番号でなくとも丸囲い（または相当する強調表示）をする。
dialog
-台詞は、ダイアログ開始マーカと終了マーカーの間に置かれる
-ダイアログ開始マーカーはダイアログ開始前のフレームに置き、ダイアログ終了マーカーはダイアログ区間の後方フレームに置かれる。
-テキスト表現のマーカーは。「カギカッコ」"引用符" 又は　[-|_]　3個以上の連続とする。シート上の表記は、これらを横線に置き換える。
-ダイアログ内の注釈データは(丸括弧)でエスケープされる
-マーカー外の記述は、すべて注釈である
-マーカー内の記述は、注釈以外は一連の内容テキストとして配置される。空白及びヌル文字は取り除かれる。
camera
-以下の有効記述がある
	-登録されたキーフレーム（値を持つ）角括弧による指定がない場合はこれを補う
	-[角括弧]でキーフレーム指定が行われた記述
	-区間開始マーカー(ダイアログマーカーと異なり区間内に含まれる)　▼▽（慣例的に三角が標準）
	-区間終了マーカー(ダイアログマーカーと異なり区間内に含まれる)　▲△
	-中間値生成記述　|(バーチカルバー)　・（中黒）-(ハイフン)
-有効記述以外はすべて注釈でありデータ解析上の意味は前方データの継承。
-データ成形上は、区間開始マーカーと終了マーカーの間に記述がない場合、シングルフレームの補間を補う
-

関数の動作(2007/06/30現在)
動作指定が無い場合は、現在フォーカスのあるタイムラインを処理する
引数"all"がある場合はシート全体を処理

タイムライン種別を本格的に実装開始したので、フォーマッタはタイムライン種別を認識して動作を区分すること。
上記の動作は"timing"タイムラインに限定すること

 */

reformatTimeline=function(flg){

function reformatTLC(id){
//===camerawork===
//ターゲットタイムライン
	var myTargetBody=XPS.xpsBody[id];//指定タイムラインのデータを配列参照
	var myDestTLBody=new Array();//編集用カラ配列
	var bufNoChange=new Array(); var bufModified=new Array();//編集バッファ
	var fix=true;//中間値生成区間か否かのフラグ　生成区間の間は未記入セルに中間値生成記号を補間する？
//第一フレームが有効記述か否か確認 カメラワークなので開始フレームが無効記述であった場合はブランクでなく「保留」
	var referenceValue=(myTargetBody[0].match(/^(\[.+\]|[▽▼])$/))?RegExp.$1:"res";

	if(referenceValue=="res"){
		myDestTLBody.push(myTargetBody[0]);
	}else{
		if(myTargetBody[0].match(/^[▽▼]$/)){fix=false};
		myDestTLBody.push(myTargetBody[0]);
	};
//第二フレームからデータループ
	for(var fidx=1;fidx<myTargetBody.length;fidx++){
//	評価値取得
		var evValue=myTargetBody[fidx];

		bufNoChange.push(myTargetBody[fidx].replace(/^(x|0|〆|Ｘ|ｘ)$/i,"|"));//非加工バッファを作成
//	リファレンスと一致
		if((evValue=="")&&(! fix)){
			var modifiedData=(myTargetBody[fidx])?myTargetBody[fidx]:"|";
			if(modifiedData=="1"){modifiedData="(1)"};//これ一括調整関数がほしい
			if((referenceValue=="blank")&&(modifiedData=="|")){
				modifiedData=":";//置き替え
			};
			bufModified.push(modifiedData);
//	同値カウンタ加算
			sVC++;
		}else{
			var modifiedData=myTargetBody[fidx];
			if(modifiedData=="1"){
				modifiedData="(1)";
};
			bufModified.push(modifiedData.toString());
//	シートの値が変更されたのでバッファをフラッシュする
			if(sVC>myLimit){
//	同値カウンタが規定値以上(4以上)なら加工済みバッファでフラッシュ
				myDestTLBody=myDestTLBody.concat(bufModified);
//myDestTLBody.push("mfd");
			}else{
//	同値カウンタが規定値より下(3以下)なら非加工バッファでフラッシュ
				myDestTLBody=myDestTLBody.concat(bufNoChange);
//myDestTLBody.push("nch");
			};
//	同値カウンタリセット
//	サブバッファ初期化
		bufNoChange.length=0; bufModified.length=0;
//	基準値更新
		referenceValue=evValue;
		};
	};
//	全ループ終了後に残った編集バッファをフラッシュする
	if(sVC>0){
		if(sVC>myLimit){
//	同値カウンタが規定値以上(4以上)なら加工済みバッファでフラッシュ
			myDestTLBody=myDestTLBody.concat(bufModified);
		}else{
//	同値カウンタが規定値より下(3以下)なら非加工バッファでフラッシュ
			myDestTLBody=myDestTLBody.concat(bufNoChange);
		};
	};
	return myDestTLBody;
};

function reformatTL(id){
//===timing===
//　分岐であらかじめ判定するのでプロパティチェックは不要に　2013/06/22
//現状ではidがセル範囲外であった場合に中断するトラップが必要
//	if( id<0 || id>= XPS.layers.length ){return false};
//タイミングタイムラインでない場合は、処理中断
//	if(XPS.layers[id+1]["option"]!="timing"){return false};
//ターゲットタイムライン
	var myTargetBody=XPS.xpsBody[id];//指定タイムラインのバルクデータを配列で参照
	var myDestTLBody=new Array();//編集用カラ配列
	var bufNoChange=new Array(); var bufModified=new Array();//編集バッファ
	var sVC=0;//同値カウンタ
	var myLimit=3;//3kまでは縦線省略
//第一フレームが有効記述か否か確認(id=0は、事前チェックで入らないはず)
	var referenceValue=(dataCheck(myTargetBody[0],XPS.layers[id-1].name)==null)?"blank":dataCheck(myTargetBody[0],XPS.layers[id-1].name);

	if(referenceValue=="blank"){
		myDestTLBody.push("X");
	}else{
		if(myTargetBody[0]=="1"){myTargetBody[0]="(1)"};//これは一括調整がほしい
		myDestTLBody.push(myTargetBody[0]);
	};
	sVC=1;
//第二フレームからデータループ
	for(var fidx=1;fidx<myTargetBody.length;fidx++){
//	評価値取得
		var evValue=(dataCheck(myTargetBody[fidx],XPS.layers[id-1].name)==null)?referenceValue:dataCheck(myTargetBody[fidx],XPS.layers[id-1].name);

		if(myTargetBody[fidx]=="1"){myTargetBody[fidx]="(1)"};//これは一括調整がほしい

		bufNoChange.push(myTargetBody[fidx].replace(/^(x|0|〆|Ｘ|ｘ)$/i,"X"));//非加工バッファを作成
//	リファレンスと一致
		if(evValue==referenceValue){
			var modifiedData=(myTargetBody[fidx])?myTargetBody[fidx]:"|";
			if(modifiedData=="1"){modifiedData="(1)"};//これ一括調整関数がほしい
			if((referenceValue=="blank")&&(modifiedData=="|")){
				modifiedData=":";//置き替え
			};
			bufModified.push(modifiedData);
//	同値カウンタ加算
			sVC++;
		}else{
			var modifiedData=myTargetBody[fidx];
			if(modifiedData=="1"){
				modifiedData="(1)";
};//これ一括調整関数がほしい
			if(evValue=="blank"){
				modifiedData=modifiedData.replace(/^(x|0|〆|Ｘ|ｘ)$/i,"X");
			};
			bufModified.push(modifiedData.toString());
//	シートの値が変更されたのでバッファをフラッシュする
			if(sVC>myLimit){
//	同値カウンタが規定値以上(4以上)なら加工済みバッファでフラッシュ
				myDestTLBody=myDestTLBody.concat(bufModified);
//myDestTLBody.push("mfd");
			}else{
//	同値カウンタが規定値より下(3以下)なら非加工バッファでフラッシュ
				myDestTLBody=myDestTLBody.concat(bufNoChange);
//myDestTLBody.push("nch");
			};
//	同値カウンタリセット
		sVC=1;
//	サブバッファ初期化
		bufNoChange.length=0; bufModified.length=0;
//	基準値更新
		referenceValue=evValue;
		};
	};
//	全ループ終了後に残った編集バッファをフラッシュする
	if(sVC>0){
		if(sVC>myLimit){
//	同値カウンタが規定値以上(4以上)なら加工済みバッファでフラッシュ
			myDestTLBody=myDestTLBody.concat(bufModified);
		}else{
//	同値カウンタが規定値より下(3以下)なら非加工バッファでフラッシュ
			myDestTLBody=myDestTLBody.concat(bufNoChange);
		};
	};
	return myDestTLBody;
};


//分岐と処理
	var bkPos=xUI.Select.join("_");//カーソル位置保存

if(flg=="all"){
//全シート指定
	for(var idx=0;idx<(XPS.xpsBody.length);idx++){

		xUI.selectCell((idx)+"_0")//カーソルを当該タイムラインの第一フレームへ
	 var myOpt=(idx==0)? "dialog":XPS.layers[idx-1].option;
	 switch(myOpt){
	 case "dialog": ;break;
	 case "still": ;break;
	 case "sfx": ;break;
	 case "camera": ;break;
	 case "timing":
	 default:
 xUI.put(reformatTL(idx));
alert(idx+":"+myOpt);
	 }
	};
}else{
//指定なければ現在のタイムラインを指定
	if((! flg) && (xUI.Select[0]>=1 && xUI.Select[0]<(XPS.xpsBody.length-1))){
		xUI.selectCell(xUI.Select[0]+"_0")//カーソルを当該タイムラインの第一フレームへ
	if(xUI.Select[0]>0){var myOpt=XPS.layers[xUI.Select[0]-1].option}else{var myOpt="dialog"};
	 switch(myOpt){
	 case "dialog": ;break;
	 case "still": ;break;
	 case "sfx": ;break;
	 case "camera": ;break;
	 case "timing":
	 default:
		xUI.put(reformatTL(xUI.Select[0]));//データ更新
	 }
	};
};
	xUI.selectCell(bkPos);	//バックアップ位置へ復帰
	document.getElementById("iNputbOx").focus();
};
vxPrompt= function(msg,params){return prompt(msg,params);};
//タイムライン挿入
/*
	指定IDの前方に挿入
	挿入するタイムラインはすべて"timing"
	挿入位置及び挿入数指定は、選択範囲を使用
	新規作成するタイムラインのラベルは自動作成したものを提示してユーザ編集
	undoバッファは維持できないのでクリア
	挿入と削除はXpsオブジェクトのメソッドを呼ぶ形に変更
 */
insertColumns=function(newNames){
	var insertLength=Math.abs(xUI.Selection[0])+1;//挿入タイムライン数を取得
	var insertPoint=(xUI.Selection[0]<0)?[xUI.Select[0]+xUI.Selection[0],0]:[xUI.Select[0],0];//挿入ポイントを記録
if(newNames==undefined){
//	xUI.printStatus("希望のラベルをコンマ区切りで指定できます。\nこの操作はアンドゥバッファが初期化されて、取り消しできません。\nよろしいですか?");

	if(insertPoint[0]<1){return};

	var currentNames=new Array();//挿入後のラベル名格納配列
//	挿入分仮ラベルをタイムラインIDで初期化
	for(var Tidx=0;Tidx<insertLength;Tidx++){
		currentNames.push(nas.Zf(Tidx+insertPoint[0],2));
	};
//	警告
//	xUI.promptPanel(
//		"以下のタイムラインを挿入します。\n希望のラベルをコンマ区切りで指定できます。\nこの操作はアンドゥバッファが初期化されて、取り消しできません。\nよろしいですか?",
//		currentNames.join(","),
//		function(R){insertColumns(R);})
	nas.showModalDialog("prompt",
		"以下のタイムラインを挿入します。\n希望のラベルをコンマ区切りで指定できます。\nこの操作はアンドゥバッファが初期化されて、取り消しできません。\nよろしいですか?",
		"タイムライン挿入",
		currentNames.join(","),
		function(){if(this.status==0){insertColumns(this.value)};xUI.setStored("force");//sync();
		}
	)
//	newNames=vxPrompt("以下のタイムラインを挿入します。希望のラベルをコンマ区切りで指定できます。この操作はアンドゥバッファが初期化されて、取り消しできません。よろしいですか?",currentNames.join(","));
}else{
//	xUI.printStatus();
if(newNames!=null){
	newNames=newNames.split(",");
	if(newNames.length>insertLength){newNames.length=insertLength;};//オーバー時切捨て
	if(newNames.length<insertLength){
		for(var Tidx=newNames.length;Tidx<insertLength;Tidx++){
			newNames.push(nas.Zf(Tidx+insertPoint[0],2));
		};
	};//不足時は再生成

	var bkPt=xUI.Select;//カーソル元位置控

	XPS.insertTL(insertPoint[0],newNames);

	nas_Rmp_Init();//リフレッシュ

	xUI.selectCell(add(bkPt,[insertLength,0]).join("_"));//カーソルを挿入後の元位置へ復帰
	xUI.flushUndoBuf();sync("undo");//

}else{
	alert("処理を中止しました。");
};
};
}
;//
//		タイムライン削除
/*
	指定IDのタイムラインを削除
	指定は、選択範囲を使用することに
	undoバッファは維持できないのでクリア
	Xpxのメソッドを呼び出す形に変更
	0番タイムライン及びフレームコメントは削除不可
 */
deleteColumns=function(newNames){
	if(xUI.Select[0]==0||xUI.Select[0]+xUI.Selection[0]<=0||xUI.Select[0]+xUI.Selection[0]>=(XPS.xpsBody.length-1)||xUI.Select[0]==(XPS.xpsBody.length-1))
	{return false;};
	var deleteLength=Math.abs(xUI.Selection[0])+1;//削除列数を算出
	if(deleteLength>=(XPS.xpsBody.length-2)){return false;};
	var deletePoint=(xUI.Selection[0]<0)?[xUI.Select[0]+xUI.Selection[0],0]:[xUI.Select[0],0];//削除ポイントを記録

if(newNames==undefined){


	var restNames=new Array();//削除後のラベル名格納配列
//新規ラベルセット
	for(var Lidx=0;Lidx<XPS.layers.length;Lidx++){
		if((Lidx<(deletePoint[0]-1)) || (Lidx >(deletePoint[0]+deleteLength-2)) ){restNames.push(XPS.layers[Lidx].name)};
	};

//	警告
//newNames=prompt(deleteLength+" 個のタイムラインが削除されて以下のタイムラインが残ります。\n必要ならばレイヤ名の編集ができます。\n\nこの操作はアンドゥバッファが初期化されて、取り消しできません。\nよろしいですか?\n", newNames.join(","));
nas.showModalDialog(
	"prompt",
	deleteLength+" 個のタイムラインが削除されて以下のタイムラインが残ります。\n必要ならばレイヤ名の編集ができます。\n\nこの操作はアンドゥバッファが初期化されて、取り消しできません。\nよろしいですか?\n",
	"タイムライン削除",
	restNames.join(","),
	function(){if(this.status==0){deleteColumns(this.value)};xUI.setStored("force");sync();}
);
//		alert(newNames);
}else{
if(newNames!=null){
	newNames=newNames.split(",");
	var bkPt=xUI.Select;//カーソル元位置
	var removeIdx=[];
	for (var ix=0;ix<deleteLength;ix++){removeIdx.push(ix+deletePoint[0]);}

	XPS.deleteTL(removeIdx); 

	// タイムライン削除後にラベルの指定があれば書きなおし(ダイアログ拡張が考慮されていないでの後で修正)
	for(var Lidx=0;Lidx<newNames.length;Lidx++){if(XPS.layers[Lidx].name != newNames[Lidx]){XPS.layers[Lidx].name=newNames[Lidx]}};

	nas_Rmp_Init();//リフレッシュ

	xUI.selectCell(bkPt.join("_"));//カーソルを元位置へ復帰
	xUI.flushUndoBuf();sync("undo");//

}else{
	alert("処理を中止しました。");
};
}

};
//フレームデータ挿入
/*
	指定フレームの前方に挿入
	指定フレームが継続時間よりも多い場合は末尾へ追加
	undoバッファは維持できないのでクリア。
	削除も同様の処理で可能か？
 */
insertBlank=function(){
	;//選択範囲がなければ処理なし
	if(xUI.Selection[0]==0 && xUI.Selection[1]==0){return};
	var origPoint=xUI.Select;
	var myRange=xUI.Selection;
var myLeft=(myRange[0]<0)?origPoint[0]+myRange[0]:origPoint[0];
var myTop=(myRange[1]<0)?origPoint[1]+myRange[1]:origPoint[1];
//alert([myLeft,myTop]);
	xUI.selectCell([myLeft,myTop].join("_"));
	xUI.selection([myLeft+Math.abs(myRange[0]),XPS.duration()-1].join("_"));//末尾まで選択
	xUI.yank();	;//ヤンクバッファへ現在のポインタから後ろのデータを格納
	xUI.selection();
	xUI.selectCell(add([myLeft,myTop],[0,Math.abs(myRange[1])+1]).join("_"));//新しいポイントへ移動
//	xUI.selectCell(add(origPoint,[0,myRange[1]+1]).join("_"));//新しいポイントへ移動
	xUI.paste();
	;//挿入ポインタにしたがって空白データを流し込む。
	xUI.selectCell(origPoint.join("_"));//挿入ポイントへ戻る
	xUI.selection(add(origPoint,myRange).join("_"));//選択
	xUI.cut();xUI.selection("");//カットして開放
	xUI.selectCell(origPoint.join("_"));//挿入ポイントへ戻る
};
/*
	指定範囲を削除して隙間を詰める
*/
deleteBlank=function(){
	;//選択範囲がなければ処理なし
	if(xUI.Selection[0]==0 && xUI.Selection[1]==0){return};
	var origPoint=xUI.Select;
	var myRange=xUI.Selection;

	xUI.cut();xUI.selection("");//カットして開放
	
var myLeft=(myRange[0]<0)?origPoint[0]+myRange[0]:origPoint[0];
var myTop=(myRange[1]<0)?origPoint[1]+myRange[1]:origPoint[1];

	if(Math.abs(myRange[1])+myTop<XPS.duration()){
		xUI.selectCell(add([myLeft,myTop],[0,Math.abs(myRange[1])+1]).join("_"));//新しいポイントへ移動

		xUI.selection([myLeft+Math.abs(myRange[0]),XPS.duration()-1].join("_"));//末尾まで選択
		xUI.cut();	;//ヤンクバッファへ切り抜いて格納
		xUI.selection();//クリア

		xUI.selectCell([myLeft,myTop].join("_"));//挿入ポイントへ戻る
		xUI.paste();
//		xUI.selection();//クリア
	;//挿入ポインタにしたがって空白データを流し込む。
//		xUI.selection(add(origPoint,myRange).join("_"));//選択戻す?
	};
};

/*
	セルラベルの付け替え
	タイムラインIDが与えられた場合は、そのタイムラインのみ
	引数なしの場合は、すべてのタイムラインのラベルを変更
	単独ラベルの場合はタイムラインラベルの種別を表示する（編集は一考）
*/
reNameLabel=function(TimelineId)
{
	var newNames=new Array();

	var msg="ラベルを変更します。";
	if(!TimelineId){
		//全タイムラインモードを仮セット
		for (var Tidx=1;Tidx<=XPS.layers.length;Tidx++){
			newNames.push(XPS.layers[Tidx-1].name);
		};
		msg+="\n新しいラベル名セットを指定してください。\n不足分、超過分は無視されます。"
	}else{
		newNames.push(XPS.layers[TimelineId-1].name);
		msg+="\n新しいラベルを指定してください。\n"+XPS.layers[TimelineId-1].option +":"
	};

	var myFunc=function(){
	  if(! TimelineId){this.TimelineId=null}else{this.TimelineId=TimelineId};
		if((this.value=="")||(this.startValue==this.value)||(this.status >= 1)){return;};
	  var newNames=this.value;
	  if(newNames!=null){
		newNames=newNames.split(",");
		if(! this.TimelineId){
			for (var Lidx=0;Lidx<newNames.length;Lidx++){
				if((Lidx<XPS.layers.length)&&(XPS.layers[Lidx].name!=newNames[Lidx])){
					XPS.layers[Lidx].name=newNames[Lidx];
				};//&&(newNames[Lidx]!="")
			};
		}else{
			XPS.layers[this.TimelineId-1].name=newNames[0];

		};
		sync("lbl");
	  };
	return;
	}
	myFunc.TimelineId=TimelineId;
	newNames=nas.showModalDialog("prompt",msg,"セルラベルの変更",newNames.join(","),myFunc);

/*
	if(newNames!=null){
		newNames=newNames.split(",");
		if(!TimelineId){
			for (var Lidx=0;Lidx<newNames.length;Lidx++){
				if((Lidx<XPS.layers.length)&&(XPS.layers[Lidx].name!=newNames[Lidx])){
					XPS.layers[Lidx].name=newNames[Lidx];
				};//&&(newNames[Lidx]!="")
			};
		}else{
			XPS.layers[TimelineId-1].name=newNames[0];

		};
		sync("lbl");
	};
	return;
*/
};

// リファレンスシートのコピー
putReference=function()
{
	//xUIに範囲設定があれば、その範囲を、無ければすべてのシートを操作対象にする
	if((xUI.Selection[0]==0)&&(xUI.Selection[1]==0)){
		xUI.referenceXPS.readIN(XPS.toString());//選択範囲指定がない場合は、すべてコピー
	}else{
	//return false;
	
		var mStart=[
			(xUI.Selection[0]>0)?xUI.Select[0]:xUI.Select[0]+xUI.Selection[0],
			(xUI.Selection[1]>0)?xUI.Select[1]:xUI.Select[1]+xUI.Selection[1]
		];
		var mEnd  =[
			(xUI.Selection[0]>0)?xUI.Select[0]+xUI.Selection[0]:xUI.Select[0],
			(xUI.Selection[1]>0)?xUI.Select[1]+xUI.Selection[1]:xUI.Select[1]
		];
	//選択範囲がreferenceXPSよりも広かった場合は、参照XPSを拡張する
		
		var widthUp=   (mEnd[0]>xUI.referenceXPS.xpsBody.length)? true:false;
		var durationUp=(mEnd[1]>xUI.referenceXPS.duration())?     true:false;
		if((widthUp)||(durationUp)){
			xUI.referenceXPS.reInitBody(
				(widthUp)?    mEnd[0]:xUI.referenceXPS.xpsBody.length,
				(durationUp)? mEnd[1]:xUI.referenceXPS.duration()
			);
		};
		xUI.referenceXPS.put(mStart,xUI.getRange())
	}
	nas_Rmp_Init();
}

getReference=function()
{
	//xUIに範囲設定があれば、その範囲を、無ければすべてのシートを操作対象にする
	if((xUI.Selection[0]==0)&&(xUI.Selection[1]==0)){
		XPS.readIN(xUI.referenceXPS.toString());//選択範囲指定がない場合は、すべてコピー
	}else{
//	return false;
		var mStart=[
			(xUI.Selection[0]>0)?xUI.Select[0]:xUI.Select[0]+xUI.Selection[0],
			(xUI.Selection[1]>0)?xUI.Select[1]:xUI.Select[1]+xUI.Selection[1]
		];
		var mEnd  =[
			(xUI.Selection[0]>0)?xUI.Select[0]+xUI.Selection[0]:xUI.Select[0],
			(xUI.Selection[1]>0)?xUI.Select[1]+xUI.Selection[1]:xUI.Select[1]
		];
	//選択範囲がreferenceXPSよりも広かった場合は、参照XPSを拡張する
		
		var widthUp=   (mEnd[0]>xUI.referenceXPS.xpsBody.length)? true:false;
		var durationUp=(mEnd[1]>xUI.referenceXPS.duration())?     true:false;
		if((widthUp)||(durationUp)){
			xUI.referenceXPS.reInitBody(
				(widthUp)?    mEnd[0]:xUI.referenceXPS.xpsBody.length,
				(durationUp)? mEnd[1]:xUI.referenceXPS.duration()
			);
		};
		xUI.put(xUI.referenceXPS.getRange([mStart,mEnd]));
	}
	nas_Rmp_Init();
}

putSectionLine=function(){
/*	呼び出されたら選択範囲に縦棒を入力する。
動作条件は、セレクションが単一タイムラインで２フレーム以上ある場合
選択タイムラインがカメラワークであった場合は、両端に三角をおく
動作終了後は、選択を解除してカーソル位置は復帰
*/
  if((xUI.Selection[0]>0)||(xUI.Selection[1]<1)){return}

  var bkFrm=xUI.Select[1];
  var myLength=xUI.Selection[1];
  var myBody=[];
  var myOpt=(xUI.Select[0]==0)?"dialog":XPS.layers[xUI.Select[0]-1].option;
    switch(myOpt){
      case "camera":
	myBody.push("▽");
	for(var idx=1;idx<myLength;idx++){myBody.push("|");}
	myBody.push("△");
      break;
      case "timing":
      default:
	for(var idx=0;idx<myLength+1;idx++){myBody.push("|");}
    }

	xUI.put(myBody.join(","));
	xUI.selection();
	xUI.selectCell(xUI.Select[0]+"_"+bkFrm);
}
/*
	このファイルの関数は基本的にはxUIまたはXPSのメソッドなので
	デバグ終了後には必要に応じてラッパ関数を残してふさわしい位置へ移動すること。
	2007/06/29

*/