%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/map.yandex.view/settings/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/map.yandex.view/settings/settings_load.js |
/* CBXYandexPoint definition */
function CBXYandexPoint(arData)
{
/* fields */
this.DATA = {LON:0,LAT:0,TEXT:''};
this.PLACEMARK = null;
this.VIEW = null;
this.EDIT_CONTROL = null;
/* events */
this.onCreate = null;
this.onDelete = null;
/* methods */
/* constructor */
if (null != arData)
{
this.Create(arData)
}
}
CBXYandexPoint.prototype.__updatePointPosition = function(e)
{
var obPoint = this.PLACEMARK.geometry.getCoordinates();
this.DATA.LAT = obPoint[0];
this.DATA.LON = obPoint[1];
};
CBXYandexPoint.prototype.Delete = function (e)
{
if (null != this.VIEW && null != this.VIEW.parentNode)
this.VIEW.parentNode.removeChild(this.VIEW);
jsYandexCE.map.geoObjects.remove(this.PLACEMARK);
this.PLACEMARK = null;
if (null != this.onDelete)
this.onDelete(this);
return BX.PreventDefault(e);
};
CBXYandexPoint.prototype.Edit = function(e)
{
e = e || window.event;
var this_ = this;
jsYandexCE.map.panTo(
this.PLACEMARK.geometry.getCoordinates(), {
delay: 0,
flying: false,
callback: function () {
if (this_.PLACEMARK._balloonVisible)
this_.PLACEMARK.balloon.close();
else
{
this_.PLACEMARK.balloon.open();
this_.EDIT_CONTROL.focus();
}
}
});
if (null != e)
return BX.PreventDefault(e);
};
CBXYandexPoint.prototype.__updateView = function(e)
{
e = e || window.event;
value = BX.proxy_context.value;
this.DATA.TEXT = value;
var rnpos = value.indexOf("\n");
var value_view = '';
if (value.length > 0)
value_view = rnpos <= 0 ? value : value.substring(0, rnpos);
value_view = value_view.replace(/</g, '<');
value_view = value_view.replace(/>/g, '>');
this.__updateViewText(value_view ? value_view : window.jsYandexMess.noname);
return BX.PreventDefault(e);
};
CBXYandexPoint.prototype.__point_link_hover = function() {this.style.backgroundColor = "#E3E8F7"; this.firstChild.style.display = 'block';};
CBXYandexPoint.prototype.__point_link_hout = function() {this.style.backgroundColor = "transparent"; this.firstChild.style.display = 'none';};
CBXYandexPoint.prototype.__updateViewText = function(str) {this.VIEW.firstChild.nextSibling.innerHTML = str;};
CBXYandexPoint.prototype.getData = function() {return this.DATA;};
CBXYandexPoint.prototype.Create = function(arPlacemark)
{
this.DATA.TEXT = arPlacemark.TEXT;
this.DATA.LAT = arPlacemark.LAT;
this.DATA.LON = arPlacemark.LON;
this.__createView();
var value_view = '';
if (this.DATA.TEXT.length > 0)
{
var rnpos = this.DATA.TEXT.indexOf("\n");
value_view = rnpos <= 0 ? this.DATA.TEXT : this.DATA.TEXT.substring(0, rnpos);
value_view = value_view.replace(/>/g, '>');
value_view = value_view.replace(/</g, '<');
}
this.__updateViewText(value_view ? value_view : window.jsYandexMess.noname);
this.PLACEMARK = new window.ymaps.Placemark(
[this.DATA.LAT, this.DATA.LON],
{
balloonContent: this.__createEditForm()
},
{
draggable: true
}
);
this.PLACEMARK.events.add("dragend", BX.proxy(this.__updatePointPosition, this));
jsYandexCE.map.geoObjects.add(this.PLACEMARK);
if (null !== this.onCreate)
this.onCreate(this);
return this.PLACEMARK;
};
CBXYandexPoint.prototype.__createEditForm = function()
{
this.EDIT_CONTROL = document.createElement('TEXTAREA');
this.EDIT_CONTROL.value = this.DATA.TEXT;
this.EDIT_CONTROL.style.resize = 'none';
this.EDIT_CONTROL.rows = '4';
this.EDIT_CONTROL.onkeyup = this.EDIT_CONTROL.onblur = BX.proxy(this.__updateView, this);
return this.EDIT_CONTROL;
};
CBXYandexPoint.prototype.__createView = function()
{
this.VIEW = BX('bx_yandex_points').appendChild(document.createElement('LI'));
var obDeleteLink = this.VIEW.appendChild(document.createElement('A'));
obDeleteLink.href = "javascript: void(0)";
obDeleteLink.className = 'bx-yandex-delete';
obDeleteLink.onclick = BX.delegate(this.Delete, this);
obDeleteLink.style.display = 'none';
var obLink = this.VIEW.appendChild(document.createElement('A'));
obLink.className = 'bx-yandex-point';
obLink.href = 'javascript:void(0)';
obLink.onclick = BX.delegate(this.Edit, this);
obLink.innerHTML = window.jsYandexMess.noname;
this.VIEW.onmouseover = this.__point_link_hover;
this.VIEW.onmouseout = this.__point_link_hout;
};
/* /CBXYandexPoint definition */
/* CBXYandexPoly definition */
function CBXYandexPoly(arData)
{
/* fields */
this.DATA = {POINTS:[],TITLE:'',STYLE:{}};
this.POLYLINE = null;
this.VIEW = null;
this.EDIT_CONTROL = null;
this.STYLE = null;
this.START_POINT = null;
this.END_POINT = null;
this.bFinished = false;
/* events */
this.onFinish = null;
this.onDelete = null;
/* constructor */
if (null != arData)
{
this.Create(arData)
}
}
/* methods */
CBXYandexPoly.prototype.Finish = function(obEvent)
{
if (!jsYandexCE.bAddPolyMode)
return;
this.bFinished = true;
jsYandexCE.map.events.remove('click', BX.proxy(this.__addPoint, this));
jsYandexCE.map.geoObjects.remove(this.START_POINT);
if (null == this.POLYLINE)
{
this.Delete();
}
else
{
this.END_POINT.properties.set('hintContent', jsYandexMess.poly_settings);
this.END_POINT.events.remove("click", BX.delegate(this.Finish, this));
this.END_POINT.events.add("click", BX.delegate(this.showSettingsForm, this));
}
if (null != this.onFinish)
{
this.onFinish(this);
}
};
CBXYandexPoly.prototype.__addPoint = function(obEvent)
{
if (!jsYandexCE.bAddPolyMode)
return;
// set line finish flag
if (null == this.END_POINT)
{
this.END_POINT = new ymaps.Placemark(obEvent.get("coordPosition"), {
hintContent: jsYandexMess.poly_finish
});
this.END_POINT.events.add("click", BX.delegate(this.Finish, this));
jsYandexCE.map.geoObjects.add(this.END_POINT);
}
else
{
this.END_POINT.geometry.setCoordinates(obEvent.get("coordPosition"));
}
// initate points array
if (this.DATA.POINTS.length <= 0)
{
this.DATA.POINTS = [this.START_POINT.geometry.getCoordinates(), obEvent.get("coordPosition")];
}
if (null !== this.POLYLINE)
{
this.DATA.POINTS.push(obEvent.get("coordPosition"));
this.POLYLINE.geometry.setCoordinates(this.DATA.POINTS);
this.__updateViewText(jsYandexMess.noname);
}
else
{
this.setStyle();
this.prepareSettingsForm();
this.POLYLINE = new ymaps.Polyline(
this.DATA.POINTS,
{},
{
clickable: false,
strokeColor: this.STYLE.strokeColor,
strokeWidth: this.STYLE.strokeWidth
}
);
jsYandexCE.map.geoObjects.add(this.POLYLINE);
this.__createView();
}
};
CBXYandexPoly.prototype.Start = function(obPoint)
{
this.START_POINT = new ymaps.Placemark(obPoint, {
hintContent: jsYandexMess.poly_start_point
});
jsYandexCE.map.geoObjects.add(this.START_POINT);
jsYandexCE.map.events.add('click', BX.proxy(this.__addPoint, this));
};
CBXYandexPoly.prototype.showSettingsForm = function(e)
{
if (!this.bFinished)
this.Finish();
if (this.END_POINT.balloon.isOpen())
{
this.END_POINT.balloon.close();
}
else
{
jsYandexCE.map.geoObjects.add(this.END_POINT);
this.END_POINT.balloon.open();
}
return BX.PreventDefault(e);
};
CBXYandexPoly.prototype.Delete = function (e)
{
if (null != this.VIEW && null != this.VIEW.parentNode)
this.VIEW.parentNode.removeChild(this.VIEW);
if (null != this.POLYLINE)
jsYandexCE.map.geoObjects.remove(this.POLYLINE);
jsYandexCE.map.geoObjects.remove(this.START_POINT);
if (null != this.END_POINT)
jsYandexCE.map.geoObjects.remove(this.END_POINT);
this.POLYLINE = null;
if (!this.bFinished)
this.Finish();
if (null != this.onDelete)
this.onDelete(this);
return BX.PreventDefault(e);
};
CBXYandexPoly.prototype.__poly_link_hover = function() {this.style.backgroundColor = "#E3E8F7"; this.firstChild.style.display = 'block';}
CBXYandexPoly.prototype.__poly_link_hout = function() {this.style.backgroundColor = "#FFFFFF"; this.firstChild.style.display = 'none';}
CBXYandexPoly.prototype.__updateViewText = function(str) {this.VIEW.firstChild.nextSibling.innerHTML = str + ' (' + this.DATA.POINTS.length + ')';}
CBXYandexPoly.prototype.getData = function()
{
var obReturn = {POINTS:[],TITLE:'',STYLE:{}};
for (var i = 0,len = this.DATA.POINTS.length; i < len; i++)
{
obReturn.POINTS[i] = {LAT:this.DATA.POINTS[i][0],LON:this.DATA.POINTS[i][1]};
}
obReturn.TITLE = this.DATA.TITLE;
obReturn.STYLE = {strokeColor:this.STYLE.strokeColor, strokeWidth:this.STYLE.strokeWidth};
return obReturn;
};
CBXYandexPoly.prototype.Create = function(arPolyline)
{
this.DATA.POINTS = [];
for(var i = 0,cnt = arPolyline.POINTS.length; i < cnt; i++)
{
this.DATA.POINTS[i] = [arPolyline.POINTS[i].LAT, arPolyline.POINTS[i].LON];
}
if (null != arPolyline.STYLE)
{
if (null != arPolyline.STYLE.lineStyle)
arPolyline.STYLE = arPolyline.STYLE.lineStyle;
this.DATA.STYLE.strokeWidth = arPolyline.STYLE.strokeWidth;
this.DATA.STYLE.strokeColor = arPolyline.STYLE.strokeColor;
}
this.setStyle();
this.DATA.TITLE = arPolyline.TITLE;
this.START_POINT = new ymaps.Placemark([arPolyline.POINTS[0].LAT, arPolyline.POINTS[0].LON]);
this.END_POINT = new ymaps.Placemark([arPolyline.POINTS[arPolyline.POINTS.length-1].LAT, arPolyline.POINTS[arPolyline.POINTS.length-1].LON],
{
hintContent: this.DATA.TITLE ? this.DATA.TITLE : jsYandexMess.poly_settings
});
jsYandexCE.map.geoObjects.add(this.END_POINT);
this.setStyle();
this.POLYLINE = new ymaps.Polyline(
this.DATA.POINTS, // reference!
{}, {
strokeColor: this.DATA.STYLE.strokeColor == null ? 'FF00007F' : this.DATA.STYLE.strokeColor,
strokeWidth: this.DATA.STYLE.strokeWidth == null ? '3' : this.DATA.STYLE.strokeWidth,
clickable: true
}
);
this.prepareSettingsForm();
jsYandexCE.map.geoObjects.add(this.POLYLINE);
this.__createView();
this.setTitle();
}
CBXYandexPoly.prototype.__createView = function()
{
this.VIEW = BX('bx_yandex_polylines').appendChild(document.createElement('LI'));
var obDeleteLink = this.VIEW.appendChild(document.createElement('A'));
//obDeleteLink.style.width = '30px';
obDeleteLink.href = "javascript: void(0)";
obDeleteLink.className = 'bx-yandex-delete';
obDeleteLink.onclick = BX.delegate(this.Delete, this);
obDeleteLink.style.display = 'none';
var obLink = this.VIEW.appendChild(document.createElement('A'));
obLink.className = 'bx-yandex-poly';
obLink.href = 'javascript:void(0)';
obLink.onclick = BX.delegate(this.showSettingsForm, this);
obLink.innerHTML = window.jsYandexMess.noname + ' (' + this.DATA.POINTS.length + ')';
this.VIEW.onmouseover = this.__poly_link_hover;
this.VIEW.onmouseout = this.__poly_link_hout;
return this.VIEW;
}
CBXYandexPoly.prototype.prepareSettingsForm = function()
{
this.EDIT_CONTROL = document.createElement('FORM');
this.END_POINT.properties.set('balloonContent', this.EDIT_CONTROL);
this.EDIT_CONTROL.BX_POLYLINE = this;
var obContainer = document.createElement('DIV');
this.EDIT_CONTROL.appendChild(obContainer);
this.COLORPICKER = new BXColorPicker(
{
'id': 'CP_bx_yandex_ce',
'name': window.jsYandexMess.poly_opt_color,
'zIndex': BX.WindowManager.Get().zIndex + 100,
'OnSelect': BX.delegate(function(color) {
if (!color)
color = 'FF0000';
else
color = color.substring(1);
this.EDIT_CONTROL.elements[1].value = color;
this.setStyle('color', color, this.EDIT_CONTROL.elements[0]);
}, this)
}
);
obContainer.innerHTML = '<b>' + window.jsYandexMess.poly_opt_header + '</b>' +
'<br /><br /><table class="bx-yandex-poly-settings">' +
'<tr><td><span style="font-size: 11px;">' + window.jsYandexMess.poly_opt_title + '</span></td><td><input type="text" value="" style="width: 125px;" onkeyup="this.form.BX_POLYLINE.setTitle(this.value)" /></td></tr>' +
'<tr><td><span style="font-size: 11px;">' + window.jsYandexMess.poly_opt_color + '</span></td><td><input type="text" value="' + this.STYLE.strokeColor.substring(0,6) + '" style="width: 100px; float: left;" onkeyup="this.form.BX_POLYLINE.setStyle(\'color\', this.value, this)" /></td></tr>' +
'<tr><td><span style="font-size: 11px;">' + window.jsYandexMess.poly_opt_width + '</span></td><td><input type="text" value="' + this.STYLE.strokeWidth + '" style="width: 125px;"onkeyup="this.form.BX_POLYLINE.setStyle(\'width\', this.value, this)" /></td></tr>' +
'<tr><td><span style="font-size: 11px;">' + window.jsYandexMess.poly_opt_opacity + '</span></td><td><input type="text" value="' + Math.round(parseInt('0x' + this.STYLE.strokeColor.substring(6))/2.55) + '" style="width: 125px;"onkeyup="this.form.BX_POLYLINE.setStyle(\'opacity\', this.value, this)" /></td></tr>' +
'</table>';
if (null != this.DATA.TITLE)
this.EDIT_CONTROL.elements[0].value = this.DATA.TITLE;
this.EDIT_CONTROL.elements[1].parentNode.appendChild(this.COLORPICKER.pCont);
}
CBXYandexPoly.prototype.setTitle = function(title)
{
if (null != title)
this.DATA.TITLE = title;
else
title = this.DATA.TITLE;
this.END_POINT.properties.set('hintContent', title);
var value_view = '';
if (this.DATA.TITLE.length > 0)
{
var rnpos = this.DATA.TITLE.indexOf("\n");
value_view = rnpos <= 0 ? this.DATA.TITLE : this.DATA.TITLE.substring(0, rnpos);
value_view = value_view.replace(/>/g, '>');
value_view = value_view.replace(/</g, '<');
}
this.__updateViewText(value_view ? value_view : window.jsYandexMess.noname);
}
CBXYandexPoly.prototype.setStyle = function(property, value, obInput)
{
if (null == this.STYLE)
{
this.STYLE = {
strokeColor: this.DATA.STYLE.strokeColor == null ? 'FF00007F' : this.DATA.STYLE.strokeColor,
strokeWidth: this.DATA.STYLE.strokeWidth == null ? '3' : this.DATA.STYLE.strokeWidth
};
}
var bError = false;
if (null != property && null != value)
{
switch (property)
{
case 'color':
if(/^[A-F0-9]{6}$/i.test(value))
{
this.STYLE.strokeColor = value + this.STYLE.strokeColor.substring(6);
}
else
{
bError = true;
}
break;
case 'width':
value = parseInt(value);
if(isNaN(value))
{
bError = true;
}
else
{
this.STYLE.strokeWidth = value;
}
break;
case 'opacity':
value = parseInt(value);
if(!isNaN(value) && value >= 0 && value <= 100)
{
value = Math.round(value * 2.55).toString(16).toUpperCase();
this.STYLE.strokeColor = this.STYLE.strokeColor.substring(0,6)+BX.util.str_pad_left(value, 2, '0');
}
else
{
bError = true;
}
break;
}
if (null != obInput)
{
if (bError)
obInput.style.backgroundColor = 'FFB0B0';
else
obInput.style.backgroundColor = 'white';
}
}
if (!bError && null != this.POLYLINE)
{
this.POLYLINE.options.set('strokeColor', this.STYLE.strokeColor);
this.POLYLINE.options.set('strokeWidth', this.STYLE.strokeWidth);
}
}
/* /CBXYandexPoly definition */
var jsYandexCE = {
map: null,
arData: {},
obForm: null,
currentView: '',
bPositionFixed: true,
bAddPointMode: false,
bAddPolyMode: false,
onInitCompleted: null,
bInitCompleted: false,
bInitScriptsLoaded: false,
__arValidKeys: ['yandex_lat', 'yandex_lon', 'yandex_scale', 'PLACEMARKS', 'LON', 'LAT', 'TEXT', 'POLYLINES', 'POINTS', 'STYLE', 'lineStyle', 'strokeColor', 'strokeWidth','TITLE'],
__obMapTypes: {
'HYBRID': 'yandex#hybrid',
'SATELLITE': 'yandex#satellite',
'PUBLIC': 'yandex#publicMap',
'PUBLIC_HYBRID': 'yandex#publicMapHybrid',
'MAP': 'yandex#map'
},
__currentPolyLine: null,
__currentPolyLineObject: null,
_getTypeName: function(yandex_type)
{
return (
yandex_type == 'yandex#hybrid'
? 'HYBRID'
: (
yandex_type == 'yandex#satellite'
? 'SATELLITE'
: (
yandex_type == 'yandex#publicMap'
? 'PUBLIC'
: (
yandex_type == 'yandex#publicMapHybrid'
? 'PUBLIC_HYBRID'
: 'MAP'
)
)
)
);
},
init: function(map)
{
if (null != map)
jsYandexCE.map = map; //GLOBAL_arMapObjects['system_view_edit'];
var obHead = document.getElementsByTagName('HEAD')[0];
BX.loadCSS([
'/bitrix/components/bitrix/map.yandex.system/templates/.default/style.css',
'/bitrix/components/bitrix/map.yandex.view/settings/settings_iframe.css'
]);
BX.loadScript('/bitrix/components/bitrix/main.colorpicker/templates/.default/script.js', function() {
top.jsYandexCE.bInitScriptsLoaded=true;
top.jsYandexCE.checkInitCompleted();
});
jsYandexCE.obForm = document.forms['bx_popup_form_yandex_map'];
jsYandexCE.obForm.onsubmit = jsYandexCE.__saveChanges;
jsYandexCE.map.events.add("boundschange", jsYandexCE.__getPositionValues);
jsYandexCE.map.events.add("sizechange", jsYandexCE.__getPositionValues);
jsYandexCE.map.events.add("typechange", jsYandexCE.__getPositionValues);
if (!jsYandexCE.arData.yandex_lat || !jsYandexCE.arData.yandex_lon || !jsYandexCE.arData.yandex_scale)
{
var obPos = jsYandexCE.map.getCenter();
jsYandexCE.arData.yandex_lat = obPos[0];
jsYandexCE.arData.yandex_lon = obPos[1];
jsYandexCE.arData.yandex_scale = jsYandexCE.map.getZoom();
jsYandexCE.bPositionFixed = false;
}
else
{
jsYandexCE.bPositionFixed = true;
}
jsYandexCE.currentView = jsYandexMess.current_view;
jsYandexCE.setControlValue('yandex_lat', jsYandexCE.arData.yandex_lat);
jsYandexCE.setControlValue('yandex_lon', jsYandexCE.arData.yandex_lon);
jsYandexCE.setControlValue('yandex_scale', jsYandexCE.arData.yandex_scale);
jsYandexCE.setControlValue('yandex_view', jsYandexMess['MAP_VIEW_' + jsYandexCE._getTypeName(jsYandexCE.map.getType())]);
BX('bx_restore_position').onclick = jsYandexCE.restorePositionValues;
BX('bx_yandex_position_fix').onclick = function () {jsYandexCE.setFixedFlag(this.checked)};
jsYandexCE.setFixedFlag(BX('bx_yandex_position_fix').defaultChecked);
BX('bx_yandex_map_controls').style.visibility = 'visible';
BX('bx_yandex_map_address_search').style.visibility = 'visible';
jsYandexCE.bInitCompleted = true;
jsYandexCE.checkInitCompleted();
},
checkInitCompleted: function()
{
if (jsYandexCE.bInitCompleted && jsYandexCE.bInitScriptsLoaded)
{
if (jsYandexCE.onInitCompleted)
jsYandexCE.onInitCompleted();
return true;
}
else
{
return false;
}
},
__getPositionValues: function()
{
if (jsYandexCE.bPositionFixed)
return;
var obPos = jsYandexCE.map.getCenter();
jsYandexCE.arData.yandex_lat = obPos[0];
jsYandexCE.arData.yandex_lon = obPos[1];
jsYandexCE.arData.yandex_scale = jsYandexCE.map.getZoom();
jsYandexCE.setControlValue('yandex_lat', jsYandexCE.arData.yandex_lat);
jsYandexCE.setControlValue('yandex_lon', jsYandexCE.arData.yandex_lon);
jsYandexCE.setControlValue('yandex_scale', jsYandexCE.arData.yandex_scale);
jsYandexCE.currentView = jsYandexCE._getTypeName(jsYandexCE.map.getType());
jsYandexCE.setControlValue('yandex_view', jsYandexMess['MAP_VIEW_' + jsYandexCE.currentView]);
},
restorePositionValues: function(e)
{
if (jsYandexCE.currentView && jsYandexCE.__obMapTypes[jsYandexCE.currentView])
jsYandexCE.map.setType(jsYandexCE.__obMapTypes[jsYandexCE.currentView]);
jsYandexCE.map.setZoom(+jsYandexCE.arData.yandex_scale);
jsYandexCE.map.panTo([+jsYandexCE.arData.yandex_lat, +jsYandexCE.arData.yandex_lon]);
return BX.PreventDefault(e);
},
setFixedFlag: function(value)
{
jsYandexCE.bPositionFixed = value;
if (!value)
jsYandexCE.__getPositionValues();
},
setControlValue: function(control, value)
{
var obControl = jsYandexCE.obForm['bx_' + control];
if (null != obControl)
obControl.value = value;
var obControlOut = BX('bx_' + control + '_value');
if (null != obControlOut)
obControlOut.innerHTML = value;
},
addPoint: function()
{
if (!jsYandexCE.bAddPointMode)
{
if (jsYandexCE.bAddPolyMode)
jsYandexCE.addPolyline();
jsYandexCE.bAddPointMode = true;
jsYandexCE.map.behaviors.disable("dblClickZoom");
BX('bx_yandex_addpoint_link').style.display = 'none';
BX('bx_yandex_addpoint_message').style.display = 'block';
jsYandexCE.map.events.add("dblclick", jsYandexCE.__addPoint);
}
else
{
jsYandexCE.map.events.remove("dblclick", jsYandexCE.__addPoint);
BX('bx_yandex_addpoint_message').style.display = 'none';
BX('bx_yandex_addpoint_link').style.display = 'block';
jsYandexCE.map.behaviors.enable("dblClickZoom");
jsYandexCE.bAddPointMode = false;
}
},
addPolyline: function()
{
if (jsYandexCE.bAddPolyMode)
{
if (null != jsYandexCE.arData.POLYLINES && jsYandexCE.arData.POLYLINES.length > 0 && !jsYandexCE.arData.POLYLINES[jsYandexCE.arData.POLYLINES.length-1].bFinished)
{
if (jsYandexCE.arData.POLYLINES.length > 1)
jsYandexCE.arData.POLYLINES[jsYandexCE.arData.POLYLINES.length-1].Finish();
}
jsYandexCE.bAddPolyMode = false;
jsYandexCE.map.behaviors.enable("dblClickZoom");
BX('bx_yandex_addpoly_link').style.display = 'block';
BX('bx_yandex_addpoly_message').style.display = 'none';
BX('bx_yandex_addpoly_message1').style.display = 'none';
jsYandexCE.map.events.remove('dblclick', jsYandexCE.__startPoly);
}
else
{
if (jsYandexCE.bAddPointMode)
jsYandexCE.addPoint();
jsYandexCE.bAddPolyMode = true;
jsYandexCE.map.behaviors.disable("dblClickZoom");
BX('bx_yandex_addpoly_link').style.display = 'none';
BX('bx_yandex_addpoly_message').style.display = 'block';
jsYandexCE.map.events.add('dblclick', jsYandexCE.__startPoly);
}
},
addCustomPoint: function(arPointInfo)
{
if (null == jsYandexCE.arData.PLACEMARKS)
jsYandexCE.arData.PLACEMARKS = [];
var index = jsYandexCE.arData.PLACEMARKS.length;
jsYandexCE.arData.PLACEMARKS[index] = new CBXYandexPoint({
TEXT: arPointInfo.TEXT, LON: arPointInfo.LON, LAT: arPointInfo.LAT
});
jsYandexCE.arData.PLACEMARKS[index].onDelete = function () {jsYandexCE.arData.PLACEMARKS[index].DELETED = 1};
return index;
},
addCustomPoly: function(arPolyInfo)
{
if (null == jsYandexCE.arData.POLYLINES)
jsYandexCE.arData.POLYLINES = [];
var index = jsYandexCE.arData.POLYLINES.length;
jsYandexCE.arData.POLYLINES[index] = new CBXYandexPoly(arPolyInfo);
jsYandexCE.arData.POLYLINES[index].onDelete = function () {jsYandexCE.arData.POLYLINES[index].DELETED = 1};
return index;
},
__addPoint: function(obEvent)
{
if (!jsYandexCE.bAddPointMode)
return;
var pos = obEvent.get("coordPosition");
var index = jsYandexCE.addCustomPoint({
TEXT: '', LAT: pos[0], LON: pos[1]
});
jsYandexCE.arData.PLACEMARKS[index].Edit();
},
__startPoly: function(obEvent)
{
if (!jsYandexCE.bAddPolyMode)
return;
if (null == jsYandexCE.arData.POLYLINES)
jsYandexCE.arData.POLYLINES = [];
jsYandexCE.map.events.remove("dblclick", jsYandexCE.__addPoint);
BX('bx_yandex_addpoly_message').style.display = 'none';
BX('bx_yandex_addpoly_message1').style.display = 'block';
var index = jsYandexCE.arData.POLYLINES.length;
jsYandexCE.arData.POLYLINES[index] = new CBXYandexPoly();
jsYandexCE.arData.POLYLINES[index].Start(obEvent.get("coordPosition"));
jsYandexCE.arData.POLYLINES[index].onFinish = function() {
BX('bx_yandex_addpoly_message').style.display = 'block';
BX('bx_yandex_addpoly_message1').style.display = 'none';
jsYandexCE.map.events.add('dblclick', jsYandexCE.__startPoly);
};
jsYandexCE.arData.POLYLINES[index].onDelete = function () {jsYandexCE.arData.POLYLINES[index].DELETED = 1};
},
__checkValidKey: function(key)
{
if (Number(key) == key)
return true;
for (var i = 0, len = jsYandexCE.__arValidKeys.length; i < len; i++)
{
if (jsYandexCE.__arValidKeys[i] == key)
return true;
}
return false;
},
__serialize: function(obj)
{
if (typeof(obj) == 'object')
{
var str = '', cnt = 0;
for (var i in obj)
{
if (jsYandexCE.__checkValidKey(i))
{
++cnt;
str += jsYandexCE.__serialize(i) + jsYandexCE.__serialize(obj[i]);
}
}
str = "a:" + cnt + ":{" + str + "}";
return str;
}
else if (typeof(obj) == 'boolean')
{
return 'b:' + (obj ? 1 : 0) + ';';
}
else if (null == obj)
{
return 'N;'
}
else if (Number(obj) == obj && obj != '' && obj != ' ')
{
if (Math.floor(obj) == obj)
return 'i:' + obj + ';';
else
return 'd:' + obj + ';';
}
else if(typeof(obj) == 'string')
{
obj = obj.replace(/\r\n/g, "\n");
obj = obj.replace(/\n/g, "###RN###");
var offset = 0;
if (window._global_BX_UTF)
{
for (var q = 0, cnt = obj.length; q < cnt; q++)
{
if (obj.charCodeAt(q) > 2047) offset+=2;
else if (obj.charCodeAt(q) > 127) offset++;
}
}
return 's:' + (obj.length + offset) + ':"' + obj + '";';
}
},
__saveChanges: function()
{
if (!jsYandexCE.map)
return false;
jsYandexCE.bAddPointMode = false;
var arSerializeData = {
'yandex_lat':jsYandexCE.arData.yandex_lat,
'yandex_lon':jsYandexCE.arData.yandex_lon,
'yandex_scale':jsYandexCE.arData.yandex_scale
};
if (jsYandexCE.arData['PLACEMARKS'])
{
arSerializeData.PLACEMARKS = [];
for(var i = 0, len = jsYandexCE.arData.PLACEMARKS.length; i < len; i++)
{
if (null == jsYandexCE.arData.PLACEMARKS[i].DELETED)
arSerializeData.PLACEMARKS[arSerializeData.PLACEMARKS.length] = jsYandexCE.arData.PLACEMARKS[i].getData();
}
}
if (jsYandexCE.arData['POLYLINES'])
{
arSerializeData.POLYLINES = [];
for(var i = 0, len = jsYandexCE.arData.POLYLINES.length; i < len; i++)
{
if (null == jsYandexCE.arData.POLYLINES[i].DELETED && null != jsYandexCE.arData.POLYLINES[i].POLYLINE)
arSerializeData.POLYLINES[arSerializeData.POLYLINES.length] = jsYandexCE.arData.POLYLINES[i].getData();
}
}
window.jsYandexCEOpener.saveData(jsYandexCE.__serialize(arSerializeData), jsYandexCE.currentView);
//jsYandexCE.clear();
return false;
},
clear: function()
{
jsYandexCE.bInitCompleted = false;
jsYandexCE.bInitScriptsLoaded = false;
jsYandexCE.bAddPointMode = false;
jsYandexCE.bAddPolyMode = false;
if (null != jsYandexCE.arData.PLACEMARKS && jsYandexCE.arData.PLACEMARKS.length > 0)
{
for (var i = 0,len = jsYandexCE.arData.PLACEMARKS.length; i<len; i++)
{
jsYandexCE.arData.PLACEMARKS[i].Delete();
jsYandexCE.arData.PLACEMARKS[i] = null;
}
jsYandexCE.arData.PLACEMARKS = [];
}
if (null != jsYandexCE.arData.POLYLINES && jsYandexCE.arData.POLYLINES.length > 0)
{
for (var i = 0,len = jsYandexCE.arData.POLYLINES.length; i<len; i++)
{
jsYandexCE.arData.POLYLINES[i].Delete();
jsYandexCE.arData.POLYLINES[i] = null;
}
jsYandexCE.arData.POLYLINES = [];
}
jsYandexCE.map = null;
}
}
var jsYandexCESearch = {
bInited: false,
map: null,
obInput: null,
timerID: null,
timerDelay: 1000,
arSearchResults: [],
obOut: null,
__init: function(input)
{
if (jsYandexCESearch.bInited) return;
jsYandexCESearch.map = jsYandexCE.map;
jsYandexCESearch.obInput = input;
input.form.onsubmit = function() {jsYandexCESearch.doSearch(); return false;}
input.onfocus = jsYandexCESearch.showResults;
input.onblur = jsYandexCESearch.hideResults;
jsYandexCESearch.bInited = true;
},
setTypingStarted: function(input)
{
if (!jsYandexCESearch.bInited)
jsYandexCESearch.__init(input);
jsYandexCESearch.hideResults();
if (null != jsYandexCESearch.timerID)
clearTimeout(jsYandexCESearch.timerID);
jsYandexCESearch.timerID = setTimeout(jsYandexCESearch.doSearch, jsYandexCESearch.timerDelay);
},
doSearch: function()
{
var value = BX.util.trim(jsYandexCESearch.obInput.value);
if (value.length > 1)
{
ymaps.geocode(value).then(
jsYandexCESearch.__searchResultsLoad,
jsYandexCESearch.handleError
);
}
},
handleError: function(error)
{
alert(this.jsMess.mess_error + ': ' + error.message);
},
__generateOutput: function()
{
jsYandexCESearch.obOut = document.body.appendChild(document.createElement('UL'));
jsYandexCESearch.obOut.className = 'bx-yandex-address-search-results';
jsYandexCESearch.obOut.style.display = 'none';
},
__searchResultsLoad: function(res)
{
if (null == jsYandexCESearch.obOut)
jsYandexCESearch.__generateOutput();
jsYandexCESearch.obOut.innerHTML = '';
jsYandexCESearch.clearSearchResults();
var len = res.geoObjects.getLength();
if (len > 0)
{
for (var i = 0; i < len; i++)
{
jsYandexCESearch.arSearchResults[i] = res.geoObjects.get(i);
var obListElement = document.createElement('LI');
if (i == 0)
obListElement.className = 'bx-yandex-first';
var obLink = document.createElement('A');
obLink.href = "javascript:void(0)";
var obText = obLink.appendChild(document.createElement('SPAN'));
obText.appendChild(document.createTextNode(
jsYandexCESearch.arSearchResults[i].properties.get('metaDataProperty').GeocoderMetaData.text
));
obLink.BXSearchIndex = i;
obLink.onclick = jsYandexCESearch.__showSearchResult;
obListElement.appendChild(obLink);
jsYandexCESearch.obOut.appendChild(obListElement);
}
}
else
{
jsYandexCESearch.obOut.innerHTML = '<li class="bx-yandex-notfound">' + window.jsYandexMess.nothing_found + '</li>';
}
jsYandexCESearch.showResults();
},
__showSearchResult: function(e)
{
if (null !== this.BXSearchIndex)
{
jsYandexCESearch.map.panTo(jsYandexCESearch.arSearchResults[this.BXSearchIndex].geometry.getCoordinates());
}
return BX.PreventDefault(e);
},
showResults: function()
{
var obPos = BX.pos(jsYandexCESearch.obInput);
jsYandexCESearch.obOut.style.top = (obPos.bottom + 2) + 'px';
jsYandexCESearch.obOut.style.left = obPos.left + 'px';
jsYandexCESearch.obOut.style.zIndex = parseInt(BX.WindowManager.Get().zIndex) + 200;
if (BX.findParent(jsYandexCESearch.obInput, {"tag" : "div", "className" : "bx-core-window bx-core-adm-dialog"}).style.display == 'block')
{
if (null != jsYandexCESearch.obOut)
jsYandexCESearch.obOut.style.display = 'block';
}
},
hideResults: function()
{
if (null != jsYandexCESearch.obOut)
{
setTimeout("jsYandexCESearch.obOut.style.display = 'none'", 300);
}
},
clearSearchResults: function()
{
for (var i = 0; i < jsYandexCESearch.arSearchResults.length; i++)
{
delete jsYandexCESearch.arSearchResults[i];
}
jsYandexCESearch.arSearchResults = [];
},
clear: function()
{
if (!jsYandexCESearch.bInited)
return;
jsYandexCESearch.bInited = false;
if (null != jsYandexCESearch.obOut)
{
jsYandexCESearch.obOut.parentNode.removeChild(jsYandexCESearch.obOut);
jsYandexCESearch.obOut = null;
}
jsYandexCESearch.arSearchResults = [];
jsYandexCESearch.map = null;
jsYandexCESearch.obInput = null;
jsYandexCESearch.timerID = null;
}
}