%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/map.yandex.search/settings/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/map.yandex.search/settings/settings_load.js |
var jsYandexCE_search = {
map: null,
arData: null,
obForm: null,
currentView: '',
bPositionFixed: true,
__arValidKeys: ['yandex_lat', 'yandex_lon', 'yandex_scale'],
__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)
{
BX.loadCSS('/bitrix/components/bitrix/map.yandex.system/templates/.default/style.css');
if (null != map)
jsYandexCE_search.map = map; //GLOBAL_arMapObjects['system_view_edit'];
// TODO: check!
jsYandexCE_search.arData = arPositionData;
jsYandexCE_search.obForm = document.forms['bx_popup_form_yandex_map'];
jsYandexCE_search.obForm.onsubmit = jsYandexCE_search.__saveChanges;
jsYandexCE_search.map.events.add("boundschange", jsYandexCE_search.__getPositionValues);
jsYandexCE_search.map.events.add("sizechange", jsYandexCE_search.__getPositionValues);
jsYandexCE_search.map.events.add("typechange", jsYandexCE_search.__getPositionValues);
if (!jsYandexCE_search.arData.yandex_lat || !jsYandexCE_search.arData.yandex_lon || !jsYandexCE_search.arData.yandex_scale)
{
var obPos = jsYandexCE_search.map.getCenter();
jsYandexCE_search.arData.yandex_lat = obPos[0];
jsYandexCE_search.arData.yandex_lon = obPos[1];
jsYandexCE_search.arData.yandex_scale = jsYandexCE_search.map.getZoom();
jsYandexCE_search.bPositionFixed = false;
}
else
{
jsYandexCE_search.bPositionFixed = true;
}
jsYandexCE_search.currentView = jsYandexMess.current_view;
jsYandexCE_search.setControlValue('yandex_lat', jsYandexCE_search.arData.yandex_lat);
jsYandexCE_search.setControlValue('yandex_lon', jsYandexCE_search.arData.yandex_lon);
jsYandexCE_search.setControlValue('yandex_scale', jsYandexCE_search.arData.yandex_scale);
jsYandexCE_search.setControlValue('yandex_view', jsYandexMess['MAP_VIEW_' + jsYandexCE_search._getTypeName(jsYandexCE_search.map.getType())]);
BX('bx_restore_position').onclick = jsYandexCE_search.restorePositionValues;
BX('bx_yandex_position_fix').onclick = function () {jsYandexCE_search.setFixedFlag(this.checked)};
jsYandexCE_search.setFixedFlag(BX('bx_yandex_position_fix').defaultChecked);
BX('bx_yandex_map_controls').style.visibility = 'visible';
BX('bx_yandex_map_address_search').style.visibility = 'visible';
},
__getPositionValues: function()
{
if (jsYandexCE_search.bPositionFixed)
return;
var obPos = jsYandexCE_search.map.getCenter();
jsYandexCE_search.arData.yandex_lat = obPos[0];
jsYandexCE_search.arData.yandex_lon = obPos[1];
jsYandexCE_search.arData.yandex_scale = jsYandexCE_search.map.getZoom();
jsYandexCE_search.setControlValue('yandex_lat', jsYandexCE_search.arData.yandex_lat);
jsYandexCE_search.setControlValue('yandex_lon', jsYandexCE_search.arData.yandex_lon);
jsYandexCE_search.setControlValue('yandex_scale', jsYandexCE_search.arData.yandex_scale);
jsYandexCE_search.currentView = jsYandexCE_search._getTypeName(jsYandexCE_search.map.getType());
jsYandexCE_search.setControlValue('yandex_view', jsYandexMess['MAP_VIEW_' + jsYandexCE_search.currentView]);
},
restorePositionValues: function(e)
{
if (jsYandexCE_search.currentView && jsYandexCE_search.__obMapTypes[jsYandexCE_search.currentView])
jsYandexCE_search.map.setType(jsYandexCE_search.__obMapTypes[jsYandexCE_search.currentView]);
jsYandexCE_search.map.setZoom(jsYandexCE_search.arData.yandex_scale);
jsYandexCE_search.map.panTo([+jsYandexCE_search.arData.yandex_lat, +jsYandexCE_search.arData.yandex_lon]);
return BX.PreventDefault(e);
},
setFixedFlag: function(value)
{
jsYandexCE_search.bPositionFixed = value;
if (!value)
jsYandexCE_search.__getPositionValues();
},
setControlValue: function(control, value)
{
var obControl = jsYandexCE_search.obForm['bx_' + control];
if (null != obControl)
obControl.value = value;
var obControlOut = BX('bx_' + control + '_value');
if (null != obControlOut)
obControlOut.innerHTML = value;
},
__checkValidKey: function(key)
{
if (Number(key) == key)
return true;
for (var i = 0, len = jsYandexCE_search.__arValidKeys.length; i < len; i++)
{
if (jsYandexCE_search.__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_search.__checkValidKey(i))
{
++cnt;
str += jsYandexCE_search.__serialize(i) + jsYandexCE_search.__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) > 127) offset++;
}
}
return 's:' + (obj.length + offset) + ':"' + obj + '";';
}
},
__saveChanges: function()
{
if (!jsYandexCE_search.map)
return false;
window.jsYandexCEOpener_search.saveData(jsYandexCE_search.__serialize(jsYandexCE_search.arData), jsYandexCE_search.currentView);
delete jsYandexCE_search.map;
return false;
}
}
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_search.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()
{
var obPos = BX.pos(jsYandexCESearch.obInput);
jsYandexCESearch.obOut = document.body.appendChild(document.createElement('UL'));
jsYandexCESearch.obOut.className = 'bx-yandex-address-search-results';
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;
},
__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()
{
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;
}
}