var dAlfa = new ActiveXObject("Scripting.Dictionary");
var cuList = new Array;
var FSO = new ActiveXObject("Scripting.FileSystemObject");



//================================================================
//для удобстава обработки строк:
String.prototype.trimRight=function() // убирает все пробелы в конце строки
{
  return this.replace(/\s+$/,'');
}

String.prototype.trimLeft=function() // убирает все пробелы в начале строки
{
  return this.replace(/^\s+/,'');
}

String.prototype.trim=function()	 // убирает все пробелы в начале и в конце строки
{
  return this.trimRight().trimLeft();
}
//================================================================


main()

function main() {
	var main_folder_path,
		main_folder,
		args = WScript.Arguments,
		WS = WScript.CreateObject("WScript.Shell"),
		Directory = WS.CurrentDirectory;	//текущий каталог
	
	if (args.length == 0)
		main_folder_path = Directory;	//Начальный каталог кампаний или отдельной кампании
	else
		main_folder_path = args.item(0);	
	

	if (main_folder_path == "?") {
  		WScript.Echo("Формирование своего списка AircraftSelector для одной статической кампании.\nИспользование:\n 	Скопировать в каталог кампании и запустить\nили передать каталог кампании в качестве параметра.")
		return
	}
	

	main_folder=FSO.GetFolder(main_folder_path);
	EnumerateFiles(main_folder);	//обход всех каталогов начиная с указанного в первом параметре
	writeCuList(main_folder_path)					//запись сформированного списка в OutFile
}

// ================================================================
//Обработка всех файлов mis в очередном каталоге
function EnumerateFiles(_folder){
    var more_files = new Enumerator(_folder.Files);
    for (;!more_files.atEnd();more_files.moveNext()){
        one_file = more_files.item();
		if (one_file.Path.indexOf(".mis") > 0) {
			findClassInAllSections(one_file.Path)		//поиск классов в очередном файле во всех секциях
		}
    }
}


//поиск классов в очередном файле во всех секциях
function findClassInAllSections(fil){
	var FSO, f, s, ForReading;


	ForReading = 1, s= "";
	FSO = new ActiveXObject("Scripting.FileSystemObject");
	f = FSO.OpenTextFile(fil, ForReading, false);
		
	while (!f.AtEndOfStream){
		s = f.ReadLine()
			
		k=s.toUpperCase().indexOf(" AIR.")	//ищем class    air.имя
		if( k != -1 ){
			pclass=s.slice(k+5).trim()		//имя после air.
			if (!inList(cuList,pclass))	//добавим если нет в списке
				cuList[cuList.length]=pclass
			continue
		} 
		k=s.toUpperCase().indexOf("PLANE$")	//ищем plane
		if( k != -1 ){
			pclass=s.slice(k+6).trim()
			l=pclass.indexOf(" ")		//имя после plane$ и до пробела
			pclass=pclass.substr(0,l)
			if (!inList(cuList,pclass))	//добавим если нет в списке
				cuList[cuList.length]=pclass
		}
		k=s.toUpperCase().indexOf("PLANEDGEN$")	//ищем planedGEN
		if( k != -1 ){
			pclass=s.slice(k+10).trim()
			l=pclass.indexOf(" ")		//имя после plane$ и до пробела
			pclass=pclass.substr(0,l)
			if (!inList(cuList,pclass))	//добавим если нет в списке
				cuList[cuList.length]=pclass
		}

	}

	f.Close()

}


//провека наличия строки str в списке List
function  inList(List,str){
	for (k in List){
		if (List[k] == str){
			return true
		}
	}
	return false
}


//запись cuList в выходной файл
function writeCuList(Directory){
	var FSO = new ActiveXObject("Scripting.FileSystemObject"),
		AircraftSelector_path="!AircraftSelector\\MyLists",
		OutFilePath=Directory.substr(0,Directory.indexOf("Missions"))+AircraftSelector_path;

	is = Directory.toUpperCase().indexOf("SINGLE")

	if (is != -1) {
		cName=Directory.substr(is).replace(/\\/g,"")
	} else {
			//получить имя файла из info_ru.properties
		propName=Directory+"\\info_ru.properties"
		if (!FSO.FileExists(propName)){			//если не RU пробуем info.
			propName=Directory+"\\info.properties"
			if (!FSO.FileExists(propName)){			//если нет info - все
				WScript.Echo('Файл info*.properties не найден.\nСписок не записан.');
				return
			}
		}
		
		
		initdict()
		f = FSO.OpenTextFile(propName, 1, -1)
		s=decoStr(f.ReadLine())			//перекодировать первую строку в 1251
		f.Close()

		
		s=s.replace(/Name /,"")			//убрать спецсимволы
		cName=s.replace(/[\"\\\/\:\*\?\<\>\|\+\@\!\%\«\»\.]/g, '')	
	}
	
	
	OutFile=OutFilePath+"\\"+cName.trim() + ".txt"

	if (OutFilePath.length != 0)
		if (!FSO.FolderExists(OutFilePath)){
			WScript.Echo('Создайте папку ',OutFilePath);
			return
		}

	cuList.sort()	//сортировка по имени
	
	//записать файл
	fo = FSO.CreateTextFile(OutFile, true, false)

	for (i in cuList)
		fo.WriteLine(cuList[i])
	fo.close()
	WScript.Echo('Записан файл\n'+cName);
}

//показать список - отладка
function showCuList(){
	for (i in cuList){
		WScript.Echo(cuList[i])
	}
}

function decoStr(s){
	var sr = "", i, ch = "", ss = "", sr = "";
	s=s.replace(/\\n/g,"\\u00nn")
	ss = s.split(/\\u/);
	for (i in ss){
		ch=ss[i].slice(0,4)
		dAlfa.exists(ch) ? sr+=dAlfa.item(ch) : sr+=ch
		sr+=ss[i].slice(4)
	}
	return(sr)
}

function initdict(){
	dAlfa.CompareMode = 1;

//	dAlfa.add("bbbb"," ");
	dAlfa.add("00nn","\x0d\x0a");
	dAlfa.add("00AB","«");
	dAlfa.add("00BB","»");

	dAlfa.add("0430","а");
	dAlfa.add("0431","б");
	dAlfa.add("0432","в");
	dAlfa.add("0433","г");
	dAlfa.add("0434","д");
	dAlfa.add("0435","е");
	dAlfa.add("0451","ё");
	dAlfa.add("0436","ж");
	dAlfa.add("0437","з");
	dAlfa.add("0438","и");
	dAlfa.add("0439","й");
	dAlfa.add("043A","к");
	dAlfa.add("043B","л");
	dAlfa.add("043C","м");
	dAlfa.add("043D","н");
	dAlfa.add("043E","о");
	dAlfa.add("043F","п");
	dAlfa.add("0440","р");
	dAlfa.add("0441","с");
	dAlfa.add("0442","т");
	dAlfa.add("0443","у");
	dAlfa.add("0444","ф");
	dAlfa.add("0445","х");
	dAlfa.add("0446","ц");
	dAlfa.add("0447","ч");
	dAlfa.add("0448","ш");
	dAlfa.add("0449","щ");
	dAlfa.add("044A","ъ");
	dAlfa.add("044B","ы");
	dAlfa.add("044C","ь");
	dAlfa.add("044D","э");
	dAlfa.add("044E","ю");
	dAlfa.add("044F","я");
	dAlfa.add("0410","А");
	dAlfa.add("0411","Б");
	dAlfa.add("0412","В");
	dAlfa.add("0413","Г");
	dAlfa.add("0414","Д");
	dAlfa.add("0415","Е");
	dAlfa.add("0401","Ё");
	dAlfa.add("0416","Ж");
	dAlfa.add("0417","З");
	dAlfa.add("0418","И");
	dAlfa.add("0419","Й");
	dAlfa.add("041A","К");
	dAlfa.add("041B","Л");
	dAlfa.add("041C","М");
	dAlfa.add("041D","Н");
	dAlfa.add("041E","О");
	dAlfa.add("041F","П");
	dAlfa.add("0420","Р");
	dAlfa.add("0421","С");
	dAlfa.add("0422","Т");
	dAlfa.add("0423","У");
	dAlfa.add("0424","Ф");
	dAlfa.add("0425","Х");
	dAlfa.add("0426","Ц");
	dAlfa.add("0427","Ч");
	dAlfa.add("0428","Ш");
	dAlfa.add("0429","Щ");
	dAlfa.add("042A","Ъ");
	dAlfa.add("042B","Ы");
	dAlfa.add("042C","Ь");
	dAlfa.add("042D","Э");
	dAlfa.add("042E","Ю");
	dAlfa.add("042F","Я");
}

