// Description(1033): Duplicate selected text to the right
// Description(1049): Дублирует выделенный текст вправо
//
// Usage:
//   Call("Scripts::Main", 1, "DuplicateSel.js")

var sSelText=AkelPad.GetSelText();
if (sSelText=="") {
  AkelPad.Call("Scripts::Main", 1, "LinesSelectCopyMoveDuplicate.js", "D 1")
  WScript.Quit();
}

var oSys = AkelPad.SystemFunction();
var hEditWnd = AkelPad.GetEditWnd();
var nSelStart=AkelPad.GetSelStart();
var nSelEnd=AkelPad.GetSelEnd();

SetRedraw(hEditWnd, false);
AkelPad.SetSel(nSelEnd, nSelEnd);
AkelPad.ReplaceSel(sSelText);
// AkelPad.SetSel(nSelStart, nSelEnd); // Оставить выделенным оригинал
AkelPad.SetSel(nSelEnd, nSelEnd+sSelText.length); // Выделить дубликат
SetRedraw(hEditWnd, true);


function SetRedraw(hWnd, bRedraw)
{
  SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
  bRedraw && oSys.Call("User32::InvalidateRect", hWnd, 0, true);
}

function SendMessage(hWnd, uMsg, wParam, lParam)
{
  return oSys.Call("User32::SendMessage" + _TCHAR, hWnd, uMsg, wParam, lParam);
}
