/* 
Image Transform or Rasterize.
ver. 1.5
Transform selected Image to 100% (FRSRC), rasterize PDF and EPS.
Flip - Resize - Skew - Rotate - Crop Image  (All Channels, Layers and Paths).
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
An InDesign CS2-CS3 JavaScript
OS: Mac OS X, Windows XP.
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
Скрипт предназначен для приведения изображения InDesign-документа к 100 % масштабу
при необходимом значении эффективного разрешения, трансформации 
в соответствии со значениями углов поворота и горизонтального сдвига,
и для растеризации векторных EPS и PDF (AI) файлов программой Adobe Photoshop.

Трансформированные изображения сохраняются в папке «Images_XXXdpi», 
которая создается в директории документа. 
Трансформируются все каналы, слои и пути изображений. 
Для всех слоев изображения, включая группы (Layer Sets), выполняются команды Unlink и Unlocked. 
Для трансформации эффектов, примененных к слоям, реализовано конвертирование
всех слов документа (изображения), кроме Background, в Smart Objects.
При трансформации изображения в Photoshop устанавливается белый цвет (rgb: 255, 255, 255 ) 
для Background и Foreground Color.

Настройки скрипта (Script Options) 
сохраняются в файле «ImageTrRast.txt» при первом запуске:
1) Script Name - имя скрипта;
2) Output Resolution, pixels/inch - результирующее разрешение;
3) Folder Name - имя папки (для сохранения трансформированных копий файлов);
4) Color Mode - цветовая модель (растеризация векторных файлов - PDF, EPS)
• Open Document Mode: CMYK, GRAYSCALE, LAB, RGB;
5) Resample Method (алгоритм ресэмплирования изображения)
• ResampleMethods: BICUBIC, BILINEAR, NEARESTNEIGHBOR, BICUBICSMOOTHER, BICUBICSHARPER;
6) Auto Choice of Resample Method  - автоматический выбор алгоритма ресэмплирования:
• при значении «true»: BICUBICSMOOTHER – увеличение разрешения изображения, BICUBICSHARPER – уменьшение,
• при «false»: используется значение константы outResampleMethod (п. 5);
7) Photoshop Dialog Modes - отображение диалогов программы Adobe Photoshop при выполнении скрипта:
• при «true»:  DialogModes.ERROR – отображаются только сообщения об ошибках,
• при значении «false»: DialogModes.NO – диалоги не отображаются;
8) Save Encoding - тип кодировки для сохранения в формат Photoshop EPS (растеризация векторных файлов)
• Save Encoding:  ASCII, BINARY, JPEGHIGH, JPEGLOW, JPEGMAXIMUM, JPEGMEDIUM;
9) Crop Page (Select Type of PDF Region) - тип «кадрирования» при открытии PDF-файлов:
• CropToType:  ARTBOX, BLEEDBOX, BOUNDINGBOX, CROPBOX, MEDIABOX, TRIMBOX;
10) Symmetric Bleeds, mm - величина симметричных вылетов результирующего изображения относительно его фрейма;
11) Step Resizing Factor, % - коэффициент пошагового изменения разрешения, значение по умолчанию - 30
(увеличение или уменьшение разрешения изображения на 30 % за одну операцию Resize,
при значениях отношения эффективного и результирующего разрешений больше 1,40 или меньше 0,80 соответственно). 

Not Processing (не обрабатываются):
1) Missing, Modified, Embedded Links - 
отсутствующие, модифицированные и внедренные изображения;
2) Windows Metafile - WMF 
(отсутствует фильтр для открытия (растеризации) в базовой версии Photoshop Extended);
3) CompuServe GIF - файлы 
(формат не позволяет сохранять физическое разрешение - Native Resolution отличное от 72 точек/дюйм);

Передача и выполнение скрипта в Photoshop и обратно в InDesign (Relink) 
осуществляется посредством функций BridgeTalk. 

Команда Relink к трансформированной копии исходного изображения выполняется 
скриптом в InDesign, к изображению применяется:  
• Rotation and Shear X Angle (установка значений углов вращения и горизонтального сдвига) - 0°, 
• Vertical and Horizontal Scale (горизонтальное и вертикальное масштабирование ) - 100 %, 
• Сenter Content - изображение позиционируется по центру фрейма, 
• Return Clipping Path Settings - возвращение исходных настроек  для "обтравочного пути".

Обтравочный путь в InDesign (Clipping Path)  при выполнении операции 
"пересвязывание к файлу изображения" - Relink сохраняются только для Photoshop Path, 
для остальных: Alpha Chаnnel , User-Modified Path и Detect Edges устанавливается тип "None".

Установленные программы Adobe Photoshop и InDesign должны быть одной версии Creative Suite (CS).
При открытии векторных файлов настройки (Photoshop Color Settings) "Системы управления цветом" 
должны соответствовать требованиям проекта.
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
© 2008 Дмитрий Лапаев (d.lapaev@univest-prepress.com, d.lapaev@gmail.com).
*/
main ();
function  main ()
{
	// файл настроек скрипта
	const IniFileName = "ImageTrRast.txt";
	var MyStrIniFile = "";
	var LpIRIniFile = new File (app.activeScript.path + "/" + IniFileName);
	if (!LpIRIniFile.exists) 
		{	// cоздание файла инициализации 
			var myChEffRes = prompt ("Output Resolution, pixels/inch:", "300", "Initialize:");
			if (myChEffRes == null) exit();
			MyStrIniFile += "const myScrName = \"Image Transform or Rasterize 1.5\";\n";
			MyStrIniFile += "const outEffectiveRes = " + myChEffRes + ";\n";
			MyStrIniFile += "const outFolderName = \"Images_" +  parseInt (myChEffRes) + "dpi\";\n";
			MyStrIniFile += "const outRastrColorMode = \"CMYK\";\n";
			MyStrIniFile += "const outResampleMethod = \"BICUBIC\";\n";	
			MyStrIniFile += "const outAutoChoiceResM = true;\n";	
			MyStrIniFile += "const outDisplayDialogsErr = true;\n";	
			MyStrIniFile += "const outEpsSaveEncoding = \"BINARY\";\n";	
			MyStrIniFile += "const outPdfCropPageType = \"BOUNDINGBOX\";\n";	
			MyStrIniFile += "const outImageBleed = 0;\n";	
			MyStrIniFile += "const outOneStepRes = 30;\n";	
			LpIRIniFile.open("w");
			if (LpIRIniFile.write(MyStrIniFile)== true) 
				{
					alert (IniFileName + " successfully created!\n(Script options)");
					LpIRIniFile.close();
					eval ("//@include \'" + IniFileName + "\';");
				} else {alert("Unable to write the ini-file!", "", true); exit();}
		} else {eval ("//@include \'" + IniFileName + "\';");}	
	// открытые документы
	if (app.documents.length == 0) 
	{alert (myScrName + "\nPlease open a document, select an image, and try again.", "", false); exit();}
	// путь открытого документа
	try {var myActDocFilePath = app.activeDocument.filePath} 
	catch (e) {alert (myScrName + "\nPlease Save " + app.activeDocument.name + " and try again.", "", false); exit();}	
	// selection
	if (app.selection.length != 1) {alert (myScrName + "\nPlease select an image and try again.", "", false); exit();}
	// проверка выделенного обьекта
	var SImage = SEL_IMAGE ( app.selection[0] ); 
	if (SImage == false) {alert (myScrName + "\nPlease select only image."); exit();}
	// тип изображения
	var vctn_Graphic = SImage.constructor.name;
	var typeN_Graphic =  SImage.imageTypeName;
	// состояние связи с файлом изображения	
	try {
			var myLinkObj = SImage.itemLink;
			var myImageLinkStatus = myLinkObj.status;
			if (myImageLinkStatus != LinkStatus.normal) 
			{alert ("Link status is not Normal!", "", true); exit();}} 
	catch (e) {alert (vctn_Graphic + " without link!", "", false); exit();}
	if (typeN_Graphic == "CompuServe GIF" | typeN_Graphic == "Windows Metafile")  
	{alert (myScrName + "\n" + myLinkObj.name + " - " + typeN_Graphic + "\nPlease save this image in another format and try again.", "", false); exit();}
	// File Creator
	var myLinkObjCreator = "";
	try {myLinkObjCreator = myLinkObj.linkXmp.creator;} 
	catch (e) {}
	if (myLinkObjCreator != "") myLinkObjCreator = "\n\n• Creator: " + myLinkObjCreator;
	var ImInfoText = "File Name: " + myLinkObj.name + myLinkObjCreator + "\n• Type: " + typeN_Graphic;
	// Color Space (цветовое пространство)
	var ImColorSpace = "N/A";
	try {ImColorSpace =  SImage.space;}
	catch (e) {
		if (findWord_inStr(myLinkObjCreator, "Photoshop") & vctn_Graphic == "EPS") 
		{ImColorSpace = "Duoton or Lab"; ImInfoText += "\n• Space: " + ImColorSpace;}
		else ImInfoText += "\n• Vector Data: contains";	}	
	// Clipping Path Type 
	var myAttinfo = "";
	var imgClippPath_Type = myImageClippingPath (SImage);
	if (imgClippPath_Type != "None" & imgClippPath_Type != "Photoshop Path") myAttinfo = " (to None)";
	// дополняем строку параметров изображения
	if (ImColorSpace != "N/A") ImInfoText += "\n• Color Space: " + ImColorSpace;
	ImInfoText += "\n• Clipping Path Type: " + imgClippPath_Type + myAttinfo;
	try {ImInfoText += "\n• Effective resolution: " + SImage.effectivePpi[0] + "x" + SImage.effectivePpi[1] + " Ppi";} 
	catch (e){}
	// сообщение, содержащее параметры избражения
	if (!confirm (ImInfoText + "\n\nTransform a copy of this file?\n(Folder: " + outFolderName + ")", "", "Image Transform to 100%, " + outEffectiveRes + " dpi")) 
	{exit();}
	// создание папки
	var myResImagesFolder = new Folder (myActDocFilePath + "/" + outFolderName);
	if (!myResImagesFolder.exists) myResImagesFolder.create ();
	// полный путь копии или растрированного файла
	var myResmplFile;
	if (ImColorSpace == "N/A") {myResmplFile = new File (myResImagesFolder + "/" + FileNameWtExt (SImage.itemLink.name, false) + ".eps");}
	else {myResmplFile = new File (myResImagesFolder + "/" +SImage.itemLink.name);}
	if (myResmplFile.exists) {	
		myResmplFile = myResmplFile.saveDlg("File is already exists!");		
		if (myResmplFile == null ) exit();}
	// считать координаты для разворота
	var oldRulerOrigin = app.activeDocument.viewPreferences.rulerOrigin;
	app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.spreadOrigin;
	// единицы измерения - мм
	var oldActDocH_Measures = app.activeDocument.viewPreferences.horizontalMeasurementUnits;
	var oldActDocV_Measures = app.activeDocument.viewPreferences.verticalMeasurementUnits;
	app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;
	app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;
	/* скрипт для Adobe Photoshop в виде текстовой переменной: ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ */
	var myScriptString = "";
	myScriptString += "const imBleed = " + outImageBleed + ";";
	myScriptString += "const stPrResize = " + outOneStepRes/100 + ";";
	myScriptString += "const r_effRes = " + outEffectiveRes + ";";
	// Ruler Units - mm
	myScriptString += "var phtOldRulerUnits = app.preferences.rulerUnits;";
	myScriptString += "var phtOldInterpolation = app.preferences.interpolation;";
	if (!outDisplayDialogsErr) {myScriptString += "app.displayDialogs = DialogModes.NO;";} 
	else {myScriptString += "app.displayDialogs = DialogModes.ERROR;";} 
	// Photoshop Foreground & Background Color - white (rgb: 255, 255, 255)
	myScriptString += "var phtOld_FColor = app.foregroundColor;";
	myScriptString += "var phtOld_BColor = app.backgroundColor;";
	myScriptString += "app.foregroundColor.rgb.red = 255;";
	myScriptString += "app.foregroundColor.rgb.green = 255;";
	myScriptString += "app.foregroundColor.rgb.blue = 255;";
	myScriptString += "app.backgroundColor.rgb.red = 255;";
	myScriptString += "app.backgroundColor.rgb.green = 255;";
	myScriptString += "app.backgroundColor.rgb.blue = 255;";
	
	myScriptString += "app.preferences.rulerUnits = Units.PERCENT;";
	myScriptString += "app.preferences.interpolation = ResampleMethod." + outResampleMethod + ";";
	myScriptString += "var myTransParms = " + currImageTransfPar(SImage, outEffectiveRes, myResmplFile).toSource () + ";";
	/*	
		myTransParms[0] - полный путь связанного файла,
		myTransParms[1] - минимальный коэффициент отношения исходных эффективных разрешений и результирующего,
		myTransParms[2] - коэффициент вертикального масштабирования,
		myTransParms[3] - коэффициент горизонтального масштабирования,
		myTransParms[4] - угол вращения изображения (Rotation Angle),
		myTransParms[5] - угол горизонтального сдвига изображения (Shear X Angle),
		myTransParms[6] - массив разниц геометрических координат фрейма и его изображения,
		myTransParms[7] - трансформированный файл,
		myTransParms[8] - the unique ID of the Link.
	*/
	myScriptString += "var myOpFile = myTransParms[0];";
	myScriptString += "var k_EffRes = myTransParms[1];";
	myScriptString += "var k_verSc = myTransParms[2];";
	myScriptString += "var k_horSc = myTransParms[3];";
	myScriptString += "var imRotationAngle = myTransParms[4];";
	myScriptString += "var imShearAngle = myTransParms[5] ;";
	myScriptString += "var cr_ImBnds = myTransParms[6];";
	myScriptString += "var myCopyPath = myTransParms[7];";
	myScriptString += "var myLinkID = myTransParms[8];";
	myScriptString += "var r_effRNPr = r_effRes * Math.max (k_verSc, k_horSc);";
	/* ResampleMethods: BICUBIC, BILINEAR, NEARESTNEIGHBOR, BICUBICSMOOTHER, BICUBICSHARPER */		
	myScriptString += "var myResampleMethod = ResampleMethod." + outResampleMethod + ";";
	if (outAutoChoiceResM == true)
		{
			myScriptString += "if (k_EffRes < 1) myResampleMethod = ResampleMethod.BICUBICSMOOTHER;";
			myScriptString += "else myResampleMethod = ResampleMethod.BICUBICSHARPER;";
		}
	myScriptString += "try {";
	if (vctn_Graphic == "PDF") 
		{
			myScriptString += "app.open (myOpFile, myPDF_OpenOpt(" + SImage.pdfAttributes.pageNumber + ", r_effRNPr));";
			myScriptString += "save_toPhotoshopEPS (myCopyPath);";			
		}
	else if (vctn_Graphic == "EPS" &  ImColorSpace == "N/A") 
		{
			myScriptString += "app.open (myOpFile, myEPS_OpenOpt (r_effRNPr));";
			myScriptString += "save_toPhotoshopEPS (myCopyPath);";
		}
	else if (ImColorSpace != "N/A") // для всех растровых форматов
		{
			
			myScriptString += "var Re_smplFile = myCopyPath;";			
			myScriptString += "var myCopyRes = myOpFile.copy (Re_smplFile);";
			myScriptString += "if(!myCopyRes) {alert(\"File Copy Error!\");}";
			myScriptString += "var myOpenDoc = app.open (Re_smplFile);";
			// unlink & unlock layers
			myScriptString += "unLLTrnff_Sets (myOpenDoc);";
			// convert All Layers to Smart Objects (excl. Background Layer)
			myScriptString += "layersToSmartObj (myOpenDoc);";
			// Flip Canvas
			myScriptString += "if( k_verSc < 0 ) {myOpenDoc.flipCanvas (Direction.VERTICAL); k_verSc = - k_verSc;}"; 		
			// Image Resize
			myScriptString += "var inpReslt = myOpenDoc.resolution;";	
					//  reduction of resolution	 
			myScriptString += "var stepKf = 1 + stPrResize;";	
			myScriptString += "while (stepKf < k_EffRes) {";
			myScriptString += "myOpenDoc.resizeImage (myOpenDoc.width, myOpenDoc.height, inpReslt / stepKf, myResampleMethod);";
			myScriptString += "stepKf += stPrResize;}";
					// enlargement of resolution
			myScriptString += "stepKf = 1 - stPrResize/2;";		
			myScriptString += "while (stepKf > k_EffRes) {";
			myScriptString += "myOpenDoc.resizeImage (myOpenDoc.width, myOpenDoc.height, inpReslt / stepKf, myResampleMethod);";
			myScriptString += "stepKf -= stPrResize/2;}";
					// final resolution
			myScriptString += "myOpenDoc.resizeImage (myOpenDoc.width, myOpenDoc.height, inpReslt / k_EffRes, myResampleMethod);";
			myScriptString += "app.preferences.rulerUnits = Units.PIXELS;";
			myScriptString += "myOpenDoc.resizeImage (myOpenDoc.width, myOpenDoc.height, r_effRes, myResampleMethod);";
					// resize Width or Height (reduction)
			if (outAutoChoiceResM == true) {myScriptString += "myResampleMethod = ResampleMethod.BICUBICSHARPER;";}
			myScriptString += "WidthOrHeightRsmpl (myOpenDoc, k_horSc, k_verSc, stPrResize, myResampleMethod);";			
			// Skew
			myScriptString += "app.preferences.rulerUnits = Units.MM;";
			if (outAutoChoiceResM == true) {myScriptString += "app.preferences.interpolation = ResampleMethod.BICUBICSHARPER;";}
			myScriptString += "if( Math.abs (imShearAngle) > 0.01 ) myShearXAngle ( imShearAngle );";
			// Rotate Canvas	
			myScriptString += "if( Math.abs (imRotationAngle) > 0.01 ) app.activeDocument.rotateCanvas ( imRotationAngle );";
			// Crop Image
			myScriptString += "var Crbounds = new Array (cr_ImBnds[1] - imBleed, cr_ImBnds[0] - imBleed, myOpenDoc.width + cr_ImBnds[3] + imBleed, myOpenDoc.height + cr_ImBnds[2] + imBleed);";
			myScriptString += "myOpenDoc.crop ( Crbounds );";
			myScriptString += "var kompK_RotW = - imBleed + ( myOpenDoc.width - cr_ImBnds[4] )/2;";
			myScriptString += "var kompK_RotH = - imBleed + ( myOpenDoc.height - cr_ImBnds[5] )/2;";
			myScriptString += "Crbounds = [kompK_RotW, kompK_RotH, myOpenDoc.width - kompK_RotW, myOpenDoc.height - kompK_RotH];";
			myScriptString += "myOpenDoc.crop ( Crbounds );";
			// сохраняем и закрываем файл
			myScriptString += "myOpenDoc.save ();";
			myScriptString += "myOpenDoc.close (SaveOptions.DONOTSAVECHANGES);";
		}
	// замещение файлов - формируем скрипт для InDesign (script for InDesign) ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ */
	myScriptString += "var myInDScrStr = \"var myLink = app.activeDocument.links.itemByID(\" + myLinkID + \");\";"; 	
	myScriptString += "myInDScrStr += \"var selImage = myLink.parent;\";"; 
	myScriptString += "myInDScrStr += \"app.select(selImage);\";";	
	myScriptString += "myInDScrStr += \"if (confirm(\'Relink to transformed file?\', \'Relink\') == true)\";"; 
	myScriptString += "myInDScrStr += \"{if (selImage.clippingPath.clippingType != ClippingPathType.none)\";"; 
	myScriptString += "myInDScrStr += \"{var rClippPathSett = memClippPathSett (selImage.clippingPath);\";";
	myScriptString += "myInDScrStr += \"selImage.clippingPath.clippingType = ClippingPathType.none;}\";";	
	myScriptString += "myInDScrStr += \"try {myLink.relink(\" + myCopyPath.toSource() + \");}\";";
	myScriptString += "myInDScrStr += \"catch (e) {alert (e); exit();}\";";
	myScriptString += "myInDScrStr += \"try {var myUpdLink = myLink.update();}\";";
	myScriptString += "myInDScrStr += \"catch (e) {alert (e); exit();}\";";
	myScriptString += "myInDScrStr += \"var myImageUpD = myUpdLink.parent;\";";	
			// углы - 0°, масштаб - 100 %, по центру фрейма
	myScriptString += "myInDScrStr += \"myImageUpD.rotationAngle = 0;\";";
	myScriptString += "myInDScrStr += \"myImageUpD.shearAngle = 0;\";";
	myScriptString += "myInDScrStr += \"myImageUpD.verticalScale = 100;\";";
	myScriptString += "myInDScrStr += \"myImageUpD.horizontalScale = 100;\";";
	myScriptString += "myInDScrStr += \"myImageUpD.fit (FitOptions.centerContent);\";";	
	myScriptString += "myInDScrStr += \"app.select(myImageUpD);\";";	
			// возвращаем избражению параметры для генерации пути
	myScriptString += "myInDScrStr += \"if (rClippPathSett[0] == ClippingPathType.photoshopPath)\";";	
	myScriptString += "myInDScrStr += \"{set_ClippPath (myImageUpD.clippingPath, rClippPathSett);}\";";	
	myScriptString += "myInDScrStr += \"else if (rClippPathSett[0] == ClippingPathType.alphaChannel)\";";	
	myScriptString += "myInDScrStr += \"{alert (\'Path: Alpha Channel \' + rClippPathSett[1] + \' - removed!\', \'Clipping Path\');}\";";	
	myScriptString += "myInDScrStr += \"}exit();\";";

	/* Функция назначения параметров "обтравочного пути" изображения. */
	myScriptString += "myInDScrStr += \"function set_ClippPath (myImageClppPSett, myClippPath){\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.clippingType = myClippPath[0];} catch (e) {}\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.appliedPathName = myClippPath[1];} catch (e) {}\";";	
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.threshold = myClippPath[2];} catch (e) {}\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.tolerance = myClippPath[3];} catch (e) {}\";"; 
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.insetFrame = myClippPath [4];} catch (e) {}\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.useHighResolutionImage = myClippPath[5];} catch (e) {}\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.includeInsideEdges = myClippPath[6];} catch (e) {}\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.restrictToFrame = myClippPath[7];} catch (e) {}\";";
	myScriptString += "myInDScrStr += \"try {myImageClppPSett.invertPath = myClippPath[8];} catch (e) {}}\";";
	/* Функция сохранения установок "обтравочного пути" изображения. */
	myScriptString += "myInDScrStr += \"function memClippPathSett (myiMClippPathSett){\";";
	myScriptString += "myInDScrStr += \"var myImCPSArr = new Array();\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.clippingType);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.appliedPathName);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.threshold);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.tolerance);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.insetFrame);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.useHighResolutionImage);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.includeInsideEdges);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.restrictToFrame);\";";
	myScriptString += "myInDScrStr += \"myImCPSArr.push(myiMClippPathSett.invertPath);\";";
	myScriptString += "myInDScrStr += \"return myImCPSArr;}\";";
	
	myScriptString += "BridgeTalk.bringToFront ( \"indesign\" );";
	myScriptString += "var myBTobj = new BridgeTalk;";
	myScriptString += "myBTobj.target = \"indesign\" ;";
	myScriptString += "myBTobj.body = myInDScrStr;";
	myScriptString += "myBTobj.send();";
	myScriptString += "} catch (error) {alert (error, \"\", true);}";
	myScriptString += "app.preferences.rulerUnits = phtOldRulerUnits;";
	myScriptString += "app.preferences.interpolation = phtOldInterpolation;";
	// return Foreground and Background Colors 
	myScriptString += "app.foregroundColor = phtOld_FColor;";
	myScriptString += "app.backgroundColor =  phtOld_BColor;";
	myScriptString += "exit();";
	
	// ФУНКЦИИ:  ∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ */
	
	/* Open Document Mode: CMYK, GRAYSCALE, LAB, RGB. */
	/*  PDF open Crop Type:  ARTBOX, BLEEDBOX, BOUNDINGBOX, CROPBOX, MEDIABOX, TRIMBOX. */
	/* функция настроек для открытия PDF-файла. */
	myScriptString += "function myPDF_OpenOpt (myPdfPageN, myPdfRes){";
	myScriptString += "var myPdfOpOpt = new PDFOpenOptions();";
	myScriptString += "myPdfOpOpt.antiAlias = true;";
	myScriptString += "myPdfOpOpt.bitsPerChannel = BitsPerChannelType.EIGHT;";
	myScriptString += "myPdfOpOpt.constrainProportions = false;";
	myScriptString += "myPdfOpOpt.page = myPdfPageN;";
	myScriptString += "myPdfOpOpt.cropPage = CropToType." + outPdfCropPageType + ";";
	myScriptString += "myPdfOpOpt.resolution = myPdfRes;";
	myScriptString += "myPdfOpOpt.suppressWarnings = true;";
	myScriptString += "myPdfOpOpt.usePageNumber = true;";
	myScriptString += "try{myPdfOpOpt.mode = OpenDocumentMode." + outRastrColorMode + ";} catch (error) {}";
	myScriptString += "return myPdfOpOpt;}";
	
	/* функция настроек для открытия EPS-файла. */
	myScriptString += "function myEPS_OpenOpt (myEpsRes){";
	myScriptString += "var myEpsOpOpt = new EPSOpenOptions ();";
	myScriptString += "myEpsOpOpt.antiAlias = true;";
	myScriptString += "myEpsOpOpt.constrainProportions = true;";
	myScriptString += "myEpsOpOpt.mode = OpenDocumentMode." + outRastrColorMode + ";";
	myScriptString += "myEpsOpOpt.resolution = myEpsRes;";
	myScriptString += "return myEpsOpOpt;}";
	
	/* функция настроек для записи в формат Photoshop EPS */
	/* Save Encoding:  ASCII, BINARY, JPEGHIGH, JPEGLOW, JPEGMAXIMUM, JPEGMEDIUM */
	myScriptString += "function myEPS_SaveOpt (){";
	myScriptString += "var epsSaveOptions = new EPSSaveOptions ();";
	myScriptString += "epsSaveOptions.embedColorProfile = false;";
	myScriptString += "epsSaveOptions.encoding = SaveEncoding." + outEpsSaveEncoding + ";";
	myScriptString += "epsSaveOptions.halftoneScreen = false;";
	myScriptString += "epsSaveOptions.interpolation = false;";
	myScriptString += "epsSaveOptions.preview = Preview.EIGHTBITTIFF;";
	myScriptString += "epsSaveOptions.psColorManagement = false;";
	myScriptString += "epsSaveOptions.transferFunction = false;";
	myScriptString += "epsSaveOptions.transparentWhites = false;";
	myScriptString += "epsSaveOptions.vectorData = false;";
	myScriptString += "return epsSaveOptions;}";	
	
	/* функция конвертирования слоев документа, исключая  Background, в Smart Objects */
	myScriptString += "function layersToSmartObj (myL_Document){";
	myScriptString += "var myLyr_Visible;";
	myScriptString += "for (var lc = 0; lc < myL_Document.artLayers.length; lc++){";
	myScriptString += "if (!myL_Document.artLayers[lc].isBackgroundLayer){";
	myScriptString += "myLyr_Visible = myL_Document.artLayers[lc].visible;";
	myScriptString += "app.activeDocument.activeLayer = myL_Document.artLayers[lc];";
	myScriptString += "var newPL = stringIDToTypeID (\"newPlacedLayer\");";
	myScriptString += "executeAction( newPL, undefined, DialogModes.NO ); app.activeDocument.activeLayer.visible = myLyr_Visible;}}";
	myScriptString += "for (var lsetC = 0; lsetC < myL_Document.layerSets.length; lsetC++){";
	myScriptString += "layersToSmartObj (myL_Document.layerSets [lsetC]);}}"; // рекурсивный вызов
	
	/* функция выполняет unlink и unlock для всех слоев документа, включая группы - layerSets */
	myScriptString += "function unLLTrnff_Sets (myDoc_layers){";
	myScriptString += "for (var alC = 0; alC < myDoc_layers.artLayers.length; alC++){";
	myScriptString += "unLock_unLinkAL (myDoc_layers.artLayers [alC]);}";
	myScriptString += "for (var imLs = 0; imLs < myDoc_layers.layerSets.length; imLs++){";
	myScriptString += "unLock_unLinkAL (myDoc_layers.layerSets [imLs]);";
	myScriptString += "unLLTrnff_Sets (myDoc_layers.layerSets [imLs]);}}"; // рекурсивный вызов
	
	/* функция выполняет unlink, unlock для слоя a_layer*/
	myScriptString += "function unLock_unLinkAL (a_layer){";
	myScriptString += "var myLrsVisible = new Array();";
	myScriptString += "var myL_Visible = a_layer.visible;";
	myScriptString += "var myUnlinkLayer;";
	myScriptString += "for (var i = 0; i < a_layer.linkedLayers.length; i ++)  {myLrsVisible.push (a_layer.linkedLayers[i].visible);}"; 
	myScriptString += "for (i = 0; i < a_layer.linkedLayers.length; i ++)  {myUnlinkLayer = a_layer.linkedLayers[i]; myUnlinkLayer.unlink(); myUnlinkLayer.visible = myLrsVisible[i];}"; 
	myScriptString += "try {if (a_layer.allLocked) a_layer.allLocked = false;} catch (e){}";
	myScriptString += "try {if (a_layer.positionLocked) a_layer.positionLocked = false;} catch (e){}";
	myScriptString += "try {if (a_layer.pixelsLocked) a_layer.pixelsLocked = false;} catch (e){}";
	myScriptString += "try {if (a_layer.transparentPixelsLocked) a_layer.transparentPixelsLocked = false;} catch (e){}";
	myScriptString += "try {a_layer.visible = myL_Visible;} catch (e){}}";
	
	/* функция выполняет горизонтальный сдвиг объектов изображения: 
	сдвигаются все слои, пути, дополнительные каналы,
	угол - myAngle (град.) */
	myScriptString += "function myShearXAngle ( myAngle ){";
	myScriptString += "var myDocH = app.activeDocument.height;";
	myScriptString += "var myDocW = app.activeDocument.width;";
	myScriptString += "var myCanvasOffset = myDocH*Math.tan( Math.abs (myAngle) * Math.PI/180 );";
	myScriptString += "app.activeDocument.resizeCanvas (myDocW + myCanvasOffset, myDocH, AnchorPosition.MIDDLECENTER);";
	myScriptString += "myDocH = app.activeDocument.height;";
	myScriptString += "myDocW = app.activeDocument.width;";
	myScriptString += "var myLayerVisible = true;";
	myScriptString += "var myLayerOverD = 0;";
	// слои документа (Art Layers)
	myScriptString += "for (var imObC = 0; imObC < app.activeDocument.layers.length; imObC++)";
	myScriptString += "{myLayerVisible = app.activeDocument.layers[imObC].visible;";
	myScriptString += "app.activeDocument.activeLayer = app.activeDocument.layers[imObC];";
	myScriptString += "try{app.activeDocument.activeLayer.visible = true;} catch(e){}";
	myScriptString += "if (app.activeDocument.activeLayer.kind == LayerKind.TEXT | app.activeDocument.activeLayer.kind == LayerKind.SMARTOBJECT)";
	myScriptString += "{app.activeDocument.activeLayer.rasterize(RasterizeType.ENTIRELAYER);}";
	myScriptString += "app.activeDocument.selection.selectAll();";
	myScriptString += "myLayerOverD = 2 * deltaBnds_LayerSelect();";
	myScriptString += "if (myLayerOverD > 0) {app.activeDocument.resizeCanvas (myDocW + myLayerOverD, myDocH + myLayerOverD, AnchorPosition.MIDDLECENTER);";
	myScriptString += "app.activeDocument.selection.selectAll();}";
	myScriptString += "objSkewXAngle ( myAngle, \"Lyr \" );";	
	myScriptString += "try{app.activeDocument.activeLayer.visible = myLayerVisible;} catch(e){}}";
	myScriptString += "app.activeDocument.selection.deselect();";
	// пути (Path Items)
	myScriptString += "for (imObC = 0; imObC < app.activeDocument.pathItems.length; imObC++)";
	myScriptString += "{app.activeDocument.pathItems[imObC].select(); objSkewXAngle ( myAngle, \"Path\" );}";
	myScriptString += "app.activeDocument.selection.deselect();";
	// дополнительные каналы
	myScriptString += "var myImActChannels = new Array();";
	myScriptString += "for (imObC = 0; imObC < app.activeDocument.channels.length; imObC++){"
	myScriptString += "if(app.activeDocument.channels[imObC].kind != ChannelType.COMPONENT) {myImActChannels.push(app.activeDocument.channels[imObC]);}}";
	myScriptString += "if(myImActChannels.length > 0) {app.activeDocument.activeChannels = myImActChannels; objSkewXAngle ( myAngle, \"Lyr \");}}";
	
	/* функция вычисления максимальной разницы геометрических координат текущего слоя и документа */
	myScriptString += "function deltaBnds_LayerSelect(){";
	myScriptString += "var myExpVal = 0;";
	myScriptString += "var myLayerBounds = app.activeDocument.activeLayer.bounds;";
	myScriptString += "var mySelBounds = app.activeDocument.selection.bounds;";
	myScriptString += "var myBndsX0_Y0min = Math.min (myLayerBounds[0], myLayerBounds[1]);";
	myScriptString += "var myBndsX1_Y1min = Math.min (mySelBounds[2] - myLayerBounds[2], mySelBounds[3] - myLayerBounds[3]);";
	myScriptString += "var myBndsMin = Math.min(myBndsX0_Y0min, myBndsX1_Y1min);";
	myScriptString += "if(myBndsMin < 0) myExpVal = Math.abs (Math.floor (myBndsMin));";
	myScriptString += "return myExpVal;}";
	
	/* функция выполняет горизонтальный сдвиг теущего обьекта изображения: угол - skewAngle (град.) */
	myScriptString += "function objSkewXAngle ( skewAngle, objType ){";
	myScriptString += "var Tr_Name = charIDToTypeID( \"Trnf\" );";
	myScriptString += "var nt_Descriptor = new ActionDescriptor();";
	myScriptString += "var id15 = charIDToTypeID( \"null\" );";
	myScriptString += "var newActRef = new ActionReference();";
	myScriptString += "var id16 = charIDToTypeID( objType );";
	myScriptString += "var id17 = charIDToTypeID( \"Ordn\" );";
	myScriptString += "var id18 = charIDToTypeID( \"Trgt\" );";
	myScriptString += "newActRef.putEnumerated( id16, id17, id18 );";
	myScriptString += "nt_Descriptor.putReference( id15, newActRef );";
	myScriptString += "var id19 = charIDToTypeID( \"FTcs\" );";
	myScriptString += "var id20 = charIDToTypeID( \"QCSt\" );";
	myScriptString += "var id21 = charIDToTypeID( \"Qcsa\" );";
	myScriptString += "nt_Descriptor.putEnumerated( id19, id20, id21 );";
	myScriptString += "var id22 = charIDToTypeID( \"Ofst\" );";
	myScriptString += "var nt_Descriptor2 = new ActionDescriptor();";
	myScriptString += "var id23 = charIDToTypeID( \"Hrzn\" );";
	myScriptString += "var id24 = charIDToTypeID( \"#Rlt\" );";
	myScriptString += "nt_Descriptor2.putUnitDouble( id23, id24, 0.000000 );";
	myScriptString += "var id25 = charIDToTypeID( \"Vrtc\" );";
	myScriptString += "var id26 = charIDToTypeID( \"#Rlt\" );";
	myScriptString += "nt_Descriptor2.putUnitDouble( id25, id26, 0.000000 );";
	myScriptString += "var id27 = charIDToTypeID( \"Ofst\" );";
	myScriptString += "nt_Descriptor.putObject( id22, id27, nt_Descriptor2 );";
	myScriptString += "var id28 = charIDToTypeID( \"Skew\" );";
	myScriptString += "var nt_Descriptor3 = new ActionDescriptor();";
	myScriptString += "var id29 = charIDToTypeID( \"Hrzn\" );";
	myScriptString += "var id30 = charIDToTypeID( \"#Ang\" );";
	myScriptString += "nt_Descriptor3.putUnitDouble( id29, id30, skewAngle );";
	myScriptString += "var id31 = charIDToTypeID( \"Vrtc\" ); ";
	myScriptString += "var id32 = charIDToTypeID( \"#Ang\" );";
	myScriptString += "nt_Descriptor3.putUnitDouble( id31, id32, 0.000000 );";
	myScriptString += "var id33 = charIDToTypeID( \"Pnt \" );";
	myScriptString += "nt_Descriptor.putObject( id28, id33, nt_Descriptor3 );";
	myScriptString += "try {executeAction( Tr_Name, nt_Descriptor, DialogModes.NO );} catch(e){}}";
	
	/* функция выполняет пошаговое уменьшение высоты или ширины изображения. */
	myScriptString += "function WidthOrHeightRsmpl (Act_Image, khorSc, kverSc, steProc, RsmpMeth)";
	myScriptString += "{"
	myScriptString += "var horScaleW = Act_Image.width;";
	myScriptString += "var vertScaleH = Act_Image.height;";	
	myScriptString += "var stKf = 1 + steProc;";	
	myScriptString += "if( khorSc > kverSc ){"; 	
	myScriptString += "while (khorSc/kverSc > stKf ) {";
	myScriptString += "Act_Image.resizeImage (horScaleW, vertScaleH / stKf, r_effRes, RsmpMeth);";
	myScriptString += "stKf += steProc;} Act_Image.resizeImage (horScaleW, kverSc*vertScaleH/khorSc, r_effRes, RsmpMeth);}";
	myScriptString += "else{"; 	
	myScriptString += "while (kverSc/khorSc > stKf ) {";
	myScriptString += "Act_Image.resizeImage (horScaleW / stKf, vertScaleH, r_effRes, RsmpMeth);";
	myScriptString += "stKf += steProc;} Act_Image.resizeImage (khorSc*horScaleW/kverSc, vertScaleH, r_effRes, RsmpMeth);}";
	myScriptString += "}"
	
	/* функция "сливает слои", меняет геометрические размеры изображения, 
	в соответствии с параметрами его фрейма в InDesign-документе,
	записывает в файл формата Photoshop EPS, закрывает документ. */
	myScriptString += "function save_toPhotoshopEPS (pathToEPS_file){";
	myScriptString += "var epsFile = new File(pathToEPS_file);"; 
	myScriptString += "app.activeDocument.flatten();";
	// Flip Canvas
	myScriptString += "if( k_verSc < 0 ) {app.activeDocument.flipCanvas (Direction.VERTICAL); k_verSc = - k_verSc;}"; 		
	// Resize
	myScriptString += "app.preferences.rulerUnits = Units.PIXELS;";
	if (outAutoChoiceResM == true) {myScriptString += "myResampleMethod = ResampleMethod.BICUBICSHARPER;";}
	myScriptString += "WidthOrHeightRsmpl (app.activeDocument, k_horSc, k_verSc, stPrResize, myResampleMethod);";
	// Skew
	if (outAutoChoiceResM == true) {myScriptString += "app.preferences.interpolation = ResampleMethod.BICUBICSHARPER;";}
	myScriptString += "if( Math.abs (imShearAngle) > 0.01 ) myShearXAngle ( imShearAngle );";
	// Rotate canvas
	myScriptString += "if( Math.abs (imRotationAngle) > 0.01 ) app.activeDocument.rotateCanvas (imRotationAngle);";
	// Crop 	
	myScriptString += "app.preferences.rulerUnits = Units.MM;";
	myScriptString += "var CrboundsV = new Array (cr_ImBnds[1] - imBleed , cr_ImBnds[0] - imBleed, app.activeDocument.width + cr_ImBnds[3] + imBleed , app.activeDocument.height + cr_ImBnds[2] + imBleed);";
	myScriptString += "app.activeDocument.crop ( CrboundsV );";	
	myScriptString += "var kompK_RW = - imBleed + (app.activeDocument.width - cr_ImBnds[4])/2;";
	myScriptString += "var kompK_RH = - imBleed  + (app.activeDocument.height - cr_ImBnds[5])/2;";
	myScriptString += "CrboundsV = [kompK_RW, kompK_RH, app.activeDocument.width - kompK_RW, app.activeDocument.height - kompK_RH];";
	myScriptString += "app.activeDocument.crop ( CrboundsV );";
	// Save as
	myScriptString += "app.activeDocument.saveAs (epsFile, myEPS_SaveOpt (), false, Extension.LOWERCASE);";
	myScriptString += "app.activeDocument.close (SaveOptions.DONOTSAVECHANGES);}";
	/* создаем и выполняем объект BridgeTalk: */
	if (runAppBT("photoshop")) 
		{
			var myBTobj = new BridgeTalk;
			myBTobj.target = "photoshop";
			myBTobj.body = myScriptString;
			myBTobj.send();
		} 
	else {alert ("Photoshop is not running!");}
	// возвращаем исходные единицы измерения документа
	app.activeDocument.viewPreferences.rulerOrigin = oldRulerOrigin;
	app.activeDocument.viewPreferences.horizontalMeasurementUnits = oldActDocH_Measures;
	app.activeDocument.viewPreferences.verticalMeasurementUnits = oldActDocV_Measures;
exit();
}

/* ФУНКЦИИ: •••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• */
/* Функция проверки выделенного объекта.
Возвращает выделенное изображение.
"false" - при выделенном объекте, который не содержит изображений. */
function SEL_IMAGE (SelObj)
{
	var Result = false;
	var SelConstrName = SelObj.constructor.name;
	if (SelConstrName == "Image" | SelConstrName == "EPS" | SelConstrName == "PDF"  | SelConstrName == "PICT" | SelConstrName == "WMF") Result = SelObj;
	else if  (SelConstrName == "Rectangle" | SelConstrName == "Oval" | SelConstrName == "Polygon" )
		{
			var NGphcs = SelObj.allGraphics.length;
			if (NGphcs  > 0) {Result = SelObj.allGraphics[0]; app.select (Result);}
		}
return Result
}

/* Функция удаляет расширение файла,
возвращает строку от начала myFileName до первого (при myDotOrd = true)
или последнего символа точки (myDotOrd = false). */
function FileNameWtExt (myFileName, myDotOrd) 
{
	var myFileNamePath = String(myFileName);
	var myString = "";
	var myFileNEnd = myFileNamePath.lastIndexOf(".");
	if (myFileNEnd != -1) 
		{
			if (myDotOrd == true)
			// рекурсивный вызов функции
			myString = FileNameWtExt(myFileName.substr(0, myFileNEnd), true);
			else 
			myString = myFileName.substr(0, myFileNEnd);
		}
	else myString = myFileNamePath;
return myString;
}

/* Функция запуска приложения (функции BridgeTalk). */
function runAppBT (AdobeAppRun) 
{
	try {
		if (BridgeTalk.isRunning(AdobeAppRun)) {BridgeTalk.bringToFront (AdobeAppRun);}
		else {BridgeTalk.launch (AdobeAppRun); BridgeTalk.bringToFront (AdobeAppRun);}
		return true;} 
	catch (e) {return false;}
}

/* Функция возвращает массив параметров изображения 
(используется для трансформации копии связанного файла). 
myImParms[0] - полный путь связанного файла,
myImParms[1] - минимальный коэффициент отношения исходных эффективных разрешений и результирующего,
myImParms[2] - коэффициент вертикального масштабирования,
myImParms[3] - коэффициент горизонтального масштабирования,
myImParms[4] - угол вращения изображения (Rotation Angle),
myImParms[5] - угол горизонтального сдвига изображения (Shear X Angle),
myImParms[6] - массив разниц геометрических координат фрейма и его изображения,
myImParms[7] - трансформированный файл,
myImParms[8] - the unique ID of the Link. */
function currImageTransfPar (myTransfImage, outputRes, outputPath)
{
	var myImParms = new Array ();
	// 1.Коэффициенты:
	// 1.1) коэффициенты отношения исходного эффективного разрешения и результирующего
	var kEffectToBaseRes = 1; 
	try 
		{  var kEffectToBaseRes0 = myTransfImage.effectivePpi[0] / outputRes; // horizontal
			var kEffectToBaseRes1 = myTransfImage.effectivePpi[1] / outputRes; // vertical
			// выбираем меньший коэффициент (для изображений, масштабированных не пропорционально)
			kEffectToBaseRes = Math.min(kEffectToBaseRes0, kEffectToBaseRes1);
		} 
	catch (e) {}
	// 1.2) коэффициенты горизонтального и вертикального масштабирования
	var KabsHorSc = myTransfImage.horizontalScale / 100;
	var KabsVerSc = myTransfImage.verticalScale / 100;
	
	// 2. Углы вращения и горизонтального сдвига изображения (обратные значения)
	var imgRotAngle = - myTransfImage.rotationAngle;
	var imgShrAngle = - myTransfImage.shearAngle;
	
	// Заполняем массив
	myImParms.push(File(myTransfImage.itemLink.filePath));
	myImParms.push(kEffectToBaseRes);
	myImParms.push(KabsVerSc);
	myImParms.push(KabsHorSc);
	myImParms.push(imgRotAngle);
	myImParms.push(imgShrAngle);
	myImParms.push(FrImg_cropBounds (myTransfImage));
	myImParms.push(outputPath);
	myImParms.push(myTransfImage.itemLink.id);
return myImParms;
}

/* Функция возвращает массив разниц геометрических координат фрейма и его изображения. */
function FrImg_cropBounds (myCrImage) 
{
	var Frm_GB = myCrImage.parent.geometricBounds;
	var Img_GB = myCrImage.geometricBounds;
	var offs_GB = new Array();
	for (var gk = 0; gk < Frm_GB.length; gk++) offs_GB.push( Frm_GB[gk] - Img_GB[gk] );
	// ширина фрейма
	offs_GB.push( Frm_GB[3] - Frm_GB[1] );
	// высота фрейма
	offs_GB.push( Frm_GB[2] - Frm_GB[0] );
return offs_GB;
}

/* Функция определения типа Clipping Path изображения. */	
function myImageClippingPath(myGrImage)
{
	var myClippingPathTypes = new Array(["None", 1852796517], ["Detect Edges", 1685349735], ["Alpha Channel", 1634756707], ["Photoshop Path", 1886613620], ["User-modified Path", 1970106484]);
	var myObjClipPath = myGrImage.clippingPath.clippingType;
	for (var cpt = 0; cpt < myClippingPathTypes.length; cpt++)
	if (myObjClipPath == myClippingPathTypes[cpt][1]) var myCPtypeStr = myClippingPathTypes[cpt][0];
return myCPtypeStr;
}

/* Функция возвращает истинность при обнаружении слова myWord в строке myT_String. */	
function findWord_inStr(myT_String, myWord)
{
	myT_String = String(myT_String);
	var myWrdLength = myWord.length;
	for (var chCnt = 0; chCnt < myT_String.length; chCnt++)
	{if (myT_String[chCnt] == myWord[0] & myT_String.substr(chCnt, myWrdLength) == myWord) return true}
return false;
}

// 29.04.2008