/*
Создание списка кампаний. Упрощенная версия.
	offlineCampaignList.js
Скрипт рекурсивно просматривает все файлы info*.properties начиная с текущего каталога.
Секция Name переводится в кодировку 1251 и записывается в выходной файл вместе с именем каталога.
Выходной файл имеет имя CampaignXX.csv в кодировке 1251 и разделителем ";" и расположен в текущем каталоге.
Для дальнейшей обработки запускается заданная переменной TextEditor программа.

Использование:
1. Исправить переменную TextEditor если необходимо.
2. Скопировать в каталог Campaign\XX.
3. Запустить.
*/


//var TextEditor="Excel"			//эксель
var TextEditor="scalc"			//редактор таблиц LibreOffice
//var TextEditor="%comspec% /c "	//программа по умолчанию для открытия *.csv
//var TextEditor="notepad"		//Блокнот

var dAlfa = new ActiveXObject("Scripting.Dictionary")

var fso = new ActiveXObject("Scripting.FileSystemObject"),
	WS = WScript.CreateObject("WScript.Shell"),
	Directory = WS.CurrentDirectory,
	OutFile="Campaign"+Directory.substr(Directory.lastIndexOf("\\")+1)+".csv",
	fo = fso.CreateTextFile(OutFile, true, false);


//================================================================
//для удобстава обработки строк:
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(){
	res=GetFileList(Directory, "info*.properties", true)
	
	initdict()
	
	for (f in res){
	    mm=res[f]
	    writeProp(mm.substring(0,mm.length-1))	//перенос строк убрать
	}
	fo.close()

	showFile(OutFile)
}



function GetFileList(Directory, Extension, Deep)
{
    var
        FSO = WScript.CreateObject("Scripting.FileSystemObject"),
        WshShell = WScript.CreateObject("WScript.Shell"),
        LastCurrentDirectory = WshShell.CurrentDirectory;

// Проверка необязательных параметров Extension, Deep
        !Extension || Extension=="" ? Extension = "": null;
        Deep? Deep = "/S": Deep = "";
        
// Преобразуем исходнный Directory в короткий путь
        Directory = FSO.GetFolder(Directory).ShortPath;
        
    var    
        Result = [],
        Command, 
        TempPath = WshShell.ExpandEnvironmentStrings("%TEMP%")+"\\", // Путь к папке %TEMP%
        TempBuffer = TempPath + (new Date()).valueOf().toString().substring(6)+".txt";
        
        // Ведем поиск средствами CMD. 
        Command = "cmd.exe /c chcp 1251 && cmd.exe /c && dir /B "+Deep+" /A:-D "+ Extension+ " > "+TempBuffer;
	
        // Устанавливаем директорию по умолчанию
        WshShell.CurrentDirectory = Directory;

        // Запустим CMD, ждем окончание выполнения этого процесса
        WshShell.Run(Command, 0, true);

    var 
		Stream = FSO.OpenTextFile(TempBuffer, 1, false);
		Stream.AtEndOfStream ?	Result="" : Result = Stream.ReadAll();
        Stream.Close();
        
        FSO.DeleteFile (TempBuffer);
        Result = Result.split("\n");
        Result.length -= 1;
        WshShell.CurrentDirectory = LastCurrentDirectory;
    return Result;
}


function writeProp(fil){
	//fo.WriteLine(mm.substring(0,mm.length-1));
	var FS1 = WScript.CreateObject("Scripting.FileSystemObject"),
		iFile=FS1.OpenTextFile(fil, 1);
    var st, shr, dsc, nm;
    
    st=iFile.ReadLine().replace(/Name /,"");

    nm=decoStr(st.trim())+";"+mm.substr(0,mm.lastIndexOf("\\"))
	fo.WriteLine(nm);	//mm уже содержит перевод строки
    iFile.Close();
}


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 showFile(ofil){
	var oShell = WScript.CreateObject("WScript.Shell");
	oShell.Run(TextEditor+' "'+ ofil +'"',1,-1);
//WScript.echo('cscript e:\showprop.js ' +ofil);
}


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","Я");
}

