///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Загрузка/закрытие фреймов по двойному щелчку мыши////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Параметры скрипта, задаваемые настройщиком///////////////////////////////////////////////////////////////////////////

//Путь к папке с фалами фреймов, обратная косая черта задаётся в виде "\\", в конец пути черта не нужна.
c_strFrameDir     ="c:\\Frames";
//Время жизни загруженного фрейма в секундах, по истечении которого фрейм будет закрыт автоматически.
c_secFrameTimeout =10;

//Набор таблиц раскладки камер внутри основного фрейма, содержит минимум один обязательный вариант.
//Раскладка камер задаётся в виде таблицы пар "разрешающий флаг"-"имя фрейма для камеры в данной позиции".
//Если разрешающий флаг равен 0 - считается, что в такой ячейке нет камеры.
var arCamTable=[
  [//Вариант 0
    [ [1, "cam1"], [1, "cam2"] ], 
    [ [1, "cam3"], [1, "cam4"] ]
  ]
];

//Список имён основных мониторов. Содержит пары "имя основного монитора"-"номер варианта раскладки камер".
var arMonitorsTable=[ 
  ["Auto", 0] 
];

//Список подстрок в именах мониторов для которых запрещёно закрытие по двойному щелчку
var arRestrictedNames=["Окно", "След"];

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Функция выполняет загрузку фрейма.
//strMainName   - имя "ведущего" окна
//strFrameName  - имя фрейма, исрользуется как имя файла конфигурации фрейма и заголовок его окна
//strFrameDir   - путь к папке с сохранёнными фреймами
function OpenFrame(strMainName, strFrameName, strFrameDir){
  //Загружаем фрейм .
  client.LoadTempFrame(strFrameDir+"\\"+strMainName+strFrameName+".gcfrm", c_secFrameTimeout);  
}

//Получаем парметры события
var nMonitor=client.GetVariable("nMonitor");    //Номер окна, в котором произошло событие
var xMouse=client.GetVariable("xMouse");        //X-координата курсора мыши внутри окна (относительно левого верхнего угла, пиксели)
var yMouse=client.GetVariable("yMouse");        //Y-координата курсора мыши внутри окна (относительно левого верхнего угла)
var wndWidth=client.GetVariable("wndWidth");    //Ширина окна (пиксели)
var wndHeight=client.GetVariable("wndHeight");  //Высота окна

//Имя фрейма, в котором сделан двойной щелчок.
var strClickedMonitor=client.GetMonitor(nMonitor).Name;

//Флаг закрытия текущего монитора (двойной щелчок по временному монитору).
var bClose=true;
//Проверяем по списку запрещённых строк возможность закрытия данного фрейма.
for(iRestriction=0; iRestriction<arRestrictedNames.length; iRestriction++){
  if(strClickedMonitor.indexOf(arRestrictedNames[iRestriction])!=-1){
    bClose=false;
    break;
  }
}
//Индекс монитора в таблице основных мониторов.
var iMonitor=0;
//Индексы камеры в таблице раскладки текущего монитора.
var rowCam=0;
var colCam=0;
var strFrame="";

//Проходим список основных мониторов.
for(iMonitor=0; iMonitor<arMonitorsTable.length; iMonitor++){
  //Если текущее имя не совпадает с именем выбранного монитора - пропускаем.
  if(arMonitorsTable[iMonitor][0]!=strClickedMonitor) continue;
  //Имя совпало - сделан двойной щелчок в одном из основных мониторов, закрывать его нельзя.
  bClose=false;
  var iLayout=arMonitorsTable[iMonitor][1];  
  rowCam=Math.floor(yMouse/Math.floor(wndHeight/arCamTable[iLayout].length));
  colCam=Math.floor(xMouse/Math.floor(wndWidth/arCamTable[iLayout][0].length));
  //Если в текущей позиции нет камеры - пропускаем.
  if(!arCamTable[iLayout][rowCam][colCam][0]) continue;
  strFrame=arCamTable[iLayout][rowCam][colCam][1];  
  break;
}

if(bClose){
  //Закрытие временного фрейма по двойному щелчку.
  client.GetMonitor(nMonitor).Close();
}
else if(iMonitor!=arMonitorsTable.length){
  //Открытие временного фрейма для указанной пользователем позиции.
  OpenFrame(strClickedMonitor, strFrame, c_strFrameDir);
}
