// Инициализация частоупотребимых объектов ActiveX
var WshShell = new ActiveXObject("WScript.Shell");
var FSO = new ActiveXObject("Scripting.FileSystemObject");

// Удалает все дочерние элементы узла DOM
function RemoveChildren(node) {
	while (node.firstChild) node.removeChild(node.firstChild);
}

// Содержится элемент в массиве или нет?
function IsContainArray(Arr, elem){
	return (typeof(GetElementIndex(Arr, elem)) == 'number')
}

// Возвращает индекс элемента в массиве
function GetElementIndex(Arr, elem){
	var i = 0;
	while(Arr[i]){
		if (Arr[i] == elem) return i;
		i++;
	}
}

// Преобразует HTML стринг в текст
var tmp = document.createElement("DIV");
function Html2text(html) {
	tmp.innerHTML = html;
	return tmp.textContent||tmp.innerText;
}

// Замещает все найденные <параметры> в тексте соответсвующими их значениями
// i - номер хоста
function rr (text, i) {
	function replacer(sub, n1, n2, offset, str) {
		var r = INI[(n1=='') ? 'main' : 'host'+i][n2];
		return r ? r : '';
	}
	var re = /<([^.]*?)[.]?([^.>]*?)>/g;
	var str = text.replace(re, replacer);
	var test = text.replace(re, '');
	return (str!=test) ? str : '&nbsp;';
}

// Возвращает имя файла (без расширения) из строки пути
function GetFileName(path) {
	var arr = /([ А-я\w\-\.]+)\.\w+$/.exec(path);
	return arr[1];
}

// Чтение текстового файла
function ReadTextFile(filename) {
	if ((FSO.FileExists(filename)) && (FSO.GetFile(filename).Size > 0)) {
		with (FSO.OpenTextFile(filename)) {
			var text = ReadAll();
			Close();
		}
	}
	return text || '';
}

// Обработчик ошибок скрипта
function ErrorHandler (msg, url, line){
	var version = navigator.appVersion;
	try {
		var arr = /.*(MSIE.*?);.*(Windows.*?);.*/.exec(version);
		version = arr[1] + '; ' + arr[2];
	} catch(e) {}
	var text = (typeof(window.dialogArguments)=="undefined") ? (app_name + ' v.' + HTAApp.version) : (window.dialogArguments.app_name + ' v.' + window.dialogArguments.HTAApp.version);
	text += ' programm error:\n\n';
	text += 'VERSION:  ' + version + '\n';
	text += 'DOCUMENT:  ' + unescape(document.URL).replace(/.*\\/,'') + '\n';
	text += 'SCRIPT:  ' + url.replace(/.*[\\/]/,'') + '\n';
	text += 'ERROR:  ' + msg + '\n';
	text += 'LINE:  ' + line + '\n';
	window.clipboardData.setData("Text", text);
	text += '\nThe error text is copied to clipboard!';
	alert(text);
	window.close(true);
	return true;
}

// Установка размера диалогового окна (по размеру содержимого)
function SetDialogSize(){
	function px2number(size_px){
		return Number(size_px.replace(/\D*/g,''));
	}
	var dialog_height_max = 600; // если высота таблицы больше этого значения - добавляем scrollbar
	var scrollbar_width = 17;    // ширина полосы прокрутки
	var incW = incH = 0;

	if (self.dialogWidth != document.body.offsetWidth + "px") {
		// Корректировка размера диалогового окна (т.к. в старых версиях IE эти параметры задают размер диалогового окна целиком, а не размер клиентской области)
		incW = px2number(self.dialogWidth) - document.body.offsetWidth;
		incH = px2number(self.dialogHeight) - document.body.offsetHeight + 3;
	}

	if (document.body.scrollHeight > dialog_height_max){
		// scrollbar
		self.dialogWidth  = document.body.scrollWidth + incW + scrollbar_width + "px";
		self.dialogHeight = dialog_height_max + incH + "px";
	} else {
		// no scrollbar
		self.dialogWidth  = document.body.scrollWidth + incW + "px";
		self.dialogHeight = document.body.scrollHeight + incH + "px";
	}
}
