PageSourceSearch

https://medkron.ru/design/main.js?design=plastic&lc=1773213653

js medkron.ru collected 2026-10-05 00:17:18 UTC 32,547 bytes, 610 lines download raw bytes

1// Отправляет ошибку на сервер, для того, чтобы служба тех поддержки могла разобраться в проблеме как можно быстрее.
2function sendError (desc, page, line) {
3  var img=document.createElement('img');
4  img.src = 'https://storeland.ru/error/js?desc='+encodeURIComponent(desc)+'&page='+encodeURIComponent(window.location)+'&line=0';
5  img.style.position = 'absolute';
6  img.style.top = '-9999px';
7
8  try { document.getElementsByTagName('head').appendChild(img) } catch (e){}
9  return false;
10}
11
12// Форматирует цену
13function number_format(number,decimals,dec_point,thousands_sep){var n=number,prec=decimals;var toFixedFix=function(n,prec){var k=Math.pow(10,prec);return(Math.round(n*k)/k).toString();};n=!isFinite(+n)?0:+n;prec=!isFinite(+prec)?0:Math.abs(prec);var sep=(typeof thousands_sep==='undefined')?',':thousands_sep;var dec=(typeof dec_point==='undefined')?'.':dec_point;var s=(prec>0)?toFixedFix(n,prec):toFixedFix(Math.round(n),prec);var abs=toFixedFix(Math.abs(n),prec);var _,i;if(abs>=1000){_=abs.split(/\D/);i=_[0].length%3||3;_[0]=s.slice(0,i+(n<0))+
14_[0].slice(i).replace(/(\d{3})/g,sep+'$1');s=_.join(dec);}else{s=s.replace('.',dec);}
15var decPos=s.indexOf(dec);if(prec>=1&&decPos!==-1&&(s.length-decPos-1)<prec){s+=new Array(prec-(s.length-decPos-1)).join(0)+'0';}
16else if(prec>=1&&decPos===-1){s+=dec+new Array(prec).join(0)+'0';}
17return s;}
18
19// Превращает поле пароля в текстовое поле и обратно
20// @LinkObject - ссылка по которой кликнули
21// @InputObject - объект у которого нужно изменить тип поля
22function ChangePasswordFieldType (LinkObject, InputObject) {
23  var 
24    // Ссылка по которой кликнули
25    LObject = $(LinkObject),
26    // Объект у которого изменяем тип с password на text
27    IObject = $(InputObject),
28    // Старый текст ссылки
29    txtOld = LObject.text(),
30    // Новый текст ссылки
31    txtNew = LObject.attr('rel');
32
33  // Если объекты не получены, завершим работу функции
34  if( LObject.length==0 || IObject.length==0 ) {
35    return false;
36  }
37
38  // Изменяем у ссылки текст со старого на новый
39  LObject.html(txtNew);
40  // Старый текст ссылки сохраняем в атрибуте rel 
41  LObject.attr('rel', txtOld);
42
43  // Изменяем тип input поля
44  if(IObject[0].type == 'text') {
45    IObject[0].type = 'password';
46  } else {
47    IObject[0].type = 'text';
48  }
49}
50
51// Крутит изображение при обновлении картинки защиты от роботов
52function RefreshImageAction(img,num,cnt) {
53  if(cnt>13) {
54    return false;
55  }
56
57  $(img).attr('src', $(img).attr('rel') + 'icon/refresh/' + num + '.gif');
58  num = (num==6)?0:num;
59  setTimeout(function(){RefreshImageAction(img, num+1, cnt+1);}, 50);
60}
61
62$(document).ready(function(){
63 
64  // Валидация формы на странице оформления заказа, а так же формы на страницы связи с администрацией
65  $('.order form, .feedbackForm, .clientForm, .goodsDataOpinionAddForm').submit(function(){
66    if($(this).valid()) {
67      // Кнопка отправки формы
68      SubmitButton = $(this).find('input:submit, button:submit');
69      // Если кнопку уже нажали, видимо отправка формы производилась по нажатию на кнопку enter, не допускаем этого.
70      if($(SubmitButton.get(0)).attr('disabled')) {
71        return false;
72      }
73      // Устанавливаем на кнопку отправки формы блокировку повторной оптравки
74      SubmitButton.attr('disabled', true);
75      // Через 10 секунд блокировка отправки формы снимается.
76      setTimeout('SubmitButton.attr("disabled", false);', 10000);
77    }
78  }).validate();
79
80  // Отправка формы по Ctrl+Enter
81  $('form').bind('keypress', function(e){
82    if((e.ctrlKey) && ((e.which==10)||(e.which==13))) {$(this).submit();}
83  // Отправка данных формы по нажатию на Enter в случае если курсор находится в input полях (В некоторых браузерах при нажатии по enter срабатывает клик по первому submit полю, которое является кнопкой назад. Для этого написан этот фикс)
84  }).find('input').bind('keypress', function(e){
85    if(((e.which==10)||(e.which==13))) { try{$(this.form).submit();} catch(e){} return false; }
86  });
87  
88  // при клике на маленькие изображения инициализируем действие вызова галереи fancybox
89  $('a[rel="gallery"]').fancybox();
90  
91  // Увеличение изображение при клике на него и открытие галереи изображений
92  $('.fullimg a, .zoomimg a').click(function(){
93        
94        // Идентификатор главной картинки
95    var goodsImageId = $('.fullimg input').attr("rel"),
96        
97        // Маленькое изображение, по которому на самом деле будем кликать
98        goodsImageIconElement = $('.zoomicon input[rel="'+goodsImageId+'"]').parent().find('a');
99
100    // Для иконки изображения запустим галерею  
101    // goodsImageIconElement.nyroModalManual();
102    goodsImageIconElement.click();
103    return false;
104  });
105  
106  
107  // Добавление товара в корзину через ajax
108  $('.goodsDataForm, .goodsToCartFromCompareForm, .goodsListForm').submit(function(){
109    
110    $(this).nyroModalManual({
111      formIndicator: 'ajax_q',  // Value added when a form is sent
112      minWidth: 450, // Minimum width
113      minHeight: 140, // Minimum height
114      gallery: null // Gallery name if provided
115    });
116    return false;
117  });
118  
119  // Изменение главного изображения товара при нажатии на миниатюру
120  $('.zoomicon a').click(function(){
121        // Путь к среднему изображению
122    var MediumImageUrl = $(this).find('img').attr('rel'),
123        
124        // Главное изображение, в которое будем вставлять новое изображение
125        MainImage = $('.fullimg img'),
126        
127        // В этом объекте хранится идентификатор картинки главного изображения для коректной работы галереи изображений
128        MainImageIdObject = $('.fullimg input'),
129        
130        // Получаем идентификатор этого изображения из соседнего input поля
131        GoodsImageIconId = $(this).parent().find('input').attr("rel");
132    
133    // Изменяем главное изображение
134    MainImage.attr('src',MediumImageUrl);
135    
136    // Изменяем идентификатор главного изображения
137    MainImageIdObject.attr("rel",GoodsImageIconId);
138    
139    return false;
140  });
141
142  // Функция собирает свойства в строку, для определения модификации товара
143  function getSlugFromGoodsDataFormModificationsProperties(obj) {
144    var properties = new Array();
145    $(obj).each(function(i){
146      properties[i] = parseInt($(this).val());
147    });
148    return properties.sort(function(aaa, bbb){return aaa - bbb}).join('_');
149  }
150  
151  
152  var 
153    // Запоминаем поля выбора свойств, для ускорения работы со значениями свойств
154    goodsDataProperties = $('form.goodsDataForm select[name="form[properties][]"]'),
155    
156    // Запоминаем блоки с информацией по модификациям, для ускорения работы
157    goodsDataModifications = $('div.ModificationsList');
158
159  // Обновляет возможность выбора свойств модификации, для отключения возможности выбора по характеристикам модификации которой не существует.
160  function updateVisibility (y) {
161    // Проверяем в каждом соседнем поле выбора модификаций, возможно ли подобрать модификацию для указанных свойств
162    goodsDataProperties.each(function(j){
163      // Если мы сравниваем значения свойства не с самим собой, а с другим списком значений свойств
164      if( j != y ) {
165        // Проходим по всем значениям текущего свойства модификации товара
166        $(this).find('option').each(function(){
167          // Записываем временный массив свойств, которые будем использовать для проверки существования модификации
168          var checkProperties = new Array();
169          $(goodsDataProperties).each(function(i){
170            checkProperties[i] = parseInt($(this).val());
171          });
172          // Пытаемся найти модификацию соответствующую выбранным значениям свойств
173          checkProperties[j] = parseInt($(this).attr('value'));
174          // Собираем хэш определяющий модификацию по свойствам
175          slug = checkProperties.sort(function(a,b){return a - b}).join('_');
176          // Ищем модификацию по всем выбранным значениям свойств товара. Если модификации нет в возможном выборе, отмечаем потенциальное значение выбора как не доступное для выбора, т.к. такой модификации нет.
177          if(!goodsDataModifications.filter('[rel="'+slug+'"]').length) {
178           $(this).attr('disabled', true);
179          // Если выбрав данное значение свойства товара можно подобрать модификацию, то выделяем вариант выбора как доступный.
180          } else {
181            $(this).attr('disabled', false);
182          }
183        });
184      }
185    });
186  }
187  // Обновляем возможность выбора модификации товара по свойствам. Для тех свойств, выбор по которым не возможен, отключаем такую возможность.
188  // Проверяем возможность выбора на всех полях кроме первого, чтобы отключить во всех остальных варианты, которые не возможно выбрать
189  updateVisibility (0);
190  // Проверяем возможность выбора на всех полях кроме второго, чтобы в первом поле так же отключилась возможность выбора не существующих модификаций
191  updateVisibility (1);
192  
193  // Изменение цены товара при изменении у товара свойства для модификации
194  goodsDataProperties.each(function(y){
195    $(this).change(function(){
196      
197      var slug = getSlugFromGoodsDataFormModificationsProperties(goodsDataProperties),
198          submitButtonBlock             = $('li.goodsPageSubmitButtonBlock:eq(0)'),
199          modificationBlock             = goodsDataModifications.filter('[rel="'+slug+'"]'),
200          modificationId                = parseInt(modificationBlock.find('[name="id"]').val()),
201          modificationArtNumber         = modificationBlock.find('[name="art_number"]').val(),
202          modificationPriceNow          = parseFloat(modificationBlock.find('[name="price_now"]').val()),
203          modificationPriceNowFormated  = modificationBlock.find('.price_now_formated').html(),
204          modificationPriceOld          = parseFloat(modificationBlock.find('[name="price_old"]').val()),
205          modificationPriceOldFormated  = modificationBlock.find('.price_old_formated').html(),
206          modificationRestValue         = parseFloat(modificationBlock.find('[name="rest_value"]').val()),
207          modificationDescription       = modificationBlock.find('.description').html(),
208          modificationMeasureId         = parseInt(modificationBlock.find('[name="measure_id"]').val()),
209          modificationMeasureName       = modificationBlock.find('[name="measure_name"]').val(),
210          modificationMeasureDesc       = modificationBlock.find('[name="measure_desc"]').val(),
211          modificationMeasurePrecision  = modificationBlock.find('[name="measure_precision"]').val(),
212          modificationIsHasInCompareList= modificationBlock.find('[name="is_has_in_compare_list"]').val(),
213          goodsModificationId           = $('.goodsDataMainModificationId'),
214          goodsPriceNow                 = $('.goodsDataMainModificationPriceNow'),
215          goodsPriceOld                 = $('.goodsDataMainModificationPriceOld'),
216          goodsAvailable                = $('.goodsDataMainModificationAvailable'),
217          goodsAvailableTrue            = goodsAvailable.find('.available-true'),
218          goodsAvailableFalse           = goodsAvailable.find('.available-false'),
219          goodsArtNumberBlock           = $('.goodsDataMainModificationArtNumber'),
220          goodsArtNumber                = goodsArtNumberBlock.find('span');
221          goodsCompareAddButton         = $('.goodsDataCompareButton.add');
222          goodsCompareDeleteButton      = $('.goodsDataCompareButton.delete');
223          goodsModDescriptionBlock      = $('.goodsDataMainModificationsDescriptionBlock');
224       
225       
226       // Изменяем данные товара для выбранных параметров. Если нашлась выбранная модификация
227       if(modificationBlock.length) {
228         // Цена товара
229         goodsPriceNow.html(modificationPriceNowFormated);
230  
231         // Старая цена товара
232         if(modificationPriceOld>modificationPriceNow) {
233          goodsPriceOld.html(modificationPriceOldFormated);
234         } else {
235           goodsPriceOld.html('');
236         }
237         
238         // Есть ли товар есть в наличии
239         if(modificationRestValue>0) {
240           // Показываем кнопку "Положить в корзин
240у"
241           submitButtonBlock.show();
242           // Показываем табличку, что товар есть в наличии
243           goodsAvailableTrue.show();
244           // Скрываем табличку, о том что товара нет в наличии
245           goodsAvailableFalse.hide();
246         // Если товара нет в наличии
247         } else {
248           // Скрываем кнопку "Положить в корзину"
249           submitButtonBlock.hide();
250           // Скрываем табличку, что товар есть в наличии
251           goodsAvailableTrue.hide();
252           // Скрываем табличку, о том что товар есть в наличии
253           goodsAvailableFalse.show();
254         }
255         // Если товар есть в списке сравнения
256         if(modificationIsHasInCompareList>0) {
257           goodsCompareAddButton.hide();
258           goodsCompareDeleteButton.show();
259         // Если товара нет в списке сравнения
260         } else {
261           goodsCompareAddButton.show();
262           goodsCompareDeleteButton.hide();
263         }
264         
265         // Покажем артикул модификации товара, если он указан
266         if(modificationArtNumber.length>0) {
267           goodsArtNumberBlock.show();
268           goodsArtNumber.html(modificationArtNumber);
269         // Скроем артикул модификации товара, если он не указан
270         } else {
271           goodsArtNumberBlock.hide();
272           goodsArtNumber.html('');
273         }
274
275         // Описание модификации товара. Покажем если оно есть, спрячем если его у модификации нет
276         if(modificationDescription.length > 0) {
277           goodsModDescriptionBlock.show().html('<div>' + modificationDescription + '</div>');
278         } else {
279           goodsModDescriptionBlock.hide().html();
280         }
281         
282         
283         // Идентификатор товарной модификации
284         goodsModificationId.val(modificationId);
285       } else {
286         // Отправим запись об ошибке на сервер
287         sendError('no modification by slug '+slug);
288         alert('К сожалению сейчас не получается подобрать модификацию соответствующую выбранным параметрам.');
289       }
290       
291       // Обновляем возможность выбора другой модификации для текущих значений свойств модификации товара. 
292       updateVisibility(y);
293    });
294  });
295  
296  // Кнопка добавления товара на сравнение сравнения товаров
297  $('.goodsDataCompareButton').click(function(){
298    window.location.href = $(this).attr('rel') +
299    ($(this).attr('rel').indexOf( '\?' ) > -1 ? '&' : '?') +
300    'id='+
301    $('.goodsDataMainModificationId').val()+
302    '&from='+
303    $('input[name="form[goods_from]"]').val();
304    return false;
305  });
306  
307  
308  // Сравнение товаров. Увеличение изображение при клике на ссылку увеличения и открытие галереии с изображениями этого товара
309  $('.CompareGoodsImageZoom').click(function(){
310
311    // Галлерея фотографий для данной модификации товаров
312    var galleryBlock = $('.galleryBlock' +  $(this).attr('rel')),
313
314    // Главное изображение товара, которое сейчас стоит у товара
315    galleryMainImage = $('.CompareGoodsImageMain' +  $(this).attr('rel')),
316
317    // Изображение по которому нужно кликнуть в галлерее изображений
318    ImageIngallery = galleryBlock.find('.CompareGoodsImageGallery'+galleryMainImage.attr('rel'));
319    
320    // Запускаем галлерею изображений от изображения товара, чтобы если например кликнули по гайке, то и открылись гайка, а не еще какой-либо изображение этого товара
321    
322    // при клике на маленькие изображения создаём галерею изображений fancybox и запускаем её просмотр
323    $('a[rel="gallery' +  $(this).attr('rel') + '"]').fancybox();
324    ImageIngallery.click();
325    
326    /*
327    ImageIngallery.nyroModalManual({
328      gallery: 'gallery' +  $(this).attr('rel')
329    });
330*/
331    return false;
332  });
333  
334  // Сравнение товаров. Инвертирование свойств для сравнения товара
335  $('.CompareCheckbox.invert').click(function(){
336    var checked = true,
337        checkboxes = $('.CompareCheckbox:not(.invert)');
338
339    checkboxes.each(function(){
340      if($(this).attr('checked')) {
341        checked = false;
342        return false;
343      }
344    });
345    
346    checkboxes.each(function(){
347      $(this).attr('checked', checked);
348    });
349    
350    $(this).attr('checked', checked);
351  });
352  
353  // Сравнение товаров. Скрытие характеристик товара, которые выделил пользователь
354  $('.CompareGoodsHideSelected').click(function(){
355
356    $('.CompareGoodsTableTbodyComparisonLine').each(function(){
357      var CheckedCheckbox = $(this).find('.CompareCheckbox:checked:not(.invert)');
358      if(CheckedCheckbox.length>0) {
359        $(this).hide();
360      }
361    });
362
363    // отменяем выделение характеристик товаров
364    $('.CompareCheckbox').attr('checked',false);
365
366    return false;
367  });
368  
369  // Сравнение товаров. Отображение скрытых характеристик товара
370  $('.CompareGoodsShowAll').click(function(){
371    $('.CompareGoodsTableTbodyComparisonLine:hidden').show();
372    return false;
373  });
374  
375  // Сравнение товаров. Верхняя навигация изменение фильтра на отображение всех характеристик товаров
376  $('.CompareGoodsTableFilterShowAll').click(function(){
377    $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
378    $('.CompareGoodsTableTbodyComparisonLine:hidden').show();
379    
380    $(this).addClass('CompareGoodsTableFilterSelected');
381    return false;
382  });
383
384  // Сравнение товаров. Фильтр в верхней навигации. Отображение только различающихся характеристик товара
385  $('.CompareGoodsTableFilterShowOnlyDifferent').click(function(){
386    $('.CompareGoodsTableFilterSelected').removeClass('CompareGoodsTableFilterSelected');
387    $('.CompareGoodsTableTbodyComparisonLine:not(.same)').show();
388    $('.CompareGoodsTableTbodyComparisonLine.same').hide();
389
390    $(this).addClass('CompareGoodsTableFilterSelected');
391    return false;
392  });
393
394  // Сравнение товаров. При наведении на строку сравнения, она выделяется цветом
395  $('.CompareGoodsTableTbodyComparisonLine').hover(
396    function () { $(this).addClass('hover'); }, 
397    function () { $(this).removeClass('hover'); }
398  );
399  
400  // При клике по строке выделяем свойство
401  $('.CompareGoodsTableTbodyComparisonLine td:not(.ceil1)').click(function(){
402    var CompareCheckbox = $(this).parent().find('.CompareCheckbox');
403
404    if(CompareCheckbox.attr('checked')) {
405      CompareCheckbox.attr('checked', false);
406    } else {
407      CompareCheckbox.attr('checked', true);
408    }
409  });
410
411  // Форма регистрации нового пользователя, действие ссылки "показать пароль"
412  $('.clientForm .showPass').click(function(){
413    ChangePasswordFieldType(this, $('#sites_client_pass'));
414    return false;
415  });
416  
417  // Форма регистрации нового пользователя, при оформлении заказа
418  $('.OrderShowPass').click(function(){
419    ChangePasswordFieldType(this, $('#contactPassWord'));
420    return false;
421  });
422
423  // При вводе пароля с caps lockом, покажет блок с сообщением для пользователя
424  $('#sites_client_pass, #contactPassWord').capslock({
425    caps_lock_on:function(){$("#caps_lock").show();},
426    caps_lock_off:function(){$("#caps_lock").hide();}
427  });
428  
429  // При оформлении заказа дадим возможность зарегистрироваться пользователю
430  $('#contactWantRegister').click(function(){
431    if($(this).attr("checked")) {
432      $('.contactRegisterNeedElement').show();
433      $('#contactEmail, #contactPassWord').addClass('required');
434    } else {
435      $('.contactRegisterNeedElement').hide();
436      $('#contactEmail, #contactPassWord').removeClass('required');
437    }
438  });
439
440  // Добавление отзыва о товаре. Рейтинг
441  if(typeof($('.goodsDataOpinionTableRating').stars) == "function" ) {
442    $('.goodsDataOpinionTableRating').stars({
443      inputType: "input",
444      split: 2,
445      captionEl: $(".goodsDataOpinionMsg"),
446      cancelShow: false
447    });
448  }
449  
450  // Список отзывов о товаре. Ссылка на отображение формы для добавление отзыва о товаре
451  $('.goodsDataOpinionShowAddForm').click(function(){
452    if(0 == $('.otziv:visible').length) {
453      $('.otziv').show('blind');
454    } else {
455      $('.otziv').hide('blind');
456      return false;
457    }
458  });
459
460  // Добавление отзыва о товаре. кнопка reset скрывающая форму добавления отзыва о товаре
461  $('.goodsDataOpinionAddForm input:reset').click(function(){
462    $('#goodsDataOpinionAddBlock').hide('blind');
463  });
464
465  // Иконка для обновления изображение капчи
466  $('.goodsDataOpinionCaptchaRefresh').click(function(){
467    RefreshImageAction(this,1,1);
468    $('.goodsDataOpinionCaptchaImg').attr('src',$('.goodsDataOpinionCaptchaImg').attr('src')+'&rand'+Math.random(0,10000));
469    return false;
470  });
471
472
473  // Фильтры по товарам.
474  // При нажании на какую-либо характеристику или свойство товара происходит фильтрация товаров
475  $('.contentTbodySearchFilterBlock input').click(function(){
476    $(this)[0].form.submit();
477  });
478  var
479    // Минимальное значение цены для фильтра
480    priceFilterMinAvailable = parseInt($('.goodsFilterPriceRangePointers .min').text())
481    // Максимальное значение цены для фильтра
482    ,priceFilterMaxAvailable = parseInt($('.goodsFilterPriceRangePointers .max').text())
483    // Максимальное значение цены для фильтра
484    ,priceSliderBlock = $('#goods-filter-price-slider')
485    // Поле ввода текущего значения цены "От"
486    ,priceInputMin = $( "#goods-filter-min-price" )
487    // Поле ввода текущего значения цены "До"
488    ,priceInputMax = $( "#goods-filter-max-price" )
489    // Блок с кнопкой, которую есть смысл нажимать только тогда, когда изменялся диапазон цен.
490    ,priceSubmitButtonBlock = $( ".goodsFilterPriceSubmit" )
491  ;
492  // Изменяет размер ячеек с ценой, т.к. у них нет рамок, есть смысл менять размеры полей ввода, чтобы они выглядили как текст
493  function priceInputsChangeWidthByChars() {
494    // Если есть блок указания минимальной цены
495    if(priceInputMin.length) {
496      priceInputMin.css('width', (priceInputMin.val().length*7 + 3) + 'px');
497      priceInputMax.css('width', (priceInputMax.val().length*7 + 3) + 'px');
498    }
499  }
500  // Слайдер, который используется для удобства выбора цены
501  priceSliderBlock.slider({
502    range: true,
503    min: priceFilterMinAvailable,
504    max: priceFilterMaxAvailable,
505    values: [
506      parseInt($('#goods-filter-min-price').val())
507      ,parseInt($('#goods-filter-max-price').val())
508    ],
509    slide: function( event, ui ) {
510      priceInputMin.val( ui.values[ 0 ] );
511      priceInputMax.val( ui.values[ 1 ] );
512      priceSubmitButtonBlock.show();
513      priceInputsChangeWidthByChars();
514    }
515  });
516  // При изменении минимального значения цены
517  priceInputMin.keyup(function(){
518    var newVal = parseInt($(this).val());
519    if(newVal < priceFilterMinAvailable) {
520      newVal = priceFilterMinAvailable;
521    }
522    priceSliderBlock.slider("values", 0, newVal);
523    priceSubmitButtonBlock.show();
524    priceInputsChangeWidthByChars();
525  });
526  // При изменении максимального значения цены
527  priceInputMax.keyup(function(){
528    var newVal = parseInt($(this).val());
529    if(newVal > priceFilterMaxAvailable) {
530      newVal = priceFilterMaxAvailable;
531    }
532    priceSliderBlock.slider("values", 1, newVal);
533    priceSubmitButtonBlock.show();
534    priceInputsChangeWidthByChars();
535  });
536  // Обновить размеры полей ввода диапазона цен
537  priceInputsChangeWidthByChars();
538  // END Фильтры по товарам.
539  
540
541  // Действия при выборе варианта доставки на этапе оформления заказа
542  $('.deliveryRadio').click(function(){
543    
544    // Если текущая выделенная зона доставки не относится к выбранному варианту доставки, снимаем выделение с зоны доставки
545    if($('.deliveryZoneRadio:checked').attr('deliveryid') != $(this).val()) {
546      $('.deliveryZoneRadio:checked').click().attr('checked', false);
547    }
548    
549
550  if ($(this).val() === '342870') {
551          boxberry.open(function(result) {
552                $('#deliveryAddress').html(result.name + '(' + result.id + ') ' + result.address);
553          });
554        } else {
555          $('#deliveryAddress').html('');
556        }
557  });
558  
559  // Действия при выборе зоны внутри варианта доставки на этапе оформления заказа
560  $('.deliveryZoneRadio').click(function(){
561    
562    var 
563      deliveryId = $(this).attr('deliveryid')
564      ,deliveryZonePrice = $(this).parent().parent().find('.deliveryZonePrice b span')  // ++++++++++++++++++++++++
565      ,deliveryTbody = $('.orderStageDeliveryListTable tbody[rel="' + deliveryId + '"]')
566      ,deliveryBlock = deliveryTbody.find('#deliveryId' + deliveryId)
567      ,deliveryZonePriceBlock = deliveryTbody.find('.orderStageDeliveryZonePrice')  // ++++++++++++++++++++++++
568      ,deliveryDefaultPriceBlock = deliveryTbody.find('.orderStageDeliveryDefaultPrice')  // ++++++++++++++++++++++++
569    ;
570  
571    // Если этот пункт уже выбран, при повторном клике пользователь видимо хочет снять выделение зоны доставки
572    if('true' == $(this).attr('rel')) {
573      $(this).attr('checked', false);
574      $(this).attr('rel', 'false');
575      
576      // Показываем цену по умолчанию
577      deliveryDefaultPriceBlock.show();
578      // Скрываем цену образованную от зоны
579      deliveryZonePriceBlock.hide();
580      
581    // Отмечаем у всех радио баттонов зон доставки свойство говорящее что они не отмечены
582    } else {
583      $('.deliveryZoneRadio').attr('rel', 'false');
584      $(this).attr('rel', 'true');
585      
586      // Показываем цену по умолчанию
587      deliveryDefaultPriceBlock.hide();
588      // Скрываем цену образованную от зоны
589      deliveryZonePriceBlock.show().html(deliveryZonePrice.html());
590      
591      // Выделяем вариант доставки к которому относится зона доставки
592      deliveryBlock.attr('checked', true);
593    }
594    
595  });
596
597   $("#deliveryConvenientDate").datepicker({
598  	dayNames		    : ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'],
599		dayNamesMin		  : ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб' ],
600		closeText		    : 'Готово',
601		currentText		  : 'Сегодня' ,
602		duration		    : '',
603		monthNames		  : ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
604		monthNamesShort : ['Янв','Фев','Март','Апр','Май','Июнь','Июль','Авг','Сен','Окт','Ноя','Дек'],
605		yearRange		    : "-6:+6",
606		dateFormat		  : 'dd.mm.yy',
607		minDate         : new Date(),
608		firstDay		    : 1
609	});
610});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.