//22.12.2005
/**
 *Функция удаляет столбцы таблицы, которые содежат все пустые ячейки, img и checkbox без текста
 *осуществляет проверку, что это таблица, что имеет правильный формат, в противном случае завершает работу и возвращает код ошибки:
 *1 - нет строк; 2 - нет ячеек в строке; 3 - число ячеек не одинаково во всех строках; 4 - входной параметр не таблица 
 */
function delete_empty_cells( table )
{
	if ( table.tagName != "TABLE" ) return 4;
	tr_mpd = table.rows;
	count_tr = tr_mpd.length;
	if ( count_tr == 0 ) return 1;
	
	td_mpd = tr_mpd[0].cells;
	count_td = td_mpd.length
	if ( count_td == 0 ) return 2;
	count_cell_in_row = 0;
	for ( ii = 0; ii < count_td; ii++ )
		count_cell_in_row += td_mpd[ii].colSpan;//число столбцов - реальное

	reg = /\<img|checkbox/ig;
	del_cells = new Array( count_cell_in_row );//помечаются столбцы для удаления (1 - удалять)
	row_buf = 0;
	for ( ii = 0; ii < count_tr; ii++ )
	{
		td_mpd = tr_mpd[ii].cells;
		count_td = td_mpd.length
		count_colSpan = 0;

		if ( row_buf > 0 )
		{ 
			row_buf = -1;
			continue;
		}		
		
		for ( jj = 0; jj < count_td; jj++ )
		{
			if ( ( td_mpd[jj].rowSpan > 1 ) && ( row_buf == 0 ) )//обрабатываем ситуацию, когда rowSpan > 1
				row_buf = td_mpd[jj].rowSpan - 1;
			
			if ( del_cells[count_colSpan] != 0 )
			{
				str_buf = td_mpd[jj].innerText;
				str_buf = str_buf.replace(/[\s]*/, '');//удаляем пробелы
				reg.exec('');
				elem = reg.exec( td_mpd[jj].innerHTML );
				if ( ( str_buf == '' ) && ( ( elem != null ) || ( ii == 0 ) ) )//ячейки не содержит текст и содержит елем для уд. или это первая строка
				{
					if ( del_cells[count_colSpan] == 3 )//если в двух ячейка текст
						del_cells[count_colSpan] = 0;
						else del_cells[count_colSpan] = 1;
				}
				if ( ( str_buf != '' ) && ( elem != null ) )//если в ячейке ел для уд и текст
					del_cells[count_colSpan] = 0;
				if ( ( str_buf != '' ) && ( elem == null ) && ( td_mpd[jj].colSpan == 1 ) )//если в ячейке только текст
				{
					if ( del_cells[count_colSpan] >= 2 )//если в этом столбце уже встречался текст
						del_cells[count_colSpan] = 3;
						else del_cells[count_colSpan] = 2;
				}
				if ( ( del_cells[count_colSpan] == 1 ) && ( str_buf != '' ) )//если в столбце после элем для уд, встретился текст
					del_cells[count_colSpan] = 0;
			}
			count_colSpan += td_mpd[jj].colSpan;
		}
		if ( count_colSpan != count_cell_in_row ) return 3;//если число colspan в сумме по ячейкам  строки не совпадает, то не обрабатываем таблицу!
	}
	
	//удаление ячеек
	row_buf = 0;
	for ( ii = 0; ii < count_tr; ii++ )
	{
		td_mpd = tr_mpd[ii].cells;
		count_td = td_mpd.length - 1;
		count_colSpan = count_cell_in_row - 1;
		
		if ( row_buf > 0 ) 
		{
			row_buf = -1;
			continue;		
		}
		
		for ( jj = count_td; jj >= 0; jj-- )
		{
			if ( ( td_mpd[jj].rowSpan > 1 ) && ( row_buf == 0 ) )//обрабатываем ситуацию, когда rowSpan > 1
				row_buf = td_mpd[jj].rowSpan;
				
			if ( ( del_cells[count_colSpan] == 1 ) && ( td_mpd[jj].colSpan == 1 ) )
			{
				tr_mpd[ii].deleteCell( jj );
				count_colSpan -= 1;
			}
			else if ( td_mpd[jj].colSpan > 1 )
				{
					del_buf = 0;
					for ( k = 0; k < td_mpd[jj].colSpan; k++ )
					{
						if ( del_cells[count_colSpan] == 1 )
							del_buf += 1;
						count_colSpan -= 1;
					}
					if ( del_buf == td_mpd[jj].colSpan )
						tr_mpd[ii].deleteCell( jj );
						else td_mpd[jj].colSpan -= del_buf;
				}			
				else count_colSpan -= 1;
		}
	}
	
	//Удаляем пустые строки ( если в них нет таблиц )
	ii = count_tr - 1;
	while ( ii >= 0 )
	{
		str_buf = tr_mpd[ii].innerText;
		str_buf = str_buf.replace(/[\s]*/, '');//удаляем пробелы
		if ( str_buf == '' )
		{
			tb_buf = tr_mpd[ii].all.tags( 'table' );
			if ( tb_buf.length == 0 ) 
				table.deleteRow( ii );
		}
		ii--;
	}	
	
	//Удаляем таблицу ( если она пустая ) - при неообходимости можно снять коммент
	//str_buf = table.innerText;
	//str_buf = str_buf.replace(/[\s]*/, '');//удаляем пробелы
	/*
	if ( str_buf == '' )
	{
		tb_buf = tr_mpd[ii].all.tags( 'table' );
		if ( tb_buf.length == 0 ) 
			table.outerHTML = '';
	}
	*/
	return 0;
}
//


/**
 *Формирует страницу, как верси для печати
 *doc - документ
 *return 0 - нет ошибок; 1 - в случае если входной параметр не документ
 */
function sleep_elements( doc )
{
	if ( doc.nodeName != "#document" ) return 1;
	//последовательность элеменнов в массиве имеет значение!
	arr_del_elements = new Array ( 'input', 'select', 'textarea', 'a', 'table', 'img' );
	count_elem_del = arr_del_elements.length;
	for ( i_elem = 0; i_elem < count_elem_del; i_elem++ )
	{
		tag = doc.all.tags( arr_del_elements[i_elem] );
		i = tag.length - 1;
		while ( i >= 0  )
		{
			switch ( i_elem )
			{
			case 0:
			{
				if ( ( tag[i].type == 'button' ) ||
			 		( tag[i].type == 'submit' ) ||
			 		( tag[i].type == 'file' ) ||
			 		( tag[i].type == 'image' ) )
				{
					tag[i].outerHTML = '';
				}
				else if ( tag[i].type == 'text' )
				{
					tag[i].outerHTML = tag[i].value;
				}
				else if ( ( tag[i].type == 'radio' ) || ( tag[i].type == 'checkbox' ) )
				{
					tag[i].disabled = true;
				}				
			}break;
			case 1 :
			{
				sel = tag[i].all.item( tag[i].selectedIndex );
				tag[i].outerHTML = sel.innerText;				
			}break;
			case 2 :
			case 3 :
			{
				tag[i].outerHTML = tag[i].innerHTML
			}break;
			case 4:
				{//не учитываем первую таблицу, она в frame.php !!!
				if ( ( tag[i].bgColor.toUpperCase() == '#FFFFFF' ) && ( i > 0 ) )
				{
					tag[i].bgColor = '#000000';
					delete_empty_cells( tag[i] );
				}				
			}break;
			case 5:
			{
				tag[i].outerHTML = '';
			}
			}
			i--;			
		}
	}
	return 0;
}

/**
 *Функция удаляет из текста список слов прописанных в перемнной string через '@'
 *in_text - входной текст
 *del_words - строка формата word1@word2@  ....wordn
 *@return - string модифицированный текст
 */
function delete_words( in_text, del_words )
{
	if ( del_words == '' ) return in_text;
	arr_del_words = del_words.split( '@' );
	count = arr_del_words.length;
	for ( i = 0; i < count; i++ )
		while ( in_text.indexOf( arr_del_words[i] ) != -1 )
			in_text = in_text.replace( arr_del_words[i], '' );
	return in_text;
}

/**
 *Функция формирует новую страницу, вырезает из основной через div id=MainCVS
 */
function PrintableVersion()
{
	id_name = new Date( window.document.lastModified );
	id_name = 'PrintWindow_'+id_name.getTime();
	PrintWin = window.open("", id_name, "resizable=yes, status=yes,scrollbars=yes,toolbar=no, menubar=yes");
	PrintWin.document.write("<html><head><title>Версия для печати</title> <link rel='stylesheet' type='text/css' href='/sitedesign/standard/print.css' /></head><body>");
	PrintWin.document.write( "<div id='docdoc'></div>" );
	PrintWin.document.write("</body></html>");
	window.focus();
	PrintWin.document.all['docdoc'].innerHTML = delete_words( document.all['MainCVS'].innerHTML, del_words );
	sleep_elements( PrintWin.document );
	PrintWin.document.close();
	PrintWin.focus();
	return false;
}

/**
 * Функция формирует новую страницу по содержимому документа
 *
 * @param string  del_words - строка формата word1@word2@  ....wordn //список слов можно получить из site.ini [PrintException] - Words
 */
function PrintableVersionAdv( del_words )
{
	id_name = new Date( window.document.lastModified );
	id_name = 'PrintWindow_'+id_name.getTime();
	PrintWin = window.open("", id_name, "resizable=yes, status=yes,scrollbars=yes,toolbar=no, menubar=yes");
	PrintWin.document.write("<html><head><title>Версия для печати</title> <link rel='stylesheet' type='text/css' href='/sitedesign/standard/print.css' /></head><body>");
	PrintWin.document.write( "<div id='docdoc'></div>" );
	PrintWin.document.write("</body></html>");
	window.focus();
	PrintWin.document.all['docdoc'].innerHTML = delete_words( window.document.body.innerHTML, del_words );
	sleep_elements( PrintWin.document );
	PrintWin.document.close();
	PrintWin.focus();
	return false;
}