%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/map.google.search/settings/ |
| Current File : /home/bitrix/www/bitrix/components/bitrix/map.google.search/settings/settings_load.js |
var jsGoogleCE = {
map: null,
arData: null,
obForm: null,
currentView: '',
bPositionFixed: true,
__arValidKeys: ['google_lat', 'google_lon', 'google_scale'],
init: function()
{
BX.loadCSS('/bitrix/components/bitrix/map.google.system/templates/.default/style.css');
jsGoogleCE.map = GLOBAL_arMapObjects['system_search_edit'];
jsGoogleCE.arData = arPositionData;
jsGoogleCE.obForm = document.forms['bx_popup_form_google_map'];
jsGoogleCE.obForm.onsubmit = jsGoogleCE.__saveChanges;
google.maps.event.addListener(jsGoogleCE.map, 'dragend', jsGoogleCE.__getPositionValues);
google.maps.event.addListener(jsGoogleCE.map, 'maptypeid_changed', jsGoogleCE.__getPositionValues);
if (!jsGoogleCE.arData.google_lat || !jsGoogleCE.arData.google_lon || !jsGoogleCE.arData.google_scale)
{
var obPos = jsGoogleCE.map.getCenter();
jsGoogleCE.arData.google_lat = obPos.lat();
jsGoogleCE.arData.google_lon = obPos.lng();
jsGoogleCE.arData.google_scale = jsGoogleCE.map.getZoom();
jsGoogleCE.bPositionFixed = false;
}
else
{
jsGoogleCE.arData.google_scale = parseInt(jsGoogleCE.arData.google_scale);
jsGoogleCE.bPositionFixed = true;
}
//alert(2);
jsGoogleCE.setControlValue('google_lat', jsGoogleCE.arData.google_lat);
jsGoogleCE.setControlValue('google_lon', jsGoogleCE.arData.google_lon);
jsGoogleCE.setControlValue('google_scale', jsGoogleCE.arData.google_scale);
jsGoogleCE.currentView = BX.message('google_current_view');
jsGoogleCE.setControlValue('google_view', BX.message('google_MAP_VIEW_' + jsGoogleCE.map.getMapTypeId().toUpperCase()));
BX('bx_restore_position').onclick = jsGoogleCE.restorePositionValues;
BX('bx_google_map_controls').style.visibility = 'visible';
BX('bx_google_map_address_search').style.visibility = 'visible';
},
__getPositionValues: function()
{
if (jsGoogleCE.bPositionFixed)
return;
var obPos = jsGoogleCE.map.getCenter();
jsGoogleCE.arData.google_lat = obPos.lat();
jsGoogleCE.arData.google_lon = obPos.lng();
jsGoogleCE.arData.google_scale = jsGoogleCE.map.getZoom();
jsGoogleCE.setControlValue('google_lat', jsGoogleCE.arData.google_lat);
jsGoogleCE.setControlValue('google_lon', jsGoogleCE.arData.google_lon);
jsGoogleCE.setControlValue('google_scale', jsGoogleCE.arData.google_scale);
jsGoogleCE.currentView = jsGoogleCE.map.getMapTypeId().toUpperCase();
jsGoogleCE.setControlValue('google_view', jsGoogleCE.currentView);
},
restorePositionValues: function(e)
{
BX.PreventDefault(e);
if (jsGoogleCE.currentView && google.maps.MapTypeId[jsGoogleCE.currentView])
jsGoogleCE.map.setMapTypeId(google.maps.MapTypeId[jsGoogleCE.currentView]);
jsGoogleCE.map.setZoom(jsGoogleCE.arData.google_scale);
jsGoogleCE.map.panTo(new google.maps.LatLng(jsGoogleCE.arData.google_lat, jsGoogleCE.arData.google_lon));
},
setFixedFlag: function(value)
{
jsGoogleCE.bPositionFixed = value;
if (!value)
jsGoogleCE.__getPositionValues();
},
setControlValue: function(control, value)
{
var obControl = jsGoogleCE.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 = jsGoogleCE.__arValidKeys.length; i < len; i++)
{
if (jsGoogleCE.__arValidKeys[i] == key)
return true;
}
return false;
},
__serialize: function(obj)
{
if (typeof(obj) == 'object')
{
var str = '', cnt = 0;
for (var i in obj)
{
if (jsGoogleCE.__checkValidKey(i))
{
++cnt;
str += jsGoogleCE.__serialize(i) + jsGoogleCE.__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 (!jsGoogleCE.map)
return false;
window.jsGoogleCEOpener_search.saveData(jsGoogleCE.__serialize(jsGoogleCE.arData), jsGoogleCE.currentView);
return false;
}
}
var jsGoogleCESearch = {
bInited: false,
map: null,
geocoder: null,
obInput: null,
timerID: null,
timerDelay: 1000,
arSearchResults: [],
obOut: null,
__init: function(input)
{
if (jsGoogleCESearch.bInited) return;
jsGoogleCESearch.map = jsGoogleCE.map;
jsGoogleCESearch.obInput = input;
input.form.onsubmit = function() {jsGoogleCESearch.doSearch(); return false;}
input.onfocus = jsGoogleCESearch.showResults;
input.onblur = jsGoogleCESearch.hideResults;
jsGoogleCESearch.bInited = true;
},
setTypingStarted: function(input)
{
if (!jsGoogleCESearch.bInited)
jsGoogleCESearch.__init(input);
jsGoogleCESearch.hideResults();
if (null != jsGoogleCESearch.timerID)
clearTimeout(jsGoogleCESearch.timerID);
jsGoogleCESearch.timerID = setTimeout(jsGoogleCESearch.doSearch, jsGoogleCESearch.timerDelay);
},
doSearch: function()
{
var value = BX.util.trim(jsGoogleCESearch.obInput.value);
if (value.length > 1)
{
if (null == jsGoogleCESearch.geocoder)
jsGoogleCESearch.geocoder = new google.maps.Geocoder();
jsGoogleCESearch.geocoder.geocode({
address: value,
language: BX.message('LANGUAGE_ID')
}, jsGoogleCESearch.__searchResultsLoad);
}
},
handleError: function()
{
alert(jsGoogleCE.jsMess.mess_error);
},
setOutputCoordinates: function()
{
var obPos = BX.pos(jsGoogleCESearch.obInput);
jsGoogleCESearch.obOut.style.top = (obPos.bottom + 2) + 'px';
jsGoogleCESearch.obOut.style.left = obPos.left + 'px';
},
__generateOutput: function()
{
jsGoogleCESearch.obOut = document.body.appendChild(document.createElement('UL'));
jsGoogleCESearch.obOut.className = 'bx-google-address-search-results';
jsGoogleCESearch.setOutputCoordinates();
jsGoogleCESearch.obOut.style.zIndex = parseInt(BX.WindowManager.Get().zIndex) + 200;
},
__searchResultsLoad: function(obResult, status)
{
var _this = jsGoogleCESearch;
if (status != google.maps.GeocoderStatus.OK && status != google.maps.GeocoderStatus.ZERO_RESULTS)
{
_this.handleError({message: status});
return;
}
if (!obResult)
{
_this.handleError();
}
else
{
if (null == _this.obOut)
_this.__generateOutput();
_this.obOut.innerHTML = '';
_this.clearSearchResults();
var len = 0;
if (status == google.maps.GeocoderStatus.OK)
{
len = obResult.length;
var obList = null;
}
if (len > 0)
{
for (var i = 0; i < len; i++)
{
_this.arSearchResults[i] = obResult[i].geometry.location;
var lnk_text = '';
for (var j = 0; j < obResult[i].address_components.length; j++)
{
lnk_text += (lnk_text.length > 0 ? ', ' : '') + obResult[i].address_components[j].long_name;
}
_this.obOut.appendChild(BX.create('LI', {
attrs: {className: i == 0 ? 'bx-google-first' : ''},
children: [
BX.create('A', {
attrs: {href: "javascript:void(0)"},
props: {BXSearchIndex: i},
events: {click: _this.__showSearchResult},
children: [
BX.create('SPAN', {
text: lnk_text
})
]
})
]
}));
}
}
else
{
_this.obOut.innerHTML = '<li class="bx-google-notfound">' + BX.message('google_nothing_found') + '</li>';
}
_this.showResults();
}
//_this.map.redraw();
},
__showSearchResult: function(e)
{
if (null !== this.BXSearchIndex)
{
jsGoogleCESearch.map.panTo(jsGoogleCESearch.arSearchResults[this.BXSearchIndex]);
}
return BX.PreventDefault(e);
},
showResults: function()
{
if (null != jsGoogleCESearch.obOut)
{
jsGoogleCESearch.setOutputCoordinates();
jsGoogleCESearch.obOut.style.display = 'block';
}
},
hideResults: function()
{
if (null != jsGoogleCESearch.obOut)
{
setTimeout("jsGoogleCESearch.obOut.style.display = 'none'", 300);
}
},
clearSearchResults: function()
{
for (var i = 0; i < jsGoogleCESearch.arSearchResults.length; i++)
{
delete jsGoogleCESearch.arSearchResults[i];
}
jsGoogleCESearch.arSearchResults = [];
},
clear: function()
{
if (!jsGoogleCESearch.bInited)
return;
jsGoogleCESearch.bInited = false;
if (null != jsGoogleCESearch.obOut)
{
jsGoogleCESearch.obOut.parentNode.removeChild(jsGoogleCESearch.obOut);
jsGoogleCESearch.obOut = null;
}
jsGoogleCESearch.arSearchResults = [];
jsGoogleCESearch.map = null;
jsGoogleCESearch.geocoder = null;
jsGoogleCESearch.obInput = null;
jsGoogleCESearch.timerID = null;
}
}