/*========================================================================================
(c) Dmitriy N. Sakharov
TableFit v1.0

Скрипт за счет увеличения на заданный шаг отступов между строками таблицы растягивает ее
по вертикали до нижней границы фрейма на каждой полосе.
Можно исключать обработку начала или конца таблицы.
Максимально возможные значения отступов и шаг увеличения устанавливаются заранее.
Чем меньше шаг, тем дольше работает скрипт, но при большом шаге возможно будет заметна разница 
в отступах строк на одной полосе.
Если достигнуто максимальное значение отступа, то обработка в данном фрейме прекращается, 
и в конце работы скрипта сообщаются все номера страниц, где это произошло.
Перед запуском скрипта необходимо поставить курсор в таблицу, которую нужно обрабатывать.

Скрипт работает довольно медленно, но главное - результат!

P.S. Если в таблицах есть Footer Rows, то как будет работать скрипт пока неизвестно (не было необходимости это проверять).

Вопросы и замечания по работе скрипта направляйте на sakhar@mail.ru
=========================================================================================*/


with (app) {
	if(app.documents.length==0){
		alert("Нет открытых документов!");
		exit();
	}
	if(selection.length==0){
		alert("Поставьте курсор в таблицу и попробуйте еще раз!");
		exit();
	}
	switch (app.selection[0].constructor.name){
    	case "InsertionPoint": var myTable = app.selection[0].parent.parent; break;
    	case "Text": var myTable = app.selection[0].parent.parent; break;
    	case "Word": var myTable = app.selection[0].parent.parent; break;
    	case "Character": var myTable = app.selection[0].parent.parent; break;
    	case "Paragraph": var myTable = app.selection[0].parent.parent; break;
    	case "Cell": var myTable = app.selection[0].parent; break;
    	case "Table": var myTable = app.selection[0]; break;
	}	
	if(myTable.constructor.name != "Table"){
			alert("Поставьте курсор в таблицу и попробуйте еще раз!");
			exit();
	}
	var myRows = myTable.rows;
    var myLim = myRows.length;
    var myFlag;
    var myPageErr = new Array();
    var t = 0;
    var myTopLim = 1.2;			//Отступ строки сверху
    var myBottomLim = 1.4;		//Отступ строки снизу
    var myStep = 0.01;			//Шаг
    var myTableBegin = 0;
    var myTableEnd = 0;    
    var myPageErr1 = myPageErr2 = "";
    // Создаем диалог
	var myDialog = dialogs.add({name:"TableFit v1.0"});
	// Подготовка
	with (myDialog.dialogColumns.add()) {
		with (dialogRows.add().borderPanels.add().dialogColumns.add()) {
			with (dialogRows.add()) {				
				staticTexts.add({staticLabel:"Обрабатывать: начало таблицы "});
				var myDialogTableBegin = checkboxControls.add({});
				myDialogTableBegin.checkedState = true;
				staticTexts.add({staticLabel:" конец таблицы "});
				var myDialogTableEnd = checkboxControls.add({});
				myDialogTableEnd.checkedState = true;
			}							
			with (dialogRows.add()) {
				staticTexts.add({staticLabel:"Допустимые отступы: сверху "});
				var myDialogTopLim = realEditboxes.add({editValue:myTopLim});
				staticTexts.add({staticLabel:" снизу "});
				var myDialogBottomLim = realEditboxes.add({editValue:myBottomLim});
			}
			with (dialogRows.add()) {
				staticTexts.add({staticLabel:"Шаг увеличения отступа: "});
				var myDialogStep = realEditboxes.add({editValue:myStep});
			}
		}
		with (dialogRows.add()) {			
			dialogColumns.add().staticTexts.add({staticLabel:"(с) Dmitriy N. Sakharov    sakhar@mail.ru"});
		}
	}
	// Показываем
	var myRes = myDialog.show();
	if (!myRes) {
		myDialog.destroy();
		exit();
	}	
	if (!myDialogTableBegin.checkedState) {
		myTableBegin = 1;
	}
	if (!myDialogTableEnd.checkedState) {
		myTableEnd = 1;
	}
	myTopLim = myDialogTopLim.editValue;
	myBottomLim = myDialogBottomLim.editValue;
	myStep = myDialogStep.editValue;	
    var myStartRows = new Array();    
    myStartRows[0] = myTable.headerRowCount;
    var i = 1;
    var myPrevTF = myTable.rows[myTable.headerRowCount].cells[0].texts[0].parentTextFrames[0];
	for (j = myTable.headerRowCount; j < myLim; j++) {
        myCurTF = myRows[j].cells[0].texts[0].parentTextFrames[0];
        if (myCurTF != myPrevTF) {
        	myStartRows[i] = j;
        	i++;
        }
		myPrevTF = myCurTF;
    }
    myStartRows[i] = myLim;
    var myLength = myStartRows.length;
    //Растягивание таблицы до границы фрейма на каждой полосе
    for (q = myTableBegin; q < (myLength - 1 - myTableEnd); q++) {
    	myStartTF = myTable.rows[(myStartRows[q])].cells[0].texts[0].parentTextFrames[0];    	
    	myFlag = 0;
    	do {
    		for (x = myStartRows[q]; x <= (myStartRows[q+1] - 1); x++) {
				if ((myTable.rows[x].topInset + myStep) > myTopLim || (myTable.rows[x].bottomInset + myStep) > myBottomLim) {					
					myFlag = 1;
					myPageErr[t] = myTable.rows[x].cells[0].texts[0].parentTextFrames[0].parent.name;
					t++;
					myPageErr1 = "На страницах: ";
					myPageErr2 = " таблица до края фрейма не дотянута, \nт. к. превышены значения максимальных отступов!\n\n";
					break;
				}
				myTable.rows[x].topInset = myTable.rows[x].topInset + myStep;
				myTable.rows[x].bottomInset = myTable.rows[x].bottomInset + myStep;
				myLastTF = myRows[(myStartRows[q+1])-1].cells[0].texts[0].parentTextFrames[0];
				if (myLastTF != myStartTF) {
					myTable.rows[x].topInset = myTable.rows[x].topInset - myStep;
					myTable.rows[x].bottomInset = myTable.rows[x].bottomInset - myStep;
					myFlag = 1;
					break;
				}
			}
    	}while(myFlag == 0)
    }
	alert("Обработка завершена!\n\n" + myPageErr1 + myPageErr + myPageErr2 + "(с) Dmitriy N. Sakharov \n sakhar@mail.ru");	 
}