/* Find Overflows 1.2
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
An InDesign CS2-CS3 JavaScript
OS: Mac OS X, Windows XP.
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
Cкрипт предназначен для выделения текстовых  фреймов 
и ячеек таблиц документа с переполнением содержания.

Проверка осуществляется постранично.
Игнорируются объекты, находящиеся вне страниц документа (PB).
∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙
© 2008 Дмитрий Лапаев 
(d.lapaev@univest-prepress.com, d.lapaev@gmail.com).
*/
main();
function main()
{
	if(app.documents.length != 0)
		{
			if(app.activeDocument.textFrames.length != 0) overFlowsFrTcDoc(app.activeDocument);
			else {alert("No text frames in " + app.activeDocument.name + "!");}
		}
	else {alert("Please open a document and try again.");}
exit();
}

/* Функция поиска переполненных текстовых фреймов и ячеек таблиц документа постранично. 
Формирует отчет проверки текстовых фреймов и таблиц. */
function overFlowsFrTcDoc(myInDocument)
{
	var myIshActPage = app.activeWindow.activePage;
	var overFlowsDocCounter = new Array(0, 0, 0, 0, 0);
	var overFlowsPageCounter;
	for(var ip = 0; ip < myInDocument.pages.length; ip++)
		{
			app.activeWindow.activePage = myInDocument.pages[ip];
			// Fit Page in Window
			app.activeWindow.zoom(2053534832) ;
			overFlowsPageCounter = overFlowTextFrames(myInDocument.pages[ip]);
			for(var overPc = 0; overPc < overFlowsDocCounter.length; overPc++)
			overFlowsDocCounter[overPc] += overFlowsPageCounter[overPc];
		}		
	var myTxtReport = "";
	if (overFlowsDocCounter[3] > 0) myTxtReport += "\n• " + overFlowsDocCounter[3] + " Frames";
	if (overFlowsDocCounter[0] > 0) myTxtReport += "\n• " + overFlowsDocCounter[0] + " Cells";
	myTxtReport += "\n\nProcessed:"
	myTxtReport += "\n• " + myInDocument.pages.length + " Pages";
	myTxtReport += "\n• " + overFlowsDocCounter[4] + " Text Frames";
	myTxtReport += "\n• " + overFlowsDocCounter[2] + " Tables";
	myTxtReport += "\n• " + overFlowsDocCounter[1] + " Cells";
	if (overFlowsDocCounter[0] + overFlowsDocCounter[3] !=0) alert("Found Overflows:" + myTxtReport);
	else alert("Not Found Overflows!" + myTxtReport);
	app.activeWindow.activePage = myIshActPage;
	app.activeWindow.zoom (ZoomOptions.fitPage);
}

/* Функция поиска переполненных текстовых фреймов и ячеек таблиц объекта myIndesObj. 
Возвращает массив счетчиков overFTFrCounter:
overFTFrCounter [0] - счетчик переполненных ячеек,
overFTFrCounter [1] - счетчик обработанных ячеек,
overFTFrCounter [2] - счетчик обработанных таблиц,
overFTFrCounter [3] - счетчик переполненных текстовых фреймов,
overFTFrCounter [4] - счетчик обработанных текстовых фреймов.
*/
function overFlowTextFrames(myIndesObj)
{
	var overFTFrCounter = new Array(0, 0, 0, 0, 0);
	var recOverRecursCount;
	overFTFrCounter[4] += myIndesObj.textFrames.length;
	for(var i = 0; i < myIndesObj.textFrames.length; i++)
		{
			recOverRecursCount = overFlowTextCells(myIndesObj.textFrames[i]);
			for(var recTf = 0; recTf < recOverRecursCount.length; recTf++)
			overFTFrCounter[recTf] += recOverRecursCount[recTf];
			if(myIndesObj.textFrames[i].overflows == true)
				{
					overFTFrCounter[3]++;
					app.activeWindow.select(myIndesObj.textFrames[i]);
					if(confirm("Continue search overflows?") == false) exit();
				}
			// рекурсивный вызов для вложенных текстовых фреймов
			recOverRecursCount = overFlowTextFrames(myIndesObj.textFrames[i]);
			for(recTf = 0; recTf < overFTFrCounter.length; recTf++)
			overFTFrCounter[recTf] += recOverRecursCount[recTf];
		}
return overFTFrCounter;
}

/* Функция поиска переполненных ячеек таблиц объекта myInDObj. 
Возвращает массив счетчиков overFCTxCounter:
overFCTxCounter [0] - счетчик переполненных ячеек,
overFCTxCounter [1] - счетчик обработанных ячеек,
overFCTxCounter [2] - счетчик обработанных таблиц.
*/
function overFlowTextCells(myInDObj)
{
	var overFCTxCounter = new Array(0, 0, 0);
	var recCountersVol;
	overFCTxCounter[2] += myInDObj.tables.length;
	for(var it = 0; it < myInDObj.tables.length; it++)
		{
			overFCTxCounter[1] += myInDObj.tables[it].cells.length;
			for(var ic = 0; ic < myInDObj.tables[it].cells.length; ic++)
				{
					if(myInDObj.tables[it].cells[ic].overflows == true)
						{
							overFCTxCounter[0]++;
							app.activeWindow.select(myInDObj.tables[it].cells[ic]);
							if(confirm("Continue search overflows?") == false) exit();
						}
					// рекурсивный вызов для вложенных таблиц
					recCountersVol = overFlowTextCells(myInDObj.tables[it].cells[ic]);
					for(var recCv = 0; recCv < overFCTxCounter.length; recCv++)
					overFCTxCounter[recCv] += recCountersVol[recCv];
				}
		}
return overFCTxCounter;
}
// 10 января 2008 года