/*(nas_psAxeLib.js)
	photoshop用アニメーション拡張ライブラリ Photo Shop Animation eXtEntion
	アイコンは斧だ！　ざっくり　ばっさり行こう
	$Id: nas_psAxeLib.js,v 1.5 2013/06/23 08:16:19 kiyo Exp $
*/

nas.axe = new Object;//アニメ拡張オブジェクト　AEのotome に相当するオブジェクト
var moduleName="psAxeLib"
var myFilename=("$RCSfile: nas_psAxeLib.js,v $").split(":")[1].split(",")[0];
var myFilerevision=("$Revision: 1.5 $").split(":")[1].split("$")[0];

	if(nas.Version)
	{	nas.Version[moduleName]=moduleName+" :"+myFilename+" :"+myFilerevision;};

//============================================================ 斧とりつきプロパティ
/*
	システムオブジェクトに取り付いてイロイロ拡張プロパティを貼り付けます。
*/
//Folder.nas=(System.osName.match(/Windows/))?
//	new Folder(Folder.startup.fsName+"\\Scripts\\nas"):
//	new Folder(Folder.startup.fsName+"/Scripts/nas");
		Folder.nas=nas.baseLocation;
Folder.scripts=app.path+"/"+localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts");//この方法でローカライズパスが取得可能なはず　OK?
/*	AE用コード
if(isWindows){
	if(app.version.split(".")[0]<7){
		Folder.scripts=Folder(Folder.startup.path.toString()+"/"+Folder.startup.name.toString()+"/Scripts")
	}else{
		Folder.appPackage.path+"/"+localize("$$$/ScriptingSupport/InstalledScripts=Support\ Files/Scripts");//WinAE7以降
	}
	File.currentApp=File(Folder.startup.path.toString()+"/AfterFX.exe");//Windows
}else{
	if(app.version.split(".")[0]<7){
		Folder.scripts=Folder(Folder.startup.parent.parent.parent.path.toString()+"/Scripts");
	}else{
		Folder.scripts=Folder(Folder.appPackage.path+"/"+localize("$$$/InstalledScripts=Scripts"));//MacAE7以降
//		Folder.scripts=Folder(Folder.appPackage.path.toString()+"/Scripts");//AE8
	}
	File.currentApp=File(Folder.startup.path.toString()+"/AfterFX");//MacOSX
}

*/
//AE用プロパティ　AE/PS同時使用の際にバッティングするので、ダミーオブジェクトとして初期化する
//実際には使用されない AEサイドでも同様の処置が必要
	nas.expressions=false;
	nas.ftgFolders=false;

//Photoshop用作画プロパティ
	nas.axe.newLayerTpr=true;//新規レイヤの透過　有・無
	nas.axe.onsOpc=0.65;//オニオンスキンの標準不透過率
	nas.axe.lyBgColor=0;//選択色
	nas.axe.lyBgColors=[
		["白"    ,[1.0,1.0,1.0,1.0]],
		["黄色"	 ,[1.0,1.0,0.8,1.0]],
		["ピンク",[1.0,0.9,0.9,1.0]],
		["あさぎ",[0.9,0.9,1.0,1.0]],
		["若草"  ,[0.9,1.0,0.9,1.0]],
	];
	nas.axe.ovlBgColor=0;//修正レイヤ背景色
	nas.axe.ovlBgColors=[
		["白"    ,[1.0,1.0,1.0,1.0]],
		["黄色"	 ,[1.0,1.0,0.8,1.0]],
		["ピンク",[1.0,0.9,0.9,1.0]],
		["あさぎ",[0.9,0.9,1.0,1.0]],
		["若草"  ,[0.9,1.0,0.9,1.0]],
	];
//カラー配列 ["色名",[r,g,b,a]] float 背景色用の仮配列そのうちオブジェクトを作って交換

//	フレームアニメーションプレビュー操作プロパティ
	nas.axe.forcusMove=true;//アニメウインドウのコマ送り時のフォーカス移動　有・無

//	ドキュメントマネージャ関連
	nas.axe.dmDialog=true;//新規ファイルダイアログをカスタムするか否か
	nas.axe.dmCurrent=[0,0,0,0];//最後に操作したドキュメント情報[タイトルDBid,opusNo.,cutNo.,time]
    //ドキュメント・シート等の新規作成時に参照・更新する値
//================================================================以下は作業タイトルDB

//インポートフィルタ
	nas.importFilter = new RegExp(".*\.(mov|mpg|avi|tiff?|tga|psd|png|jpe?g|gif|sgi|eps)$","i");
//タイムシート判別フィルタ
	nas.xpSheetRegex = new RegExp(".*\.(xps|ard|tsh|sts)$","i");
//セルシーケンス判定(レイヤソース名に対して適用。 $1 がセルラベルになる)これはレイヤ名に対するフィルタ(またはシーケンス名)
　	nas.cellRegex = new RegExp("[\-_\/\s0-9]?([^\-_\/\s\[]*)[\-_\/]?\[[0-9]+\-[0-9]+\]\.(tga|tiff?|png|gif|jpe?g|eps|sgi|bmp)$","i")
//背景・下絵判定
	nas.bgRegex=new RegExp("(bg|back|背景?|下絵?)","i");
//レイアウト、参照画
	nas.mgRegex=new RegExp("book|fg|mid|mg|fore|fg|[前中]景?|[中上]絵","i");
	nas.loRegex=new RegExp("lo|cf|z\.[io]|t\.?[ub]|sl(ide)?|cam(era)?|fr(ame)?|pan|mill?|(キャ|カ)メラ|フレーム|引き|ヒキ|スライド|組|クミ|くみ","i");

//	作画フレームDB
//	PegBarDB(ダミー)
//	"識別名",[[配置座標],テンプレート画像パス,ポイント数,]
/*
	作画用紙DB

*/
	nas.paperSizes=new nTable();
		nas.paperSizes.onChange=function(){
		}

			nas.paperSizes.push("A4横(297x210)",[297,210]);
			nas.paperSizes.push("A3横(420x297)",[420,297]);
			nas.paperSizes.push("A3縦(297x420)",[297,420]);
			nas.paperSizes.push("B4横(353x250)",[353,250]);
			nas.paperSizes.push("B3横(500x353)",[500,353]);
			nas.paperSizes.push("OLD-STD(268x244)",[268,244]);
			nas.paperSizes.push("OLD-横x2(536x244)",[536,244]);
			nas.paperSizes.push("OLD-縦x2(268x488)",[268,488]);

/*
	作画用レジスターマークDB
	実際の描画はテンプレート画像を配置して行うので、対照に注意　テンプレート画像の配置は現在システム固定で lib/resource/Pegs/
	各レジスタの原点は画像中央なのでテンプレート画像を作成する場合はその点に注意

*/
	nas.registerMarks=new nTable();
		nas.registerMarks.onChange=function(){
		}

			nas.registerMarks.push("3穴トンボ",["peg3p1.eps"]);//0
			nas.registerMarks.push("3穴白抜き",["peg3p2.eps"]);//1
			nas.registerMarks.push("3穴ベタ",["peg3p3.eps"]);//2
			nas.registerMarks.push("2穴トンボ",["peg2p1.eps"]);//3
			nas.registerMarks.push("2穴白抜き",["peg2p2.eps"]);//4
			nas.registerMarks.push("2穴ベタ",["peg2p3.eps"]);//5

//	作画(ソース)データの標準フレーム
//  "識別名",[横幅(mm),フレーム縦横比(文字列),基準解像度(dpi),フレームレート(,PegID,[配置座標])]
/*
	入力メディアDBの本質は作画情報
	何センチのフレームに対してどのくらいの解像度で処理を行なうかが情報のポイント
	ピクセルアスペクトは入力ファイルごとにことなる可能性があるのでDB上では標準値を1と置き、
	フッテージに記録のない場合のみ仮の値として使用する
	オプション情報追加
	標準的なタップの種別を記録する。タップの配置は座標と回転角を記録
	配置座標 [X,Y,R]　X,Yはフレーム中心からのタップの位置　Rは360度法によるタップの向き
*/

	nas.inputMedias=new nTable();
		nas.inputMedias.onChange=function(){
			//メディアがセレクトされたらシステムの解像度とフレームレートを変更する
			if(nas.LENGTH!=this.selectedRecord[1]){nas.LENGTH=this.selectedRecord[1]}
			if(nas.ASPECT!=this.selectedRecord[2]){nas.ASPECT=this.selectedRecord[2]}
			var myDPC=this.selectedRecord[3]/ 2.540;//解像度をDPCに変換
			if(nas.RESOLUTION!=myDPC){nas.RESOLUTION=myDPC}
			if(nas.FRATE!=this.selectedRecord[4]){nas.FRATE=this.selectedRecord[4]};

			nas.registerMarks.select(this.selectedRecord[5]);
			}

			nas.inputMedias.push("254mm/16:9/200dpi",[254,"16/9",200,24,2,0,105,0]);//(AJA)index=0
			nas.inputMedias.push("225mm/4:3/144dpi",[225,"4/3",144,24,2,0,115,0]);//(NA) index 1 以下順に増加
			nas.inputMedias.push("240mm/4:3/150dpi",[240,"4/3",150,24,2,0,120,0]);//(I.G)
			nas.inputMedias.push("265mm/16:9/144dpi",[265,"16/9",144,24,2,0,105,0]);//max
			nas.inputMedias.push("240mm/16:9/150dpi",[240,"16/9",150,34,2,0,105,0]);//
			nas.inputMedias.push("203mm/16:9/200dpi",[203,"16/9",200,24,2,0,105,0]);//pocopoco
			nas.inputMedias.push("260mm/16:9/200dpi",[260,"16/9",200,24,2,0,105,0]);//
			nas.inputMedias.push("260mm/16:9/150dpi",[260,"16/9",150,24,2,0,105,0]);//



//	出力メディアDB(ダミー)
//	"識別名",[横幅(px),ライン数,ピクセルアスペクト,フレームレート]
/*
	出力メディアDBの本質はムービー情報
	どのメディアに対して処理を行なうかが情報のポイント
	ピクセルアスペクトはメディア限定なので標準値を指定する
	逆に線密度には意味がなくなるので記載がない
*/
	nas.outputMedias=new nTable();
		nas.outputMedias.onChange=function(){
			
			if(nas.COMP_W!=this.selectedRecord[1]){nas.COMP_W=this.selectedRecord[1]}
			if(nas.COMP_H!=this.selectedRecord[2]){nas.COMP_H=this.selectedRecord[2]}
			if(nas.COMP_A!=this.selectedRecord[3]){nas.COMP_A=this.selectedRecord[3]}
//			if(nas.FRATE!=this.selectedRecord[4]){nas.FRATE=this.selectedRecord[4]};//出力は一般系を切り替えない
		}

			nas.outputMedias.push("wideSD/24p",[950,540,1,24]);
			nas.outputMedias.push("DV",[720,480,0.9,29.97]);
			nas.outputMedias.push("DV(wide)",[720,480,1.2,29.97]);
			nas.outputMedias.push("HD720/24p",[1280,720,1,24]);
			nas.outputMedias.push("HD1080/24p",[1920,1080,1,24]);
			nas.outputMedias.push("SD486/24p",[720,486,0.9,24]);
			nas.outputMedias.push("SD540/24p",[720,540,1,24]);
			nas.outputMedias.push("SD486",[720,486,0.9,29.97]);
			nas.outputMedias.push("SD540",[720,540,1,29.97]);
			nas.outputMedias.push("VGA/24p",[640,480,1,24]);
			nas.outputMedias.push("VGA/30p",[640,480,1,30]);

//	作業タイトルDB(ダミー) 
//WorkTitleDBは共用（環境非依存ライブラリ）側に
	nas.workTitles=new nTable();

			nas.workTitles.push("SAMPLE",["test","ts",0,0]);
			nas.workTitles.push("ぽこぽこ",["poco","PP",5,3]);
			nas.workTitles.push("かちかち山",["KachiKachi","KT",1,4]);
			nas.workTitles.push("かちかち山Max",["KachiMax","ktM",2,5]);

			nas.workTitles.onChange=function(){
				nas.inputMedias.select(this.selectedRecord[3]);
				nas.outputMedias.select(this.selectedRecord[4]);
			}
//タイトルデータベース初期化（仮）
			nas.workTitles.select(0);
			nas.inputMedias.select(nas.workTitles.selectedRecord[3]);
			nas.registerMarks.select(nas.inputMedias.selectedRecord[5]);
			nas.outputMedias.select(nas.workTitles.selectedRecord[4]);
			nas.paperSizes.select(0);//A4用紙を選択しておく

//セレクトメソッドで選択
/*			上記のDBは最後に登録したものがカレントになっています。
	自分の必要なものを追加してご使用ください
*/

//以下拡張メソッド アニメーションフレーム操作関数などが多い トレーラは nas.axeAFC
	nas.axeAFC=new Object;
/*
	psAnimationFrameClass.jsxの関数はラッパに変更 後でコードをはずしてゆくよ2011.08.20
	
Phostoshop CS2以降のフレームアニメーションを操作するオブジェクト

*/
//アニメウインドウ操作関数　現状取得ができないのはヘボいが今のトコはカンベン　後で整理する
/*
	復帰は不要でトレーラー内部の表示状態だけセットするスクリプトをまず作る
	フレームは初期化！
	setDly(myTime)
		フレームにディレイを設定する　継続時間とほぼ同一だが最短時間は保証されない
	duplicateFrame()
		カレントフレームを複製する
	selectFrame(index)
		フレームを選択する Indexは整数（1オリジン）単独選択でカレントが移動
	selectFramesAll()
		全フレーム選択
	removeSlection()
		選択フレームを削除　ただし全削除を行なっても仕様上フレームカウントが0にはならない。必ずフレームID-0が残る
	activateFrame(kwd)
		カレントフレームを移動する　kwd = Nxt ,Prvs,Frst　(各4bite)
	countFrames()
		アニメーフレームの現在の数をカウントする。ひどく裏技だけどまあ、使えるからヨシ
	activateFrame(kwd)
		アニメフレームをアクティベートする。(コマを送る)フォーカス移動あり。
*/
// ======================================================= 選択フレームの遅延を設定
nas.axeAFC.setDly=function(myTime){
var idsetd = charIDToTypeID( "setd" );
    var desc = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref = new ActionReference();
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
    desc.putReference( idnull, ref );
	
    var idT = charIDToTypeID( "T   " );
        var desc2 = new ActionDescriptor();
        var idanimationFrameDelay = stringIDToTypeID( "animationFrameDelay" );
        desc2.putDouble( idanimationFrameDelay, myTime );
    var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
    desc.putObject( idT, idanimationFrameClass, desc2 );
executeAction( idsetd, desc, DialogModes.NO );
}
// =======================================================選択フレーム複製
nas.axeAFC.dupulicateFrame=function(){
var idDplc = charIDToTypeID( "Dplc" );
    var desc = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref = new ActionReference();
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
    desc.putReference( idnull, ref );
executeAction( idDplc, desc, DialogModes.NO );
}
// =======================================================フレーム選択
nas.axeAFC.selectFrame=function(idx){
var idslct = charIDToTypeID( "slct" );
    var desc = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref = new ActionReference(); 
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        ref.putIndex( idanimationFrameClass, idx );
    desc.putReference( idnull, ref );
var M=executeAction( idslct, desc, DialogModes.NO );
}
// =======================================================フレーム全選択
nas.axeAFC.selectFramesAll=function(){
var idanimationSelectAll = stringIDToTypeID( "animationSelectAll" );
    var desc = new ActionDescriptor();
executeAction( idanimationSelectAll, desc, DialogModes.NO );
}
// =======================================================選択フレーム削除
nas.axeAFC.removeSelection=function(){
var idDlt = charIDToTypeID( "Dlt " );
    var desc = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref = new ActionReference();
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        var idOrdn = charIDToTypeID( "Ordn" );
        var idTrgt = charIDToTypeID( "Trgt" );
        ref.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
    desc.putReference( idnull, ref );
executeAction( idDlt, desc, DialogModes.NO );
}
// =======================================================アニメーションフレーム順反転
nas.axeAFC.reverseAnimationFrames=function(){
 var idRvrs = charIDToTypeID( "Rvrs" );
 var desc190 = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref170 = new ActionReference();
 var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
 var idOrdn = charIDToTypeID( "Ordn" );
 var idTrgt = charIDToTypeID( "Trgt" );
 ref170.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
 desc190.putReference( idnull, ref170 );
 executeAction( idRvrs, desc190, DialogModes.ALL );
}
//===================== 操作関数 アニメフレーム移動(フォーカス移動あり)
// =======================================================アニメーションフレームをアクティブに
//（正逆順送り）セレクトとアクティブが別概念のようなので注意だ
nas.axeAFC.activateFrame=function(kwd){
//kwd = Nxt ,Prvs,Frst(各４バイト)
var idanimationFrameActivate = stringIDToTypeID( "animationFrameActivate" );
    var desc = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref = new ActionReference();
        var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
        var idOrdn = charIDToTypeID( "Ordn" );
		var idX = charIDToTypeID( kwd );
        ref.putEnumerated( idanimationFrameClass, idOrdn, idX );
    desc.putReference( idnull, ref );
executeAction( idanimationFrameActivate, desc, DialogModes.NO );
}
// =======================================================フレームをレイヤに変換
nas.axeAFC.convertFrs2Lyrs=function(){
executeAction(
	stringIDToTypeID( "animationFramesToLayers" ),
	new ActionDescriptor(),
	DialogModes.NO
);
}

// ======================================================= アニメフレームの数をカウントする

nas.axeAFC.countFrames=function(){
//================== rootトレーラーのレイヤ数を控える
var currentLayerCounts=app.activeDocument.layers.length;
executeAction(
	stringIDToTypeID( "animationFramesToLayers" ),
	new ActionDescriptor(),
	DialogModes.NO
);//外部関数にして呼び出しすると妙に遅いので注意だ
//差分を取得してフレーム数を取得
var myFrameCounts = app.activeDocument.layers.length-currentLayerCounts;
// =================== UNDOバッファを使用して復帰
var id8 = charIDToTypeID( "slct" );
    var desc5 = new ActionDescriptor();
    var id9 = charIDToTypeID( "null" );
        var ref2 = new ActionReference();
        var id10 = charIDToTypeID( "HstS" );
        var id11 = charIDToTypeID( "Ordn" );
        var id12 = charIDToTypeID( "Prvs" );
        ref2.putEnumerated( id10, id11, id12 );
    desc5.putReference( id9, ref2 );
executeAction( id8, desc5, DialogModes.NO );

return myFrameCounts;
}

//=======================================================アニメーションフレームをクリア（初期化）
nas.axeAFC.initFrames=function(){
var idDlt = charIDToTypeID( "Dlt " );
 var desc = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref = new ActionReference();
 var idanimationClass = stringIDToTypeID( "animationClass" );
 var idOrdn = charIDToTypeID( "Ordn" );
 var idTrgt = charIDToTypeID( "Trgt" );
 ref.putEnumerated( idanimationClass, idOrdn, idTrgt );
 desc.putReference( idnull, ref );
 executeAction( idDlt, desc, DialogModes.ALL );
}
//=======================================================animationNewLayerPerFrame
nas.axeAFC.chgModeNLPF=function(){
 var idslct = charIDToTypeID( "slct" );
 var desc195 = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref172 = new ActionReference();
 var idMn = charIDToTypeID( "Mn  " );
 var idMnIt = charIDToTypeID( "MnIt" );
 var idanimationNewLayerPerFrame = stringIDToTypeID( "animationNewLayerPerFrame" );
 ref172.putEnumerated( idMn, idMnIt, idanimationNewLayerPerFrame );
 desc195.putReference( idnull, ref172 );
 executeAction( idslct, desc195, DialogModes.NO );
}
//alert(countFrames())
//selectFrame(5);selectFrame(4);
//============================================================placeEps()
/* ファイルを指定してスマートオブジェクトとして配置する
戻り値に読み込んだレイヤの参照が欲しいよう
*/
nas.axeAFC.placeEps=function(myFile){
var plceID = charIDToTypeID( "Plc " );
    var myDescriptor = new ActionDescriptor();
    var idNull = charIDToTypeID( "null" );
    myDescriptor.putPath( idNull, myFile);
    var id7 = charIDToTypeID( "FTcs" );
    var id8 = charIDToTypeID( "QCSt" );
    var id9 = charIDToTypeID( "Qcsa" );
    myDescriptor.putEnumerated( id7, id8, id9 );
    var id10 = charIDToTypeID( "Ofst" );
        var desc4 = new ActionDescriptor();
        var id11 = charIDToTypeID( "Hrzn" );
        var id12 = charIDToTypeID( "#Rlt" );
        desc4.putUnitDouble( id11, id12, 0.000000 );
        var id13 = charIDToTypeID( "Vrtc" );
        var id14 = charIDToTypeID( "#Rlt" );
        desc4.putUnitDouble( id13, id14, 0.000000 );
    var id15 = charIDToTypeID( "Ofst" );
    myDescriptor.putObject( id10, id15, desc4 );
    var id16 = charIDToTypeID( "AntA" );
    myDescriptor.putBoolean( id16, true );
         executeAction( plceID, myDescriptor, DialogModes.NO );
	return app.activeDocument.activeLayer;
}


//========== アクティブなレイヤセット内で最も表示順位の高いレイヤをアクティブにする(AFC外)
nas.axeAFC.focusTop=function(){
  var myDocLayers=app.activeDocument.activeLayer.parent.layers;
  for(var idx=0;idx<myDocLayers.length;idx++){
    if(myDocLayers[idx].visible){app.activeDocument.activeLayer=myDocLayers[idx];break;}
  }
}
//====================== goFrame(kwd)　移動ラッパー引数は　"f","p","n","e"　いずれか
nas.axeAFC.goFrame=function(kwd){
 switch (kwd){
　case	"f":this.activateFrame("Frst");break;
　case	"p":this.activateFrame("Prvs");break;
　case	"n":this.activateFrame("Nxt ");break;
　case	"e":this.activateFrame("Frst");this.activateFrame("Prvs");break;
 }
 if(nas.axe.focusMove){this.focusTop();}
}
//======================================アニメーションモードを検査
nas.axeAFC.checkAnimationMode=function(){
/*
引数なし　戻り値 "frameAnimation","timelineAnimation",""

アニメーションモードを検査する関数

確認の手順
フレームアニメ用移動を行う　次＞前
エラーが無ければフレームアニメーションあり

タイムライン用移動を行う　次＞前

両方エラーの場合はアニメーション（タイムライン）が初期化されていない
タイムラインモードの判定は、ヘッドがタイムライン後端にある場合、一こま前方へ移動して終了するが
今日は勘弁 20120617

タイムラインモードであってもタイムラインの初期化が行われていない場合はエラーが出るので要注意

タイムラインの作成は、ドキュメントが背景レイヤのみの場合失敗する。
判定にさきがけてドキュメントの状態を確認する必要がある。
これは、判定モードでも同じ。
タイムラインが作成されていても、背景レイヤのみのドキュメントでは、キーフレームが存在せずヘッドの移動が出来ないため


*/
var myResult="frameAnimation";
try{
nas.axeAFC.activateFrame("Nxt ");

nas.axeAFC.activateFrame("Prvs");

}catch(er){try{
myResult="timelineAnimation";
var idnextFrame = stringIDToTypeID( "nextFrame" );
    var descNxF = new ActionDescriptor();
    var idtoNextWholeSecond = stringIDToTypeID( "toNextWholeSecond" );
    descNxF.putBoolean( idtoNextWholeSecond, false );
executeAction( idnextFrame, descNxF, DialogModes.NO );
var idpreviousFrame = stringIDToTypeID( "previousFrame" );
    var descPrF = new ActionDescriptor();
    var idtoNextWholeSecond = stringIDToTypeID( "toNextWholeSecond" );
    descPrF.putBoolean( idtoNextWholeSecond, false );
executeAction( idpreviousFrame, descPrF, DialogModes.NO );
}catch(err){myResult=""}
}
return myResult;
}

//=======================　undo保留を判定してコードを実行
nas.axeAFC.evalA=function(undoString,codeChip){
 if((app.documents.length)&&(app.activeDocument.suspendHistory)){
     app.activeDocument.suspendHistory(undoString,codeChip);
 }else{
     evel(codeCHip);
 }
}
