var NtrkWizard_pth="\\ntrk_wizard"	//каталог с ntrk_wizard.jar и джавой
var waitWiz = 1500	//если возникает ошибка 'Ошибка запуска ntrkwizard' поробуйте увеличить число мсек до 2000 - 3000


var cuList = new Array;

var FSO = new ActiveXObject("Scripting.FileSystemObject");

//проверим наличие каталога с визардом нтрк
if (NtrkWizard_pth.length == 0){
	WScript.Echo('Задайте расположение каталога Ntrk_Wizard в переменной NtrkWizard_pth');
	WScript.Quit()
}
if (!FSO.FolderExists(NtrkWizard_pth)){
	WScript.Echo('Нет каталога ', NtrkWizard_pth);
	WScript.Quit()
}


var	WS = WScript.CreateObject("WScript.Shell"),
	Directory = WS.CurrentDirectory				//текущий каталог

//================================================================
//для удобстава обработки строк:
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 args = WScript.Arguments

	main_folder_path=Directory

	
	//Убрать последнюю \\ в пути
	if (main_folder_path.length-1 == main_folder_path.lastIndexOf("\\"))
		main_folder_path=main_folder_path.substr(0,main_folder_path.length-1)

	if (!FSO.FileExists(main_folder_path+"\\campaign.ini")){
//		WScript.Echo("Файл campaign.ini не найден в каталоге "+_folder)
		return	//нечего делать - кампании в каталоге нет
	}

	
	//main_folder_path теперь без завершающей обратной косой
	campName=main_folder_path.substr(main_folder_path.lastIndexOf("\\")+1)
	
	if (args.length != 0)
		OutFile = args.item(0)
	else 
		OutFile = main_folder_path+'\\'+campName+'_CustomNtrk.txt'
	
	if (OutFile.charAt(0)=="?") {
		WScript.Echo("Достать самолеты из роликов NTRK")
		return
	}	

	
	main_folder=FSO.GetFolder(main_folder_path);
	
	CheckCampaignFolder(main_folder);	//проверка
		
	
	writeCuList(OutFile)
	WScript.Echo('Самолеты из роликов добавлены в\n',OutFile);
}


//Обработка всех файлов mis в очередном каталоге
function CheckCampaignFolder(_folder){
    var more_files = new Enumerator(_folder.Files);

	checkCampaign(_folder.Path+"\\campaign.ini")	
}

function checkCampaign(fil){		//проверка одного файла кампании
	var fso, f, s, ForReading;

	ForReading = 1, s= "";
	fso = new ActiveXObject("Scripting.FileSystemObject");
	f = fso.OpenTextFile(fil, ForReading, false);

	n=0
	while (!f.AtEndOfStream){
		s = f.ReadLine()
		n++
		if (s.charAt(0)=="*")
			ntrkVideo(s,n)
		
		if (s.toLowerCase().indexOf("epiloguetrack") != -1)
			ntrkVideo(s,n)
	}

	f.Close()
}


//проверка наличия файла видео
function ntrkVideo(s,n){
	k=s.indexOf(" ")
	var vfile=s.slice(k).trim().replace(/.mis$/,'\\')

	var WshShell = WScript.CreateObject("WScript.Shell"),
		CurDir = WshShell.CurrentDirectory;

	var pth=CurDir.slice(0,CurDir.indexOf("Missions"));


//	vfile=(pth+vfile).replace(/\\/g,'\\')
	vfile=(pth+vfile).replace(/\//g,"\\")
	
	var FSO = new ActiveXObject("Scripting.FileSystemObject")
	if (!FSO.FileExists(vfile)){
		WScript.Echo('\t\tНет видео '+vfile+ " стр:"+n)
		nerr++
		return
	}

	
	trafDir=NtrkWizard_pth+'\\tmp'
	if (!FSO.FolderExists(trafDir))
		FSO.CreateFolder(trafDir)

	var oShell = WScript.CreateObject("WScript.Shell");
	cmd='cmd \/c start "" \/B \/D '+NtrkWizard_pth+' java\\bin\\java -jar ntrkwizard.jar e '+ vfile +' '+trafDir

	oShell.Run(cmd,0,true);
	
	WScript.Sleep(waitWiz)	//пауза в мсек для работы java ntrkwizard
	
	if (!FSO.FileExists(trafDir+'\\traffic')){
		WScript.Echo(cmd);
		WScript.Echo('Ошибка запуска ntrkwizard.')	//надо увеличить паузу. см выше
		return
	} 

	listAirFromNtrk(trafDir+'\\traffic')
	//почистим временный каталог
	FSO.DeleteFile(trafDir+'\\*.')
}


function listAirFromNtrk(fil){
	var FSO = new ActiveXObject("Scripting.FileSystemObject"),
	l=FSO.GetFile(fil),
	f=l.OpenAsTextStream(1),
	st=''
	lastI=0								//смещение до последнего обнаруженного air
										//mSize и mGap для ускорения
	mSize=l.Size/20						//весь файл просматривать долго, предположим, что все самолеты находятся в первых 5% ролика
	mGap=20*1024						//предположим, что между самолетами промежуток не более 20 Кб
	rc=''
	for (var i=0;i<mSize;i+=1){
		if (i-lastI > mGap)				//превышен промежуток
			break
		if (f.Read(1) == 'a')
			if (f.Read(1) == 'i')
				if (f.Read(1) == 'r')
					if (f.Read(1) == '.') {
						var st = ''
						ch=f.Read(1)
						do {
							st+=ch
							i++
							ch=f.Read(1)
						} while (/\w/.test(ch))

						lastI=i	
						if (!inList(cuList,st))
							cuList[cuList.length] = st
					}
	}
	f.close()
}


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

//Записать список в файл
function writeCuList(fil){
	var fo, s

	if (FSO.FileExists(fil)) { //добавим в список из файла
		fo = FSO.OpenTextFile(fil,1,false)	//RO
		while (!fo.AtEndOfStream){
			s = fo.ReadLine().trim()
			if (!inList(cuList,s))
				cuList[cuList.length]=s
		}
		fo.Close()
	}

	cuList.sort()
	
	fo = FSO.CreateTextFile(fil, true, false)
	for (var i in cuList)
		fo.writeLine(cuList[i])
	
	fo.Close()
}

