/*
	nas(u)PsAXE proxy module
	AS または VBS から呼び出される コマンド実行エージェント
	引数は Array arguments 要素数は 1 または 2

引数を識別子にしてコマンドの実行またはスクリプトファイルを読み込んで実行する。
識別文字列は以下のリストのとおり

第二要素がある場合は、実行ファイル名として扱う
	ツール切り換え
PcTl	ペン
ErTl	消しゴム
moveTool	移動
rotateTool	画面回転
bucketTool	塗りつぶし
marqueeRectTool	矩形選択
lassoTool	なげなわ
magicWandTool	マジックワンド
rulerTool	ものさし

penTool	ペンツール
freeformPenTool         フリーハンドペンツール
addKnotTool             アンカーポイント追加
deleteKnotTool          アンカーポイント削除
convertKnotTool         アンカーポイント切替
directSelectTool        パス選択ツール
pathComponentSelectTool パスコンポーネント選択ツール(charID)
	パス操作
pathRPASp	筆圧ストローク＋パス消去
pathRPASnp	ストローク+パス消去
pathRPAFa	塗潰し＋パス消去

	プレビューコントロール
rtBtm	レイヤセットローテーション下
rtTop	レイヤセットローテーション上
swpLy	レイヤスワップ
FcsTp	最上位レイヤへ
lyRVS	レイヤ順反転
lySRT	レイヤ名でソート
lyADD	新規レイヤ追加（背景塗りつぶし）
lySMT	レイヤをスマート変形
lyFIX	レイヤをラスタライズ
lyRST	スマートオブジェクトをリセット
lnInc	レイヤ名増番
lnDec	レイヤ名減番
lodSp	レイヤ指定移動
ons0	オニオンスキン全レイヤ
ons2	オニオンスキン２枚
ons3	オニオンスキン３枚
ons4	オニオンスキン４枚
onsS	オニオンスキン指定
onsR	オニオンスキンリセット（すべて不透明）

	animetionFrameClass 操作

afFst	先頭フレームへ
afPrv	前のフレームへ
afNxt	次のフレームへ
afEnd	最後のフレームへ
afSAl	フレーム全選択
afRst	アニメフレームを全消去
afNWF	新規アニメフレーム
afCpy	複製
afDel	削除
afPst	貼付
afRVS	アニメフレームを逆順に
afLF0	全レイヤをアニメフレームへ展開
afLF1	レイヤセットをアニメフレームへ展開
afLF2	選択レイヤをアニメフレームへ展開
afSd0	遅延０
afSd1	遅延１フレーム設定（フレームレートに依存）
afSd2	遅延２フレーム設定（フレームレートに依存）
afSd3	遅延３フレーム設定（フレームレートに依存）
afSdS	遅延設定パネル（フレームレート編集可能）

	タイムシート適用

xpsEZL	簡易XPSリンカPhotoshop用
xpsAPY	XPS適用
xpsEDT	XPS編集

	ドキュメントレイヤ管理
dmNWD	新規ドキュメント
dmNWX	新規画像タイムシート
dmATL	新規テキストレイヤ（カット番号レイヤ）
dmETS	テキスト（レイヤ）ソース編集
dmLNm	レイヤ名（単独）変更
dmGSL	選択レイヤをグループ化
dmRNG	レイヤセット内を連番にリネーム
dmPGL	ペグ画像をドキュメントにロード
dmPGD	選択レイヤにペグを貼付
PacPs	レイヤ名（一括変更）
jsCon	javascriptコンソール
dmBnd	レイヤ収集
dmDLy	レイヤ振分
dmIPL	レイヤ一括インポート
dmOPL	レイヤをファイルに書き出す
	PsPaint関連

ppPPP	ペイント前処理=線画の正規化
ppMPL	彩色レイヤ作成=paintPreProcess
ppThn	細線化
ppBdf	境界線削除
ppCSB	色指定ボックス
ppCif	色情報表示
ppTMc	色トレス分離=複合処理　黒線とカラー線の分離
ppTAl	白成分削除
ppTrd ppTgr ppTbl ppTkb	色分離（各色）
ppTcn ppTpn ppTyl ppTgy	
ppTfg	前景色分離
*/

//==================== ターゲットパスを取得しておく
if($.fileName){
//	CS3以降は　$.fileNameオブジェクトを使用
	if($.os.indexOf("Windows")){
	 var nasFolderPath = new File($.fileName).parent.path +"/";
	}else{
	 var nasFolderPath = new File($.fileName).parent.parent.fsName +"/";
	}
}else{
//	$.fileName オブジェクトがない場合はインストールパスをきめうちする
	var nasFolderPath = Folder.userData.fullName + "/nas/";
}
//=======undoグループ付き実行
function evalA(undoString,myCodeChip){
  if((app.documents.length)&&(app.activeDocument.suspendHistory)){
	app.activeDocument.suspendHistory(undoString, myCodeChip)
  }else{
	eval(myCodeChip);
  }
}
//===================== 操作関数 オニオンスキン(65%濃度固定)
function ons(myCount){
var myDocLayers=app.activeDocument.activeLayer.parent.layers;
if(myCount<=0){myCount=myDocLayers.length-1;}
for(var idx=0;idx<myDocLayers.length;idx++){
 if(myDocLayers[idx].visible){
  keyIndex=idx;
  var TRp=(myDocLayers[idx].opacity>=100);
  break;
 }
};
for(myOffset=0;myOffset<myCount;myOffset++){
 if((keyIndex+myOffset)<myDocLayers.length){myDocLayers[keyIndex+myOffset].opacity=(TRp)?65:100;}
};
app.activeDocument.activeLayer=myDocLayers[keyIndex];
}
//===================== 操作関数 アニメフレーム移動(フォーカス移動なし)
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 );
}
//====================== アニメフレームに継続時間設定(24fpsのみ)
function setDuration(myFrames){
 var myTime=myFrames/24;
 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 );
}
//==================================================================main
//=================== 引数を解釈して動作を選定する
/*

*/
var myCommand=arguments[0];
var myScriptFilePath="";
//if(myCommand){alert(myCommand)}else{alert("noCommands")};
ErrStrs = {};
ErrStrs.USER_CANCELLED=localize("$$$/ScriptingSupport/Error/UserCancelled=User cancelled the operation");
try{
switch (myCommand){
//ツール切り換え(CharID)
case "PcTl":
case "ErTl":
    var desc = new ActionDescriptor();
    var idNull = charIDToTypeID( "null" );
        var ref = new ActionReference();
        var idTl = charIDToTypeID( myCommand );
        ref.putClass( idTl );
    desc.putReference( idNull, ref );
executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );

break;
//ツール切り換え(StringID)
case "moveTool":
case "rotateTool":
case "bucketTool":
case "marqueeRectTool":
case "lassoTool":
case "magicWandTool":
case "rulerTool":

case "penTool":
case "freeformPenTool":
case "addKnotTool":
case "deleteKnotTool":
case "convertKnotTool":
case "directSelectTool":
case "pathComponentSelectTool":
    var desc = new ActionDescriptor();
    var idNull = charIDToTypeID( "null" );
        var ref = new ActionReference();
        var idTool = stringIDToTypeID( myCommand );
        ref.putClass( idTool );
    desc.putReference( idNull, ref );
 executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );
break;

case "pathRPASp":
 myScriptFilePath="pathRPASp.jsx";break;
case "pathRPASnp":
 myScriptFilePath="pathRPASnp.jsx";break;
case "pathRPAFa":
 myScriptFilePath="pathRPAFa.jsx";break;

case "rtBtm":
 myScriptFilePath="shiftLayersB.jsx";break;
case "rtTop":
 myScriptFilePath="shiftLayersU.jsx";break;
case "swpLy":
 var myDocLayers=app.activeDocument.activeLayer.parent.layers;
 for(var idx=0;idx<myDocLayers.length;idx++){if(myDocLayers[idx].visible){var kidx=idx;break;}};
 if((kidx+1)<myDocLayers.length){myDocLayers[kidx].move(myDocLayers[kidx+1],ElementPlacement.PLACEAFTER);
 app.activeDocument.activeLayer=myDocLayers[kidx]};
break;
case "FcsTp":
 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;
  }
 };
break;
case "lyRVS":
 myScriptFilePath="reverseLayerOrder.jsx";break;
case "lySRT":
 myScriptFilePath="sortLayersByName.jsx";break;
case "lyADD":
 myScriptFilePath="addNewLayer.jsx";break;
case "lySMT":
 myScriptFilePath="smartMove.jsx";break;
case "lyFIX":
 myScriptFilePath="smartFix.jsx";break;
case "lyRST":
 myScriptFilePath="smartReset.jsx";break;
case "lnInc":
 myScriptFilePath="layerNameInc.jsx";break;
case "lnDec":
 myScriptFilePath="layerNameDec.jsx";break;
case "lodSp":
 myScriptFilePath="shiftLayers.jsx";break;
case "ons0":evalA("全透過","ons(0)");break;
case "ons1":evalA("透過1","ons(1)");break;
case "ons2":evalA("透過2","ons(2)");break;
case "ons3":evalA("透過3","ons(3)");break;
case "ons4":evalA("透過4","ons(4)");break;
case "onsS":myScriptFilePath="onsPref.jsx";break;
case "onsR":myScriptFilePath="onsReset.jsx";break;

case "afFst":activateFrame("Frst");break;
case "afPrv":activateFrame("Prvs");break;
case "afNxt":activateFrame("Nxt ");break;
case "afEnd":activateFrame("Frst");activateFrame("Prvs");break;
case "afSAl":
 var idslct = charIDToTypeID( "slct" );
 var desc183 = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref163 = new ActionReference();
 var idMn = charIDToTypeID( "Mn  " );
 var idMnIt = charIDToTypeID( "MnIt" );
 var idanimationSelectAll = stringIDToTypeID( "animationSelectAll" );
 ref163.putEnumerated( idMn, idMnIt, idanimationSelectAll );
 desc183.putReference( idnull, ref163 );
 executeAction( idslct, desc183, DialogModes.ALL );
break;
case "afRst":myScriptFilePath="removeAnimationFrames.jsx";break;
case "afNWF":
 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 );
break;
case "afCpy":
 var idcopy = charIDToTypeID( "copy" );
 var desc181 = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref161 = new ActionReference();
 var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
 var idOrdn = charIDToTypeID( "Ordn" );
 var idTrgt = charIDToTypeID( "Trgt" );
 ref161.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
 desc181.putReference( idnull, ref161 );
 executeAction( idcopy, desc181, DialogModes.ALL );
break;
case "afDel":
 var idDlt = charIDToTypeID( "Dlt " );
 var desc179 = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref159 = new ActionReference();
 var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
 var idOrdn = charIDToTypeID( "Ordn" );
 var idTrgt = charIDToTypeID( "Trgt" );
 ref159.putEnumerated( idanimationFrameClass, idOrdn, idTrgt );
 desc179.putReference( idnull, ref159 );
 executeAction( idDlt, desc179, DialogModes.ALL );
break;
case "afPst":
 var idanimationPasteFrames = stringIDToTypeID( "animationPasteFrames" );
 var desc182 = new ActionDescriptor();
 var idnull = charIDToTypeID( "null" );
 var ref162 = new ActionReference();
 var idanimationFrameClass = stringIDToTypeID( "animationFrameClass" );
 ref162.putClass( idanimationFrameClass );
 desc182.putReference( idnull, ref162 );
 executeAction( idanimationPasteFrames, desc182, DialogModes.ALL );
break;
case "afRVS":
 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 );
break;
case "afLF0":myScriptFilePath="layers2Frames0.jsx";break;
case "afLF1":myScriptFilePath="layers2Frames1.jsx";break;
case "afLF2":myScriptFilePath="layers2Frames2.jsx";break;
case "afSd0":setDuration(0);break;
case "afSd1":setDuration(1);break;
case "afSd2":setDuration(2);break;
case "afSd3":setDuration(3);break;
case "afSdS":myScriptFilePath="durationSpc.jsx";break;
case "xpsEZL":myScriptFilePath="easyXPSLink_Ps.jsx";break;
case "xpsAPY":myScriptFilePath="applyXps.jsx";break;
case "xpsEDT":myScriptFilePath="editXps.jsx";break;
case "dmNWD":myScriptFilePath="addNewDocument.jsx";break;
case "dmNWX":myScriptFilePath="addNewXpsA3.jsx";break;
case "dmATL":myScriptFilePath="addNewNumText.jsx";break;
case "dmETS":myScriptFilePath="editTextSource.jsx";break;
case "dmLNm":myScriptFilePath="ezFlip.jsx";break;
case "dmGSL":myScriptFilePath="groupingSelectedLayers.jsx";break;
case "dmRNG":myScriptFilePath="numberingLayers.jsx";break;
case "dmPGL":myScriptFilePath="loadPeg.jsx";break;
case "dmPGD":myScriptFilePath="duplicateReg.jsx";break;
case "PacPs":myScriptFilePath="PacPs.jsx";break;
case "jsCon":myScriptFilePath="dbgConsolePs.jsx";break;
case "dmBnd":myScriptFilePath="documentBinder.jsx";break;
case "dmDLy":myScriptFilePath="divideLayers.jsx";break;
case "dmIPL":myScriptFilePath="importFilesAsLayer.jsx";break;
case "dmOPL":myScriptFilePath="exportLayersAsFile.jsx";break;

case "ppPPP":myScriptFilePath="applyFilterScanLineNormalize.jsx";break;
case "ppMPL":myScriptFilePath="paintPreProcess.jsx";break;
case "ppThn":myScriptFilePath="thinLine.jsx";break;
case "ppBdf":myScriptFilePath="applyFilterBorderFill.jsx";break;
case "ppCSB":myScriptFilePath="putColorChip.jsx";break;
case "ppCif":myScriptFilePath="getFrontColorInfo.jsx";break;
case "ppTMc":myScriptFilePath="lineSplit.jsx";break;
case "ppTAl":myScriptFilePath="applyFilterTraceAll.jsx";break;
case "ppTrd":myScriptFilePath="applyFilterTraceR.jsx";break;
case "ppTgr":myScriptFilePath="applyFilterTraceG.jsx";break;
case "ppTbl":myScriptFilePath="applyFilterTraceB.jsx";break;
case "ppTkb":myScriptFilePath="applyFilterTraceK.jsx";break;
case "ppTcn":myScriptFilePath="applyFilterTraceC.jsx";break;
case "ppTpn":myScriptFilePath="applyFilterTraceP.jsx";break;
case "ppTyl":myScriptFilePath="applyFilterTraceY.jsx";break;
case "ppTgy":myScriptFilePath="applyFilterTraceGY.jsx";break;
case "ppTfg":myScriptFilePath="applyFilterTraceFGC.jsx";break;
case "raDc":myScriptFilePath="rotationAlignmentDoc.jsx";break;
case "raLy":myScriptFilePath="rotationAlignmentLayer.jsx";break;
case "TEST":alert(nasFolderPath);break;
default	:
myScriptFilePath=myCommand+".jsx";
break;
alert(myCommand+" は、有効なコマンドではありません");
}

} catch(e){ if (e.toString().indexOf(ErrStrs.USER_CANCELLED)!=-1) {;} else{alert(localize("$$$/ScriptingSupport/Error/CommandNotAvailable=The command is currently not available"));}};
try{
if (myScriptFilePath){

	var myScriptFileName=nasFolderPath +"scripts/axe/"+ myScriptFilePath;
/*
	$.evalFile メソッドが存在する場合はそれを使用するが
	CS2以前の環境ではglobal の eval関数で読み込む
*/
	app.bringToFront();
	if($.evalFile){
	//$.evalFile ファンクションがあれば実行する
	//	alert("loading with $.evalFile: "+myScriptFileName)
		$.evalFile(myScriptFileName);
	}else{
	//$.evalFile が存在しないバージョンではevalにファイルを渡す
		var scriptFile = new File(myScriptFileName);
		if(scriptFile.exists){
			scriptFile.open();
			var myContent=scriptFile.read()
			scriptFile.close();
			eval(myContent);
		}
	}
}

} catch(e){ if (e.toString().indexOf(ErrStrs.USER_CANCELLED)!=-1) {;} else{alert(localize("$$$/ScriptingSupport/Error/CommandNotAvailable=The command is currently not available"));}};


//alert(arguments[0]);
