﻿// JScript File

/* Обработчики по умолчанию */
function mapClickDefault(e)
{
    var eData = getElement(inData1ID);
    var XY = eData.value.split(';');
    var xUp=parseInt(XY[0]) + eventClientX;
    var yUp=parseInt(XY[1]) + eventClientY;
    eData.value=mapCommand+';'+xUp+';'+yUp+';'+XY[0]+';'+XY[1];
	
    eventClientX = 0;
    eventClientY = 0;

    if (mapCommand == "cmMapRuler" && eMap != null)
    {
        var evt = browserGecko ? e:event;
        var cX = evt.clientX;
        var cY = evt.clientY;
        var point = uiGetEventXY(eMap, cX, cY);
        distanceClick(point[0], point[1]);
        return false;
    }
    
    if (mapCommand == "cmMapMove" && eMap != null)
    {
        eMap.onmousemove=mapMouseMoveDefault;
        var sAD = getElement('selectAreaDiv');
        if (sAD != null) sAD.onmousemove = mapMouseMoveDefault;
    }
    /*
    if (mapCommand == "cmMapPutObject" && eMap != null)
    {
        try
        {
            var modal = $find(editObjectBehaviour);
            var catId = getElement(ddlCategoriesId).value;       
            clearAllData();            
            var section = getElement(catArr[catId]);
            section.style.display = '';
            getElement(hfCategoryId).value = catId;
            var admSection = getElement(admSectionId);
            if (admSection)
            {
                admSection.style.display = 'none';
            }
            modal.show();
        }
        catch(e)
        {
            alert(ERROR_MSG);
        }
        return false;
    }     
    */
    
    if (mapCommand == "cmMapPutObject" && eMap != null) {
        if (MapObjectKey && MapObjectKey != "") {
            eData.value += ";" + MapObjectKey;
        }
        else {
            alert("Необходимо указать тип устанавливаемого объекта");
            return false;
        }
    }    
    
    if (mapCommand == "cmMapScaleUp" && eMap != null)
    {
        var sb = $find(ssBehaviorID);
        if (sb != null)
        {
           var index = sb.get_Value();
           var min = sb.get_Minimum();
           if (index != null && min != null)
             if (index <= min) { alert("Достигнут верхний предел масштабирования"); return false; }
        }
    }
    
    if (mapCommand == "cmMapScaleDown" && eMap != null)
    {
        var index = $find(ssBehaviorID).get_Value();
        var max = $find(ssBehaviorID).get_Maximum();
        if (index != null && max != null)        
        {
          if (index >= max) { alert("Достигнут нижний предел масштабирования"); return false; }
        }
    }    
    callbackFunction();        
    if (eMap.alt == '' && eMap.style.cursor != 'wait')
        { MapCursor = eMap.style.cursor; /*setMapCursor('wait');*/ }
    ShowWaitDiv(divWait);
    return false;
}

function mapMouseDownDefault(e)
{
    var evt = browserGecko ? e:event;
    eventClientX0 = evt.clientX;
    eventClientY0 = evt.clientY;    
    var mPosXY = uiGetEventXY(eMap, eventClientX0, eventClientY0);
    eventX = mPosXY[0]; eventY = mPosXY[1];

    var eData=getElement(inData1ID);
    eData.value = eventX+';'+eventY;

    if (browserIE) { eventInitButton = evt.button; }                          // запоминаем какая клавиша вызвала событие.
        else { eventInitButton = evt.which; }

    if (mapCommand == "cmMapMove" && eMap != null) // && !bookmarkmode
    {
        hideBmInputDiv();
        hideBmOutputDiv();
        eMap.onmousemove=mapMouseMoveDrag;
        var sAD = getElement('selectAreaDiv');
        if (sAD != null) sAD.onmousemove = mapMouseMoveDrag;
    }
    
    return false;
}

function mapMouseMoveDefault(e)
{	
    var evt = browserGecko ? e:event;
    var mPosX = 0; var mPosY = 0;
    if (browserGecko) { mPosX=evt.layerX; mPosY=evt.layerY; }
        else { mPosX=evt.x; mPosY=evt.y; }
			
    if (mapCommand == "cmDefault" && infoPoints != '') mapMouseMoveInfo(mPosX, mPosY, evt.clientX, evt.clientY);
    var eFx=getElement(FX_ClientID);
    if (eFx.value == '') 
        return false;
    var eDataX=getElement(ExprX_ClientID);
    var eDataY=getElement(ExprY_ClientID);
    var eFy=getElement(FY_ClientID);
    if (eDataY.value == 'GEO') {MouseMoveGeo(mPosX, mPosY); return;}   // Вывод координат в градусах 

    var CX = parseFloat(eDataX.value) + mPosY*parseFloat(eFx.value);    // Вывод координат в метрах
    var CY = parseFloat(eDataY.value) + mPosX*parseFloat(eFy.value);
    var sCX = formatting(CX, 'm');
    var sCY = formatting(CY, 'm');
    selfStatus('X = '+sCX, 'Y = '+sCY);

    return false;
}

/* Режим перемещения рисунка карты*/
function mapMouseMoveDrag(e)
{
    var evt = browserGecko ? e:event;
    if (eventInitButton != 1)
        return false;  // если не левый клик, то выход из функции
    var xPre = eventClientX; var yPre = eventClientY;
    eventClientX = evt.clientX - eventClientX0;                       // Перемещение рисунка карты
    eventClientY = evt.clientY - eventClientY0;
    
    objectShiftOn(eMap, eventClientX-xPre, eventClientY-yPre);
    objectShiftOn(rulerDiv, eventClientX-xPre, eventClientY-yPre);
    objectShiftOn(bmDiv, eventClientX-xPre, eventClientY-yPre);
    
    var sAD = getElement('selectAreaDiv');
    objectShiftOn(sAD, eventClientX-xPre, eventClientY-yPre);
    
    var cPoint = getElement('areaSearchCenterPoint');
    objectShiftOn(cPoint, eventClientX-xPre, eventClientY-yPre);
    
    if (!isInfoTooltipClosed()) {
        var eMapDivXY = uiFindPos(eMapDiv);
        var eMapSize = objSize(eMap);
        if ((eMapDivXY[0] + eMapSize[0] > getInfoTooltipPoint()[0] && eMapDivXY[0] < getInfoTooltipPoint()[0]) && 
            (eMapDivXY[1] + eMapSize[1] > getInfoTooltipPoint()[1] && eMapDivXY[1] < getInfoTooltipPoint()[1])) {                
            showInfoTooltip();
            shiftOnInfoTooltip(eventClientX-xPre, eventClientY-yPre);             
        }
        else
            hideInfoTooltip();
    }
    
    return false;
}


/* Режим измерения расстояний */
function mapClickDistance(e)
{
    var evt = browserGecko ? e:event;
    var x = 0; var y = 0;
    if (browserGecko) { x=evt.layerX; y=evt.layerY; }
        else { x=evt.x; y=evt.y; }
    distanceClick(x,y);
    return false;
}

/* Режим "Печать карты в файл" */
function mapMouseDownSelectArea(e)   // назначается на элемент рисунка карты
{
    // Определяем объект «событие». Если браузер на движке Gecko – это объект e, в противном случае - event
    var evt = browserGecko ? e:event;

    // Определяем координаты курсора мыши относительно объекта вызвавшего событие (рисунок карты)
    if (browserGecko) { eventX=evt.layerX; eventY=evt.layerY; }
        else { eventX=evt.x; eventY=evt.y; }

    // Определяем координаты мышки относительно клиентской области страницы
    eventClientX0 = evt.clientX;
    eventClientY0 = evt.clientY;

    // Получаем ссылку на элемент «область печати». Если он не найден, выходим из функции. Объект создан ранее в момент включения режима
    sAD = getElement('selectedAreaDiv');
    if (sAD == null) return false;
    
    // Задаем левый верхний угол области равный текущим координатам курсора мыши
    sAD.style.left   = eventX + 'px';
    sAD.style.top    = eventY + 'px';
    // Задаем ширину и высоту равную нулю
    sAD.style.width  = '0px';
    sAD.style.height = '0px';
    // Устанавливаем видимость объекта в значение «видимый»
    sAD.style.visibility = 'visible';

    // Назначаем новые обработчики события «передвижение курсора мыши» на объекты рисунок карты и область печати
    eMap.onmousemove=mapMouseMoveSelectArea;
    sAD.onmousemove=mapMouseMoveSelectArea;
    return false;
}

function mapClickSelectArea()    // назначается на элемент выделения области печати
{
    // Получаем ссылку на элементы область печати и скрытое поле
    var sAD   = getElement('selectedAreaDiv');
    var eData = getElement(inData1ID);

    // Если элементы отсутствуют – скрываем область печати и выходим из функции
    if (sAD == null || eData == null) { hideAreaDiv(sAD.id); return false; }
    
    // Получаем габариты выделенной области в пикселях.
    var top    = parseInt(sAD.style.top);
    var left   = parseInt(sAD.style.left);
    var bottom = top  + parseInt(sAD.style.height);
    var right  = left + parseInt(sAD.style.width);
    
    // Если ничего не выделили – выходим из функции
    if (bottom == top || right == left) { hideAreaDiv(sAD.id); return false; }
    
    // Записываем в скрытое поле параметр mapPrint (область печати) и габариты выделенной области.
    eData.value='mapPrint;'+top+';'+left+';'+bottom+';'+right;

    // Назначаем стандартные обработчики события «передвижение курсора мыши» на объекты рисунок карты и область печати
    eMap.onmousemove = mapMouseMoveDefault;
    sAD.onmousemove = mapMouseMoveDefault;
    
    // Обнуляем значения использованных глобальных переменных
    eventClientX0 = 0; eventX = 0;
    eventClientY0 = 0; eventY = 0;
    
    // Вызов callback-функции
    callbackFunction();

    return false;
}

function mapMouseMoveSelectArea(e)
{
    // Определяем объект «событие». Если браузер на движке Gecko – это объект e, в противном случае event
    var evt = browserGecko?e:event;

    // Определяем смещение курсора мыши относительно начального положения
    var delta_x = evt.clientX - eventClientX0;
    var delta_y = evt.clientY - eventClientY0;
    
    // Получаем ссылку на элемент «область печати». Если он не найден, выходим из функции
    sAD = getElement('selectedAreaDiv');
    if (sAD == null) return false;

    // Устанавливаем новые значения высоты и ширины области печати в зависимости от положения курсора мыши
    if (delta_x>=0)
        { sAD.style.left = eventX + 'px';
          sAD.style.width = delta_x + 'px'; }
    else
        { delta_x = Math.abs(delta_x);
          sAD.style.left = (eventX-delta_x) + 'px';
          sAD.style.width  = delta_x + 'px'; }
    
    if (delta_y>=0)
        { sAD.style.top = eventY + 'px';
          sAD.style.height = delta_y + 'px'; }
    else
        { delta_y = Math.abs(delta_y);
          sAD.style.top = (eventY-delta_y) + 'px';
          sAD.style.height = delta_y + 'px'; }
}

/* Режим выделения области поиска */
function mapMouseDownAreaSearch(e)   // назначается на imgmap
{
    var evt = browserGecko ? e:event;
    
    eventClientX0=evt.clientX;
    eventClientY0=evt.clientY;
    
    if (browserGecko)
    {
        var eMapXY = uiFindPos(eMap);    // Положение imgMap на странице
        var sXY = uiGetScrollXY();       // Скроллинг страницы
        eventX = eventClientX0 - eMapXY[0] + sXY[0];
        eventY = eventClientY0 - eMapXY[1] + sXY[1];
    }
    else { eventX=evt.x; eventY=evt.y; }
    
    var sAD = getElement('selectAreaDiv');
    if (sAD == null) return false;
    /*
    var areaTypeElement = getElement(ddlAreaTypeId);
    if (areaTypeElement == null) { deleteAreaSearchCenterPoint(); hideAreaDiv(sAD.id); return false; }
    */    
    var radius = 0;
    var coords = [eventX, eventY, radius];
    if (sAD.getAttribute("coords") != null) { sAD.removeAttribute("coords"); }
    sAD.setAttribute("coords", coords);    
    
    var coordsPlane = [pixToCoordX(eventX), pixToCoordY(eventY), pixToCoordRelX(radius)];
    if (sAD.getAttribute("coordsPlane") != null) { sAD.removeAttribute("coordsPlane"); }
    sAD.setAttribute("coordsPlane", coordsPlane);
    // '1' - выделение области поиска
    /*if (areaTypeElement.value == '1') { */
        eMap.onmousemove = mapMouseMoveAreaSearch; sAD.onmousemove = mapMouseMoveAreaSearch; 
    //}    
    return false;
}

function mapClickAreaSearch(e)    // назначается на sAD
{
    hideLabel();
    var sAD = getElement('selectAreaDiv');
    if (sAD == null) { deleteAreaSearchCenterPoint(); return false; }
/*  
    var areaTypeElement = getElement(ddlAreaTypeId);
    if (areaTypeElement == null) { deleteAreaSearchCenterPoint(); hideAreaDiv(sAD.id); return false; }    
*/    
    var coords = sAD.getAttribute("coords");                            // centerX, centerY, Radius
    if (coords == null) { deleteAreaSearchCenterPoint(); hideAreaDiv(sAD.id); return false; }
    if (!browserIE) coords = coords.split(',');   
    
    //if (areaTypeElement.value == '1')
    //{
        eMap.onmousemove = mapMouseMoveDefault;
        sAD.onmousemove = mapMouseMoveDefault;
        
        var radius = parseInt(sAD.style.width) / 2;
        if (radius <= 0) { deleteAreaSearchCenterPoint(); hideAreaDiv(sAD.id); return false; }        
        coords[2] = pixToCoordRelX(radius);
        var coordsPlane = [pixToCoordX(eventX), pixToCoordY(eventY), coords[2]];
        sAD.setAttribute("coordsPlane", coordsPlane);
    //}        

    eventClientX0 = 0; eventClientX = 0; eventX = 0;
    eventClientY0 = 0; eventClientY = 0; eventY = 0;
    
    return false;
}

function mapMouseMoveAreaSearch(e)
{
    sAD = getElement('selectAreaDiv');
    if (sAD == null) return false;

    var coords = sAD.getAttribute("coords");                            // centerX, centerY, Radius
    if (coords == null) return false;
    if (!browserIE) coords = coords.split(',');

    var evt = browserGecko ? e:event;
    var x = evt.clientX;
    var y = evt.clientY;

    var mPosXY = uiGetEventXY(eMap, x, y);
    var xx = Math.abs(mPosXY[0]-coords[0]); //xx = xx*xx;
    var yy = Math.abs(mPosXY[1]-coords[1]); //yy = yy*yy;
    var radius;
    if (xx >= yy){ radius = xx; }
    else { radius = yy; }    
    var r = Math.floor(pixToCoordRelX(radius));
    if (maxAreaSearchDistance > 0 && r > maxAreaSearchDistance)
        return;        
    var unit = "м";        
    if (r >= 1000) {r = r / 1000; unit = "км";}    
    r = formatting(r, unit);
    while (r.indexOf(' ') != -1) r = r.replace(' ', '\xA0');
    showLabel(x, y, r);

    showSearchAreaPix(coords[0], coords[1], radius);
    return false;
}



/* Режим расстановки закладок */
function mapClickBookmark(e)
{
    var evt = browserGecko?e:event;
    var eventClientX = evt.clientX;
    var eventClientY = evt.clientY;

    var mPosXY = uiGetEventXY(eMap, eventClientX, eventClientY);
    eventX = mPosXY[0];
    eventY = mPosXY[1];

    var obj = getElement('pointBmDiv_'+bmCount);
    if (obj != null && obj.getAttribute("bmName") == null) { deleteBmPoint(); }
    
    hideBmOutputDiv();
    setBmPoint(eventX,eventY,null,null,false);
    showBmInputWindow(eventClientX, eventClientY);
    
    eventClientX = 0;
    eventClientY = 0;    
    return false;
}


function mapClickFindRecord(e)
{
    var eData = getElement(inData1ID);
    var XY = eData.value.split(';');
    
    var xUp=parseInt(XY[0]) + eventClientX;
    var yUp=parseInt(XY[1]) + eventClientY;
    eData.value='cmFindRecord'+';'+xUp+';'+yUp;
    
    eventClientX = 0; eventClientY = 0;
    
    callbackFunction();
    
    if (eMap.alt == '' && eMap.style.cursor != 'wait')
        { MapCursor = eMap.style.cursor; /*setMapCursor('wait');*/ }
    ShowWaitDiv(divWait);
    return false;
}

function mapClickObjectInfo(e)
{
    var eData = getElement(inData1ID);
    var XY = eData.value.split(';');
    
    var xUp=parseInt(XY[0]) + eventClientX;
    var yUp=parseInt(XY[1]) + eventClientY;
    eData.value='cmObjectInfo'+';'+xUp+';'+yUp;
    
    eventClientX = 0; eventClientY = 0;
    
    callbackFunction();
    
    if (eMap.alt == '' && eMap.style.cursor != 'wait')
        { MapCursor = eMap.style.cursor; /*setMapCursor('wait');*/ }
    ShowWaitDiv(divWait);
    return false;
}
