PageSourceSearch

https://track24.ru/js/main.js?v3312649595c50e52fa8164e069e884d22fc

js track24.ru collected 2026-10-01 13:06:31 UTC 458,912 bytes, 8,269 lines download raw bytes

1 /* 
2	lg 1200px and up (center 846px;)
3	md 992px and up (center 615px;) 
4	sm 768px and up (center 720px;) 
5	xs 0px and up (center 718px;)
6*/
7	 
8 /* 100% x 90 */   
9	 function ya_ads_1() {	
10	   //console.log("#"+adblock_prefix+"-1", $("#"+adblock_prefix+"-1").length);
11	   if ($("#"+adblock_prefix+"-1").length > 0) { 	 
12			window.yaContextCb.push(()=>{
13			  Ya.Context.AdvManager.render({ 
14				 renderTo: adblock_prefix+"-1",
15				  blockId: 'R-A-463347-1' 
16			  })
17			})
18	   }
19		return true;
20	 } 
21	 
22	 /* 100% x 90 */   
23	  function ya_ads_2() {	
24        //console.log("#"+adblock_prefix+"-2", $("#"+adblock_prefix+"-2").length);
25	    if ($("#"+adblock_prefix+"-2").length > 0) {
26			  window.yaContextCb.push(()=>{
27			  Ya.Context.AdvManager.render({ 
28				 renderTo: adblock_prefix+"-2",
29				 blockId: 'R-A-463347-2' 
30			  })
31			})
32	   }
33		return true;
34	 } 
35	 
36	 /* 100% x 90 */  
37	  function ya_ads_3() {	 
38	  //console.log("#"+adblock_prefix+"-3", $("#"+adblock_prefix+"-3").length);
39		if ($("#"+adblock_prefix+"-3").length > 0) {   
40			  window.yaContextCb.push(()=>{
41			  Ya.Context.AdvManager.render({ 
42				 renderTo: adblock_prefix+"-3",
43				  blockId: 'R-A-463347-3' 
44			  })
45			})
46		}
47		return true;
48	 } 
49	 
50	 /* 240×400, 240×600 */
51	  function ya_ads_4() {	 
52		  window.yaContextCb.push(()=>{
53		  Ya.Context.AdvManager.render({ 
54			 renderTo: adblock_prefix+"-4",
55			 blockId: 'R-A-463347-4'
56		  })
57		})
58		return true;
59	 } 
60	 
61	  /* 240×400, 240×600 */ 
62	 function ya_ads_5() {	 
63		  window.yaContextCb.push(()=>{
64		  Ya.Context.AdvManager.render({ 
65			 renderTo: adblock_prefix+"-5",
66			 blockId: 'R-A-463347-5'
67		  })
68		})
69		return true;
70	 } 
71	 
72	  /* 240×400, 240×600 */
73	  function ya_ads_6() {	 
74		  window.yaContextCb.push(()=>{
75		  Ya.Context.AdvManager.render({ 
76			 renderTo: adblock_prefix+"-6",
77			 blockId: 'R-A-463347-6'
78		  })
79		})
80		return true;
81	 } 
82	 
83	 /* 240×400, 300×300 */ 
84	  function ya_ads_7() {	 
85		  window.yaContextCb.push(()=>{
86		  Ya.Context.AdvManager.render({ 
87			 renderTo: adblock_prefix+"-7",
88			 blockId: 'R-A-463347-7'
89		  })
90		})
91		return true;
92	 } 
93	 
94    /* билборд  */ 
95	  function ya_ads_8() {	 
96		  window.yaContextCb.push(()=>{
97		  Ya.Context.AdvManager.render({ 
98			 renderTo: adblock_prefix+"-8",
99			 blockId: 'R-A-463347-8'
100		  })
101		})
102		return true;
103	 } 
104	 
105	 
106	  /* 100% x 90 */  
107	  function ya_ads_23() {	 
108	  //console.log("#"+adblock_prefix+"-3", $("#"+adblock_prefix+"-3").length);
109	    //console.log("ya_ads_21"); 
110		if ($("#"+adblock_prefix+"-3").length > 0) {   
111			  window.yaContextCb.push(()=>{
112			  Ya.Context.AdvManager.render({ 
113				 renderTo: adblock_prefix+"-3",
114				  blockId: 'R-A-1962504-1' 
115			  })
116			})
117		}
118		return true;
119	 } 
120	 
121	  /* 240×400, 240×600 */
122	  function ya_ads_24() {
123         //console.log("ya_ads_24"); 
124		  window.yaContextCb.push(()=>{
125		  Ya.Context.AdvManager.render({ 
126			 renderTo: adblock_prefix+"-4",
127			 blockId: 'R-A-1962504-2'
128		  })
129		})
130		return true;
131	 }
132	 /* 240×400, 240×600 */
133	  function ya_ads_25() {
134         //console.log("ya_ads_25"); 
135		  window.yaContextCb.push(()=>{
136		  Ya.Context.AdvManager.render({ 
137			 renderTo: adblock_prefix+"-5",
138			 blockId: 'R-A-1962504-3'
139		  })
140		})
141		return true;
142	 }
143	 /* 240×400, 240×600 */
144	  function ya_ads_26() {
145         //console.log("ya_ads_26"); 
146		  window.yaContextCb.push(()=>{
147		  Ya.Context.AdvManager.render({ 
148			 renderTo: adblock_prefix+"-6",
149			 blockId: 'R-A-1962504-4'
150		  })
151		})
152		return true;
153	 } 
154	
155	
156function check_ya_ads_8() { 
157		if ($('.adspreloader').length == 1) {
158			$('.adspreloader').text(":(");
159			//$('.adspreloader').parent().css('height', '190px').css('min-height', '').slideUp();			
160			$('.adspreloader').parent().css('height', '105px').css('min-height', '').html('<div style="min-width: 1140px; overflow: hidden;"><a href="https://track24.ru/?g=ls-streamer-1140x100" target="_blank"><img src="https://track24.ru/img/alksjdu/ls-1140x100-4.gif"></a></div>');
161		}
162		return true;
163}
164
165function check_ya_ads_8_render() { 
166		if ($('yatag').length == 0) {
167			setTimeout(function() {  
168				check_ya_ads_8_render();		  
169			}, 100);
170		}
171		else {
172			//console.timeLog("check_ya_ads_8");
173		}
174		return true;
175}
176
177
178	 
179	 
180function g_ads_1() {		  	
181		  $.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
182			  $('#'+adblock_prefix+'-1').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_597891']={'i':__lxGc__.b++};<\/script>");  
183		  });
184		return true;
185	 } 
186	 
187	 function g_ads_2() {		  	
188		$.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
189			   $('#'+adblock_prefix+'-2').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_633240']={'i':__lxGc__.b++};<\/script>");  
190		 });  
191		return true;
192	 } 
193	 
194	 function g_ads_3() {
195		 $.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
196			 $('#'+adblock_prefix+'-3').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_633507']={'i':__lxGc__.b++};<\/script>");
197		 });
198		 
199		return true;
200	 } 
201	 
202	 function g_ads_4() {	 	  	
203		  $.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
204		 	  $('#'+adblock_prefix+'-4').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_597890']={'i':__lxGc__.b++};<\/script>");  
205		  }); 
206		 
207		return true;
208	 } 
209	 
210	 function g_ads_5() {		  	
211		  $.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
212			 $('#'+adblock_prefix+'-5').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_596530']={'i':__lxGc__.b++};<\/script>");  
213		  }); 
214		return true;
215	 } 
216	 
217	 function g_ads_6() {
218		$.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
219			$('#'+adblock_prefix+'-6').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_633221']={'i':__lxGc__.b++};<\/script>");  
220 	    }); 
221		return true;
222	 } 
223	 function g_ads_7() {		  	
224		$.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
225			$('#'+adblock_prefix+'-7').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_596288']={'i':__lxGc__.b++};<\/script>");
226        });
227		return true;
228	 } 
229	 
230	 function g_ads_responsive_1() {		  	
231		 $.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
232			 $('#'+adblock_prefix+'-1').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_596293']={'i':__lxGc__.b++};<\/script>");  
233	     }); 
234		 return true;
235	 } 
236	  function g_ads_responsive_2() {		  	
237		 $.getScript('//s.luxupcdnc.com/t/common_402.js').done(function() {
238			 $('#'+adblock_prefix+'-1').html("<script class='__lxGc__' type='text/javascript'>((__lxGc__=window.__lxGc__||{'s':{},'b':0})['s']['_202980']=__lxGc__['s']['_202980']||{'b':{}})['b']['_596294']={'i':__lxGc__.b++};<\/script>");  
239		 });
240		return true;
241	 }
242	 function adfox_bilboard() {	 
243  	    $('#'+adblock_prefix+'-0').html('<script>(function(w, n) { w[n] = w[n] || []; w[n].push([{ ownerId: 257193, containerId: "'+adblock_prefix+'-0",	params: { pp: "ksr", ps: "deoo", p2: "fpxb"	}}, [ "desktop",], { tabletWidth: 1024, phoneWidth: 767, isAutoReloads: false }]);})(window, "adfoxAsyncParamsAdaptive");<\/script>');
244	    
245	 }
246	 function adfox_mobile() {		  	
247		 if ($('#'+adblock_prefix+'-2').is(':empty')) { 
248			//$('#'+adblock_prefix+'-2').html("<script>(function(w, n) {w[n] = w[n] || []; w[n].push([{ ownerId: 257193, containerId: 'adfox_156155720504367400', params: { pk: __clADF__.state, pp: 'ksq',ps: 'deoo', p2: 'fpxb' }}, [ 'phone'], {tabletWidth: 1024, phoneWidth: 767, isAutoReloads: false }]);})(window, 'adfoxAsyncParamsAdaptive');<\/script>");
249			 $('#'+adblock_prefix+'-2').html("<script>(function(w, n) {w[n] = w[n] || []; w[n].push([{ ownerId: 257193, containerId: '"+adblock_prefix+"-2', params: { pk: __clADF__.state, pp: 'ksq',ps: 'deoo', p2: 'fpxb' }}, [ 'phone'], {tabletWidth: 1024, phoneWidth: 767, isAutoReloads: false }]);})(window, 'adfoxAsyncParamsAdaptive');<\/script>");
250		 }
251		return true;
252	 }  
253	 
254	 function adfox_sticky() {		  	
255		 $('#adfox_155240045554651540').html("<script>(function(w,n){w[n]=w[n]||[];w[n].push([{ownerId:257193,containerId:'adfox_155240045554651540',params:{pk:__clADF__.state,pp:'ksp',ps:'deoo',p2:'fpxb'}},['desktop','tablet'],{tabletWidth:1024,phoneWidth:767,isAutoReloads:false}])})(window,'adfoxAsyncParamsAdaptive');<\/script>");  
256		return true;
257	 }  	 
258
259function initYads() {
260	    var currentTime = new Date().getTime();
261		$.Storage.set('lastAdsReRenderTime', currentTime.toString());
262		if (yandex_ads_filter == false) {
263		          if (findBootstrapEnvironment() === "lg") {
264					      ya_ads_1();
265						  ya_ads_4(); //
266						  ya_ads_5();
267						  ya_ads_6();
268						  //ya_ads_24(); //
269						  //ya_ads_25();
270						  //ya_ads_26();
271						  
272				  }
273				  else if (findBootstrapEnvironment() === "md") {
274						 ya_ads_1();
275						 ya_ads_4(); //
276						 ya_ads_5();
277						 ya_ads_6(); 
278						 //ya_ads_24(); //
279						 //ya_ads_25();
280						 //ya_ads_26();
281                         
282						 
283				  }
284				  else if (findBootstrapEnvironment() === "sm") {
285						 ya_ads_1(); 
286				  }				  
287				  else if (findBootstrapEnvironment() === "xs") {
288						 ya_ads_1();
289				  }
290		}
291	}
292
293	function reRenderAds() { 
294		 if ((findBootstrapEnvironment() === "lg") || (findBootstrapEnvironment() === "md")) { 
295		    ya_ads_2(); 
296	     } 
297		 else { 
298			 ya_ads_2(); 
299		 } 
300		 
301		  //ya_ads_3();  //
302		   ya_ads_23(); //
303		  
304		 /*
305		 var rnd = Math.floor(Math.random() * 10);
306		 console.log("rnd "+rnd);
307		 if (rnd < 8) {
308			ya_ads_3(); 
309		 }
310		 else {
311			 ya_ads_21();
312		 }
313		 */
314	  
315		 var currentTime = new Date().getTime();
316		 var nextReRenderAdsOverSec = 60; 
317		 var lastAdsReRenderDiffTime = ((typeof $.Storage.get("lastAdsReRenderTime") === "undefined") || ($.Storage.get("lastAdsReRenderTime") === null) || ($.Storage.get("lastAdsReRenderTime") === "") ) ? Math.ceil(currentTime) : Math.ceil((currentTime-$.Storage.get("lastAdsReRenderTime"))/1000);
318					 
319		 if (lastAdsReRenderDiffTime >= nextReRenderAdsOverSec) {
320			$.Storage.set('lastAdsReRenderTime', currentTime.toString()); 
321		 }     	 
322   }
323
324 
325/* jq*/
326$.urlParam = function(name){
327    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
328    if (results==null){
329       return null;
330    }
331    else{
332       return results[1] || 0;
333    }
334};
335
336jQuery.fn.reverse = function(fn) {       
337   var i = this.length;
338     while(i--) {
339        fn.call(this[i], i, this[i])
340     }
341};
342
343jQuery.fn.timeUpdate = function (filter,pole,intarval, options) {
344  var options = jQuery.extend({
345   lang: {
346    years:   ['год', 'года', 'лет'],
347    months:  ['месяц', 'месяца', 'месяцев'],
348    days:    ['день', 'дня', 'дней'],
349    hours:   ['час', 'часа', 'часов'],
350    minutes: ['минута', 'минуты', 'минут'],
351    seconds: ['секунда', 'секунды', 'секунд'],
352    plurar:  function(n) { 
353           return (n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }
354   },
355   end: " назад",
356   tolkochto:"только что"
357  }, options);
358  
359   var timeDifference = function(end, begin) {
360    if (end < begin) return false;
361      var difference = {
362       seconds: [end.getSeconds() - begin.getSeconds(), 60],
363       minutes: [end.getMinutes() - begin.getMinutes(), 60],
364       hours:   [end.getHours()   - begin.getHours()  , 24],
365       days:    [end.getDate()    - begin.getDate()   , new Date(begin.getYear(), begin.getMonth() + 1, 0).getDate()],
366       months:  [end.getMonth()   - begin.getMonth()  , 12],
367       years:   [end.getYear()    - begin.getYear()   , 0]
368      };
369    if(difference.years[0]!=  0    ){ 
370         delete (difference.days);   
371          delete (difference.hours);   
372          delete (difference.minutes);
373          delete (difference.seconds); }
374    else if(difference.months[0]!=0){ 
375         delete (difference.hours);  
376          delete (difference.minutes); 
377          delete (difference.seconds); }
378    else if(difference.days[0]!=0  ){ 
379         delete (difference.minutes);
380          delete (difference.seconds); }
381    else if(difference.hours[0]!=0 ) 
382         delete (difference.seconds); 
383      var result = new Array();
384      var flag = false;
385      for (i in difference) {
386       if (flag) {
387        difference[i][0]--;
388        flag = false;
389       }     
390       if (difference[i][0] < 0) {
391        flag = true;
392        difference[i][0] += difference[i][1];
393       }
394       if (!difference[i][0]) continue;
395       result.push(difference[i][0] + ' ' + options.lang[i][options.lang.plurar(difference[i][0])]);
396      }
397      return result.reverse().join(' ');
398  };
399  var timeUpdate = function () {
400      var need_to_time_update=$(filter);
401     if(need_to_time_update.size()>0){
402      need_to_time_update.each(function(i){
403      var date=need_to_time_update.eq(i).attr(pole).toString().split(",");
404      var s = timeDifference(new Date(), new Date(date[0],date[1]-1,date[2],date[3],date[4],date[5]));
405        if (s.length) need_to_time_update.eq(i).html(s+options.end); 
406             else need_to_time_update.eq(i).html(options.tolkochto);
407      });
408     }
409  };
410  timeUpdate();
411  var timer = setInterval(timeUpdate, intarval);
412 };
413	
414
415 
416  
417 
418 
419
420 //проверку нахождения блока в видимой области
421 function inWindow(el){ 
422	  var scrollTop = $(window).scrollTop();
423	  var windowHeight = $(window).height();
424	  var currentEls = $(el);
425	  //var result = [];
426	  var result = false; 
427  currentEls.each(function(){
428    var el = $(this);
429    var offset = el.offset();
430    if(scrollTop <= offset.top && (el.height() + offset.top) < (scrollTop + windowHeight))
431      //result.push(this);
432       result = true;
433  });
434  //return $(result);
435  return  result;
436}
437 /*
438  $(document).scroll(function () {
439   if(inWindow(".trackCat")) {
440        console.log('inWindow .trackCat');
441	    console.log(inWindow($('.trackCat')));
442      }
443	  else {
444		console.log(inWindow($('.trackCat')));
445	 }
446   });
447*/
448
449function changeFavicon(iconHref){ 
450	var icon=$("[rel='shortcut icon']"); 
451	var cache=icon.clone(); 
452	cache.attr("href", iconHref); 
453	icon.replaceWith(cache); 
454}	
455	 
456function jsInfoNote(text, url, buttonText) { 
457			if (($('#jsInfoNote').length > 0) && ($('#jsInfoNote').visible() === false)) { 
458				setTimeout( function() { 
459				  
460				   var jsInfoNoteHtmlContent = text;
461				   var jsInfoNoteUrl = url;
462				   var jsInfoNoteButtonText = buttonText;
463				   
464				   if ((typeof jsInfoNoteHtmlContent !== "undefined") && (jsInfoNoteHtmlContent !== null) && (jsInfoNoteHtmlContent !== "")) {
465					  var jsInfoNoteHtml = '<div class="jsInfoNoteWrapper"><div class="jsInfoNoteLeftBlock"><svg class="jsInfoNotificationIcon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M10 0a10 10 0 1 0 10 10A10 10 0 0 0 10 0zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8z"></path><path d="M9 9h2v6H9zM9 5h2v2H9z"></path></svg></svg></div><div id="jsInfoNoteMidleBlock" class="jsInfoNoteMidleBlock">'+jsInfoNoteHtmlContent+'</div><div class="jsInfoNoteCloseWrapper"><i id="jsInfoNoteCloseButton" class="close-button-light"></i></div></div>';   
466				      
467				   }
468				    
469					$('#jsInfoNote').html(jsInfoNoteHtml);
470				 
471				    if (((typeof jsInfoNoteUrl !== "undefined") && (jsInfoNoteUrl !== null) && (jsInfoNoteUrl !== ""))  && ((typeof jsInfoNoteButtonText !== "undefined") && (jsInfoNoteButtonText !== null) && (jsInfoNoteButtonText !== ""))) {
472					   if (jsInfoNoteUrl.length > 0) {
473						 $('#jsInfoNoteMidleBlock').append('<br><button type="button" id="jsInfoNoteButton" class="jsInfoNoteButton">'+jsInfoNoteButtonText+' &#xbb;</button>');
474						 $('#jsInfoNoteButton').unbind();
475							$('#jsInfoNoteButton').bind('click', function(e) { 
476								//clickLoggerFunction($(this));
477								var win = window.open(jsInfoNoteUrl, '_blank');
478								win.focus();
479							});	 
480					   }
481					}
482					
483				   var jsInfoNoteMd5 = md5(jsInfoNoteHtml); 
484					if ((typeof $.Storage.get("jsInfoNote-"+jsInfoNoteMd5) === "undefined") || ($.Storage.get("jsInfoNote-"+jsInfoNoteMd5) === null) || ($.Storage.get("jsInfoNote-"+jsInfoNoteMd5) === "") || ($.Storage.get("jsInfoNote-"+jsInfoNoteMd5) == "true")) {
485						   $.Storage.set("jsInfoNote-"+jsInfoNoteMd5, "true");
486						   $('#jsInfoNote').slideDown();  
487					}  
488				   
489				   
490					
491					$('#jsInfoNoteCloseButton').unbind();
492					$('#jsInfoNoteCloseButton').bind('click', function(e) {
493						//clickLoggerFunction($(this));
494						$('#jsInfoNote').slideUp(); 
495						 $.Storage.set("jsInfoNote-"+jsInfoNoteMd5, "false"); 
496					});										
497					 
498				}, 1000);  
499			}
500		}
501		
502	function jsPromo(jsPromoContent) {  
503			if (($('#jsPromo').length > 0) && ($('#jsPromo').visible() === false)) { 
504				setTimeout( function() {  
505				  
506				  var jsPromoHtml = '<div class="jsInfoNoteWrapper"><div class="jsPromoCloseWrapper"><i id="jsPromoCloseButton" class="close-button-light" title="Закрыть"></i></div>'+jsPromoContent+'</div>';
507				   $('#jsPromo').html(jsPromoHtml); 
508					
509				   var jsPromoMd5 = md5(jsPromoHtml); 
510					if ((typeof $.Storage.get("jsPromo-"+jsPromoMd5) === "undefined") || ($.Storage.get("jsPromo-"+jsPromoMd5) === null) || ($.Storage.get("jsPromo-"+jsPromoMd5) === "") || ($.Storage.get("jsPromo-"+jsPromoMd5) == "true")) {
511						   $.Storage.set("jsPromo-"+jsPromoMd5, "true");
512						   $('#jsPromo').slideDown("1300");
513					}  
514					
515					$('#jsPromoCloseButton').unbind();
516					$('#jsPromoCloseButton').bind('click', function(e) {
517						//clickLoggerFunction($(this));
518						$('#jsPromo').slideUp(); 
519						 $.Storage.set("jsPromo-"+jsPromoMd5, "false"); 
520					});										
521					 
522				}, 3000);  
523			}
524		}
525
526		
527		
528 function dxSimpleSlider(element, auto, pause) {
529        // Get parent element
530        var $this = $(element);
531
532        // Slides container
533        var slidesCont = $this.children('.slides-container');
534        // Get all slides
535        var slides = slidesCont.children('.slide');
536
537        // Get pager div
538        var pager = $this.children('.pager');
539
540        // Get Previous / Next links
541        var arrowsCont = $this.children('.arrows');
542        var prevSlide = arrowsCont.children('.prev');
543        var nextSlide = arrowsCont.children('.next');
544
545        // Total slides count
546        var slidesCount = slides.length;
547
548        // Set currentSlide to first child
549        var currentSlide = slides.first();
550        var currentSlideIndex = 1;
551
552        var autoPlay = null;
553
554        // Hide all slides except first and add active class to first
555        slides.not(':first').css('display', 'none');
556        currentSlide.addClass('active');
557
558        // Function responsible for fading to next slide
559        function fadeNext() {
560            currentSlide.removeClass('active').fadeOut(700);
561
562            if(currentSlideIndex == slidesCount) {
563                currentSlide = slides.first();
564                currentSlide.delay(500).addClass('active').fadeIn(700);
565                currentSlideIndex = 1;
566            } else {
567                currentSlideIndex++;
568                currentSlide = currentSlide.next();
569                currentSlide.delay(500).addClass('active').fadeIn(700);
570            }
571
572            pager.text(currentSlideIndex+' / '+slidesCount);
573        }
574
575        // Function responsible for fading to previous slide
576        function fadePrev() {
577            currentSlide.removeClass('active').fadeOut(700);
578
579            if(currentSlideIndex == 1) {
580                currentSlide = slides.last();
581                currentSlide.delay(500).addClass('active').fadeIn();
582                currentSlideIndex = slidesCount;
583            } else {
584                currentSlideIndex--;
585                currentSlide = currentSlide.prev();
586                currentSlide.delay(500).addClass('active').fadeIn(700);
587            }
588
589            pager.text(currentSlideIndex+' / '+slidesCount);
590        }
591
592        // Function that starts the autoplay and resets it in case user navigated (clicked prev or next)
593        function AutoPlay() {
594            clearInterval(autoPlay);
595
596            if(auto == true)
597                autoPlay = setInterval(function() {fadeNext()}, pause);
598        }
599
600        // Detect if user clicked on arrow for next slide and fade next slide if it did
601        $(nextSlide).click(function(e) {
602            e.preventDefault();
603            fadeNext();
604            AutoPlay();
605        });
606
607        // Detect if user clicked on arrow for previous slide and fade previous slide if it did
608        $(prevSlide).click(function(e) {
609            e.preventDefault();
610            fadePrev();
611            AutoPlay();
612        });
613
614        // Start autoplay if auto is set to true
615        AutoPlay();
616
617 }
618
619function jcarouselInit() {	
620		 $('.jcarousel').jcarousel({ wrap: 'circular' });
621		 $('.jcarousel').jcarouselAutoscroll({ interval: 10000});
622
623		$('.jcarousel-control-prev')
624			.on('jcarouselcontrol:active', function() {
625				$(this).removeClass('inactive');
626			})
627			.on('jcarouselcontrol:inactive', function() {
628				$(this).addClass('inactive');
629			})
630			.jcarouselControl({
631				target: '-=1'
632			});
633
634		$('.jcarousel-control-next')
635			.on('jcarouselcontrol:active', function() {
636				$(this).removeClass('inactive');
637			})
638			.on('jcarouselcontrol:inactive', function() {
639				$(this).addClass('inactive');
640			})
641			.jcarouselControl({
642				target: '+=1'
643			});
644
645		$('.jcarousel-pagination')
646			.on('jcarouselpagination:active', 'a', function() {
647				$(this).addClass('active');
648			})
649			.on('jcarouselpagination:inactive', 'a', function() {
650				$(this).removeClass('active');
651			})
652			.jcarouselPagination();
653}
654			
655
656 
657function findBootstrapEnvironment() {
658    var envs = ['xs', 'sm', 'md', 'lg'];
659
660    $el = $('<div>');
661    $el.appendTo($('body'));
662
663    for (var i = envs.length - 1; i >= 0; i--) {
664        var env = envs[i];
665
666        $el.addClass('hidden-'+env);
667        if ($el.is(':hidden')) {
668            $el.remove();
669            return env
670        }
671    };
672}
673
674 function rand(min, max) {
675  var offset = min;
676  var range = (max - min) + 1; 
677  var randomNumber = Math.floor( Math.random() * range) + offset;
678  return randomNumber;
679}
680
681 function numberof(numberof, value, suffix) {
682    var numberof = Math.abs(numberof);
683    var keys = [2, 0, 1, 1, 1, 2];
684    var mod = numberof % 100;
685    var suffix_key = mod > 4 && mod < 20 ? 2 : keys[Math.min(mod%10, 5)];
686    
687    return value+suffix[suffix_key];
688 }	
689 
690 
691  function numberFormat(number, decimals, dec_point, thousands_sep) {
692	  number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
693	  var n = !isFinite(+number) ? 0 : +number,
694		prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
695		sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
696		dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
697		s = '',
698		toFixedFix = function(n, prec) {
699		  var k = Math.pow(10, prec);
700		  return '' + (Math.round(n * k) / k)
701			.toFixed(prec);
702		};
703	  
704	  s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
705		.split('.');
706	  if (s[0].length > 3) {
707		s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
708	  }
709	  if ((s[1] || '')
710		.length < prec) {
711		s[1] = s[1] || '';
712		s[1] += new Array(prec - s[1].length + 1)
713		  .join('0');
714	  }
715	  return s.join(dec);
716}
717
718function animateCSS(element, animationName, callback) {
719    const node = document.querySelector(element)
720    node.classList.add('animated', animationName)
721
722    function handleAnimationEnd() {
723        node.classList.remove('animated', animationName)
724        node.removeEventListener('animationend', handleAnimationEnd)
725
726        if (typeof callback === 'function') callback()
727    }
728
729    node.addEventListener('animationend', handleAnimationEnd)
730}	
731
732function googleGeoCoder(address, callback) {
733	      var result = [];
734		  geocoder = new google.maps.Geocoder();
735		  geocoder.geocode( {'address': address}, function(results, status) {
736					 if (status == google.maps.GeocoderStatus.OK) {
737					       result["label"] = results[0].formatted_address;
738						   result["latitude"] = parseFloat(results[0].geometry.location.lat());
739						   result["longitude"] = parseFloat(results[0].geometry.location.lng())
740					       callback(result);
741					 }
742					 else {
743					    callback(null);
744					 }
745			});		 
746					 
747 }
748	 
749function detectBrowser() {
750	var ua = navigator.userAgent;
751
752    if (ua.search(/Firefox/) > -1) {
753        return "firefox";
754    }
755
756    if (ua.search(/OPR/) > -1) {
757        return "opera";
758    }
759
760    if (ua.search(/YaBrowser/) > -1) {
761        return "yabrowser";
762    }
763    if (ua.search(/Amigo/) > -1) {
764        return "amigo";
765    }
766    if (ua.search(/Chrome/) > -1) {
767        return "chrome";
768    }
769    if (ua.search(/Safari/) > -1) {
770        return "safari";
771    }
772
773    return null;
774}
775
776function getExtensionUrl(name) {
777     return $('link[rel="' + name + '"]').attr('href');
778 }		
779		
780		
781 function isLocalStorageNameSupported() {
782    var testKey = 'isLocalStorageNameSupported', ls = window.localStorage, ss = window.sessionStorage;
783	try {
784        ls.setItem(testKey, '1');
785        ls.removeItem(testKey);
786	}	
787    catch (e) {
788	      return false;
789    }
790	try {
791        ss.setItem(testKey, '1');
792        ss.removeItem(testKey);
793    } 
794	catch (e) {
795	     return false;
796	}
797	return true;
798}
799
800
801function upuValidateInfo(inputedTrackCode, json) {
802	 if ((jQuery.inArray("UPU", json.services) != -1 ) || (isValidUPU(inputedTrackCode) === true)) {
803		    json.services.splice( json.services.indexOf("UPU"), 1 );
804			 $("#inputTrackCode").addClass("inputTrackCode-validate");
805		  } else {
806			$("#inputTrackCode").removeClass("inputTrackCode-validate");
807	  }
808}	
809
810function isValidUPU(barCode) { 
811			if (barCode.length == 13) {
812				var myRegExp = /[A-Za-z]{2}\d{9}[A-Za-z]{2}/;
813				var match = myRegExp.exec(barCode);
814				if (match != null) {
815					var checkNumbers = barCode.replace(/[^0-9]/g, "");
816					if (checkNumbers.length == 9) {
817						var n_1 = parseInt(checkNumbers.charAt(0)) * 8;
818						var n_2 = parseInt(checkNumbers.charAt(1)) * 6;
819						var n_3 = parseInt(checkNumbers.charAt(2)) * 4;
820						var n_4 = parseInt(checkNumbers.charAt(3)) * 2;
821						var n_5 = parseInt(checkNumbers.charAt(4)) * 3;
822						var n_6 = parseInt(checkNumbers.charAt(5)) * 5;
823						var n_7 = parseInt(checkNumbers.charAt(6)) * 9;
824						var n_8 = parseInt(checkNumbers.charAt(7)) * 7;
825
826						var tmpSumm = n_1 + n_2 + n_3 + n_4 + +n_5 + n_6 + n_7 + n_8;
827						var tmpOst = tmpSumm % 11;
828						var controlSumm = 11 - tmpOst;
829						if (controlSumm == 10) {
830							controlSumm = 0;
831						} else if (controlSumm == 11) {
832							controlSumm = 5;
833						}
834						if (controlSumm == checkNumbers.charAt(8)) {
835							return true;
836						} else {
837							return false;
838						}
839
840					}
841				} else {
842
843					return false;
844				}
845
846			} else {
847				return false;
848			}
849			return false;
850	}
851
852
853function showNotificationsForm() {
854   
855   
856				  
857  $.get('https://track24.ru/forms/notifications.form.php?checkLogin='+$.Storage.get('login')+'&checkAuthKey='+$.Storage.get('authKey'), function(data) {
858				$('body').prepend(data);
859			    $('#notificationsModal').modal({show:true});
860				
861				   $('select').change(function() {
862						  if ($(this).children('option:first-child').is(':selected')) {
863								$(this).addClass('selectWidthPlaceholder');
864						  } else { 
865								$(this).removeClass('selectWidthPlaceholder');
866						  }
867					});
868					
869				    $("input[type='checkbox']").on('change', function(){
870						   
871						   var thisElementName = $(this).attr('name');
872						   //console.log(thisElementName);
873						   
874						   var checked = this.checked;
875						   //console.log(checked);
876						   
877						   if ((thisElementName == "reverseHistorySorting") && (checked === true)) {
878							   $('#manualHistorySorting').prop("checked", false).trigger('change');
879						   }
880						    if ((thisElementName == "manualHistorySorting") && (checked === true)) {
881							   $('#reverseHistorySorting').prop("checked", false).trigger('change');
882						   }
883						    
884						  
885					});
886					/*
887				  	$('checkbox').click(function() {
888						  var checked = this.checked;
889						  console.log("checkbox click");
890						  console.log(checked);
891					});
892				  	*/
893				  
894				   $('#buttonOk').bind('click', function(e) {
895					
896						if (($("#buttonOk" ).hasClass("disabled") == true) || ($("#buttonCancel" ).hasClass("disabled") == true)) { 
897							  return false;
898						}
899						 
900						e.preventDefault();
901						if ($(this).attr('name') == 'buttonOk') {
902							 var ajaxUrl = '/ajax/notifications.ajax.php';
903							 var inputedEmail = $('#changeEmail').val();
904							 var inputedPhone = $('#changePhone').val();
905							 var inputedTelegramId = $('#changeTelegramId').val();
906							 var inputedCountryCode = $('#changeCountry').val();
907							 var inputedNotificationsLanguageCode = $('#changeNotificationsLanguage').val();
908							 var notifyToEmail = $("#notifyToEmail").prop("checked"); 
909							 var notifyToPhone = $("#notifyToPhone").prop("checked"); 
910							 var notifyToTelegram = $("#notifyToTelegram").prop("checked"); 
911							 var notifyToApp = $("#notifyToApp").prop("checked"); 
912							 var autoAdd = $("#autoAdd").prop("checked"); 
913							 var manualHistorySorting = $("#manualHistorySorting").prop("checked"); 
914							 var reverseHistorySorting = $("#reverseHistorySorting").prop("checked"); 
915						  
916							 var action = 'change';
917						}
918						$.ajax({
919								 url:	 ajaxUrl,
920								 data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'inputedEmail': inputedEmail, 'inputedPhone': inputedPhone, 'inputedTelegramId': inputedTelegramId,  'inputedCountryCode':inputedCountryCode, 'inputedNotificationsLanguageCode':inputedNotificationsLanguageCode, 'notifyToEmail': notifyToEmail, 'notifyToPhone': notifyToPhone, 'notifyToTelegram': notifyToTelegram, 'notifyToApp': notifyToApp, 'autoAdd': autoAdd, 'manualHistorySorting': manualHistorySorting, 'reverseHistorySorting': reverseHistorySorting, 'action':action},
921								 type:	 'POST', 
922								 dataType:  'json',
923								 success: function(data){
924								   if (data) { 
925									   if (data.status == 'ok') {
926										   $('.modal-footer').html('<div class="text-center"><i class="fa fa-check fa-lg text-success"></i> '+data.message+'</div>').delay(300).fadeIn(300).delay(300).queue(function(){
927												 $('#notificationsModal').modal("hide");
928												 location.reload();
929											});
930												  
931									   }
932									  else if (data.status == 'error') {
933											$('.modal-footer').html('<div class="alert-error text-center">'+data.message+'</div>').fadeIn();
934											$("#buttonOk").toggleClass('disabled'); 
935									        $("#buttonCancel").toggleClass('disabled');
936											
937									   }
938									}
939								},
940								beforeSend :  function() {  
941									 $('.modal-footer').html('<div class="text-center alert-info"><i class="fa fa-spinner fa-spin"></i> Отправка данных...</div>').fadeIn();  
942									 $("#buttonOk").toggleClass('disabled');
943									 $("#buttonCancel").toggleClass('disabled');
944								},
945								complete: function(response) { 
946									 //$("#buttonOk").toggleClass('disabled'); 
947									 //$("#buttonCancel").toggleClass('disabled');
948									  
949								},
950								error: function() {
951									 $("#buttonOk").toggleClass('disabled'); 
952									 $("#buttonCancel").toggleClass('disabled');
953								}	   
954							 });
955				 
956				 });
957				/*
958				
959				 beforeSend :  function() {  
960										   $("#storeInfoButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-check-square-o");
961										   $("#storeInfoButton").toggleClass('disabled');
962										   $(".load-bar-disabled").show();													
963										   $(".load-bar").toggleClass('active');
964										   
965								 },
966								complete: function(response) { 
967										   $("#storeInfoButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-check-square-o");
968										   $("#storeInfoButton").toggleClass('disabled');
969											$(".load-bar-disabled").hide();											
970											$(".load-bar-under-stripe-disabled").hide();
971											$(".load-bar").toggleClass('active');
972										 
973												
974								},
975				
976				*/
977				
978				
979				
980				 $('#buttonCancel').bind('click', function(e) {
981				     e.preventDefault();
982				    $('.modal.in').modal('hide');
983				 });
984				 
985				 $('.navSignOutLink').click(function(e){ 
986						 e.preventDefault();
987						 $('.modal.in').modal('hide');
988						 signOut(); 
989			      }); 
990				 
991				  $('#notificationsModal').on("hidden.bs.modal", function(){
992					$('#notificationsModal').fadeOut().hide().remove();
993                 });  
994				 
995				 
996				 
997				 
998                     		
999            });
1000}
1001
1002function sign() {
1003	   var inputedLogin = '';
1004	   var inputedPassword = '';
1005				 
1006			$.get('/forms/sign.form.php?clientCountryCode='+clientCountryCode, function(data) {
1007				$('body').prepend(data);
1008			    $('#signModal').modal({show:true});
1009			    $('.myTooltip').tooltip();
1010				
1011				
1012				  
1013					 $(".passwordGenerateLink").click(function(e) { 
1014					    var newPassword = generatePassword();
1015					    $("#signUpPassword").prop("type", "text").attr("value", newPassword); 
1016					 }); 
1017				   
1018				   
1019				
1020				 
1021				 
1022				 $('.btn-success').bind('click', function(e) {
1023                    e.preventDefault(); 
1024					
1025					if ($(this).attr('name') == 'signUpButton')	{
1026					  var ajaxUrl = '/ajax/sign.ajax.php';
1027					  var inputedLogin = $('#signUpLogin').val();
1028					  var inputedPassword = $('#signUpPassword').val();
1029					  var signUpAgree = $('#signUpAgree').prop('checked');
1030					  var action = 'signup';
1031					}
1032					else if ($(this).attr('name') == 'signInButton') {				      
1033					  var ajaxUrl = '/ajax/sign.ajax.php';
1034					  var inputedLogin = $('#signInLogin').val();
1035					  var inputedPassword = $('#signInPassword').val();
1036					  var signUpAgree = false;
1037					  var action = 'signin';
1038					} 
1039					 
1040					
1041					$.ajax({
1042					         url:	 ajaxUrl,
1043					         data : {'login': inputedLogin, 'password' : inputedPassword, 'action' : action, 'agree' : signUpAgree, 'fingerprint' : $.Storage.get("fingerprint")},
1044        	                 type:	 'POST', 
1045                             dataType:  'json',
1046         	                 success: function(response){
1047							   if (response) { 
1048							   
1049                                   if (response.result == 'success') {
1050                                      $('.modal-footer').find('center').html('<div class="alert-info">'+response.message+'</div>').fadeIn();  
1051									      $('#signModal').modal("hide");
1052							                $.Storage.set('login', inputedLogin);
1053		  	                                $.Storage.set('authKey', response.data.authKey);
1054											
1055											
1056										    checkAuthKey($.Storage.get('login'), $.Storage.get('authKey'), function (s) { 
1057											  togleAuthForm(s);
1058											  updateHistoryBlock();
1059											  togleNoAuth(s);
1060									        }); 
1061											 
1062										     if ((window.location.href.indexOf("page=api") > 0 ) || (window.location.href.indexOf("page=deleteProfile") > 0 )) {
1063	                                               location.reload();
1064                                             }
1065											 
1066							       }
1067								  else if (response.result == 'error') {
1068                                       $('.modal-footer').find('center').html('<div class="alert-error">'+response.message+'</div>').fadeIn();  
1069                                       
1070									   //if ((typeof response.data.reason !== "undefined") && (response.data.reason !== null) && (response.data.reason !== ""))  {
1071										//	$('.modal-footer').find('.alert-error').append('<br>Причина: '+response.data.reason+'').fadeIn(); 
1072									   //} 
1073							       }
1074        	                    }
1075							},
1076                            beforeSend :  function() {  
1077							     $('.modal-footer').find('center').html('<div class="alert-info"><i class="fa fa-spinner fa-spin"></i> Отправка данных...</div>').fadeIn();  
1078							     $.Storage.remove('authKey'); 
1079							     $.Storage.remove('social_name'); 								  
1080								 $.removeCookie('user_info', { path: '/' });
1081										
1082        	                },
1083			                complete: function(response) { 
1084                              
1085								  
1086				            },
1087                            error: function() {
1088
1089                            }	   
1090                         });
1091				 
1092				 });
1093				  
1094				  
1095				 $('#remindMePassword').bind('click', function(e) {
1096                     e.preventDefault();
1097					  $(this).parent().hide();
1098					  $('#signInPassword').parent().parent().slideUp().remove();
1099					  $('#signInButton').text("Отправить ссылку на Email");
1100					  
1101					   $('.btn-success').unbind();
1102					   $('.btn-success').bind('click', function(e) {
1103					    e.preventDefault();
1104						 
1105						
1106						   if ($(this).hasClass("disabled") == false) { 
1107						   
1108								 var inputedEmail = $('#signInLogin').val();
1109									 inputedEmail = $.trim(inputedEmail);
1110									 $('#signInLogin').val(inputedEmail);
1111									 
1112								 if  (inputedEmail.length < 1) {
1113									  $("#signInLogin").attr("placeholder", "Необходимо ввести e-mail!");
1114									  $('#signInLogin').addClass('has-error');	
1115									  return false;
1116									}
1117							 
1118								  if ((inputedEmail.length >= 3) && (inputedEmail.length <= 32)) {
1119									   $.ajax({
1120										 url: '/ajax/reset.password.ajax.php', 
1121										 data : {'inputedEmail': inputedEmail, 'step': '1'},
1122										 type:	 'POST', 
1123										 dataType:  'json',
1124										 success: function(data){
1125										   if (data) { 
1126											   if (data.status == 'success') {
1127												   $('.modal-footer').find('center').html('<div class=""><i class="fa fa-check fa-lg"></i> '+data.message+'</div>').delay(1500).fadeIn(1000).delay(1500).queue(function(){
1128														  $('#signModal').modal("hide");
1129													});
1130											   }
1131											  else if (data.status == 'error') {
1132												   $('.modal-footer').find('center').html('<div class="alert-error">'+data.message+'</div>').fadeIn();  
1133												   $('#signInButton').removeClass('disabled');
1134											   }
1135											}
1136										},
1137										beforeSend :  function() {  
1138											  $('.modal-footer').find('center').html('<div class=""><i class="fa fa-spinner fa-spin fa-lg"></i> Отправка данных...</div>').fadeIn();  
1139											  $('#signInButton').addClass('disabled');
1140										},
1141										complete: function(response) { 
1142										      //$('#signInButton').removeClass('disabled');
1143										},
1144										error: function() {
1145											  $('#signInButton').removeClass('disabled');
1146										}	   
1147									 });						  
1148								   }
1149						    }
1150						   
1151					   });
1152				 }); 
1153				     
1154				  
1155                 $('#signModal').on("hidden.bs.modal", function(){
1156					$('#signModal').fadeOut().hide().remove();
1157                 });    		
1158            });
1159			
1160		  /* } */
1161		   
1162		} 
1163		
1164		 function generatePassword(len = 12, chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&") {
1165				var password = "";
1166				for (var i = 1; i <= len; i++) {
1167					var randomNumber = Math.floor(Math.random() * chars.length);
1168					password += chars.substring(randomNumber, randomNumber +1);
1169				}
1170				return password;
1171		 }
1172    
1173      function checkAuthKey(l, k, myCallback) { 
1174	  
1175		   if ((typeof l === "undefined") || (l === null) || (l === ""))  {
1176			myCallback(false);
1177           }   
1178           if ((typeof k === "undefined") || (k === null) || (k === ""))  {
1179			myCallback(false);
1180           }   
1181           
1182		   
1183         if (((typeof l !== "undefined") && (l !== null) && (l !== ""))  && ((typeof k !== "undefined") && (k !== null) && (k !== ""))) {		   
1184		   var ajaxUrl = '/ajax/check.auth.ajax.php';
1185		   $.ajax({
1186			       url:	 ajaxUrl,
1187				   data : {'checkLogin': l, 'checkAuthKey': k, 'fingerprint': $.Storage.get("fingerprint")},
1188        	       type: 'POST', 
1189                   dataType:  'json',
1190         	       success: function(data){
1191				   if (data) { 
1192				        if (data.status == 'success') {
1193							  
1194							  delete data.status;
1195							  delete data.time;
1196							  localStorage.setItem('authorization', JSON.stringify(data));
1197								
1198					          if ((typeof data.social_name !== "undefined") && (data.social_name !== null) && (data.social_name !== ""))  {
1199			                     $.Storage.set('social_name', data.social_name);								 
1200                              }
1201							  if ((typeof data.avatar !== "undefined") && (data.avatar !== null) && (data.avatar !== ""))  {
1202			                      $.Storage.set('avatar', data.avatar);								 
1203                              } 
1204							  if ((typeof data.social_name !== "undefined") && (data.social_name !== null) && (data.social_name !== ""))  {
1205			                      $.Storage.set('social_name', data.social_name);								 
1206                              }
1207							 myCallback(true);
1208							 
1209 				        } 
1210						else  { 
1211						        localStorage.removeItem('authorization');
1212						         
1213								$.Storage.remove('login');
1214								$.Storage.remove('social_name');
1215								$.Storage.remove('avatar');
1216								$.Storage.remove('authKey');			  
1217								
1218						 	    myCallback(false);
1219						}		 
1220					
1221					}
1222				    else {
1223						     localStorage.removeItem('authorization');
1224							 
1225							 $.Storage.remove('login');
1226							 $.Storage.remove('social_name');
1227							 $.Storage.remove('avatar');
1228							 $.Storage.remove('authKey');			  
1229					         
1230					  	     myCallback(false);
1231					}
1232					  
1233					},
1234                    beforeSend :  function() {  
1235					},
1236			        complete: function(response) { 
1237                    },
1238                    error: function() {
1239					 
1240					   localStorage.removeItem('authorization');					  
1241					   $.Storage.remove('login');
1242					   $.Storage.remove('social_name');
1243					   $.Storage.remove('avatar');
1244					   $.Storage.remove('authKey');	
1245					  
1246					   myCallback(false);
1247					  
1248                    }	   
1249                });
1250				
1251				
1252		   }	
1253		   else {
1254			  localStorage.removeItem('authorization');
1255			  myCallback(false);  
1256		   }   
1257 }	
1258
1259 
1260 
1261 function togleAuthForm(a) {
1262		  if (a == true) {
1263		     $('#navSignInButton').hide();	
1264			 $('#loginOverSocials').hide();	
1265			  
1266			 var sn = $.Storage.get('login'); 
1267			 var sa = "/img/avatars/default.jpg"; 
1268			 
1269			 if ((typeof $.Storage.get('social_name') !== "undefined") && ($.Storage.get('social_name') !== null) && ($.Storage.get('social_name') !== ""))  {
1270				 sn = $.Storage.get('social_name');
1271			 }
1272			 if ((typeof $.Storage.get('avatar') !== "undefined") && ($.Storage.get('avatar') !== null) && ($.Storage.get('avatar') !== ""))  {
1273             	 sa = $.Storage.get('avatar');
1274			 }
1275			 $("#userAvatar").css("backgroundImage", "url("+sa+")");
1276			 $("#userAvatar").attr("title", sn);
1277			 
1278			 $("#userName").text(sn);
1279			 
1280			  if (sa != "/img/avatars/default.jpg") {
1281				  $('#userAvatarBlock').show();
1282			  }
1283			  else {
1284				  $('#userNameInfoBlock').show();
1285			  }
1286			  //$(".addTrackCodeRow").show();
1287			 
1288		  }
1289		  else { 
1290			 $('#navSignInButton').show(); 
1291		     $('#userNameInfoBlock').hide();  
1292			 $("#userAvatar").css("backgroundImage", "url(/img/avatars/default.jpg)");
1293			 $("#userAvatar").attr("title", "");
1294			 $("#userAvatarBlock").hide();   
1295			 $('#loginOverSocials').show();	
1296			 $("#history-short-stat-wrapper").hide();
1297			 $(".addTrackCodeRow").hide().remove();
1298			 
1299		  }
1300		} 
1301
1302
1303function togleNoAuth(a) { 
1304	      if (a == true) {
1305			   setTimeout( function() {
1306			      $('.noAuth').fadeOut();
1307				   $('.auth').fadeIn();
1308			   }, 100);
1309		  }
1310		  else  {
1311		  setTimeout( function() {
1312			     $('.noAuth').fadeIn();			
1313                 $('.auth').fadeOut();						 
1314			   }, 100); 
1315		  }
1316		 
1317 } 
1318
1319
1320 function tog(v){
1321	  return v ? 'addClass' : 'removeClass';
1322} 
1323
1324$(document).on('input', '.clearable', function(){
1325      $(this)[tog(this.value)]('x');
1326  }).on('mousemove', '.x', function( e ){
1327      $(this)[tog(this.offsetWidth-18 < e.clientX-this.getBoundingClientRect().left)]('onX');   
1328  }).on('click', '.onX', function(){
1329      $(this).removeClass('x onX').val('');
1330  });
1331 
1332 /*
1333 $.fn.enterKey = function (fnc) {
1334    return this.each(function () {
1335        $(this).keypress(function (ev) {
1336            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
1337            if (keycode == '13') {
1338                fnc.call(this, ev);
1339            }
1340        })
1341    })
1342} 
1343*/
1344
1345function showAddTrackCodeForm() {
1346					 
1347         var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog" style="">\
1348							 <div id="addTrackingNumberModal">\
1349								 <div class="addTrackingNumberModal-header"><h5 class="modal-title">Добавить трек-код <span class="hidden-xs"> в мои трек-коды</span></h5></div>\
1350								 <div class="addTrackingNumberModal-body">\
1351								    <div id="addTrackingNumberFormWrapper" class="row">\
1352										 <form id="addTrackingNumberForm" class="form-horizontal">\
1353										   <fieldset>\
1354											<!-- Form Name -->\
1355											<legend></legend>\
1356											<!-- Text input-->\
1357											<div class="form-group">\
1358											  <label class="col-md-3 control-label" for="addTrackingNumberFormInput"><span>Трек-код</span></label>\
1359											  <div class="col-md-12">\
1360											     <input id="addTrackingNumberFormInput" name="addTrackingNumberFormInput" type="text" maxlength="32" placeholder="Пример: RU123456789CN" class="form-control input-md clearable">\
1361												 <div class="addTrackingNumberFormInputHelpBlockWrapper">\
1362												     <span id="addTrackingNumberFormInputHelpBlock" class="addTrackingNumberFormInputHelpBlock"></span>\
1363												 </div>\
1364											  </div>\
1365											</div>\
1366											<!-- Text input-->\
1367											<div class="form-group">\
1368											  <label class="col-md-3 control-label" for="addTrackingNumberDescriptionFormInput"><span>Описание</span></label>\
1369											  <div class="col-md-12">\
1370											     <input id="addTrackingNumberDescriptionFormInput" name="addTrackingNumberDescriptionFormInput" type="text" maxlength="64" placeholder="Пример: пылесос" class="form-control input-md">\
1371											  </div>\
1372											</div> \
1373											<!-- Button (Double) -->\
1374											<div class="form-group">\
1375											  <!-- <label class="col-md-12 control-label" for="addTrackingNumberFormButtonOk"></label> -->\
1376											  <div class="col-md-12 text-right">\
1377												<button id="addTrackingNumberFormButtonCancel" name="addTrackingNumberFormButtonCancel" class="btn btn-danger">Отмена</button>\
1378												<button id="addTrackingNumberFormButtonOk" name="addTrackingNumberFormButtonOk" class="btn btn-success">Готово</button>\
1379											  </div>\
1380											</div>\
1381											</fieldset>\
1382											</form>\
1383										</div>\
1384								 </div>\
1385								 <hr>\
1386								 <div id="addTrackingNumberModal-footer" class="addTrackingNumberModal-footer">Заполните поля и кликните по кнопке "Готово"</div>\
1387								 \
1388							 </div>\
1389							 </div>';
1390							 
1391													 
1392													 
1393										      $.magnificPopup.open({
1394													  items: { src: dialogHtml},
1395													  type: 'inline',
1396													  fixedBgPos: false,
1397													  fixedContentPos: true,
1398													  overflowY: 'scroll',
1399													  closeBtnInside: true,
1400													  preloader: false,          
1401													  midClick: false,
1402													  removalDelay: 400,
1403													  mainClass: 'my-mfp-zoom-in',
1404													  alignTop:false,
1405													  showCloseBtn: true,
1406													  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
1407													  callbacks: {
1408														    open: function() { 														    
1409																  $('.navbar-fixed-top').css('overflow-y', 'scroll');
1410
1411																  
1412																   /*
1413																   $(document).keypress(function(e){
1414																		//if (e.which == 13) { 
1415																		if ($("#addTrackingNumberFormInput:focus") && (e.which == 13)) {
1416																		    e.preventDefault();
1417																			$('#addTrackingNumberFormButtonOk').click();
1418																			//console.log("!Enter");
1419																		}
1420																	});
1421																	*/
1422																	 
1423															},
1424															close: function() {
1425																  $('.navbar-fixed-top').css('overflow-y', 'visible');
1426															}
1427													  }
1428													  
1429
1430												  });
1431												  
1432												   
1433												   if (device.desktop()) { 
1434													   setTimeout( function() {
1435														  readClipboard();
1436														  $("#addTrackingNumberFormInput").focus();
1437													   }, 400);
1438												   }  
1439													
1440													$( "#addTrackingNumberFormInput").keyup(function() { 
1441														  $("#addTrackingNumberFormButtonOk").removeClass('disabled');
1442														  $("#addTrackingNumberFormInputHelpBlock").empty();
1443													}); 
1444													 
1445													 /*
1446													$("#addTrackingNumberFormInput").enterKey(function () {
1447														  alert('Enter!');
1448													});
1449                                                    */
1450							 
1451													$('#addTrackingNumberFormButtonOk').unbind();
1452													$('#addTrackingNumberFormButtonOk').bind('click', function(e) {
1453                                                        e.preventDefault();	
1454
1455													    if ($( "#addTrackingNumberFormButtonOk" ).hasClass("disabled") == true) {
1456														  return false;
1457													    }	
1458
1459
1460														$("#addTrackingNumberFormInput").val($("#addTrackingNumberFormInput").val().toUpperCase()); 
1461														
1462														var  inputedTrackCode = $("#addTrackingNumberFormInput").val();
1463															 inputedTrackCode = inputedTrackCode.replace(/[^А-Яа-яA-Za-z0-9\-\.\/\(\)]/gi, '');
1464															 inputedTrackCode = inputedTrackCode.substring(0, 32);
1465															 inputedTrackCode = $.trim(inputedTrackCode);
1466														
1467														var inputedDescription = $("#addTrackingNumberDescriptionFormInput").val();
1468														    inputedDescription = inputedDescription.replace(/[^a-zа-яё\w\d\s\-\_\.\,\@\+\#\$\&\%\!\(\)\[\]\:\;\^\/\£\€\\\$\&\Ї\ї\і]/gi, ''); 
1469															 inputedDescription = inputedDescription.substring(0, 64);
1470															 inputedDescription = $.trim(inputedDescription);
1471														
1472														
1473														
1474														if  (inputedTrackCode.length < 1) {
1475															  $("#addTrackingNumberFormInput").attr("placeholder","Необходимо ввести трек-код");
1476															  $('#addTrackingNumberFormInput').addClass('has-error');	
1477															  return false;
1478														}
1479														else {
1480														    $('#addTrackingNumberFormInput').removeClass('has-error');		
1481														}	
1482														
1483														if ((inputedTrackCode.length < 5) || (inputedTrackCode.length > 32)) {														 
1484														      $("#addTrackingNumberFormInput").attr("placeholder","Некорректный трек-код");
1485															  $('#addTrackingNumberFormInput').addClass('has-error');	
1486															  $('#addTrackingNumberModal-footer').html('<div class="errorMessage">Ошибка! Некорректный трек-код!</div>');
1487															  return false;
1488														}
1489														 
1490														 
1491														 
1492														
1493														$("#addTrackingNumberFormButtonOk").toggleClass('disabled');
1494														 
1495														$('#addTrackingNumberModal-footer').html('<div id="addTrackingNumberModal-loader"><div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div></div>');
1496														$("#addTrackingNumberModal-loader").fadeIn();
1497														
1498														
1499														 
1500														$.ajax({
1501															url: 'https://track24.ru/ajax/history.ajax.php',
1502															data : {'checkLogin' :  $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode': inputedTrackCode, 'trackDescription': inputedDescription, 'action': 'add'}, 
1503															type :	 'POST',
1504															dataType :  'json',
1505															timeout : (10000),
1506															success: function(data){ 
1507															  
1508															  $("#addTrackingNumberModal-loader").hide();
1509															  
1510															    $(".addTrackCodeButtonWrapper").show();
1511																$("#history-add-ajax-loader").hide(); 
1512															   
1513															 
1514															     if (data.status == 'ok') {
1515																	 
1516																	 
1517																	    if (data.action == 'added') {
1518																			$('#addTrackingNumberModal-footer').html('<div class="successMessage">Трек-код добавлен в список "Мои трек-код"</div>');
1519																			updateHistoryBlock(); 
1520																			
1521																			 setTimeout( function() {
1522																			     $.magnificPopup.close();
1523																				
1524																		     }, 300);
1525																			
1526																		}
1527																		else if (data.action == 'updated') {
1528																			$('#addTrackingNumberModal-footer').html('<div class="successMessage">Информация о трек-коде обновлена</div>');
1529																			updateHistoryBlock();
1530																			
1531																			setTimeout( function() {
1532																			     $.magnificPopup.close(); 
1533																		     }, 1000);
1534																		}
1535																		else if (data.action == 'not updated') { 
1536																			$('#addTrackingNumberModal-footer').html('<div class="successMessage">Трек-код присутствует в списке "Мои трек-коды"</div>');
1537																			setTimeout( function() {
1538																			     $.magnificPopup.close();																				 
1539																		     }, 1500);
1540																		}
1541
1542																		if ($("#inputTrackCode").length > 0) { 
1543																			 if ($("#trackingButton" ).hasClass("disabled") == false) { 
1544																					 $("#inputTrackCode").val(inputedTrackCode); 
1545																					 tracking();  
1546																			 }
1547																		} 
1548																		 
1549																		 
1550																		
1551																   }
1552																   else if (data.status == 'error') {
1553																	   if (data.message == "Track code is not valid!") {
1554																	       $('#addTrackingNumberModal-footer').html('<div class="errorMessage">Ошибка! Некорректный трек-код!</div>');
1555																	   }
1556																	   else {
1557																		 $('#addTrackingNumberModal-footer').html('<div class="errorMessage">Ошибка! '+data.message+'</div>');     
1558																	   }
1559																	   
1560																   }
1561																   else {
1562																	    $("#addTrackingNumberFormButtonOk").toggleClass('disabled');
1563																		$(".addTrackingNumberModal-footer").find("center").html('<span class="danger">Непредвиденная ошибка, сообщите разработчикам!</span>');
1564																	    return false;
1565																   } 
1566																 
1567																																 
1568															},
1569															complete: function(){  
1570															      $("#addTrackingNumberModal-loader").hide();
1571																  $(".addTrackingNumberFormButtonCancel").toggleClass('disabled');
1572																  
1573																  $(".addTrackCodeButtonWrapper").show();
1574																  $("#history-add-ajax-loader").hide();
1575																 
1576															},
1577															beforeSend :  function() { 
1578															     $(".addTrackingNumberFormButtonCancel").toggleClass('disabled');
1579															     $(".addTrackingNumberFormButtonOk").toggleClass('disabled');
1580																 
1581																 $(".addTrackCodeButtonWrapper").hide();
1582																 $("#history-add-ajax-loader").show();
1583																	 																 
1584															}
1585															,
1586															error: function(objAJAXRequest, strError) {
1587																 $("#addTrackingNumberModal-loader").hide();
1588																 $(".addTrackingNumberFormButtonCancel").toggleClass('disabled');
1589															     $("#addTrackingNumberFormButtonOk").toggleClass('disabled');
1590															     $(".addTrackingNumberModal-footer").find("center").html('<span class="danger">Ой, произошла ошибка (код ошибки: '+objAJAXRequest.status+')...<br> Вы можете сообщить о ней на [email protected]</span>');
1591																 $.notify('Ой, произошла ошибка (код ошибки: '+objAJAXRequest.status+')...\n Вы можете сообщить о ней на [email protected]', "error");	
1592																 
1593																 $(".addTrackCodeButtonWrapper").show();
1594																 $("#history-add-ajax-loader").hide(); 
1595																 
1596																 
1597															}
1598															
1599														});
1600													});
1601													$('#addTrackingNumberFormButtonCancel').unbind();
1602													$('#addTrackingNumberFormButtonCancel').bind('click', function(e) {
1603                                                        e.preventDefault();
1604														$.magnificPopup.close();
1605													});	
1606												     
1607    
1608 }
1609
1610		
1611function updateHistoryBlock() {
1612	  //var currentTrackingCode = $.urlParser("?code"); 
1613	    var currentTrackingCode = $("#inputTrackCode").val();
1614		
1615		   if (((typeof $.Storage.get('login') !== "undefined") && ($.Storage.get('login') !== null) && ($.Storage.get('login') !== ""))  && ((typeof $.Storage.get('authKey') !== "undefined") && ($.Storage.get('authKey') !== null) && ($.Storage.get('authKey') !== ""))) {
1616				
1617                if ($("#history-ajax-loader").length == 0) {
1618				    $('#history-lines-active').before('<div id="history-ajax-loader"><div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div></div>');
1619				    $("#history-ajax-loader").show();
1620				}
1621				 
1622									 $.ajax({
1623										 url:   '/ajax/history.ajax.php',
1624										 data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'action': 'get', 'lng': $.Storage.get("lng"), 'limitArchiveCount':limitArchiveCount, 'v':2}, 
1625										 type:	'POST', 
1626										 dataType:  'json',
1627										 success: function(data) { 
1628										     //$("#history-ajax-loader").hide().remove();
1629											 
1630										   if (data) { 
1631													if (data.status == 'ok') { 
1632														 historyBuilder(data);  
1633													 }  
1634													 
1635													 
1636													 if ((!data.infoData) || (data.infoData.length == 0)) {		
1637													       
1638															 $('#history-lines-active').empty();	 
1639															 $('#history-archive').hide(); 
1640															 //$('#history-c').show(); 
1641															 //$('#history-c').find(".auth").slideDown();	
1642															 $('.auth').fadeIn();
1643															  
1644															 $('.signLink').unbind();
1645															 $('.signLink').bind('click', function(e) {																	  
1646																  $('#navSignInButton').click();
1647															 });
1648													 }
1649													 else {
1650														 //$('#history-c').hide();	 
1651													 }
1652												   
1653												}
1654											},
1655											beforeSend :  function() {  
1656											         //$("#history-ajax-loader").show();
1657												},
1658											complete: function() { 
1659												   $("#history-ajax-loader").hide();
1660												  
1661											},
1662											error: function() {
1663                                                    $("#history-ajax-loader").hide(); 
1664											}		   
1665										 });
1666
1667				}
1668				else {
1669                     $('.history-lines-active').empty();		  
1670					   $('#history-archive').hide(); 
1671					   //$('#history-c').show(); 
1672							 
1673							  
1674						$('.signLink').unbind();
1675						$('.signLink').bind('click', function(e) {
1676							  $('#navSignInButton').click();
1677						});
1678						$('.autoUpdateHistory').hide().remove();
1679						$('.multiTrackingCounter').hide().remove(); 
1680					  
1681																	 
1682                }				
1683}
1684
1685
1686
1687function historyBuilder(jsonString) {
1688	 var data  = jsonString;
1689	 //var currentTrackingCode = $.urlParser("?code");
1690	 var currentTrackingCode = $("#inputTrackCode").val();
1691	 
1692	 //lastTrackCodesArray.push(escape(inputedTrackCode));
1693												 
1694												 
1695											   $('#history-lines-active').empty();		  
1696											   $('#history-lines-archive').empty(); 
1697											      
1698												  var short_stat_total_count = data.infoData.length;
1699												  var short_stat_in_transit_count = 0;
1700												  var short_stat_delivered_count = 0;
1701												  var short_stat_active_count = 0;
1702												  var short_stat_archive_count = 0;
1703												  var readyForMultiTrackingCount = 0;
1704												  //var historyTrackCodesArray = $.Storage.get("historyTrackCodesArray");
1705												  var historyTrackCodesArray = [];
1706												   
1707												     /*
1708													 if (historyTrackCodesArray.length > 0) {
1709														 historyTrackCodesArray = [];
1710													 } 
1711													 */													 
1712													 /*
1713													 if (historyTrackCodesAndNamesArray.length > 0) {
1714														 historyTrackCodesAndNamesArray = [];
1715													 } 
1716													 */
1717	 
1718												  
1719										          $.each(data.infoData, function(key, value) {
1720													   historyTrackCodesAndNamesArray.push({"trackCode" : value['trackCode'], "trackName" : value['track_name']});
1721													  //historyTrackCodesArray.push(escape(value['trackCode']));
1722													   //console.log("push "+value['trackCode']);
1723													   historyTrackCodesArray.push(value['trackCode']);
1724													  
1725													   
1726													    if (value['notification'] == 0) {
1727														    var notification_class = 'fa-bell-slash-o';
1728													    }
1729														  else if (value['notification']==1) {
1730														    var notification_class = 'fa-bell-o';
1731														  }
1732														  
1733														  if ((value['track_name'] == '') || (value['track_name'] == null)) {
1734														      value['track_name'] = 'Нет описания';
1735														  }
1736														  if (value['track_protection_date_time'] == null) {
1737															  value['track_protection_date_time'] = '';
1738														  }
1739														  
1740	  
1741														  //if (value['track_url'] == '') {
1742														   value['track_url'] = '//ru.aliexpress.com/';
1743														  //}
1744														   
1745														  
1746														  if ((typeof value['lastPoint']['operationDateTime'] !== "undefined") && (value['lastPoint']['operationDateTime'] !== null) )  {
1747  		                                                     var lastPointOperationDateTime = value['lastPoint']['operationDateTime'].split(" ");
1748														  } 
1749														  else
1750														  {
1751														     var lastPointOperationDateTime = "";
1752														  }
1753														  
1754														   var daysFromLastChange = "";
1755														   var daysFromLastChangeClass = ""; 
1756														   if ((typeof lastPointOperationDateTime[0] !== "undefined") && (lastPointOperationDateTime[0] !== null) && (lastPointOperationDateTime[0] !== "") )  {
1757  		                                                      var daysFromLastChange = dateDiff(lastPointOperationDateTime[0], nowDateTime.split(" ")[0]);
1758															  if (daysFromLastChange < 0) { 
1759															   daysFromLastChange = 0;
1760															  }
1761															  
1762															   var firstDeliveryDateTime =  value['firstDeliveryDateTime'].split(" "); 
1763								                               var lastDeliveryDateTime =  value['lastDeliveryDateTime'].split(" "); 
1764															   var deliveryDays = value['daysInTransit'];
1765															 
1766															  if ((daysFromLastChange >= 0) && (daysFromLastChange <= 3)) {
1767																   var	daysFromLastChangeClass = 'label-success';
1768															   }
1769															  if (daysFromLastChange >= 4) {
1770																   var	daysFromLastChangeClass = 'label-primary';
1771															  }
1772															  if (daysFromLastChange >= 7) {
1773																   var daysFromLastChangeClass = 'label-info';
1774																}
1775																if (daysFromLastChange >= 30) {
1776																   var daysFromLastChangeClass = 'label-warning';
1777																}
1778															 if (daysFromLastChange >= 60) {
1779																   var daysFromLastChangeClass = 'label-danger';
1780																}
1781															  
1782														   } 
1783														   
1784														   
1785														   
1786														   if (value['status'] == '1') {
1787																var removeTitle = "Перенести&nbsp;в&nbsp;архив";
1788														   } 
1789														   else {
1790															   var removeTitle = "Удалить";
1791														   }
1792														   
1793													var historyStatusIcon = '<i class="fa fa-barcode muted"></i>'; 
1794													if ((value['lastPoint']['operation'] !== null)) {
1795														 	if (value['lastPoint']['operation'].indexOf("Track24.ru") >= 0) { 
1796															   var historyStatusIcon = '<i class="fa fa-barcode muted"></i>';
1797															}
1798															else if (value['lastPoint']['operation'].indexOf("Data Received") >= 0) { 
1799																var historyStatusIcon = '<i class="fa fa-group fa-lg muted"></i>';
1800															}
1801															else if (value['lastPoint']['operation'].indexOf("Прибыло") >= 0) { 
1802																var historyStatusIcon = '<i class="fa fa-refresh fa-lg muted"></i>';
1803															}
1804															else if (value['lastPoint']['operation'].indexOf("Sort") >= 0) { 
1805																var historyStatusIcon = '<i class="fa fa-inbox fa-lg muted"></i>';
1806															}															
1807															else if (value['lastPoint']['operation'].indexOf("Экспорт") >= 0) { 
1808																var historyStatusIcon = '<i class="fa fa-plane fa-lg muted"></i>';
1809															}
1810															else if (value['lastPoint']['operation'].indexOf("Покин
1810уло") >= 0) { 
1811																var historyStatusIcon = '<i class="fa fa-truck fa-lg fa-flip-horizontal muted"></i>';
1812															}
1813															else if (value['lastPoint']['operation'].indexOf("sent letter") >= 0) { 
1814																var historyStatusIcon = '<i class="fa fa-truck fa-train muted"></i>';
1815															}
1816															else if (value['lastPoint']['operation'].indexOf("Port") >= 0) { 
1817																var historyStatusIcon = '<i class="fa fa-truck fa-ship muted"></i>';
1818															}
1819															else if (value['lastPoint']['operation'].indexOf("Прибыло в место вручения") >= 0) { 
1820																var historyStatusIcon = '<i class="fa fa-check-square-o fa-lg text-success"></i>';
1821															}
1822															else if (value['lastPoint']['operation'].indexOf("Вручение") >= 0) { 
1823																var historyStatusIcon = '<i class="fa fa-check-square-o fa-lg text-success"></i>';
1824															}
1825															else if (value['lastPoint']['operation'].indexOf("Доставлена") >= 0) { 
1826																var historyStatusIcon = '<i class="fa fa-check-square-o fa-lg text-success"></i>';
1827															}
1828															else {
1829																var historyStatusIcon = '<i class="fa fa-barcode"></i>';
1830															}  
1831															//if ((value['deliveredStatus'] == 1) || (value['lastPoint']['operation'].toLowerCase().indexOf("вручен") >= 0)) {
1832															//   short_stat_delivered_count = short_stat_delivered_count + 1;
1833															//} 
1834															
1835															 
1836													 }	    
1837													 
1838													        if ((value['deliveredStatus'] == 1) &&  (value['status'] == 1)) {
1839															   short_stat_delivered_count = short_stat_delivered_count + 1;
1840															}
1841															if  ((value['status'] == 1) && (value['deliveredStatus'] == 0)) {
1842															   short_stat_active_count = short_stat_active_count + 1;
1843															}
1844															
1845															if (value['status'] == 0) {
1846																short_stat_archive_count = short_stat_archive_count + 1;
1847															}
1848															
1849															
1850															if (value['deliveredStatus'] == 1) {
1851															   var historyStatusIcon = '<i class="fa fa-check-square-o fa-lg text-success"></i>';
1852															}
1853															if (value['awaiting'] === true) {
1854														       var historyStatusIcon = '<i class="fa fa-flag fa-lg text-success"></i>';
1855														    }
1856													 
1857															
1858															
1859													       if (value['lastPoint']['operation'] != null) {
1860														     var lastPointOperation = value['lastPoint']['operation'];	   
1861														   } else {
1862															 var lastPointOperation = "Нет данных";	   
1863														   }
1864														   
1865														  //console.log(currentTrackingCode, value['track_name'], value['trackCode']);
1866														  if (currentTrackingCode == value['trackCode']) { 
1867														    //console.log(currentTrackingCode);
1868														       if (value['track_name'] != "Нет описания") {
1869																    $('.trackingInfo-title-right').html("<span class='trackTitleDescription' id='eip_title_"+value['trackCode']+"' trackCode='"+value['trackCode']+"'>"+value['track_name'].substr(0,26)+"</span>"); 
1870																	$('.panel-heading-right').html("<span class='trackHeadingDescription' id='eip_heading_"+value['trackCode']+"' trackCode='"+value['trackCode']+"'>"+value['track_name'].substr(0,26)+"</span>"); 
1871																}
1872															  } 
1873															  else {
1874														      // var currentDescClass = "";
1875														   }
1876														  
1877														   if ((value['status'] == 1) && (value['deliveredStatus'] == 0) && (value['trackUpdateDiffMinutes'] >= minMinutesForMultiTracking)) {
1878																     readyForMultiTrackingCount++; 
1879														   }
1880														   //console.log(value['trackCode'], value['trackUpdateDiffMinutes'], value['deliveredStatus'], (value['deliveredStatus'] == 1));
1881														   
1882															//var historyPopoverHtml = value['lastPoint']['operation'];
1883															//
1884															
1885															var html = '';
1886															    
1887 															    html += '<div class="myTrackingNumbersCard '+((value['status'] == 1) ? "myTrackingNumbersCardActive" : "myTrackingNumbersCardArchive")+' '+((currentTrackingCode == value['trackCode']) ? 'active' :'') + ' '+((value['awaiting'] === true) ? "awaiting" : "")+'" data-trackCode="'+value['trackCode']+'" data-update-diff-minutes="'+value['trackUpdateDiffMinutes']+'" data-delivered-status="'+value['deliveredStatus']+'" data-track-code-modified="'+value['trackCodeModified']+'">';
1888															    html += '	 <div class="myTrackingNumbersFirstLine" trackCode="'+value['trackCode']+'">';
1889															    html += '	    <div class="myTrackingNumbersTrackCode myTooltip"  trackCode="'+value['trackCode']+'"><span class="dotted_ pointer" trackCode="'+value['trackCode']+'">'+value['trackCode']+'</span> '+((value['status'] == 0) ? ' <i class="fa fa-history moveFromArchiveToActive myTooltip" data-toggle="tooltip" data-placement="top" title="Перенести&nbsp;в&nbsp;активные" trackCode="'+value['trackCode']+'"></i>' : '')+' <i class="fa fa-copy copyToClipBoard" data-for-clipboard="'+value['trackCode']+'" style="display: none;"></i> </div>';
1890															    //html += '	    <div class="myTrackingNumbersTrackCode myTooltip"  trackCode="'+value['trackCode']+'"><span class="dotted"  trackCode="'+value['trackCode']+'">'+((value['track_name'] == "Нет описания") ? value['trackCode'] : value['track_name'].substr(0,23))+'</span></div>';
1891															    //html += '	    <div class="myTrackingNumbersDateTime"><span class="myTrackingNumbersDate">'+lastPointOperationDateTime[0]+'</span><span class="myTrackingNumbersTime">'+lastPointOperationDateTime[1]+'</span></div>';
1892															    html += '	    <div class="myTrackingNumbersSetting"><!-- '+(((value['track_name'] == "Нет описания") && (value['track_protection_date_time'] == "")) ? '<i class="fa fa-pencil myTooltip showDescriptionRow" data-toggle="tooltip" data-placement="top" title="Редактировать&nbsp;описание"> </i>': "") + '-->' + ((value['deliveredStatus'] != 1) ? '<i class="fa fa-check-square-o myTooltip setDelivered" action="setDelivered" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="top" title="Установить&nbsp;статус &quot;Вручение&nbsp;получателю&quot;"></i>' : '')  +    '<i class="fa fa-clock-o myTooltip setCountdown" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="top" title="Установить&nbsp;таймер&nbsp;защиты"></i><i class="fa '+notification_class+' myTooltip" action="notification" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="top" title="'+ ((value['notification'] == 1) ? 'Выключить&nbsp;уведомления' : 'Включить&nbsp;уведомления') +'"></i><i class="fa fa-remove_ myTrackingNumbersClose myTooltip" action="remove" trackCode="'+value['trackCode']+'"  data-status="'+value['status']+'" data-toggle="tooltip" data-placement="top" title="'+removeTitle+'"></i></div>';
1893															    html += '	 </div>';															    
1894																html += '	 <div class="myTrackingNumbersSecondLine myTooltip" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md") ? 'left' : 'top')+'" title="'+$.trim(value['lastPoint']['operationPlacePostalCode']+ ' '+value['lastPoint']['operationPlaceNameTranslated'])+'">';
1895																//html += '	    <div class="myTrackingNumbersSource">'+value['lastPoint']['serviceName']+'</div>';
1896																//html += '	    <div class="myTrackingNumbersOperationAttribute">'+((value['deliveredStatus'] == 1 && (value['awaiting'] !== true)) ? '<i class="fa fa-check-square-o fa-lg text-success"></i> ' : '') + ((value['awaiting'] === true) ? '<i class="fa fa-flag fa-lg text-success"></i>
1896 ' : '')+'  <span class="myTooltip" data-toggle="tooltip" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md") ? 'left' : 'top')+'" title="Статус получен: '+value['lastPoint']['eventDateTime']+'">'+value['lastPoint']['operationAttributeTranslated']+'</span></div>';
1897																//html += '	    <div class="myTrackingNumbersOperationAttribute">'+((value['deliveredStatus'] == 1 && (value['awaiting'] !== true)) ? '<i class="fa fa-check-square-o fa-lg text-success"></i> ' : '') + ((value['awaiting'] === true) ? '<i class="fa fa-flag fa-lg text-success"></i> ' : '')+'  <span class="myTooltip" data-toggle="tooltip" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md") ? 'left' : 'top')+'">' +value['lastPoint']['operationAttributeTranslated']+(value['lastPoint']['operationPlaceNameTranslated'] != "" ? '</span> <i class="fa fa-map-marker myTooltip" style="opacity:0.8; color: #2f9cee;" title="'+value['lastPoint']['operationPlaceNameTranslated']+'" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md" || findBootstrapEnvironment() == "sm") ? 'right' : 'top')+'"></i>' : '')+'</div>';
1898																//html += '	    <div class="myTrackingNumbersOperationAttribute">'+((value['deliveredStatus'] == 1 && (value['awaiting'] !== true)) ? '<i class="fa fa-check-square-o fa-lg text-success"></i> ' : '') + ((value['awaiting'] === true) ? '<i class="fa fa-flag fa-lg text-success"></i> ' : '')+'  <span class="myTooltip myTrackingNumbersOperationAttributeText" data-toggle="tooltip" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md") ? 'left' : 'top')+'" title="'+value['lastPoint']['operationPlaceNameTranslated']+'">'+value['lastPoint']['operationAttributeTranslated']+'</span>'+(value['lastPoint']['operationPlaceNameTranslated'] != "" ? ' <div class="myTrackingNumbersPlaceIconWrapper"><i class="fa fa-map-marker myTooltip" style="opacity:0.8; color: #2f9cee; font-size:13px; position: absolute; right: 24px; /* top:10px; */" title="'+value['lastPoint']['operationPlaceNameTranslated']+'" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md" || findBootstrapEnvironment() == "sm") ? 'left' : 'top')+'"></i></div>' : '')+'</div>';
1899															    html += '	    <div class="myTrackingNumbersOperationAttribute">'+((value['deliveredStatus'] == 1 && (value['awaiting'] !== true)) ? '<i class="fa fa-check-square-o fa-lg text-success"></i> ' : '') + ((value['awaiting'] === true) ? '<i class="fa fa-flag fa-lg text-success"></i> ' : '')+'  <span >' +value['lastPoint']['operationAttributeTranslated']+'</span>'+(value['lastPoint']['operationPlaceNameTranslated'] != "" ? ' <i class="fa fa-map-marker" style="opacity:0.8; color: #2f9cee;"></i>' : '')+'</div>';
1900																html += '    </div>';
1901																
1902																//html += '    <div class="myTrackingNumbersThirdLine" trackCode="'+value['trackCode']+'">';
1903																//html += '	    <div class="myTrackingNumbersOperationPlace">'+value['lastPoint']['operationPlaceNameTranslated']+'</div> ';
1904																//html += '    </div>';
1905																
1906																//html += '    <div class="myTrackingNumbersFourthLine" trackCode="'+value['trackCode']+'">'; 
1907																//
1908																//html += '    </div>';	 
1909																
1910																html += '    <div class="myTrackingNumbersFourthLine" trackCode="'+value['trackCode']+'">';
1911																//html += '	    <div class="myTrackingNumbersDateTime">'+(value['lastPoint']['operationPlaceNameTranslated'] != "" ? '</span> <i class="fa fa-map-marker myTooltip" style="opacity:0.8; color: #2f9cee; font-size:13px; " title="'+value['lastPoint']['operationPlaceNameTranslated']+'" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md" || findBootstrapEnvironment() == "sm") ? 'left' : 'top')+'"></i> ' : '')+'<span class="myTrackingNumbersDate  myTooltip" data-toggle="tooltip" data-placement="left" title="Обновлялся: '+value['trackUpdateDateTime']+'">'+lastPointOperationDateTime[0]+'</span><span class="myTrackingNumbersTime">'+lastPointOperationDateTime[1]+'</span></div>';
1912																html += '	    <div class="myTrackingNumbersDateTime myTooltip" data-toggle="tooltip" data-placement="left" title="Обновлялся: '+value['trackUpdateDateTime']+'"><span class="myTrackingNumbersDate">'+lastPointOperationDateTime[0]+'</span><span class="myTrackingNumbersTime">'+lastPointOperationDateTime[1]+'</span></div>';
1913																
1914																html += '	     <div class="myTrackingNumbersDaysMerged">';
1915																
1916																if (value['merged'] === true) {
1917																     html += '           <div class="myTrackingNumbersMerged"><span class="mergedTrackCode myTooltip" id="mergedTrackCode_'+value['trackCode']+'" trackCode="'+value['trackCode']+'" trackCodeModified="'+value['trackCodeModified']+'" data-toggle="tooltip" data-placement="left" title="Объединено в '+value['trackCodeModified']+'"><span class="label label-info" style="background-color: #0165b1">
1917<i class="fa fa-sitemap fa-flip-vertical" style="/*opacity: 0.8*/"></i></span></span></div>';
1918																}
1919																//html += '	        <div class="myTrackingNumbersDaysCount"><span class="label '+daysFromLastChangeClass+' label-as-badge myTooltip" style="cursor: pointer;" data-toggle="tooltip" data-placement="'+(($(window).width() >= 1366) ? "right" : 'left')+'" title="В&nbsp;пути&nbsp;'+deliveryDays+'&nbsp;'+numberof(deliveryDays, '', ['день', 'дня', 'дней'])+''+/*lastPointOperation*/ ",&nbsp;информация получена" +'&nbsp;'+((daysFromLastChange > 0 ) ? (daysFromLastChange+'&nbsp;'+numberof(daysFromLastChange, '', ['день', 'дня', 'дней']))+'&nbsp;назад' : "сегодня") +'">'+deliveryDays+' / '+daysFromLastChange+'</span></div>'; 
1920																html += '	        <div class="myTrackingNumbersDaysCount"><span class="label '+daysFromLastChangeClass+' label-as-badge myTooltip" style="cursor: pointer;" data-toggle="tooltip" data-placement="'+(($(window).width() >= 1366) ? "right" : 'left')+'" title="В&nbsp;пути&nbsp;'+deliveryDays+'&nbsp;'+numberof(deliveryDays, '', ['день', 'дня', 'дней'])+''+/*lastPointOperation*/ ",&nbsp;информация получена" +'&nbsp;'+((daysFromLastChange > 0 ) ? (daysFromLastChange+'&nbsp;'+numberof(daysFromLastChange, '', ['день', 'дня', 'дней']))+'&nbsp;назад' : "сегодня") + ' ('+value['lastPoint']['eventDateTime']+') ">'+deliveryDays+' / '+daysFromLastChange+'</span></div>'; 
1921																html += '        </div>';
1922																//html += '	    <div class="myTrackingNumbersSource">'+$.trim(value['lastPoint']['serviceName'].split(' ')[0]+' '+((typeof value['lastPoint']['serviceName'].split(' ')[1] !== 'undefined') ? value['lastPoint']['serviceName'].split(' ')[1] : ''))+'</div>';
1923																html += '    </div>';
1924																
1925																//console.log(value['lastPoint']['serviceName'].split(' ')[1]);
1926																
1927																//html += '    <div class="myTrackingNumbersFifthLine" '+(((value['track_name'] == "Нет описания") && (value['track_protection_date_time'] == "")) ? 'style="display:none"' : '')+'>';
1928																html += '    <div class="myTrackingNumbersFifthLine" trackCode="'+value['trackCode']+'">';
1929																html += '	     <div class="myTrackingNumbersCountdown"><span class="countdown" id="countdown_'+value['trackCode']+'" trackCode="'+value['trackCode']+'" style="position:absolute; right:42px; cursor:pointer; border-bottom: 0px;">'+value['track_protection_date_time']+'</span></div>';
1930																html += '	     <div class="myTrackingNumbersDescription"><span class="myTooltip dotted dotted-gray myTrackingNumbersDescriptionSpan '+((value['track_name'] == "Нет описания") ? ' myTrackingNumbersDescriptionSpanMuted' : '')+' '+(((value['track_name'] != "Нет описания") && (value['track_name'].length <= 30) && (value['track_protection_date_time'] == "")) ? 'myTrackingNumbersDescriptionSpanBig"' : '')+'" id="'+value['trackCode']+'" data-trackcode="'+value['trackCode']+'"  trackCode="'+value['trackCode']+'" action="description" data-toggle="tooltip" data-placement="'+((findBootstrapEnvironment() == "lg" || findBootstrapEnvironment() == "md") ? 'left' : 'top')+'" title="Изменить&nbsp;описание">'+value['track_name']+'</span></div>';
1931																//html += '	     <div class="myTrackingNumbersDescription"><span class="myTooltip dotted myTrackingNumbersDescriptionSpan" id="'+value['trackCode']+'" trackCode="'+value['trackCode']+'" action="description" data-toggle="tooltip" data-placement="left" title="Изменить&nbsp;описание">'+value['trackCode']+'</span></div>';
1932																html += '    </div>';  
1933																
1934															    html += '</div>';
1935																
1936																 
1937																 //id="mergedTrackCode_'+value['trackCode']+'" trackCode="'+value['trackCode']+'" trackCodeModified="'+value['trackCodeModified']+'" data-toggle="tooltip" data-placement="top" title="Объединено в '+value['trackCodeModified']+'"
1938																 
1939															 /*	
1940															
1941															 //html += '<hr class="myTrackingNumbersCardHr">';
1942														    //var html = ''; 
1943														     if (value['status'] == '1') {
1944																 html +=  '   <div class="desc drpnl '+currentDescClass+'" data-trackCode="'+value['trackCode']+'" data-track-code-modified="'+value['trackCodeModified']+'" data-update-diff-minutes="'+value['trackUpdateDiffMinutes']+'">';
1945														    } 
1946														     else {
1947															     html +=  '   <div class="desc drpnl archived-track-code '+currentDescClass+'" data-trackCode="'+value['trackCode']+'" data-track-code-modified="'+value['trackCodeModified']+'" data-update-diff-minutes="'+value['trackUpdateDiffMinutes']+'">';
1948														    } 
1949															
1950 														   if (lastPointOperationDateTime != "")  {
1951														      var trackUpdateDateTimeHistoryToolTip = (typeof value['trackUpdateDateTime'] !== 'undefined' && value['trackUpdateDateTime'] !== null && value['trackUpdateDateTime'] !== "") ?  'Обновлялся: '+value['trackUpdateDateTime'] : 'Обновлялся: '+nowDateTime;  
1952														      html +=  '   <div class="operation drhdr" style="cursor:move; padding-bottom: 7px; overflow:hidden;width:100%;"><div class="box" style="white-space:nowrap;"><div class="operationDate badge badge-success myTooltip" style="display: inline-block; border-radius:0em; background-color: #0165b1; color: #ffffff; font-size: 85%;" data-toggle="tooltip" data-placement="left" title="'+trackUpdateDateTimeHistoryToolTip+'">'+lastPointOperationDateTime[0]+'</div> <div class="operationInfo badge badge-success" style="display: inline-block; border-radius:0em; background-color: #0165b1; color: #ffffff; font-size: 85%; width:100%; text-align:left;">'+value['lastPoint']['operation']+'</div></div></div>';
1953															 } 
1954															 else {
1955														      html +=  '   <div class="operation drhdr" style="cursor:move; padding-bottom: 7px; overflow:hidden;width:100%;"><div class="box" style="white-space:nowrap;"><div class="badge badge-success" style="display: inline-block; border-radius:0em; background-color: #0165b1; color: #ffffff; font-size: 85%; width:100%; text-align:left;">Информация по трек-коду не найдена</div></div></div>';
1956														   } 
1957															   
1958														   html +=  '   <div class="thumb myTooltip" style="cursor: pointer;" data-toggle="tooltip" data-placement="left" title="В пути '+deliveryDays+' '+numberof(deliveryDays, '', ['день', 'дня', 'дней'])+' / '+lastPointOperation+' '+daysFromLastChange+' '+numberof(daysFromLastChange, '', ['день', 'дня', 'дней'])+' назад ">';
1959														   html +=  	 historyStatusIcon;
1960														   html +=  	 '';
1961														   if (value['status'] == 1) {
1962														     html +=  	 '<div style="margin-top:3px; visibility: hidden;"><span class="label '+daysFromLastChangeClass+' label-as-badge ">'+deliveryDays+' / '+daysFromLastChange+'</span></div>';
1963														   }
1964														   
1965														   html +=  '   </div>';
1966														   
1967														   if (device.desktop()) {
1968														       var deliveredStatusButton = (value['deliveredStatus'] != 1) ? '<i class="fa fa-check-square-o myTooltip setDelivered" action="setDelivered" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="top" title="Установить&nbsp;статус &quot;Вручение&nbsp;получателю&quot;"></i>&nbsp;&nbsp;' : '';
1969															   html +=  '   <div class="history-line-setting text-right">'+deliveredStatusButton+'<i class="fa fa-clock-o myTooltip setCountdown" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="top" title="Установить&nbsp;таймер&nbsp;защиты"></i>&nbsp;&nbsp;<i class="fa '+notification_class+' myTooltip" action="notification" trackCode="'+value['trackCode']+'" data-toggle="tooltip" data-placement="top" title="Email&nbsp;и&nbsp;Telegram&nbsp;уведомления"></i>&nbsp;&nbsp;<i class="fa fa-remove myTooltip" action="remove" trackCode="'+value['trackCode']+'"  data-toggle="tooltip" data-placement="top" title="'+removeTitle+'"></i></div>';
1970															   html +=  '   <div class="details">';
1971															   html +=  '   <p><muted class="sampleTrackCode myTooltip" data-toggle="tooltip" data-placement="right" title="Отследить">'+value['trackCode']+'</muted></i></p>';
1972														    } 
1973															else {
1974															  var deliveredStatusButton = (value['deliveredStatus'] != 1) ? '<i class="fa fa-check-square-o setDelivered" action="setDelivered" trackCode="'+value['trackCode']+'"></i>&nbsp;&nbsp;' : '';
1975															  html +=  '   <div class="history-line-setting text-right">'+deliveredStatusButton+'<i class="fa fa-clock-o setCountdown" trackCode="'+value['trackCode']+'"></i>&nbsp;&nbsp;<i class="fa '+notification_class+'" action="notification" trackCode="'+value['trackCode']+'"></i>&nbsp;&nbsp;<i class="fa fa-remove" action="remove" trackCode="'+value['trackCode']+'"></i></div>';
1976															  html +=  '   <div class="details">';
1977															  html +=  '   <p><muted class="sampleTrackCode">'+value['trackCode']+'</muted></i></p>';	
1978															}
1979 															  
1980														   html +=  '   <p>';
1981														   html +=  '   <span class="trackDescription myTooltip" id="'+value['trackCode']+'" trackCode="'+value['trackCode']+'" action="description" data-toggle="tooltip" data-placement="left" title="Изменить&nbsp;описание">'+value['track_name'].substr(0,26)+'</span>';
1982														    if (value['merged'] !== true) {
1983																html +=  '   <span class="countdown" id="countdown_'+value['trackCode']+'" trackCode="'+value['trackCode']+'" style="position:absolute; right:24px; cursor:pointer; border-bottom: 0px;">'+value['track_protection_date_time']+'</span>';
1984															}
1985															else {
1986																html +=  '   <span class="countdown" id="countdown_'+value['trackCode']+'" trackCode="'+value['trackCode']+'" style="position:absolute; right:42px; cursor:pointer; border-bottom: 0px;">'+value['track_protection_date_time']+'</span>';
1987																html +=  '   <span class="mergedTrackCode myTooltip" id="mergedTrackCode_'+value['trackCode']+'" trackCode="'+value['trackCode']+'" trackCodeModified="'+value['trackCodeModified']+'" data-toggle="tooltip" data-placement="top" title="Объединено в '+value['trackCodeModified']+'" style="position:absolute; right:20px; cursor:pointer; border-bottom: 0px;"><span class="label label-info" style="background-color: #0165b1">
1987<i class="fa fa-sitemap fa-flip-vertical" style=""></i></span></span>';  	
1988															}
1989														   html +=  '   </p>';  
1990														   html +=  '   <p class="trackUrl" trackCode="'+value['trackCode']+'" action="trackUrl" style="display:none;"><a href="'+value['track_url']+'" target="_blank">'+value['track_url']+'</a></p>';
1991														   html +=  '   </div>';
1992													       html +=  '   </div>';
1993														  */
1994														   
1995													       
1996														   if (value['status'] == '1') {
1997																$('#history-lines-active').append(html); 
1998														   } 
1999														   else {
2000															   $('#history-lines-archive').append(html);
2001														   } 
2002															
2003                 										}); 
2004														 //console.log(historyTrackCodesAndNamesArray);
2005														  //console.log(JSON.stringify(historyTrackCodesArray));
2006														  /*
2007														  if (historyTrackCodesAndNamesArray.length > 0) {
2008														      $.Storage.set('historyTrackCodesAndNamesArray', JSON.stringify(historyTrackCodesAndNamesArray));
2009													      } 
2010														  */
2011														  if (historyTrackCodesArray.length > 0) {
2012															  //console.log("historyTrackCodesArray.length > 0");
2013														      $.Storage.set('historyTrackCodesArray', JSON.stringify(historyTrackCodesArray));
2014													      } 
2015														  else {
2016															  //console.log("historyTrackCodesArray.length = 0");
2017															  //$.Storage.remove('historyTrackCodesArray');
2018															  $.Storage.set('historyTrackCodesArray', JSON.stringify([]));
2019														  }
2020														   
2021														 //historyTrackCodesAndNamesArray = JSON.parse($.Storage.get("historyTrackCodesAndNamesArray"));
2022														 //console.log($.Storage.get(historyTrackCodesAndNamesArray));
2023														
2024														var addTrackCodeRowHtml = '<div id="addTrackCodeRow-1" class="addTrackCodeRow">\
2025																   <div class="text-center addTrackCodeButtonWrapper">\
2026																		 <button id="addTrackCodeButton-1" class="addTrackCodeButton" type="submit">\
2027																					<span>+ добавить трек-код</span>\
2028																		 </button>\
2029																  </div>\
2030																  <div id="history-add-ajax-loader"><div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div></div>\
2031															   </div>\
2032															   ';
2033													 
2034														if ($(".addTrackCodeRow").length == 0) {
2035															if (data.sortingActive == "ASC") {
2036																 $('#history-lines-active').after(addTrackCodeRowHtml);
2037																 $(".addTrackCodeRow").show();
2038															}
2039															else if (data.sortingActive == "DESC") {
2040																 $('#history-lines-active').before(addTrackCodeRowHtml);  															 
2041																 $(".addTrackCodeRow").show();
2042															}
2043															else {															
2044																$('#history-lines-active').after(addTrackCodeRowHtml);
2045																$(".addTrackCodeRow").show();
2046															}
2047														}
2048														
2049														if (short_stat_total_count >=5) {
2050															$("#history-short-stat-wrapper").show();
2051														 }
2052														 else {
2053															 $("#history-short-stat-wrapper").hide();
2054														 }														
2055	                                                    
2056														  
2057														 $("#short_stat_total_count").text(data.activeCount+data.archiveCount);
2058														 $("#short_stat_in_transit_count").text(short_stat_active_count);
2059														 $("#short_stat_delivered_count").text(short_stat_delivered_count);
2060														 $("#short_stat_archive_count").text(short_stat_archive_count);
2061														 
2062														 if (short_stat_archive_count < data.archiveCount) {
2063															 $("#short_stat_archive_count").text(data.archiveCount);
2064															 $('#history-lines-archive').append('<div class="showMoreArchivedWrapper" style="width: 115px;font-size: 13px; text-align: center; margin: 0 auto; padding-bottom: 10px;"><div class="showMoreArchived" style="cursor: pointer;color: #a3a3a3; border-bottom: 1px dashed #c5cacd; display: inline-block; margin-right: 5px; margin-top: 3px;">
2064еще '+limitArchiveCount+'</div><span><svg width="12" height="11" viewBox="0 0 27 27"><path fill="#ccc" d="M26.7,4.895c-0.4-0.5-1.199-0.5-1.599,0L13.512,19.382L1.923,4.895c-0.4-0.5-1.199-0.5-1.599,0c-0.4,0.5-0.4,1.299,0,1.798L12.613,22.08c0.2,0.3,0.5,0.4,0.899,0.4c0.3,0,0.599-0.1,0.899-0.4L26.7,6.694C27.1,6.194,27.1,5.395,26.7,4.895z"></path></svg></span></div>');
2065														 }
2066														 
2067														 
2068														 autoAdd = data.autoAdd;
2069														 //console.log("autoAdd", autoAdd); 
2070														 	
2071														 
2072														 if (short_stat_archive_count > 0) {
2073														    $(".c-round-num-block").addClass('c-round-num-block-small');  	
2074															//$("#short_stat_archive_count").parent().show();															
2075															$(".c-round-num-block-archive").show();															
2076														 }
2077														 else {
2078															 $(".c-round-num-block").removeClass('c-round-num-block-small');  	 
2079															 //$("#short_stat_archive_count").parent().hide();
2080															 $(".c-round-num-block-archive").parent().hide();
2081														 }
2082														 
2083													    
2084													 
2085														if (device.desktop()) { 
2086															//v2
2087															var panelList = $('#history-lines-active');
2088															//panelList.fadeOut().fadeIn();
2089															panelList.sortable({
2090																  handle: '.myTrackingNumbersFirstLine', 
2091																  update: function() {
2092																	  var sortingArray = [];
2093																	  $('.myTrackingNumbersCard', panelList).each(function(index, elem) {
2094																		  var $listItem = $(elem);
2095																		  newIndex = $(elem).index(); 
2096																		  sortingArray.push($(elem).attr("data-trackCode"));
2097																	 }); 
2098																	 //console.log(newIndex);
2099																	 //console.log(sortingArray);
2100																	 
2101																		  $.ajax({
2102																			  url:   '/ajax/history.ajax.php',
2103																			  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : $(this).attr("trackCode"), 'action': 'sort', 'trackCodes':sortingArray},
2104																			  type:	'POST', 
2105																			  dataType:  'json',
2106																				   success: function(data){
2107																				  } 	   
2108																		 });			
2109																  }
2110																});
2111														}
2112															
2113														 $('.countdown').each(function(i) {
2114															  if ($(this).text() != ""){
2115																 var countdownDateTime = $(this).text().replace(/-/gi,'/');
2116															 	  $(this).countdown(countdownDateTime, function(event) {
2117																	 var labelClass = 'label label-success';   
2118																	 if (event.strftime('%D') < 7 ) {
2119																		var labelClass = 'label label-info'; 
2120																	 }
2121																	if (event.strftime('%D') < 5 ) {
2122																		var labelClass = 'label label-danger'; 
2123																	 }
2124																	$(this).html('<span class="'+labelClass+'"><i class="fa fa-clock-o"></i> '+event.strftime('%D дней %H:%M:%S')+'</span>');
2125																  }); 
2126															   }
2127														   });				   
2128														 
2129														
2130														
2131														
2132														 if ((data.infoData) && (data.infoData.length > 0)) {
2133                                                            //$('#history-c').hide();
2134														 }														 
2135														
2136													   if ($('#history-lines-archive').children().length == 0) {
2137															$('#history-archive').hide(); 
2138													   } else {
2139														    $('#history-archive').show(); 		   
2140													   }
2141													    
2142														
2143										               $('.myTooltip').tooltip();
2144													   
2145													   //if (device.desktop() { 
2146														/*
2147														if (device.desktop()) {
2148															var trackingClickElement = $('.myTrackingNumbersTrackCode');
2149														}
2150													   else {
2151													        var trackingClickElement = $('.myTrackingNumbersFirstLine');
2152													   }*/
2153													   //$('.myTrackingNumbersFirstLine').bind('click', function(e) { 
2154													   // $('.myTrackingNumbersTrackCode').bind('click', function(e) { 
2155													   var trackingClickElement = $('.myTrackingNumbersTrackCode, .myTrackingNumbersFirstLine, .myTrackingNumbersSecondLine, .myTrackingNumbersFourthLine'); 
2156													    trackingClickElement.bind('click', function(e) { 
2157														 
2158														   if ($("#inputTrackCode").length > 0) {
2159																 //alert($("#trackingButton" ).hasClass("disabled"));
2160																   if ($("#trackingButton" ).hasClass("disabled") == false) { 
2161																	   $('.desc, .myTrackingNumbersCard').each(function() {
2162																		  $(this).removeClass('active');	
2163																	   });
2164																		 $(this).parent().parent().addClass('active');  
2165																			 $("#inputTrackCode").val($(this).attr("trackCode"));  
2166																				if ($(window).width() < 767) {
2167																					$('html, body').animate({
2168																						scrollTop: $("#mainContainer").offset().top - 10
2169																					}, 1000);
2170																					 
2171																					  
2172																				}
2173																				else { 
2174																					if ($(".trackingInfo-title-wrapper").visible() !== true) {																						
2175																						 $('html, body').animate({
2176																						   scrollTop: $("#trackingInfo").offset().top - 100
2177																						 }, 1000);
2178																					 }
2179																					
2180																				}
2181																			 tracking(); 
2182																		}
2183																	 
2184															 } 
2185															 else {
2186																  window.location = 'https://track24.ru/?code='+$(this).text();
2187															 }
2188															 
2189														});	
2190														
2191														if  (device.desktop()) {
2192															$(".myTrackingNumbersTrackCode").hover(function() { 
2193																	window.initHandler = setTimeout(handler, 400);
2194																	var el = this; 
2195																	function handler() {
2196																		$(el).find(".copyToClipBoard").fadeIn();
2197																		$(el).bind('mouseleave', function() {
2198																				setTimeout( function() {
2199																					$(el).find(".copyToClipBoard").fadeOut();
2200																				}, 1500); 
2201																				
2202																		 });
2203																	}
2204																}, function () {
2205																	clearTimeout(window.initHandler);
2206																});
2207															
2208                                                             /* копирование в буффер из моих трек-кодов */ 
2209															 $(".myTrackingNumbersTrackCode ").find(".copyToClipBoard").click(function(e) {
2210																 //console.log(".copyToClipBoard in history");
2211																  e.stopPropagation(); 
2212																  var trackCodeForClipBoard =  $(this).attr("data-for-clipboard");
2213																  var el = $(this);
2214																   try {
2215																		navigator.clipboard.writeText(trackCodeForClipBoard).then(function() { 
2216																			  $(el).attr('data-original-title', "Скопировано!").tooltip("hide").tooltip('show');
2217																			  setTimeout(function() {						  
2218																				 $(el).tooltip("destroy");
2219																			  }, 1000);
2220																			  
2221																		}, function(err) {
2222																			console.error('Async: Could not copy text: ', err);
2223																			alert('Async: Could not copy text: '+ err);
2224																		});
2225																	 } catch (err) {
2226																		console.log(err);
2227																		console.log('Oops, unable to copy');
2228																		alert(err);
2229																	 } 
2230																  return false; 
2231															  });
2232															  
2233															  
2234															 
2235															  
2236															  
2237															  
2238													   }
2239														  
2240														$('.showMoreArchivedWrapper').bind('click', function(e) {  
2241														  e.stopPropagation(); 
2242														  limitArchiveCount = limitArchiveCount+limitArchiveCount;
2243														  //$('#history-ajax-loader').show();
2244														  updateHistoryBlock();
2245														  
2246														});
2247														 
2248														 
2249														  
2250														 //$('muted, .myTrackingNumbersTrackCode').bind('click', function(e) {
2251													     //$('.desc, .myTrackingNumbersCard').each(function() {
2252														   
2253														 $('.mergedTrackCode').bind('click', function(e) {  
2254														  e.stopPropagation(); 
2255															  var mergedTrackCode =  $(this).attr("trackCodeModified");
2256															  $("#inputTrackCode").val(mergedTrackCode); 
2257															   $('.desc, .myTrackingNumbersCard').each(function() {								
2258																  if (mergedTrackCode == $(this).attr("data-track-code-modified")){
2259																	  $(this).find(".mergedTrackCode").find(".label").css("background-color", "red"); 
2260																	  //$(this).find(".mergedTrackCode").css("opacity", "1"); 
2261																  } 
2262																  else {
2263																	  $(this).find(".mergedTrackCode").find(".label").css("background-color", "#0165b1");
2264																	  //$(this).find(".mergedTrackCode").css("opacity", "0.6"); 
2265																  }
2266																}); 
2267														  });
2268														 
2269														 
2270													 
2271														
2272														
2273														$('.setDelivered').bind('click', function(e) {
2274														 e.stopPropagation();
2275														  var historyAction = $(this).attr("action"); 
2276													      var historyTrackCode =  $(this).attr("trackCode");
2277														  
2278														      var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog" style=""><div id="setDeliveredModal"><div class="setDelivered-header"><h4 class="modal-title">Почтовое отправление <b>'+historyTrackCode+'</b> получено?</h4></div><div class="setDelivered-body"></div><div class="setDelivered-footer hidden-xs" style="padding-top:10px;white-space:nowrap;"><hr><center>Нажмите &quot;Получено&quot;, если Вы <b>действительно получили посылку</b>.<br>Отменить данное действие будет невозможно!</center></div></div> </div>';    
2279																  $.magnificPopup.open({
2280																  items: { src: dialogHtml},
2281																  type: 'inline',
2282																  fixedBgPos: false,
2283																  fixedContentPos: true,
2284																  overflowY: 'scroll',
2285																  closeBtnInside: true,
2286																  preloader: false,          
2287																  midClick: false,
2288																  removalDelay: 400,
2289																  mainClass: 'my-mfp-zoom-in',
2290																  alignTop:false,
2291																  showCloseBtn: true,
2292																  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
2293																  callbacks: {
2294																	   open: function() { 														    
2295																			  $('.navbar-fixed-top').css('overflow-y', 'scroll');
2296																		},
2297																		close: function() {
2298																			  $('.navbar-fixed-top').css('overflow-y', 'visible');
2299																		}
2300																  }
2301																  
2302
2303															  });
2304														   
2305
2306														   
2307														   $('.setDelivered-body').html('<div style="margin-top:20px;"><div class="col-md-12 text-center"><button id="setDeliveredButtonOk" name="setDeliveredButtonOk" class="btn btn-success">Получено</button>&nbsp;&nbsp;&nbsp;<button id="setDeliveredButtonCancel" name="setDeliveredButtonCancel" class="btn btn-danger">Отмена</button></div></div>');
2308													       $('#setDeliveredButtonOk').unbind();
2309															$('#setDeliveredButtonOk').bind('click', function(e) {
2310																e.preventDefault();		
2311																
2312																 
2313																	 $.ajax({
2314																			  url:   '/ajax/history.ajax.php',
2315																			  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : historyTrackCode, 'action': historyAction},
2316																			  type:	'POST', 
2317																			  dataType:  'json',
2318																				 success: function(data){
2319																				   if (data) { 
2320																					   if (data.status == 'ok') {
2321																							 $.notify("Статус трек-кода "+historyTrackCode+"  обновлен!", "success");
2322																							 $.magnificPopup.close();
2323																							  updateHistoryBlock();
2324																						}		
2325																						else if (data.status == 'error'){
2326																							 $.notify(data.message, "error"); 
2327																						}
2328																					 }
2329																					}		   
2330																		   }); 
2331																 
2332															});
2333															$('#setDeliveredButtonCancel').unbind();
2334															$('#setDeliveredButtonCancel').bind('click', function(e) {
2335																e.preventDefault();
2336																$.magnificPopup.close();
2337															});	
2338														   
2339														   
2340														      
2341														});
2342														
2343														
2344														
2345													 	
2346														
2347														$('.clearArchive').bind('click', function(e) {
2348														 e.stopPropagation();
2349														  var historyAction = $(this).attr("action"); 
2350													      var historyTrackCode =  $(this).attr("trackCode");
2351														  
2352														      var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog" style=""><div id="setDeliveredModal"><div class="clearArchive-header"><h4 class="modal-title"><center>Очистить архив отслеживания?</center></h4></div><div class="clearArchive-body"></div><div class="clearArchive-footer hidden-xs" style="padding-top:10px;white-space:nowrap;"><hr><center>Нажмите &quot;Да&quot;, если Вы <b>хотите удалить трек-коды</b> из архива.<br>Отменить данное действие будет невозможно!</center></div></div> </div>';    
2353																  $.magnificPopup.open({
2354																  items: { src: dialogHtml},
2355																  type: 'inline',
2356																  fixedBgPos: false,
2357																  fixedContentPos: true,
2358																  overflowY: 'scroll',
2359																  closeBtnInside: true,
2360																  preloader: false,          
2361																  midClick: false,
2362																  removalDelay: 400,
2363																  mainClass: 'my-mfp-zoom-in',
2364																  alignTop:false,
2365																  showCloseBtn: true,
2366																  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
2367																  callbacks: {
2368																	   open: function() { 														    
2369																			  $('.navbar-fixed-top').css('overflow-y', 'scroll');
2370																		},
2371																		close: function() {
2372																			  $('.navbar-fixed-top').css('overflow-y', 'visible');
2373																		}
2374																  }
2375																  
2376
2377															  });
2378														   
2379
2380														   $('.clearArchive-body').html('<div style="margin-top:20px;"><div class="col-md-12 text-center"><button id="clearArchiveButtonOk" name="clearArchiveButtonOk" class="btn btn-success">Да</button>&nbsp;&nbsp;&nbsp;<button id="clearArchiveButtonCancel" name="clearArchiveButtonCancel" class="btn btn-danger">Нет</button></div></div>');
2381													        
2382														   
2383														   $('#clearArchiveButtonOk').unbind();
2384															$('#clearArchiveButtonOk').bind('click', function(e) {
2385																e.preventDefault();		
2386																   $.magnificPopup.close();
2387																	//updateHistoryBlock();
2388																	
2389																		//$('#history-archive').animate({scrollTop: 0}, 800);
2390																		//scrollToElement('.history-block');
2391																		
2392
2393																	
2394																	
2395																    
2396																	 $.ajax({
2397																			  url:   '/ajax/history.ajax.php',
2398																			  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'action': 'clear-archive'},
2399																			  type:	'POST', 
2400																			  dataType:  'json',
2401																				success: function(data){
2402																				   if (data) { 
2403																						   if (data.status == 'ok') {
2404																								 $.notify("Архив очищен!\nУдален"+numberof(data.removed, '', ['', 'о', 'ов'])+" "+data.removed+" трек-код"+numberof(data.removed, '', ['', 'а', 'ов']), "success");
2405																								 $.magnificPopup.close();
2406																								 $('html, body').stop().animate({scrollTop:0}, 800);
2407																								  updateHistoryBlock();
2408																							}		
2409																							else if (data.status == 'error') {
2410																								 $.notify(data.message, "error"); 
2411																								 $.magnificPopup.close();
2412																								 updateHistoryBlock();
2413																							}
2414																							else {
2415																								$.notify("Что-то пошло не так...", "error"); 
2416																								$.magnificPopup.close();
2417																								updateHistoryBlock(); 
2418																							}
2419																					 }
2420																					 else {
2421																						    $.notify("Что-то пошло не так...", "error"); 
2422																							$.magnificPopup.close();
2423																							updateHistoryBlock(); 
2424																					 }
2425																				}		   
2426																		   }); 
2427																	   
2428																 
2429															});
2430															$('#clearArchiveButtonCancel').unbind();
2431															$('#clearArchiveButtonCancel').bind('click', function(e) {
2432																e.preventDefault();
2433																$.magnificPopup.close();
2434															});	
2435														   
2436														  
2437														      
2438														});
2439														
2440														
2441														  
2442														  $(".showDescriptionRow").unbind( "click" );
2443														  $('.showDescriptionRow').bind('click', function(e) {
2444															  if ($(this).parent().parent().parent().find(".myTrackingNumbersFifthLine").visible() === false) {
2445																 $(this).parent().parent().parent().find(".myTrackingNumbersFifthLine").slideDown();  
2446															  }
2447															  else {
2448																  $(this).parent().parent().parent().find(".myTrackingNumbersFifthLine").slideUp();  
2449															  }
2450															  
2451															  
2452															  
2453														  });
2454														 
2455														   $('.myTrackingNumbersCountdown').unbind( "click" );
2456														   $('.myTrackingNumbersCountdown').bind('click', function(e) {
2457														     $(this).parent().parent().find(".setCountdown").click(); 
2458														   });
2459														 
2460														 $('.setCountdown').unbind("click");
2461														 $('.setCountdown').bind('click', function(e) {
2462															 e.stopPropagation();
2463															 
2464															 if ($(this).parent().parent().parent().find(".myTrackingNumbersFifthLine").visible() === false) {
2465																 $(this).parent().parent().parent().find(".myTrackingNumbersFifthLine").slideDown();  
2466															  } 
2467															  
2468															  
2469															  var tcd =  $(this).attr("trackCode");
2470															  var eId = '#countdown_'+$(this).attr("trackCode");
2471															 
2472															  if ($(window).width() >= 1366) {
2473																 var place  = 'right';
2474															  }
2475															  else {
2476																 var  place  = 'left';
2477															  }
2478															   
2479																	$(eId).editable({
2480																	     //showbuttons: false,
2481																	     //mode: 'inline',
2482																		 type:  'select', 
2483																		 //type:  'date',
2484																		 url:   '/ajax/history.ajax.php',
2485																		 params: {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.
2485Storage.get('authKey'), 'trackCode' : tcd, 'action': 'addProtectionOrderTimer'},       
2486																		 checkLogin : $.Storage.get('login'), 
2487																		 checkAuthKey : $.Storage.get('authKey'),										                      
2488															 		     pk : "",
2489																		 placement: place,
2490																		 emptytext: '<span class="label label-success"><i class="fa fa-clock-o"></i> 50 дней 00:00:00</span>', 
2491																		 value: "50",
2492																		 savenochange: true,
2493																		 source: [		 
2494																			{value: 0, text: 'Отключить'},
2495																			{value: 1, text: '1 день'},
2496																			{value: 2, text: '2 дня'},
2497																			{value: 3, text: '3 дня'},
2498																			{value: 4, text: '4 дня'},
2499																			{value: 5, text: '5 дней'},
2500																			{value: 6, text: '6 дней'},
2501																			{value: 7, text: '7 дней'},
2502																			{value: 8, text: '8 дней'},
2503																			{value: 9, text: '9 день'},
2504																			{value: 10, text: '10 дней'},
2505																			{value: 11, text: '11 дней'},
2506																			{value: 12, text: '12 дней'},
2507																			{value: 13, text: '13 дней'},
2508																			{value: 14, text: '14 дней'},
2509																			{value: 15, text: '15 дней'},
2510																			{value: 16, text: '16 дней'},
2511																			{value: 17, text: '17 дней'},
2512																			{value: 18, text: '18 дней'},
2513																			{value: 19, text: '19 дней'},
2514																			{value: 20, text: '20 дней'},
2515																			{value: 21, text: '21 день'},
2516																			{value: 22, text: '22 дня'},
2517																			{value: 23, text: '23 дня'},
2518																			{value: 24, text: '24 дня'},
2519																			{value: 25, text: '25 дней'},
2520																			{value: 26, text: '26 дней'},
2521																			{value: 27, text: '27 дней'},
2522																			{value: 28, text: '28 дней'},
2523																			{value: 29, text: '29 дней'},
2524																			{value: 30, text: '30 дней'},
2525																			{value: 31, text: '31 день'},
2526																			{value: 32, text: '32 дня'},
2527																			{value: 33, text: '33 дня'},
2528																			{value: 34, text: '34 дня'},
2529																			{value: 35, text: '35 дней'},
2530																			{value: 36, text: '36 дней'},
2531																			{value: 37, text: '37 дней'},
2532																			{value: 38, text: '38 дней'},
2533																			{value: 39, text: '39 дней'},
2534																			{value: 40, text: '40 дней'},
2535																			{value: 41, text: '41 день'},
2536																			{value: 42, text: '42 дня'},
2537																			{value: 43, text: '43 дня'},
2538																			{value: 44, text: '44 дня'},
2539																			{value: 45, text: '45 дней'},
2540																			{value: 46, text: '46 дней'},
2541																			{value: 47, text: '47 дней'},
2542																			{value: 48, text: '48 дней'},
2543																			{value: 49, text: '49 дней'},
2544																			{value: 50, text: '50 дней'},
2545																			{value: 51, text: '51 день'},
2546																			{value: 52, text: '52 дня'},
2547																			{value: 53, text: '53 дня'},
2548																			{value: 54, text: '54 дня'},
2549																			{value: 55, text: '55 дней'},
2550																			{value: 56, text: '56 дней'},
2551																			{value: 57, text: '57 дней'},
2552																			{value: 58, text: '58 дней'},
2553																			{value: 59, text: '59 дней'},
2554																			{value: 60, text: '60 дней'},
2555																			{value: 65, text: '65 дней'},
2556																			{value: 70, text: '70 дней'},
2557																			{value: 75, text: '75 дней'},
2558																			{value: 80, text: '80 дней'},
2559																			{value: 85, text: '85 дней'},
2560																			{value: 90, text: '90 дней'},
2561																			{value: 95, text: '95 дней'},
2562																			{value: 100, text: '100 дней'},
2563																			{value: 110, text: '110 дней'},
2564																			{value: 120, text: '120 дней'},
2565																			{value: 130, text: '130 дней'},
2566																			{value: 140, text: '140 дней'},
2567																			{value: 150, text: '150 дней'},
2568																			
2569																		],
2570																		validate: function(value) {
2571																			if ($.trim(value) == '') return 'Ошибка!';																			
2572																		},
2573																		display: function(value) {																			    																			 
2574																		},
2575																		change: function (value) { 																		     
2576                                                                        },
2577																		ajaxOptions: {
2578																			dataType: 'json'
2579																		},
2580																		success: function(response, newValue) {
2581																			if (data) { 
2582																				   if (data.status == 'ok') {
2583																						updateHistoryBlock();
2584																					}														 
2585																				 }
2586																		} 
2587																		
2588																    }).editable('show'); 
2589															     
2590																 
2591														 });
2592													  
2593													  $('.fa-bell, .fa-bell-o, .fa-bell-slash-o').bind('click', function(e) {
2594														e.stopPropagation();
2595													    var historyAction = $(this).attr("action"); 
2596														var historyTrackCode =  $(this).attr("trackCode");
2597														         $.ajax({
2598																		  url:   '/ajax/history.ajax.php',
2599																		  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : historyTrackCode, 'action': historyAction},
2600																		  type:	'POST', 
2601																		  dataType:  'json',
2602																			 success: function(data){
2603																			   if (data) { 
2604																				   if (data.status == 'ok') {
2605																						 updateHistoryBlock();
2606																					}														 
2607																				 }
2608																				}		   
2609																	   });
2610													  });
2611													 
2612													 //
2613													 $('.myTrackingNumbersClose').unbind('click');
2614													 $('.myTrackingNumbersClose').bind('click', function(e) {  
2615													  e.stopPropagation();
2616														 var historyAction = $(this).attr("action"); 
2617														 var historyTrackCode =  $(this).attr("trackCode");
2618														 var historyTrackCodeStatus = $(this).attr("data-status");
2619														 var historyTrackCodeBlock = $(this).parent().parent().parent();
2620														 var historyTrackCodeActiveCount = $(".myTrackingNumbersCardActive").length;
2621														 var historyTrackCodeArchiveCount = $(".myTrackingNumbersCardArchive").length;
2622															
2623																												
2624															 
2625															   
2626														     
2627															if (historyTrackCodeStatus == 1) {  
2628																	 if  (historyTrackCodeArchiveCount == 0)  {
2629																		$('#history-archive').animate({opacity: '100', height: 'toggle'}, 500);
2630																	 }
2631																	 
2632																		historyTrackCodeBlock.fadeOut(function(){ 
2633																			   $('#history-lines-archive').prepend(historyTrackCodeBlock).show(function(){
2634																					 historyTrackCodeBlock.fadeIn(function(){ 
2635																							$.ajax({
2636																								  url:   '/ajax/history.ajax.php',
2637																								  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : historyTrackCode, 'action': historyAction},
2638																								  type:	'POST', 
2639																								  dataType:  'json',
2640																									 success: function(data){
2641																									   if (data) { 
2642																											   if (data.status == 'ok') {
2643																													 updateHistoryBlock();  
2644																												}														 
2645																											 }
2646																										}		   
2647																							   });	   
2648																					 
2649																					 });
2650																			   
2651																			   });
2652																			   
2653																		});  
2654															   
2655															 }
2656															  else if (historyTrackCodeStatus == 0) {
2657																   
2658																   if  (historyTrackCodeArchiveCount == 1)  {
2659																		$('#history-archive').animate({opacity: '100', height: 'toggle'}, 500);
2660																	 }
2661															   
2662															      historyTrackCodeBlock.fadeOut(function(){ 
2663																    
2664																		 $.ajax({
2665																			  url:   '/ajax/history.ajax.php',
2666																			  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : historyTrackCode, 'action': historyAction},
2667																			  type:	'POST', 
2668																			  dataType:  'json',
2669																				 success: function(data){
2670																				   if (data) { 
2671																					   if (data.status == 'ok') {
2672																							 updateHistoryBlock();
2673																						}														 
2674																					 }
2675																					}		   
2676																		   });
2677																	   	   
2678															      });
2679															      
2680															 }   
2681																  
2682													    });	
2683													 
2684													     /* Перенос из архива в активные */ 
2685															 $(".moveFromArchiveToActive").click(function(e) { 
2686																  e.stopPropagation(); 
2687																  var trackCodeForMove =  $(this).attr("trackcode"); 
2688																  var historyTrackCodeBlock = $(this).parent().parent().parent(); 
2689																  
2690																    historyTrackCodeBlock.fadeOut(function(){ 
2691																			   $('#history-lines-active').append(historyTrackCodeBlock).show(function(){
2692																					 historyTrackCodeBlock.fadeIn(function(){ 
2693																							  $.ajax({
2694																								  url:   '/ajax/history.ajax.php',
2695																								  data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : trackCodeForMove, 'action': 'add'},
2696																								  type:	'POST', 
2697																								  dataType:  'json',
2698																									 success: function(data){
2699																										  if (data) { 
2700																											   if (data.status == 'ok') {
2701																													 //$.notify("Трек-код "+trackCodeForMove+"  перенесен в активные трек-коды!", "success");
2702																													  updateHistoryBlock();
2703																												}		
2704																												else if (data.status == 'error'){
2705																													 $.notify(data.message, "error"); 
2706																												}
2707																										  }
2708																										}		   
2709																							});	   
2710																					 
2711																					 });
2712																			   
2713																			   });
2714																			   
2715																		}); 
2716																   
2717																       
2718																   
2719																    
2720																  
2721															  }); 
2722														  
2723														 //.trackDescription, 
2724														  $(".myTrackingNumbersDescriptionSpan").editInPlace({
2725															 text_max: 64,
2726                                                             textarea_max: 64,
2727															 text_size: 64,  
2728															 textarea_cols:1,
2729															 textarea_rows:1, 
2730                                                             saving_animation_color: "#ECF2F8",
2731															 preinit: function(original_element, html, original) {
2732																     $(this).parent().parent().find(".myTrackingNumbersCountdown").hide(); 																	 
2733															  },
2734															  success: function(data) {  
2735															 
2736															   var json = JSON.parse(data);
2737															       
2738																   if ((json) && (json.status == 'ok')) {
2739																	   
2740																	   if (json.description != "") {
2741																		  
2742																		   $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").text(json.description);																		   
2743																		   $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").removeClass("myTrackingNumbersDescriptionSpanMuted");
2744																		   
2745																		   if ((json.description != "Нет описания") && (json.description.length <= 30)) {
2746																			  $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").addClass("myTrackingNumbersDescriptionSpanBig");
2747																		   }
2748																		   else {
2749																			    $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").removeClass("myTrackingNumbersDescriptionSpanBig");
2750																		   } 
2751																	   }
2752																	   else {
2753																		   $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").text("Нет описания");
2754																           $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").addClass("myTrackingNumbersDescriptionSpanMuted");
2755																	   }
2756																   }
2757																   else {
2758																	   $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").text("Нет описания"); 
2759																	   $(this).parent().parent().parent().find(".myTrackingNumbersDescriptionSpan").addClass("myTrackingNumbersDescriptionSpanMuted");
2760																   }
2761															  },
2762															  postclose: function(data){ 
2763																 $(this).parent().parent().find(".myTrackingNumbersCountdown").slideDown(); 
2764															  }, 
2765															 url: "/ajax/history.ajax.php",
2766															 params: 'checkLogin='+$.Storage.get('login')+'&checkAuthKey='+ $.Storage.get('authKey')+'&trackCode=' +$(this).attr("trackcode")+ '&action=description'
2767														  });	
2768														  
2769														  
2770														  
2771														$('.fa-link').bind('click', function(e) {
2772															   $(this).parent().next('.details').find(".trackUrl").slideToggle( "fast", function() {
2773															   });   
2774														 });	
2775														 
2776														 //alert(readyForMultiTrackingCount);
2777														  
2778														if ((readyForMultiTrackingCount > 0) && (la <= 20)) {
2779															
2780														          $('.autoUpdateHistory').remove();
2781														          //<span class="label label-success label-as-badge myTooltip multiTrackingCounter" style="position: absolute; right: 15px; top: 40px; background-color: #d25b13; padding: 3px 7px 3px;">
2781'+readyForMultiTrackingCount+'</span>
2782																  $('#history-block-desktop').prepend('<i class="fa fa-refresh myTooltip autoUpdateHistory" style="cursor:pointer;position: absolute;top: 5px;right: 20px;color: #ffffff;" data-toggle="tooltip" data-placement="left" title="Обновить '+readyForMultiTrackingCount +  ' трек-'+numberof(readyForMultiTrackingCount, '', ['код', 'кода', 'кодов'])+'"></i>');		  
2783														          $('#history-block-mobile').prepend('<i class="fa fa-refresh myTooltip autoUpdateHistory" style="cursor:pointer;position: absolute;top: 5px;right: 20px;color: #ffffff;" data-toggle="tooltip" data-placement="left" title="Обновить '+readyForMultiTrackingCount +  ' трек-'+numberof(readyForMultiTrackingCount, '', ['код', 'кода', 'кодов'])+'"></i>');
2784																  
2785																  $('.autoUpdateHistory').unbind();
2786																  $('.autoUpdateHistory').bind('click', function(e) {
2787																	   //$(this).remove();
2788																		 //if  (device.desktop())   {
2789																		     //setTimeout( function() {
2790																			      $(this).tooltip('hide');
2791																	         //}, 3000);
2792																			
2793																		 //}
2794																		 $(this).hide();
2795																		  $('#history-block-desktop').prepend('<div class="label label-success label-as-badge myTooltip multiTrackingCounter" style="position: absolute; right: 15px; top: 0px; background-color: #a00b0b6e; padding: 5px 8px 5px;"><span>'+readyForMultiTrackingCount+' / '+readyForMultiTrackingCount+'</span> <i class="fa fa-refresh fa-spin" style="margin-left:5px;"></i></div>');		  
2796																		  $('#history-block-mobile').prepend('<div class="label label-success label-as-badge myTooltip multiTrackingCounter" style="position: absolute; right: 15px; top: 0px; background-color: #a00b0b6e; padding: 5px 8px 5px;"><span>'+readyForMultiTrackingCount+' / '+readyForMultiTrackingCount+'</span> <i class="fa fa-refresh fa-spin" style="margin-left:5px;"></i></div>');		  
2797																		 autoUpdate();
2798																		 
2799																  });	
2800																  $('.autoUpdateHistory').tooltip();
2801																  
2802														 }
2803														 else {
2804															      $('.autoUpdateHistory').remove();
2805															 
2806														          $('#history-block-desktop').prepend('<i class="fa fa-refresh myTooltip disabled autoUpdateHistory auth_" style="cursor:pointer;position: absolute;top: 5px;right: 20px;color: #ffffff;" data-toggle="tooltip" data-placement="left" title="Обновление не требуется..."></i>');		  
2807														          $('#history-block-mobile').prepend('<i class="fa fa-refresh myTooltip disabled autoUpdateHistory auth_" style="cursor:pointer;position: absolute;top: 5px;right: 20px;color: #ffffff;" data-toggle="tooltip" data-placement="left" title="Обновление не требуется..."></i>');		  
2808																  $('.autoUpdateHistory').unbind();
2809																  $('.autoUpdateHistory').addClass('disabled');
2810																  $('.autoUpdateHistory').tooltip();
2811																   
2812														 }
2813														 		 
2814																   
2815														  
2816														return;
2817}
2818 
2819function signOut(){
2820			  $.Storage.remove('login');
2821			  $.Storage.remove('authKey');
2822			  $.Storage.remove('social_name');
2823			  $.Storage.remove('avatar');
2824			  
2825			  $.removeCookie('xauth_user_info', { path: '/' });
2826			  $.Storage.remove('historyTrackCodesArray');
2827			  
2828			  checkAuthKey($.Storage.get('login'), $.Storage.get('authKey'), function (s) { 
2829				  togleAuthForm(s);
2830				  updateHistoryBlock();
2831                  togleNoAuth(s); 				  
2832			   });
2833			    
2834				if ((window.location.href.indexOf("page=api") > 0) || (window.location.href.indexOf("page=deleteProfile") > 0 )){
2835	                 location.reload();
2836                }
2837			}
2838
2839
2840function checkURL(url) {
2841    var regURL = /^(?:(?:https?|ftp|telnet):\/\/(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|org|mil|edu|arpa|ru|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:\/[a-z0-9.,_@%&?+=\~\/-]*)?(?:#[^ \'\"&<>]*)?$/i;
2842    return regURL.test(url);
2843}
2844	
2845function storeInfo(sId) { 
2846	 if  ((typeof sId === "undefined") || (sId === null) || (sId === "") || (sId === 0))   {
2847	     var sId = 0;
2848	 }
2849							 	        
2850     if ($( "#storeInfoButton" ).hasClass("disabled") == true) {
2851		  return false;
2852      }	
2853	  $('#storeDataInfo').empty();
2854	  $('#storeDataChart').empty();
2855	  
2856	  $("#inputStoreInfoUrl").val($.trim($("#inputStoreInfoUrl").val()));
2857	  $('#inputStoreInfoUrl').removeClass('has-error');  
2858				  
2859	 
2860	   var inputedUrl =  (typeof $("#inputStoreInfoUrl").val() !== "undefined" && $("#inputStoreInfoUrl").val() != null && $("#inputStoreInfoUrl").val() != "" ) ? $("#inputStoreInfoUrl").val() : "";
2861	   
2862		   if  ((inputedUrl.length < 1) && (sId == 0)) {
2863				  $("#inputStoreInfoUrl").attr("placeholder","Необходимо ввести ссылку на товар на AliExpress.com!");
2864				  $('#inputStoreInfoUrl').addClass('has-error');	
2865				  return false;
2866		   } 
2867		    
2868		    inputedUrl = inputedUrl.replace(/\?.+/, ''); 
2869		   
2870		   if (checkURL(inputedUrl) === false) {
2871			      $("#inputStoreInfoUrl").attr("placeholder","Необходимо ввести корректную ссылку!");
2872				  $('#inputStoreInfoUrl').addClass('has-error');
2873				  $('#storeDataInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">Необходимо ввести корректную ссылку!</div></div>');
2874				  return false;
2875		   }
2876		   
2877		   $("#inputStoreInfoUrl").val($.trim(inputedUrl)); 
2878		   
2879		   
2880		   
2881			 if  (sId === 0)   {
2882	           var ajaxUrl = '/ajax/store-info.ajax.php?url='+inputedUrl;
2883			   document.title = 'Проверка продавца на AliExpress: '+inputedUrl;
2884			   window.history.pushState('', 'Проверка продавца на AliExpress: '+inputedUrl, '/?page=store-info');
2885	         }	
2886			 else {
2887			    var ajaxUrl = '/ajax/store-info.ajax?sId='+sId;
2888			 }
2889			 
2890			    	$.ajax({
2891                                  url:	 ajaxUrl,
2892        	                      type:	 'GET',
2893                                  dataType:  'json',
2894								  timeout: (60000),
2895         	                        success: function(json){  
2896									
2897						              if (json.status == 'ok') {
2898									  var r = 3;
2899							                    $('#storeDataInfo').append('<div><h4><i class="fa fa-info-circle fa-lg" title="Продавец зарегистрирован: '+json.data.signup_date +' ('+json.data.days_diff_from_signup_date+' дней назад) / информация обновлена '+json.data.update_date_time+'"></i>&nbsp;Информация о продавце: <a href="//track24.ru/?g='+json.data.store_url+'" target="_blank">'+json.data.store_name+'</a></h4></div>');
2900											    $('#storeDataInfo').append('<div class="col-md-9" id="storeDataContent"></div>');
2901											    $('#storeDataInfo').append('<div class="col-md-3" id="storeDataChart"><div id="chart"><strong></strong></div><div class="shield"></div></div>');
2902											    $('#storeDataInfo').append('<div class="col-md-12 storeDataResult dashed" id="storeDataResult"></div>');
2903												  
2904												  if ((json.data.days_diff_from_signup_date >= 1) && (json.data.days_diff_from_signup_date < 182)) {
2905													   $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Продавец недавно зарегистрирован на AliExpress</b>.</p>');
2906												   }
2907												   if ((json.data.days_diff_from_signup_date >= 182) && (json.data.days_diff_from_signup_date < 365)){
2908													   $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Продавец зарегистрирован на AliExpress более 6 месяцев назад.</p>');
2909												   } 
2910												 
2911												  
2912												  
2913												   if (json.data.days_diff_from_signup_date >= 365) {
2914													   $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Продавец зарегистрирован на AliExpress более года назад.</p>');
2915												       r = r + 1;
2916												   }
2917												 
2918												   if (parseFloat(json.data.communication_average) >= 4.5) {
2919													     $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Продавец оперативно отвечает на вопросы покупателей.</p>');
2920												         r = r + 1;
2921												   } else {
2922												         $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Продавец неохотно общается с покупателями</b>.</p>');
2923												   }
2924												  if (parseFloat(json.data.item_described_average) >= 4.5) {
2925													  $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Описания товаров и фотографии соответствуют действительности.</p>');
2926												      r = r + 1;
2927												   } else {
2928												         $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Описания товаров и фотографии не соответствуют действительности</b>.</p>');
2929												   }
2930												    if (parseFloat(json.data.shipping_speed_average) >= 4.5) {
2931													  $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Продавец оперативно отправляет заказы.</p>');
2932													  r = r + 1;
2933												   } else {
2934												         $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Медленная отправка заказов</b>.</p>');
2935												   }
2936												  
2937												   if (parseFloat(json.data.feedback_score) >= 1000) {
2938													  $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Высокий рейтинг на AliExpress.</p>');
2939													  r = r + 1;
2940												   } else {
2941												         $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Низкий рейтинг на AliExpress</b>
2941.</p>');
2942												   }
2943												   
2944												   if (parseFloat(json.data.positive_feedback_percent) >= 95) {
2945													  $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Много положительных отзывов за последние 6 месяцев.</p>');
2946													  r = r + 1;
2947												   } else {
2948												         $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Мало положительных отзывов 6 месяцев</b>.</p>');
2949												   }
2950												    
2951												   if (parseFloat(json.data.fh_3_positive) >= 100) {
2952													  $('#storeDataContent').append('<p><i class="fa fa-check-square-o fa-lg text-success"></i> Много заказов за последние 3 месяца.</p>');
2953													  r = r + 1;
2954												   } else {
2955												         $('#storeDataContent').append('<p class="text-danger"><i class="fa fa-minus-square-o fa-lg"></i> <b>Мало заказов за последние 3 месяца</b>.</p>');
2956												   }
2957												
2958												 $('#chart').circleProgress({
2959													value: r / 10,
2960													 thickness: 15
2961												}).on('circle-animation-progress', function(event, progress, stepValue) {
2962													    $(this).find('strong').text(String(stepValue.toFixed(1))*10);
2963												 });
2964												
2965												$('#chart').append('<div class="storeDataChartScore">Рейтинг<br> '+ r +' из 10<br><br>'+numberFormat(Math.round(json.data.feedback_score), 0, "'", "'")+'<br>положительных '+numberof(json.data.feedback_score, '', ['отзыв', 'отзыва', 'отзывов'])+'</div>'); 
2966												 
2967												 
2968												 if (r == 10) {
2969												    $('#storeDataResult').append('<img src="/img/shield-36-green.png" width="40px;" style="float:left; padding: 5px; margin-right: 10px; margin-top: 10px;"><div class="storeResumeText"><h4 class="text-success">Отличный продавец, можно смело делать заказ!</h4></div>'); 
2970												 }
2971												  if (r == 9) {
2972												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-success">Хороший продавец, покупать можно, но осторожно!</h4></div>'); 
2973												 }
2974                                                 if (r == 8) {
2975												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-success">Нормальный продавец, покупать можно, но будьте внимательны и обратите внимание на отзывы!</h4></div>'); 
2976												 }
2977												 if (r == 7) {
2978												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-danger">Рейтинг продавца низкий, лучше поискать товары у другого продавца!</h4></div>'); 
2979												 }
2980												 if (r == 6) {
2981												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-danger">Рейтинг продавца низкий, мы не рекомендуем приобретать товары у этого продавца!</h4></div>'); 
2982												 }
2983                                                 if (r == 5) {
2984												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-danger">Рейтинг продавца очень низкий, мы не рекомендуем приобретать товары у этого продавца!</h4></div>'); 
2985												 }
2986												  if (r == 4) {
2987												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-danger">Рейтинг продавца очень низкий, мы не рекомендуем приобретать товары у этого продавца!</h4></div>'); 
2988												 }
2989												   if (r == 3) {
2990												    $('#storeDataResult').append('<div class="storeResumeText"><h4 class="text-danger">Рейтинг продавца очень низкий, мы не рекомендуем приобретать товары у этого продавца!</h4></div>'); 
2991												 }
2992												 $('#storeDataResult').append('<div  class="" style="margin-left:50px; padding-bottom:14px;">Ссылка на отчет о продавце '+json.data.store_name+': <a href="//track24.ru/?page=store-info&sId='+json.data.id+'" target="_blank">https://track24.ru/?page=store-info&sId='+json.data.id+'</a></div>');
2993												 
2994												  
2995									   }
2996									   else if (json.status == 'error') {									   
2997                                          $('#storeDataInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+json.message+'</div></div>');
2998							           }
2999									   else {
3000											$('#storeDataInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">Ошибка получения данных. Пожалуйста сообщите разрабочикам!</div></div>');
3001									   }
3002							       },
3003								 beforeSend :  function() {  
3004										   $("#storeInfoButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-check-square-o");
3005										   $("#storeInfoButton").toggleClass('disabled');
3006										   $(".load-bar-disabled").show();													
3007										   $(".load-bar").toggleClass('active');
3008										   
3009								 },
3010								complete: function(response) { 
3011										   $("#storeInfoButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-check-square-o");
3012										   $("#storeInfoButton").toggleClass('disabled');
3013											$(".load-bar-disabled").hide();											
3014											$(".load-bar-under-stripe-disabled").hide();
3015											$(".load-bar").toggleClass('active');
3016										 
3017												
3018								},
3019								error: function(objAJAXRequest, strError) {
3020									       $('#storeDataInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+strError+'</div></div>');
3021								}
3022							});
3023}
3024
3025
3026function  searchNotification() {
3027    if ($( "#searchNotificationButton" ).hasClass("disabled") == true) {
3028		  return false;
3029      }	
3030	  $('#notificationDataInfo').empty();
3031	  
3032	  $("#inputSearchNotification").val($.trim($("#inputSearchNotification").val()));
3033	  $('#inputSearchNotification').removeClass('has-error');  
3034				  
3035	 
3036	   var inputedSearchNotification =  (typeof $("#inputSearchNotification").val() !== "undefined" && $("#inputSearchNotification").val() != null && $("#inputSearchNotification").val() != "" ) ? $("#inputSearchNotification").val() : "";
3037		   if   (inputedSearchNotification.length < 1)   {
3038				  $("#inputStoreInfoUrl").attr("placeholder","Необходимо ввести ссылку на товар на AliExpress.com!");
3039				  $('#inputStoreInfoUrl').addClass('has-error');	
3040				  return false;
3041		   }
3042               
3043		   var ajaxUrl = '/ajax/search-notification.ajax.php?q='+inputedSearchNotification;
3044			 document.title = 'Поиск в реестре нотификаций: '+inputedSearchNotification;
3045			 window.history.pushState('', 'Поиск в реестре нотификаций: '+inputedSearchNotification, '/?page=cryptographic-notifications');
3046	          
3047              $.ajax({
3048                     url:	 ajaxUrl,
3049        	         type:	 'GET',
3050                     dataType:  'json',
3051					 timeout: (60000),
3052         	         success: function(json){  
3053									
3054						              if (json.status == 'ok') {
3055									     var searchResult = "";
3056										 searchResult += "<h3>Результат поиска: "+inputedSearchNotification+"</h3><br>"; 
3057									     $.each(json.data, function(key, value) {
3058										  
3059											searchResult += "<b>Идентификатор:</b> "+value["identificator"]+" ("+value["status"]+")<br><br>"; 
3060											searchResult += "<b>Наименование:</b> "+value["name"]+"<br><br>"; 
3061										    searchResult += "<b>Производитель:</b>"+value["manufacturer"]+"<br><br>"; 
3062										    searchResult += "<b>Дата публикации:</b> "+value["publicationDate"]+" / <b>Срок действия:</b> "+value["validatePeriod"]; 
3063											if (value["cancelationDate"] != "") {
3064											  searchResult += " / <b>Дата анулирования:</b> "+value["cancelationDate"]+"<br>"; 
3065											}
3066											searchResult += "<hr><br>"; 
3067										   
3068										 });
3069										   $('#notificationDataInfo').html(searchResult);
3070												
3071									  }
3072									   else if (json.status == 'error') {									   
3073										  $('#notificationDataInfo').html("<br><br><h4><center>Информация не найдена</center><h4><br><br>");
3074							           }
3075									   else {
3076											$('#storeDataInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">Ошибка получения данных. Пожалуйста сообщите разрабочикам!</div></div>');
3077									   }
3078					},
3079					 beforeSend :  function() {  
3080										   $("#searchNotificationButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-check-square-o");
3081										   $("#searchNotificationButton").toggleClass('disabled');
3082										   $(".load-bar-disabled").show();													
3083										   $(".load-bar").toggleClass('active');
3084										   //console.log("before");
3085					 },
3086					 complete: function(response) { 
3087										   $("#searchNotificationButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-check-square-o");
3088										   $("#searchNotificationButton").toggleClass('disabled');
3089											$(".load-bar-disabled").hide();											
3090											$(".load-bar-under-stripe-disabled").hide();
3091											$(".load-bar").toggleClass('active');
3092											//console.log("complete");
3093												
3094					 },
3095					 error: function(objAJAXRequest, strError) {
3096									       $('#notificationDataInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+strError+'</div></div>');
3097                                          //console.log("error");	 						               
3098					 }
3099			 });
3100 }
3101
3102 
3103 
3104 function guideCate(){ 
3105	$(".g-1").hide(); 
3106	 $.Storage.remove('tour4_current_step');
3107	 $.Storage.remove('tour4_end');
3108	  var trackingNumberFromUrl = $.urlParam('guide');
3109	  if ((typeof trackingNumberFromUrl !== "undefined") && (trackingNumberFromUrl !== null) && (trackingNumberFromUrl !== ""))  {
3110			 $("#inputTrackCode").val(trackingNumberFromUrl);
3111		}
3112		else {
3113			 $("#inputTrackCode").val("LM942926894CN");
3114		} 
3115		tracking();
3116	  
3117	  
3118	  var lastStatusChild =  (sortEventsTrigger == true ) ? "last-child" : "first-child";
3119	  var t = new Tour({
3120		 name: "tour4",
3121		    debug: true,
3122			backdrop: true,
3123			backdropContainer: 'body',
3124			backdropPadding: 0,
3125			orphan: false,
3126            duration: false,
3127            delay: false,
3128			 
3129			smartPlacement: false,
3130            keyboard: true,
3131			debug: true, 
3132			template: '<div class="popover tour"><div class="arrow" style="left: 50%;"></div><h3 class="popover-title"></h3><div class=""><div class="col-lg-10 column"><div class="popover-content"></div></div> <div class="col-lg-2 column text-right"><img src="/img/cat-64.png" class="hidden-xs" data-toggle="tooltip" title="Это кото-гид =)" style="position:relative; right:1px; top: 1px;"></div></div><div class=""><div class="popover-navigation" style="overflow: inherit;"><div class="btn-group"> <button class="btn btn-sm btn-default" data-role="prev">
3132« Назад</button> <button class="btn btn-sm btn-default" data-role="next">Вперед »</button> </div> <button class="btn btn-sm btn-default" data-role="end">Завершить</button> </div></div></div>',
3133			    onShown: function(tour) {
3134				     
3135              },
3136			  steps: [
3137			   {
3138				element: "#trackingForm",
3139				title: "Это форма отслеживания",
3140				content: "При помощи которой Вы сможете отслеживать посылки на нашем сайте",
3141				placement: "bottom",
3142				onNext: function(){
3143					 $("#inputTrackCode").css({'z-index' : '9999'}); 					   
3144				  }
3145			  },
3146			  {
3147				element: "#inputTrackCode",
3148				title: "Это поле для ввода трек-кода",
3149				content: "Введите сюда трек-код полученный у продавца...",
3150				placement: "bottom",
3151				onNext: function(){
3152					 $("#inputTrackCode").css({'z-index' : '1'}); 					   
3153					 $("#trackingButton").css({'z-index' : '9999'}); 					   
3154					 
3155				  }
3156
3157			  },
3158			  {
3159				element: "#trackingButton",
3160				title: "А это, самая главная кнопка",
3161				content: "Нажмите на нее, для того, чтобы отследить трек-код, и получить статусы посылки...",
3162				placement: "bottom",
3163				onNext: function(){
3164					 $("#trackingButton").css({'z-index' : '1'}); 					   
3165				  }
3166			  },			  
3167			  {
3168				element: "#projectedDeliveryPeriodBeforeEvents",
3169				title: "Когда ждать посылку",
3170				content: "В этой строке отображается прогнозируемый период поступления посылки в Ваше почтовое отделение",
3171				placement: "top",
3172				onNext: function(){
3173				  } 
3174				
3175			  },
3176			   {
3177				element: ".projectedDeliveryPeriodAffterEvents",
3178				title: "Когда ждать посылку",
3179				content: "И здесь отображается прогнозируемый период поступления посылки в Ваше почтовое отделение",
3180				placement: "top",
3181				onNext: function(){
3182				  }  
3183				
3184			  },
3185			  
3186			  {
3187				element: "#trackingInfoEvents",
3188				title: "Статусы посылки",
3189				content: "Теперь Вы можете увидеть, что происходит с Вашей посылкой",
3190				placement: "top",
3191				onNext: function(){
3192                   }
3193			  },
3194				
3195			  {  
3196				element: ".trackingInfoRow:"+lastStatusChild,
3197				title: "Статусы посылки",
3198				content: "Особое внимание обратите на последний статус посылки.",
3199				placement: "top",
3200				onNext: function(){
3201				}
3202			  },
3203			  
3204			  {
3205				element: "#history-a",
3206				title: "История отслеживания",
3207				content: "А если Вы зарегистрируетесь и авторизуетесь на нашем сайте, все Ваши трек-коды будут отображаться в блоке \"Мои трек-коды\", и Вы сможете отслеживать свои трек-коды с любого компьютера.<br>P.S.Вы всегда сможете удалить ненужные трек-коды.<br>Вот и всё, как видите, отслеживание - это не сложно ;)",
3208				placement: "left",
3209				onNext: function(){
3210				}
3211			  },
3212			  
3213			  {
3214				element: "#trackingFormShare_",
3215				title: "Как отблагодарить",
3216				content: "Мы будем искренне рады, если Вы поддержите нас кликнув по одной из социальных кнопок и поделитесь нашим сайтом со своими друзьями.<br>Вам не сложно, а нам приятно! ;)",
3217				placement: "top",
3218				onNext: function(){
3219				}
3220			  },
3221			  
3222		  
3223		    ]
3224		}).restart();
3225
3226		 
3227        
3228       $.Storage.remove('tour4_current_step');
3229	   $.Storage.remove('tour4_end');
3230}
3231
3232 function addTransportCompany() { 
3233		 $.get('forms/addTransportCompany.form.php?newTrackCode='+$("#inputTrackCode").val(), function(data) {
3234			 $('body').prepend(data);
3235			 $('#notificationsModal').modal({show:true});
3236				 
3237				 $('#buttonOk').bind('click', function(e) {
3238                    e.preventDefault();
3239					if ($(this).attr('name') == 'buttonOk') {
3240					 var ajaxUrl = '/ajax/addTransportCompany.ajax.php';
3241					 var trackCode = $('#trackCode').val();
3242					 var companyName = $('#companyName').val();
3243					 var companyUrl = $("#companyUrl").val(); 
3244					}
3245					$.ajax({
3246					         url:	 ajaxUrl,
3247					         data : {'login': $.Storage.get('login'), 'trackCode': trackCode, 'companyName': companyName, 'companyUrl': companyUrl},
3248        	                 type:	 'POST', 
3249                             dataType:  'json',
3250         	                 success: function(data){
3251							   if (data) { 
3252                                   if (data.status == 'ok') {
3253										     $('.modal-footer').find('center').html('<div class="text-success">'+data.message+'</div>').delay(1000).fadeIn().delay(100).fadeOut().queue(function(){
3254											      $('#notificationsModal').modal("hide"); 		
3255											  });
3256							       }
3257								  else if (data.status == 'error') {
3258                                       $('.modal-footer').find('center').html('<div class="text-danger">'+data.message+'</div>').fadeIn();  
3259							       }
3260        	                    }
3261							},
3262                            beforeSend :  function() {  
3263							     $('.modal-footer').find('center').html('<div class="alert-info"><i class="fa fa-spinner fa-spin"></i> Отправка данных...</div>').fadeIn();  
3264        	                },
3265			                complete: function(response) { 
3266                              
3267								  
3268				            },
3269                            error: function() {
3270                            
3271                            }	   
3272                         });
3273				 
3274				 });
3275				
3276				 $('#buttonCancel').bind('click', function(e) {
3277				     e.preventDefault();
3278				    $('.modal.in').modal('hide');
3279				 });
3280				 
3281				  $('#notificationsModal').on("hidden.bs.modal", function(){
3282					$('#notificationsModal').fadeOut().hide().remove();
3283                 });  
3284                     		
3285            });
3286 }
3287 
3288 function addReview(){
3289	 	 $.get('https://track24.ru/forms/addReview.form.php', function(data) {
3290		     $('#reviewModal').hide().remove();
3291			 $('body').prepend(data);
3292			 $('#reviewModal').modal({show:true});
3293				if ((typeof $.Storage.get('social_name') !== "undefined") && ($.Storage.get('social_name') !== null) && ($.Storage.get('social_name') !== ""))  {
3294				    $("#addReviewName").attr("value", $.Storage.get("social_name"));
3295			    }
3296				 
3297				 if (Math.floor($.urlParam('cat')) > 0) {
3298					 $('#addReviewCat').val($.urlParam('cat')); 
3299				 }
3300				 
3301				
3302				 $('#buttonOk').bind('click', function(e) {
3303                    e.preventDefault();
3304					 if ($("#buttonOk").hasClass("disabled") == true) {
3305				         return false;
3306				      }
3307					 else {
3308					   $("#buttonOk").toggleClass('disabled'); 
3309					 }
3310					 var addReviewLogin =  $.Storage.get('login'); 
3311					 var addReviewCat    =   Math.floor($('#addReviewCat').val()); 
3312					 var addReviewName   =   $('#addReviewName').val();
3313					 var addReviewImgUrl =   $('#addReviewImgUrl').val();
3314					 var addReviewText   =   $("#addReviewText").val(); 
3315					 var addReviewGoodsUrl = $("#addReviewGoodsUrl").val(); 
3316					  
3317					  $.ajax({
3318					         url:	 '/ajax/addReview.ajax.php',
3319					         data : {'addReviewLogin': addReviewLogin, 'addReviewCat': addReviewCat, 'addReviewName': addReviewName, 'addReviewImgUrl': addReviewImgUrl, 'addReviewText': addReviewText, 'addReviewGoodsUrl': addReviewGoodsUrl},
3320        	                 type:	 'POST', 
3321                             dataType:  'json',
3322         	                 success: function(data){
3323							   if (data) { 
3324                                   if (data.status == 'ok') {
3325                                      $('.modal-footer').find('center').html('<div class="text-success">'+data.message+'</div>').delay(1000).fadeIn().delay(100).fadeOut().queue(function(){
3326										   $('.modal.in').modal('hide');
3327									  });
3328							       }
3329								  else if (data.status == 'error') {
3330                                       $('.modal-footer').find('center').html('<div class="text-danger">'+data.message+'</div>').fadeIn(); 
3331									    $("#buttonOk").toggleClass('disabled'); 
3332							       }
3333								  else {
3334								         $('.modal-footer').find('center').html('<div class="text-danger">Ой, нам жаль, но произошла ошибка...</div>').fadeIn();  
3335										  $("#buttonOk").toggleClass('disabled'); 
3336								  }
3337        	                    }
3338								else {
3339								  $('.modal-footer').find('center').html('<div class="text-danger">Ой, нам жаль, но произошла ошибка...</div>').fadeIn();  
3340								   $("#buttonOk").toggleClass('disabled'); 
3341								}
3342							},
3343                            beforeSend :  function() {  
3344							     $('.modal-footer').find('center').html('<div class="alert-info"><i class="fa fa-spinner fa-spin"></i> Отправка данных...</div>').fadeIn();  
3345        	                },
3346			                complete: function(response) { 
3347                              
3348								  
3349				            },
3350                            error: function() {
3351                              $('.modal-footer').find('center').html('<div class="text-danger">Ой, нам жаль, но произошла ошибка...</div>').fadeIn();  
3352                            }	   
3353                         });
3354				     
3355				 });
3356				
3357				 $('#buttonCancel').bind('click', function(e) {
3358				      e.preventDefault();
3359				     $('.modal.in').modal('hide');
3360				 });
3361				 
3362				  $('#notificationsModal').on("hidden.bs.modal", function(){
3363					 $('#reviewModal').fadeOut().hide().remove();
3364                 });  
3365               
3366			    
3367			   
3368					   $("#imgFile").change(function() { 
3369					   $("#uploadingImgButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-picture-o");
3370					   $("#uploadingImgForm").submit();
3371							 $("#uploadingImgFrame").on('load', function() {
3372								 $("#uploadingImgButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-picture-o");
3373									 var response = $("#uploadingImgFrame").contents().find("body");
3374									  var json = $.parseJSON($.trim(response[0]['textContent']));
3375									   $('#imgFile').val("");
3376									   if (json) { 
3377											if (json.status == 'ok') {
3378												 if ((typeof json.imgUrl !== "undefined") && (json.imgUrl !== null) && (json.imgUrl !== ""))  {
3379													 $("#addReviewImgUrl").attr("value", json.imgUrl);
3380													 $("#uploadingImgButton").hide();
3381													 $("#addReviewImgPreview").html('<img src="'+json.imgUrl+'" width="200px">'); 
3382												  }
3383											}
3384											else if (json.status == 'error') {
3385											   $("#addReviewImgPreview").html('<span class="text-danger">'+json.message+'</span>'); 
3386											}
3387									   }
3388							});
3389						});      
3390			  
3391				 $("#uploadingImgButton").click(function() { 
3392					 $("#imgFile").click();      
3393				 });
3394			
3395			});
3396}
3397
3398 function showDeliveredStatChart(prefix, postfix) {
3399	    var currentPrefix = prefix.substr(0, 2).toUpperCase();
3400		var currentPostfix = postfix.substr(0, 2).toUpperCase();
3401		
3402	    var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog animated rubberBand" style="min-width:700px;">
3402<div id="deliveredChartsModal"><div class="delivered-charts-header"><h4 class="modal-title">Статистика доставок</h4></div><div class="delivered-charts-body"></div><hr><div class="delivered-charts-footer" style="padding-top:10px;"><center><small>График сформирован на основе <a href="https://track24.ru/?page=delivered-stat#'+currentPostfix+'" target="_blank" class="dotted">статистики доставки</a> международных почтовых отправлений<small></center></div></div><div style="position: absolute; right: 20px; bottom: 18px;"><img src="https://track24.ru/img/logo.38x38.png" width="28px"></div></div>';    
3403				  $.magnificPopup.open({
3404						 items: { src: dialogHtml},
3405						 type: 'inline',
3406						 fixedBgPos: false,
3407					     fixedContentPos: true,
3408					     overflowY: 'scroll',
3409						 closeBtnInside: true,
3410						 preloader: true,          
3411                         midClick: false,
3412						 removalDelay: 400,
3413						 mainClass: 'my-mfp-zoom-in',
3414						 alignTop:false,
3415						 showCloseBtn: true,
3416						 closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
3417						    callbacks: {
3418							    open: function() { 
3419									  $('.navbar-fixed-top').css('overflow-y', 'scroll');
3420								},
3421								close: function() {
3422									  $('.navbar-fixed-top').css('overflow-y', 'visible');
3423								}
3424						}
3425					  });
3426					
3427						$('#deliveredChartsModal > .delivered-charts-header > h4').text('');
3428						  $('.delivered-charts-body').html('<center>Сбор данных, минуточку...</center>');
3429								 $.ajax({
3430									  url:   '/ajax/delivered.stat.by.days.ajax.php',
3431									   data : {'prefix': currentPrefix, 'postfix': currentPostfix},
3432									   type:	'POST', 
3433									   dataType:  'json',
3434										   success: function(json){
3435											$('.delivered-charts-body').html('<div class="col-md-12 hidden" id="deliveredCharts"></div>');	
3436                                            $("#deliveredCharts").append('<div id="chartContainer" style="width: 650px; height: 400px; margin: 0 auto"></div>');
3437		                                    $("#deliveredCharts").removeClass('hidden');
3438											   $('#chartContainer').highcharts({
3439													         	chart: {
3440																	type: 'spline'
3441																},
3442																credits: {
3443																   enabled: false
3444															    },
3445																title: {
3446																	text: 'Сроки доставки почтовых отправлений<br> за последние 2 месяца'
3447																},
3448																subtitle: {
3449																	text: currentPrefix+' ######### '+currentPostfix
3450																},
3451																xAxis: {
3452																	type: 'datetime',
3453																	dateTimeLabelFormats: {
3454																		 day: '%e'
3455																	},
3456																	labels: {
3457																		overflow: 'justify'
3458																	}
3459																},
3460																 legend: {
3461																	layout: 'vertical',
3462																	align: 'center',
3463																	verticalAlign: 'bottom',
3464																	borderWidth: 0
3465																},
3466																yAxis: {
3467																   labels: {
3468																		enabled: true
3469																	},
3470																	title: {
3471																		text: "Дней в пути"
3472																	} ,
3473																	gridLineWidth: 1,
3474																	alternateGridColor: 2
3475																	
3476																},
3477																series: [
3478																    {
3479																		name: 'Минимальное время доставки (дней)',
3480																		color: '#22ffc2',
3481																		data: json.data['minDeliveryByDate'],
3482 																		pointStart: Date.UTC(showDeliveredStatChartY, showDeliveredStatChartN, 1),
3483																		pointInterval: 24 * 3600 * 1000 
3484																	},
3485																	{
3486																		name: 'Среднее время доставки (дней)',
3487																		color: '#425bbb',
3488																		data: json.data['averageDeliveryByDate'],
3489																		pointStart: Date.UTC(showDeliveredStatChartY, showDeliveredStatChartN, 1),
3490 																		pointInterval: 24 * 3600 * 1000
3491																	},
3492																	{
3493																		name: 'Максимальное время доставки (дней)',
3494																		color: '#FF5722',
3495																		data: json.data['maxDeliveryByDate'],
3496																		pointStart: Date.UTC(showDeliveredStatChartY, showDeliveredStatChartN, 1),
3497 																		pointInterval: 24 * 3600 * 1000
3498																	},
3499																	] 
3500															});											
3501											
3502											
3503										} 	   
3504			});	
3505	}
3506
3507  
3508  
3509 function addthisInit() {	 
3510         if ((device.desktop()) && (findBootstrapEnvironment() === "lg") && ($( window ).width() >= 1275) ) {
3511			  $.getScript('https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5966ca4a1d596970').done(function( script, textStatus ) {			
3512		    });
3513		} 
3514		else if ((device.desktop()) && (findBootstrapEnvironment() === "md") && ($( window ).width() >= 1050) ) {
3515		     $.getScript('https://s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5966ca4a1d596970').done(function( script, textStatus ) {			
3516		   });
3517		}
3518 }
3519  function loadBarOnScrollInit() { 
3520     if ((findBootstrapEnvironment() === "lg") || (findBootstrapEnvironment() === "md") || (findBootstrapEnvironment() === "sm")) {  
3521	       		$(window).scroll(function() {
3522				  if (($(".load-bar").visible() === false) && ($(".load-bar").hasClass("active") == true)) {
3523					  $(".load-bar-under-stripe-disabled").show();
3524				  }
3525				  else {
3526					  $(".load-bar-under-stripe-disabled").hide();
3527				  }
3528			});
3529	  }
3530  }
3531 function cookieconsentInit() {
3532    window.addEventListener("load", function(){
3533	window.cookieconsent.initialise({
3534	  "palette": {
3535		"popup": {
3536		  "background": "#edeff5",
3537		  "text": "#838391"
3538		},
3539		"button": {
3540		  "background": "transparent",
3541		  "text": "#4b81e8",
3542		  "border": "#4b81e8"
3543		}
3544	  },
3545	  "content": {
3546		"href": "https://track24.ru/?page=privacy"
3547	  }
3548	})
3549
3550	$('.cc-window').bind('click', function() {
3551	 	$('.cc-window').hide();
3552				setTimeout( function() {
3553					   $('.cc-window').fadeIn(1800);
3554				 }, 3000);								
3555		});	
3556
3557	}); 
3558 }
3559  
3560  function showResolutionInfoWindow() { 
3561	  var text_1 = "Масштабированное разрешение экрана: "+screen.width+"px X "+screen.height+"px";
3562	  var text_2 = "Реальное разрешение экрана: "+window.screen.width * window.devicePixelRatio+"px X "+window.screen.height * window.devicePixelRatio+"px";
3563	  var text_3 = "Ширина и высота браузера: "+document.body.clientWidth+"px X "+document.body.clientHeight+"px";
3564	  var text_4 = "Ширина и высота видимой области браузера: "+$(window).width()+"px X "+$(window).height()+"px";
3565	  var text_5 = "Масштаб: "+window.devicePixelRatio; 
3566	  //var text_6 = "Тип : "+device; 
3567	  
3568	  if (device.desktop()) {
3569		 var text_6 = "Тип: компуктер";  
3570	  }
3571	  else if (device.tablet()) {
3572		  var text_6 = "Тип: планшет";  
3573	  }
3574	  else if (device.mobile()) {
3575		  var text_6 = "Тип: телефон";  
3576	  }
3577	  else {
3578		  var text_6 = "Тип: непонятно";  
3579	  }
3580	  
3581	  var resolutionPopupContent = '<div class="modal animated zoomInDown" id="resolutionModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">\
3582			  <div class="modal-dialog"> \
3583				<div class="modal-content"> \
3584				  <div class="modal-header"> \
3585					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> \
3586					<h4 class="modal-title" id="myModalLabel">Характеристики экрана</h4> \
3587				  </div> \
3588				  <div class="resolutionModal-body modal-body">'+text_1+"<br>"+text_2+"<br>"+text_3+"<br>"+text_4+"<br>"+text_5+"<br>"+text_6+'</div> \
3589				  <div class="modal-footer"> \
3590					 <button type="button" class="btn btn-default" data-dismiss="modal">Закрыть</button> \
3591				  </div> \
3592				</div> \
3593			  </div> \
3594			</div>'; 
3595		  
3596		  $('body').append(resolutionPopupContent);
3597		  $('#resolutionModal').modal('show');
3598		  
3599		
3600  }
3601  
3602  
3603  function feedBackInit() {
3604				   /*
3605				   if  (device.desktop())   {
3606						var  urlhash = window.location.hash,  
3607						 txthash = urlhash.replace("#", "");
3608						 alert(txthash); 
3609						 if (txthash == "feedback") {
3610							 setTimeout(function() { 
3611								   $('html, body').animate({
3612									 scrollTop: $("#feedBackContainer").offset().top - 100
3613								   }, 1000); 
3614							 }, 1000);  
3615							 
3616						 }
3617					}
3618					*/ 
3619					$('#feedBack').show(); 
3620					//alert();
3621					var fbi = 1;
3622					 var feedbackHtmlContent = "";
3623					 $.each(feedBackArray, function(key, value) {
3624							if ((((fbi+1) % 2) == 0) || (fbi == 1)) { 
3625								 feedbackHtmlContent += '<div class="item slide">';
3626							}					
3627							
3628							 if (value[1].indexOf('@') === -1) {
3629								 var uname = value[1];
3630								 var uavatar = 'https://track24.ru/img/feedback-avatars/'+value[3];				         
3631							 }
3632							 else {
3633								 var uname = value[1].split("@")[0]; 
3634								 var uavatar = 'https://track24.ru/img/feedback-avatars/default.jpg';
3635							 }
3636							
3637							
3638							if (uname.length > 19) { 
3639							  uname = uname.slice(0, 19);
3640							}
3641							 
3642							
3643							feedbackHtmlContent +=  '<div class="col-sm-6">\
3644								<div class="ui-item">\
3645									<div class="ui-details">\
3646										<div class="ui-text">'+value[2]+'</div>\
3647										<div class="ui-user clearfix">\
3648										<div class="feedBack-user-avatar" style="background: url(https://track24.ru/img/feedback-avatars/'+value[3]+') center no-repeat; background-size: cover;"></div>\
3649										<div class="feedBack-user-name">'+uname+'<span>'+value[0]+'</span></div>\
3650									</div>\
3651										<div class="feedBack-review-stars"><div class="review-stars__empty" style="padding-left:'+value[4]+'%"></div></div>\
3652									</div>\
3653								</div>\
3654							</div>';
3655						 
3656						 if (((fbi) % 2) == 0) { 
3657							feedbackHtmlContent += '</div>';
3658						 }
3659						 fbi++;
3660					 });
3661					 $('#slides-container').append(feedbackHtmlContent); 
3662					 
3663					 dxSimpleSlider('#slider', true, 15000); 
3664					 //dxSimpleSlider('#slider', false, 15000);
3665					 
3666					$('.myTooltip').tooltip();
3667					
3668					 $('.feedBackForm').hide();
3669					 $('#addFeedback').bind('click', function() {
3670						  if ((typeof $.Storage.get('login') === "undefined") || ($.Storage.get('login') === null) || ($.Storage.get('login') === "") || (typeof $.Storage.get('authKey') === "undefined") || ($.Storage.get('authKey') === null) || ($.Storage.get('authKey') === "")) {
3671							$('#navSignInButton').click();
3672							 return false;
3673						  }
3674							 $('#addFeedback').hide(); 
3675							  
3676							   var sn = $.Storage.get('login').split("@")[0]; 
3677							   var sa = "/img/avatars/default.jpg"; 
3678								 
3679							 
3680							 
3681							 
3682							  if ((typeof $.Storage.get('social_name') !== "undefined") && ($.Storage.get('social_name') !== null) && ($.Storage.get('social_name') !== ""))  {
3683									 sn = $.Storage.get('social_name');
3684							  }
3685							  
3686							  if ((typeof $.Storage.get('avatar') !== "undefined") && ($.Storage.get('avatar') !== null) && ($.Storage.get('avatar') !== ""))  {
3687									 sa = $.Storage.get('avatar');
3688							  }
3689							  
3690							  $("#feedBackFormSocialName").text(sn);					 
3691							 
3692							  $("#feedBackFormAvatar").css("backgroundImage", "url("+sa+")");
3693							  $("#feedBackFormAvatar").attr("title", sn); 
3694							  $('.feedBackFormAjaxInfo').text("");
3695							    
3696								
3697							 
3698							   animateCSS(".feedBack", "flipOutX", function() { //flipOutX
3699							        
3700									$('.feedBack').hide();
3701									$('.feedBackForm').show();
3702									  animateCSS(".feedBackForm", "flipInX", function() {  
3703									 $( "#addFeedbackText" ).focus();
3704									 
3705								  });
3706							   });
3707							   
3708					 });
3709					  $('#feedBackFormClose').bind('click', function() {
3710							animateCSS(".feedBackForm", "flipOutX", function() {
3711								    
3712									$('.feedBackForm').hide();
3713									$('.feedBack').show();
3714									  animateCSS(".feedBack", "flipInX", function() {  
3715									    $('#addFeedback').show();    
3716									 });
3717							   });
3718						   
3719						   
3720					 });
3721					 
3722						
3723							 
3724					  $('#feedbackSubmitButton').bind('click', function(e) { 
3725							 e.preventDefault();
3726							  
3727							 var addFeedbackButton = this;
3728							 var addFeedbackLogin =  $.Storage.get('login');
3729							 var addFeedbackAuthKey =  $.Storage.get('authKey');
3730							 var addFeedbackFingerprint =  $.Storage.get("fingerprint");
3731							 var addFeedbackText = $("#addFeedbackText").val(); 
3732							 var addFeedBackRaiting = $(".star-rating__input:input:checked").attr("value");
3733							 
3734							 if (addFeedbackText.length < 3) { 
3735								$('.feedBackFormAjaxInfo').text("Необходимо написать отзыв!");
3736								return false;
3737							 }
3738							 
3739							 if ((typeof addFeedBackRaiting === "undefined") || (addFeedBackRaiting === null) || (addFeedBackRaiting === ""))  {
3740								  $('.feedBackFormAjaxInfo').text("Поставьте оценку при помощи звездочек!");  
3741									  $.each($('.star-rating__input'), function(key, value) {
3742											var c = key+1;
3743											setTimeout(function() { 
3744												$($('#star-rating-'+c)).attr('checked', true);  
3745											}, key * 250); 
3746									 });
3747									 
3748									  
3749								  return false;
3750							  }
3751							 
3752							 
3753							  if ($(this).hasClass("disabled") == true) {
3754								 return false;
3755							  } 
3756							  
3757							 
3758							  $.ajax({
3759									 url:	 '/ajax/addFeedback.ajax.php',
3760									 data : {'addFeedbackLogin': addFeedbackLogin, 'addFeedbackAuthKey': addFeedbackAuthKey, 'addFeedbackFingerprint': addFeedbackFingerprint, 'addFeedbackText': addFeedbackText, 'addFeedBackRaiting': addFeedBackRaiting},
3761									 type:	 'POST', 
3762									 dataType:  'json',
3763									 success: function(data){
3764									   if (data) { 
3765										   if (data.status == 'ok') {
3766											  
3767											   $('#feedbackSubmitButton').toggleClass('disabled'); 
3768											   $("#addFeedbackText").val("");
3769											   $('.feedBackFormAjaxInfo').html('<div class="text-info">Отзыв получен, спасибо!</div>');
3770												
3771												  setTimeout(function() {
3772														animateCSS(".feedBackForm", "flipOutX", function() {
3773														 $('.feedBackForm').hide();
3774														 $('.feedBack').show();
3775														  animateCSS(".feedBack", "flipInX", function() {  
3776														 
3777														 });
3778													  });		 
3779												   }, 1500); 
3780												  
3781											   
3782											   return true; 
3783										   }
3784										  else if (data.status == 'error') { 
3785												  $('.feedBackFormAjaxInfo').text(data.message); 
3786												  return false; 
3787										   }
3788										  else {
3789											  return false;
3790										  }
3791										}
3792										else {
3793											return false;
3794										}
3795									},
3796									beforeSend :  function() {  
3797										  $(addFeedbackButton).toggleClass('disabled'); 
3798										  $('.feedBackFormAjaxInfo').html('<div class="text-info"><i class="fa fa-spinner fa-spin"></i></div>');  
3799									},
3800									complete: function(response) {  
3801										$(addFeedbackButton).toggleClass('disabled');   
3802									},
3803									error: function() {
3804										$(addFeedbackButton).toggleClass('disabled'); 
3805									}	   
3806								 });
3807							
3808					 });
3809		    }
3810  
3811  /* fuckAdBlock*/
3812 function adBlockDetectett() {
3813		//$(".comments").toggleClass('disabled');
3814		$(".comments").css({"pointer-events" : "none" , "opacity" :  "0.7"}).attr("tabindex" , "-1");
3815		 //pointer-events: none;
3816		//$(".comments").html('<center><i class="fa fa-exclamation-triangle text-danger"></i> Please disable adblock (adguard) for activate comments ;))</center>'); 
3817		$(".hc__form").html('<div id="adblock-detected-message"><center><i class="fa fa-exclamation-triangle text-danger"></i> Please disable adblock (adguard) for activate comments ;))</center></div>');
3818		
3819		
3820		var currentJsDate = new Date()
3821		var day = currentJsDate.getDate()
3822		var month = currentJsDate.getMonth() + 1
3823		var year = currentJsDate.getFullYear()
3824		var lastAdblockCheckDate = $.Storage.get("lastAdblockCheckDate");
3825		var currentDate = day + "." + month + "." + year;
3826
3827		if ((typeof $.Storage.get("lastAdblockCheckDate") === "undefined") || ($.Storage.get("lastAdblockCheckDate") === null) || ($.Storage.get("lastAdblockCheckDate") === "")) {
3828			$.Storage.set('lastAdblockCheckDate', "-");
3829		}
3830
3831		if (currentDate != lastAdblockCheckDate) {
3832			$.ajax({
3833				url: '/ajax/adblock.ajax.php',
3834				data: {},
3835				type: 'POST',
3836				dataType: 'json',
3837				success: function(data) {
3838					$.Storage.set('lastAdblockCheckDate', currentDate);
3839				}
3840			});
3841		}
3842		 //console.log("adBlockDetectett");
3843	}
3844
3845	function adBlockNotDetecteddd() {
3846		setTimeout(function() {
3847			console.log($('#'+adblock_prefix+'-1').children().length);
3848			if ($('#'+adblock_prefix+'-1').children().length == 0) {
3849				 console.log("=)");
3850				 adBlockDetectett();
3851			}
3852		}, 1000);
3853	}
3854	
3855	function checkAdBlockkk() {  
3856	 if (typeof fuckAdBlock === 'undefined') {
3857			 console.log("adBlockDetectett"); 
3858			 adBlockDetectett();
3859		} else {
3860			fuckAdBlock.setOption({
3861				debug: false,
3862				loopMaxNumber: 5,
3863				loopCheckTime: 300,
3864				baitClass: ''+adblock_prefix+''
3865			}); 
3866			fuckAdBlock.onDetected(adBlockDetectett).onNotDetected(adBlockNotDetecteddd);
3867			fuckAdBlock.onDetected(console.log("checkAdBlockkk adBlockDetectett")).onNotDetected(console.log("checkAdBlockkk adBlockNotDetecteddd"));
3868		 }
3869	 }	   
3870
3871	function checkAgain() {
3872		setTimeout(function() {
3873			if (typeof fuckAdBlock === 'undefined') {
3874				adBlockDetectett();
3875			} else {
3876				fuckAdBlock.onDetected(adBlockDetectett).onNotDetected(adBlockNotDetecteddd);
3877				fuckAdBlock.onDetected(console.log("checkAgain adBlockDetectett")).onNotDetected(console.log("checkAgain adBlockNotDetecteddd")); 
3878				fuckAdBlock.check();
3879			}
3880		}, 500);
3881	} 
3882    /* fuckAdBlock*/
3883
3884
3885
3886function yaShareInit(elementId, title, description, url, imgUrl) {     
3887     $(document).ready(function() { 
3888	   var displayServices = (device.mobile() !== true) ? 'vkontakte,facebook,twitter,odnoklassniki,moimir,viber,whatsapp,telegram' :  'vkontakte,facebook,odnoklassniki,viber,whatsapp,telegram';
3889		 setTimeout( function() {
3890					Ya.share2(elementId, { 
3891					content: {
3892						url: url,
3893						title: title,
3894						description: description,
3895						image: imgUrl 
3896					},
3897					 theme: {
3898								services: displayServices,
3899								lang: 'ru',
3900								limit: 8,
3901								size: 'm',
3902								bare: false
3903							},
3904							 hooks: {
3905								onready: function () {
3906									 //alert('onready');
3907								}, 
3908								onshare: function (name) {
3909									//alert('onshare' + name);
3910								}
3911							}
3912					}); 
3913		  }, 100);  
3914		return true;
3915	  });
3916	}
3917	
3918/* core */
3919function tracking() {
3920	   //return;
3921	  //alert(clientCountryCode);
3922                 if ($( "#trackingButton" ).hasClass("disabled") == true) { 
3923				      return false;
3924				 }
3925				  $('#trackingInfo').empty(); 
3926 				  $("#inputTrackCode").val($("#inputTrackCode").val().toUpperCase()); 
3927				  $('#inputTrackCode').removeClass('has-error');  
3928				   
3929				 var inputedTrackCode = $("#inputTrackCode").val();
3930				     inputedTrackCode = inputedTrackCode.replace(/[^А-Яа-яA-Za-z0-9\-\.\/\(\)]/gi, '');
3931					 inputedTrackCode = $.trim(inputedTrackCode);
3932                					 
3933					if  (inputedTrackCode.length < 1) {
3934						  $("#inputTrackCode").attr("placeholder","Необходимо ввести трек-код!");
3935						  $('#inputTrackCode').addClass('has-error');	
3936						  return false;
3937					}
3938				   
3939				     
3940					
3941				 var lng = $.Storage.get("lng"); 
3942				 var lastPoint = null;
3943				 
3944					if ((inputedTrackCode.length >= 5) && (inputedTrackCode.length <= 32)) {
3945						$.Storage.set('lastPostTrackingCode', inputedTrackCode);
3946		                  document.title = 'Отслеживание почтового отправления: '+inputedTrackCode;
3947 						  if ((typeof selectedService === "undefined") || (selectedService === null) || (selectedService === "") )  {
3948							    
3949								var tUrl = document.location.toString();
3950							    
3951								if (!tUrl.match('#')) {
3952									if (tUrl.indexOf('https://track24.ru/tracking/') === -1) {
3953								       window.history.pushState('', 'Отслеживание почтового отправления: '+inputedTrackCode, '/?code='+inputedTrackCode);
3954								    }
3955									else {
3956										window.history.pushState('', 'Отслеживание почтового отправления: '+inputedTrackCode, 'https://track24.ru/tracking/?code='+inputedTrackCode);
3957									}
3958									
3959									
3960								}
3961								else { 
3962								    if (tUrl.indexOf('https://track24.ru/tracking/') === -1) {
3963								       window.history.pushState('', 'Отслеживание почтового отправления: '+inputedTrackCode+'#'+tUrl.split('#')[1], '/?code='+inputedTrackCode+'#'+tUrl.split('#')[1]);
3964								    }
3965									else {
3966										window.history.pushState('', 'Отслеживание почтового отправления: '+inputedTrackCode+'#'+tUrl.split('#')[1], 'https://track24.ru/tracking/?code='+inputedTrackCode+'#'+tUrl.split('#')[1]); 
3967									}
3968									
3969								}
3970                          } 
3971						  else {
3972						    window.history.pushState('', 'Отслеживание почтового отправления: '+inputedTrackCode, '/service/'+selectedService.toLowerCase()+'/tracking/'+inputedTrackCode);
3973						  }
3974						
3975						
3976						if ((device.desktop()) || (device.tablet())) {
3977						    lastTrackCodesBuilder(inputedTrackCode);	 						 
3978						}
3979						 
3980						if (shiftKeyPressed === true) {  
3981						    $.ajax({
3982								    url:   '/ajax/upTrackCode.ajax.php',
3983									data : {'code' : inputedTrackCode},
3984									type:	 'GET',
3985                                    dataType:  'json', 
3986									async: false,
3987									success: function(data){ 
3988									} 	   
3989							});
3990						}	
3991						shiftKeyPressed = false;
3992						  
3993                        xhrTracking =  $.ajax({
3994                            
3995							url  : trackingUrlCache,
3996							crossDomain: true,
3997							data : {'code' : inputedTrackCode, 'selectedService':selectedService, 'lng':lng, 'sort':sortEventsTrigger, 'grouped':groupEventsByServiceTrigger, 'type': 'cache', 'key':trackingKey, 'clientIp':clientIp, 'uuid':uuid, 'fingerprint': $.Storage.get("fingerprint")}, 
3998        	                type :	 'POST',
3999                            dataType :  'json',
4000							 
4001							timeout : (trackingTimeOut),
4002							   success: function(json){  
4003							      if (json) { 
4004								        
4005										try { 											 
4006										   var _0x6a0a=["\x63\x74","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","","\x65\x6E\x63","\x73\x74\x72\x69\x6E\x67\x69\x66\x79", cp, "\x64\x65\x63\x72\x79\x70\x74","\x41\x45\x53","\x70\x61\x72\x73\x65"];if( typeof json[_0x6a0a[0]]!== _0x6a0a[1]&& json[_0x6a0a[0]]!== null&& json[_0x6a0a[0]]!== _0x6a0a[2]){var json=JSON[_0x6a0a[8]](CryptoJS[_0x6a0a[7]][_0x6a0a[6]](JSON[_0x6a0a[4]](json),_0x6a0a[5],{format:CryptoJSAesJson}).toString(CryptoJS[_0x6a0a[3]].Utf8))}
4007										 } 
4008										catch(e) {
4009											 endTrackingProgress();											 
4010											 $(".progress").remove();
4011											 $(".progressBarText").empty();
4012											 trackingErrorLoggerFunction([clientIp, clientCountryCode, inputedTrackCode, "catch CryptoJSAesJson"]);
4013											 console.log('Error: ' + e.name + ":" + e.message + "\n" + e.stack);  
4014										 }
4015									  
4016									   
4017										if (json.status == 'ok') {
4018
4019											if (json && json.challenge && json.challenge === true) {
4020												  //clearInterval(getTrackingDataInterval);	 
4021												   $("#turnstile-container").show();
4022														loadTurnstileScript(function () {
4023															turnstile.render('#turnstile-container', {
4024																sitekey: '0x4AAAAAAA9kACzU3nI8h1V0',
4025																size: 'flexible',
4026																theme: 'light',
4027																callback: function (cf_turnstile_response) {
4028																	verifyCaptcha(cf_turnstile_response);  
4029																}
4030															});
4031														});
4032												return false;
4033											}
4034
4035											
4036										if (json && json.data && json.data.events && json.data.events.length > 0) {	
4037											trackingBuilder(inputedTrackCode, json);									
4038										}
4039										else {
4040											GrowlNotification.notify({title:"Error",description:"Ooops... Item is not found at this moment, If necessary, please verify with the package sender and check back later.",type:"error",closeTimeout:5000,showProgress: true});
4041										} 
4042										 
4043										 updateElementInHistory(inputedTrackCode, json.data.lastPoint); 
4044										 reRenderAds();
4045										
4046										
4047										 if (device.desktop()) {		
4048											 if ($('#trackingAvailableServices').length > 0) {
4049												 serviceInfoBuilder(inputedTrackCode, json); 
4050											 }
4051											  upuValidateInfo(inputedTrackCode, json); 											   
4052										  }
4053										
4054										
4055										
4056										   //console.log(json['data']['deliveredDaysAgo']);										  
4057										  //if  (json['data']['trackUpdateDiffMinutes'] >= 240)  {
4058										  if  ((json['data']['trackUpdateDiffMinutes'] >= 240) && ((typeof json['data']['deliveredDaysAgo'] === "undefined") || (json['data']['deliveredDaysAgo'] === null) || (json['data']['deliveredDaysAgo'] === "") || (json['data']['deliveredDaysAgo'] <= maxDeliveredDaysAgoForTracking))) {
4059											      var progress =  '';
4060												      progress += '<span style="text-align: center; width: 100%;  position: absolute; line-height: 40px;" class="progressBarText"><b>Обновление информации...</b></span>';
4061												      progress += '<div class="progress progress-striped active" style="border-radius: 0em;">';
4062												      progress += '<div aria-valuemax="100" aria-valuemin="0" aria-valuenow="100" class="progress-bar progress-bar-info" role="progressbar" style="color: #000000; text-align:center; white-space:nowrap; padding-top:10px; font-size: 16px; width:100%;"></div>';
4063												      progress += '</div>';
4064												      
4065												$(".progress-striped").parent().empty().html(progress); 
4066												
4067											    xhrTracking = $.ajax({
4068													 
4069													url  : trackingUrl,
4070													crossDomain: true,
4071													data : {'code' : inputedTrackCode, 'selectedService':selectedService, 'lng':lng, 'sort':sortEventsTrigger, 'grouped':groupEventsByServiceTrigger, 'type': 'update', 'key':trackingKey, 'clientIp':clientIp, 'uuid':uuid, 'fingerprint': $.Storage.get("fingerprint")}, 
4072													type :	 'POST',
4073													 
4074													dataType :  trackingDataType,
4075													 
4076                                                      timeout : (trackingTimeOut),
4077													   success: function(json){  
4078														   if (json) {
4079															    
4080																
4081																try { 											 
4082																   var _0x6a0a=["\x63\x74","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","","\x65\x6E\x63","\x73\x74\x72\x69\x6E\x67\x69\x66\x79", cp, "\x64\x65\x63\x72\x79\x70\x74","\x41\x45\x53","\x70\x61\x72\x73\x65"];if( typeof json[_0x6a0a[0]]!== _0x6a0a[1]&& json[_0x6a0a[0]]!== null&& json[_0x6a0a[0]]!== _0x6a0a[2]){var json=JSON[_0x6a0a[8]](CryptoJS[_0x6a0a[7]][_0x6a0a[6]](JSON[_0x6a0a[4]](json),_0x6a0a[5],{format:CryptoJSAesJson}).toString(CryptoJS[_0x6a0a[3]].Utf8))}
4083																 } 
4084																catch(e) {
4085																	 endTrackingProgress();
4086																	 $(".progress").remove();
4087																	 $(".progressBarText").empty();
4088																	 trackingErrorLoggerFunction([clientIp, clientCountryCode, inputedTrackCode, "catch CryptoJSAesJson"]);
4089																	 console.log('Error: ' + e.name + ":" + e.message + "\n" + e.stack);  																	 
4090																 }
4091																
4092																if (json.status == 'ok') { 
4093																	$('#trackingInfo').empty();
4094																	trackingBuilder(inputedTrackCode, json);
4095																	updateElementInHistory(inputedTrackCode, json.data.lastPoint);
4096																	reRenderAds();
4097																}
4098																else {
4099																	  $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4100																	  $("#trackingButton").toggleClass('disabled');
4101																	  $(".load-bar-disabled").hide();
4102																	  $(".load-bar-under-stripe-disabled").hide();
4103																	  $(".load-bar").toggleClass('active');
4104																	  
4105																	  if ((json.status == 'error') && (typeof json.message !== "undefined") && (json.message !== null) && (json.message !== ""))  {
4106																		 $('#trackingInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+json.message+'</div></div>');
4107																	  }
4108																}
4109																
4110																
4111															}
4112															else {
4113																    console.log("Error: !json");
4114															        setTimeout( function() {
4115																		location.reload();
4116																    }, 5000); 
4117															}
4118													   },
4119													   beforeSend :  function() {  
4120															 
4121													   },
4122													   complete: function(response) { 
4123														  $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4124								                          $("#trackingButton").toggleClass('disabled');
4125								                          $(".load-bar-disabled").hide();
4126														  $(".load-bar-under-stripe-disabled").hide();
4127														  $(".load-bar").toggleClass('active');
4128														  
4129														   
4130													   },
4131													   error: function(objAJAXRequest, strError) {
4132															   console.log("ajax update error: "+strError);
4133															  
4134															    if (objAJAXRequest['status'] == "404") {
4135																	 setTimeout( function() {
4136																			 location.reload();
4137																	 }, 5000); 
4138																}
4139																else if (objAJAXRequest['status'] == "502") {
4140																	 setTimeout( function() {
4141																			 location.reload();
4142																	 }, 5000); 
4143																}
4144																else if (objAJAXRequest['status'] == "429") {																	 
4145																	 $.notify('Вы делаете слишком частые запросы!\nПомедленее пожалуйста...', "error");																		 
4146																}
4147																else {
4148																	 setTimeout( function() {
4149																			 location.reload();
4150																	 },  5000);
4151																}
4152															 
4153													   }	   
4154												 });	
4155								             }
4156											 else {
4157											     $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4158								                 $("#trackingButton").toggleClass('disabled');
4159								                 $(".load-bar-disabled").hide();
4160												 $(".load-bar-under-stripe-disabled").hide();
4161												 $(".load-bar").toggleClass('active');
4162												 
4163											 }
4164										}
4165										else { 
4166										      $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4167								              $("#trackingButton").toggleClass('disabled');
4168								              $(".load-bar-disabled").hide();
4169											  $(".load-bar-under-stripe-disabled").hide();
4170											  $(".load-bar").toggleClass('active');
4171											  
4172											  if ((json.status == 'error') && (typeof json.message !== "undefined") && (json.message !== null) && (json.message !== ""))  {
4173                                                 $('#trackingInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+json.message+'</div></div>');
4174											  }
4175											  
4176										}
4177									}
4178							   },
4179							   beforeSend :  function() {  
4180									 $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4181									 $("#trackingButton").toggleClass('disabled');
4182									 $(".load-bar-disabled").show();													
4183									 $(".load-bar").toggleClass('active');
4184							   },
4185							   complete: function(response) { 
4186								 
4187										
4188							   },
4189							  
4190								 error: function(objAJAXRequest, strError, errorThrown) {
4191									   console.log("ajax cache error: "+strError); 
4192									   
4193									 
4194								    $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4195                                    $("#trackingButton").toggleClass('disabled');
4196								    $(".load-bar-disabled").hide();														  
4197									$(".load-bar-under-stripe-disabled").hide();
4198									$(".load-bar").toggleClass('active');
4199									
4200									if (objAJAXRequest['status'] != "502") {
4201									    $('#trackingInfo').html('<div class="panel panel-danger hidden-phone" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка отслеживания: <b>'+strError+' '+objAJAXRequest['status']+'</b></h4></div><div class="panel-body">К сожалению, информация о почтовом отправлении с номером <b>'+inputedTrackCode+'</b> не найдена.</br>Попробуйте еще раз, но чуть позже, например завтра...<br>Или зарегистрируйтесь и добавьте трек-код в историю отслеживания, и мы уведомим Вас, как только обновится информация по Вашему трек-коду!</div><div class="panel-footer"><p><b>Постоянная ссылка</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p></div></div>');
4202										 var dataArray = [clientIp, clientCountryCode, inputedTrackCode, strError, objAJAXRequest['status'], window.location.href, trackingUrl, navigator.userAgent];
4203										 trackingErrorLoggerFunction(dataArray);
4204                                           
4205										   if (objAJAXRequest['status'] == "404") {
4206													setTimeout( function() {
4207														 location.reload();
4208													}, 5000); 
4209											}
4210											else if (objAJAXRequest['status'] == "429") {																	 
4211												 $.notify('Вы делаете слишком частые запросы!\nПомедленее пожалуйста...', "error");																		 
4212											}
4213											else { 
4214												setTimeout( function() {
4215												    location.reload();
4216										        }, 5000); 										 
4217												
4218											} 
4219									}    
4220									
4221									
4222									if (objAJAXRequest['status'] == "502") {
4223										 setTimeout( function() {
4224												location.reload();
4225										}, 5000); 
4226									} 
4227									
4228
4229							   },
4230							   fail: function(objAJAXRequest, strError, errorThrown) {
4231							      alert(strError);
4232							   }
4233							   
4234                         });
4235						   
4236						   			
4237							
4238                        
4239						 if ((typeof $.Storage.get('login') !== "undefined") && ($.Storage.get('login') !== null) && ($.Storage.get('login') !== ""))  {
4240                            //console.log($.Storage.get("historyTrackCodesArray"));
4241							
4242						   /*
4243							$('.myTrackingNumbersCard').each(function() {								
4244								  if ((inputedTrackCode == $(this).attr("data-trackcode")) && ($(this).hasClass("myTrackingNumbersCardArchive") == true)) {
4245									 historyTrackCodesArray = []; 
4246								  }   
4247						     });
4248						   */
4249						   	  
4250						   	    
4251							    if ((typeof hostReferer === "undefined") || (hostReferer === null) || (hostReferer === "") || (hostReferer.indexOf('track24.ru') !== -1))  {
4252									      
4253										if (autoAdd === true) {  
4254										  //console.log("### TRUE ###");
4255										  //console.log($.Storage.get("historyTrackCodesArray"));
4256										   
4257											  if (jQuery.inArray(inputedTrackCode, JSON.parse($.Storage.get("historyTrackCodesArray"))) == -1 ) {
4258													// console.log(inputedTrackCode, "in_array = false"); 
4259													$.ajax({
4260															url: 'https://track24.ru/ajax/history.ajax.php',
4261															data : {'checkLogin' :  $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode': inputedTrackCode, 'trackDescription': "", 'action': 'add'}, 
4262															type :	 'POST',
4263															dataType :  'json',
4264															timeout : (10000),
4265															success: function(data){  
4266															 
4267																 if (data.status == 'ok') {
4268																		if (data.action == 'added') {
4269																			updateHistoryBlock(); 
4270																		}
4271																		else if (data.action == 'updated') {
4272																			updateHistoryBlock();
4273																		}
4274																		else if (data.action == 'not updated') { 
4275																			
4276																		}
4277																   }
4278                                                                   																   
4279															},
4280															complete: function() {
4281															},
4282															beforeSend :  function() {  											 
4283															},
4284															error: function(objAJAXRequest, strError) {
4285																 $.notify('Ой, произошла ошибка (код ошибки: '+objAJAXRequest.status+')...\n Вы можете сообщить о ней на [email protected]', "error");	
4286															}		
4287													 });
4288											 }
4289										}
4290										//else {
4291										//	 console.log("### FASLE ###");
4292										//}	
4293											
4294											/*
4295										    setTimeout(function(){ 
4296											  if (ctrlKeyPressed !== true) { 
4297												   //if (jQuery.inArray(inputedTrackCode, historyTrackCodesArray) == -1 ) {														  												   
4298												        if (jQuery.inArray(inputedTrackCode, JSON.parse($.Storage.get("historyTrackCodesArray"))) == -1 ) {
4299												             console.log(inputedTrackCode, "in_array = false");
4300																$.ajax({
4301																	 url:   '/ajax/history.ajax.php',
4302																	 data : {'checkLogin': $.Storage.get('login'), 'checkAuthKey': $.Storage.get('authKey'), 'trackCode' : inputedTrackCode, 'action': 'send'},
4303																	 type:	'POST', 
4304																	 dataType:  'json',
4305																	 success: function(data){
4306																	   if (data) {
4307																		   if (data.status == 'ok') {
4308																			  updateHistoryBlock();
4309																		   }
4310																		   else if (data.status == 'error') {
4311																				   
4312																		   }
4313																		}
4314																	  },
4315																	 beforeSend :  function() { 
4316																	 },
4317																	 complete: function() { 
4318																	 },
4319																	 error: function() {
4320																	 }	   
4321																 }); 
4322														 } 
4323														  else {
4324															   //updateHistoryBlock();
4325														 }
4326                                                }
4327										 
4328										 }, 100);	   
4329										*/ 
4330										   
4331								   }
4332								  
4333								   
4334								   
4335											  
4336							 hostReferer = null; 
4337						  }	
4338						  
4339					   }
4340					   else { 	
4341						    return false;
4342					   }
4343                  
4344  }	   
4345 
4346 function beginTrackingProgress() {
4347	   $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4348	   $("#trackingButton").toggleClass('disabled');
4349	   $(".load-bar-disabled").show();													
4350	   $(".load-bar").toggleClass('active');
4351	   $(".progress").toggleClass('active');
4352 }
4353 function endTrackingProgress() {
4354	  $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
4355	  $("#trackingButton").toggleClass('disabled');
4356	  $(".load-bar-disabled").hide();
4357	  $(".load-bar-under-stripe-disabled").hide();
4358	  $(".load-bar").toggleClass('active'); 
4359	  $(".progress").toggleClass('active'); 
4360	  
4361 }
4362
4363 function updateElementInHistory(trackCode, lastPoint) {
4364	 //console.log(trackCode);
4365	 //console.log(lastPoint); 
4366	 
4367	 var existing = false;
4368	 
4369	 $('.desc, .myTrackingNumbersCard').each(function() {
4370			$(this).removeClass('active'); 
4371			 if (($(this).attr("data-trackcode")) == trackCode) {
4372				 $(this).addClass('active');
4373				 existing = true;
4374				 
4375				 //console.log(lastPoint.operationAttributeTranslated); 
4376				 //console.log(lastPoint.operationDateTime); 
4377				 //console.log(lastPoint.eventDateTime); 
4378				 //console.log(lastPoint.eventDateTime);  
4379				 
4380				 var lastPointOperationDateTime = lastPoint.operationDateTime.split(" ");;
4381				 var daysFromLastChange = dateDiff(lastPointOperationDateTime[0], nowDateTime.split(" ")[0]);
4382				  
4383				 
4384				 $(this).find(".myTrackingNumbersOperationAttribute").text(lastPoint.operationAttributeTranslated); 
4385				 $(this).find(".myTrackingNumbersDateTime").text(lastPoint.operationDateTime); 
4386				 $(this).find(".myTrackingNumbersDateTime").attr('data-original-title', 'Обновлялся: '+lastPoint.trackUpdateDateTime); 
4387				  
4388				  //$(this).find(".myTrackingNumbersDaysCount").html('<span class="label '+daysFromLastChangeClass+' label-as-badge myTooltip" style="cursor: pointer;" data-toggle="tooltip" data-placement="'+(($(window).width() >= 1366) ? "right" : 'left')+'" title="В&nbsp;пути&nbsp;'+deliveryDays+'&nbsp;'+numberof(deliveryDays, '', ['день', 'дня', 'дней'])+''+/*lastPointOperation*/ ",&nbsp;информация получена" +'&nbsp;'+((daysFromLastChange > 0 ) ? (daysFromLastChange+'&nbsp;'+numberof(daysFromLastChange, '', ['день', 'дня', 'дней']))+'&nbsp;назад' : "сегодня") + ' ('+value['lastPoint']['eventDateTime']+') ">'+deliveryDays+' / '+daysFromLastChange+'</span>'); 
4389				  //html += '<span class="label '+daysFromLastChangeClass+' label-as-badge myTooltip" style="cursor: pointer;" data-toggle="tooltip" data-placement="'+(($(window).width() >= 1366) ? "right" : 'left')+'" title="В&nbsp;пути&nbsp;'+deliveryDays+'&nbsp;'+numberof(deliveryDays, '', ['день', 'дня', 'дней'])+''+/*lastPointOperation*/ ",&nbsp;информация получена" +'&nbsp;'+((daysFromLastChange > 0 ) ? (daysFromLastChange+'&nbsp;'+numberof(daysFromLastChange, '', ['день', 'дня', 'дней']))+'&nbsp;назад' : "сегодня") + ' ('+value['lastPoint']['eventDateTime']+') ">'+deliveryDays+' / '+daysFromLastChange+'</span>'; 
4390																
4391				 
4392
4393			 }
4394	  });
4395
4396 }
4397
4398function trackingBuilder(trackCode, dataJson) {
4399	var lng = $.Storage.get("lng");
4400	var json = dataJson;
4401	var inputedTrackCode = trackCode; 
4402	var eventsArray = [];
4403	 
4404   
4405	                               //<img src="https://track24.ru/img/export-to-txt.png" width="16px" style="opacity: 0.4;margin-bottom: -1px;">  
4406								   if ((json.status == 'ok') && ((typeof json.data.events !== "undefined") && (json.data.events !== null) && (json.data.events !== "")) ) {
4407								   //var sortEventsIcon =  (sortEventsTrigger == true ) ? "fa-sort-asc" : "fa-sort-desc";
4408								   var sortEventsIcon =  (sortEventsTrigger == true ) ? "icon-sort-asc-48x48" : "icon-sort-desc-48x48";
4409								   var sortToolTipText =  (sortEventsTrigger == true ) ? "Прямая&nbsp;сортировка" : "Обратная&nbsp;сортировка";
4410								   
4411								   if (json.data.trackCodeModified != "") {
4412									   var trackCodesModified = json.data.trackCodeModified.split(",");
4413									    if (trackCodesModified.length == 1) {
4414											var trackCodeModifiedLink = (json.data.trackCodeModified != "") ? ' <i class="fa fa-angle-double-right" aria-hidden="true"></i> <a href="//track24.ru/?code='+json.data.trackCodeModified+'" class="myTooltip" data-toggle="tooltip" data-placement="top" title="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения">'+json.data.trackCodeModified+'</a>' : "";
4415										}
4416										else {
4417											var trackCodeModifiedLink = "";
4418										     $.each(trackCodesModified, function(key, value) {
4419											    trackCodeModifiedLink += '  <i class="fa fa-angle-double-right" aria-hidden="true"></i> <a href="//track24.ru/?code='+value+'" class="myTooltip" data-toggle="tooltip" data-placement="top" title="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения">'+value+'</a>';
4420 											 });
4421										}
4422								   }
4423								   else {
4424									   var trackCodeModifiedLink = "";
4425								   }
4426								  
4427								   $('#trackingInfo').append('<div class="trackingInfo-title-wrapper"><div class="trackingInfo-title-left">Отслеживание&nbsp;<span class="hidden-xs hidden-sm">почтового отправления</span>:&nbsp;<a href="//track24.ru/?code='+inputedTrackCode+'">'+inputedTrackCode+'</a>'+trackCodeModifiedLink+'&nbsp;<i class="fa fa-paper-plane"></i></div><div class="trackingInfo-title-right"></div></div>');
4428								   
4429								   $('#trackingInfo').append('<div class="text-left" style="position:relative; width:100%; border: 1px dashed #ccc; height:28px;"><div class="text-left col-lg-11 col-md-11 col-sm-11 col-xs-10 column" style="margin-top:3px; white-space:nowrap;" id="projectedDeliveryPeriodBeforeEvents"></div><div class="text-right col-lg-1 col-md-1 col-sm-1 col-xs-2 column" style="margin-top:3px;"><i id="sortEvents" data-toggle="tooltip" class="myTooltip sortEvents" data-placement="top" title="'+sortToolTipText+'"><img src="https://track24.ru/img/icons/'+sortEventsIcon+'.png" width="16px" style="margin-bottom: -1px;"></i></div></div>');
4430								   $('#trackingInfo').append('<div id="trackingInfoEvents"></div>');
4431								  	 
4432									var progressBarPercent = 0;   
4433									var trackingInfoEventsDataForClipBoard  = "Информация о трек-коде: "+inputedTrackCode+"\n";
4434									    trackingInfoEventsDataForClipBoard += '-------------------------'+'\n';
4435										
4436									var lastEventDataForClipBoard  = "Информация о трек-коде: "+inputedTrackCode+"\n";
4437									    lastEventDataForClipBoard += '-------------------------'+'\n';	
4438										
4439									var dateTimeEvents = [];
4440									
4441								var trackCreationDateTime = json.data.trackCreationDateTime.split(" ");
4442								var trackUpdateDateTime = (typeof json.data.trackUpdateDateTime !== 'undefined' && json.data.trackUpdateDateTime !== null && json.data.trackUpdateDateTime !== "") ?  json.data.trackUpdateDateTime.split(" ") : nowDateTime.split(" ");  
4443							    var firstDeliveryDateTime = (json.data.events[0].source != 'track24') ?  json.data.events[0].operationDateTime.split(" ") : nowDateTime.split(" ");  
4444								var lastDeliveryDateTime = (typeof json.data.deliveredStatus !== 'undefined' && json.data.deliveredStatus !== null && json.data.deliveredStatus !== "" && json.data.deliveredStatus == 1) ?  json.data.trackDeliveredDateTime.split(" ") : nowDateTime.split(" ");  
4445								var firstOperationDateTime = json.data.events[0].operationDateTime.split(" ");
4446								var lastOperationDateTime = json.data.events[json.data.events.length-1].operationDateTime.split(" ");
4447								var previosItemWeight = 0;
4448							    var nextItemWeight = 0;
4449								var compareEventsArray = []; 
4450								var dublicateEventRowClass = "";
4451								 
4452								 var events = [];
4453									if (groupEventsByServiceTrigger == false) {
4454								        if (sortEventsTrigger == true) {
4455 										      events.push(json.data.events); 
4456									    }
4457									    else {
4458 										      events.push(json.data.events.reverse()); 
4459									    }										
4460								    }
4461								    else {
4462									
4463 								        if (sortEventsTrigger == true) {
4464 											 $.each(json.data.groupedEvents, function(key, value) {
4465											       events.push(value);
4466 											 });
4467									    }
4468									    else {
4469									         	 json.data.groupedCompanyNames.reverse();
4470												 $.each(json.data.groupedEvents.reverse(), function(key, value) {
4471											         events.push(value.reverse());
4472												 
4473											    });
4474									    }									   
4475								    }
4476								 	   
4477								rc = 0;
4478                               //console.log(currentService);					
4479								$.each(events, function(key, currentService) {
4480									 
4481								    eventsArray =  currentService;
4482 									if ((groupEventsByServiceTrigger == true) && (json.data.groupedCompanyNames[key] != "Track24")) {
4483									   $('#trackingInfoEvents').append('<div class="trackingServiceName">'+json.data.groupedCompanyNames[key]+'</div>');
4484									}
4485									  
4486 									  $.each(eventsArray, function(key, value) {
4487									      rc++;
4488										  dateTimeEvents.push(value['operationDateTime']);
4489										   
4490											 var statusIcon =  (sortEventsTrigger == true ) ? "" : "reverse";
4491											
4492												 if (((key == 0) && (sortEventsTrigger == true)) || ((key == json.data.events.length - 1) && (sortEventsTrigger == false))) {
4493													 statusIcon = 'box'; 
4494												 }
4495												 else if (((key == 0) && (sortEventsTrigger == false) && (value['icon'] == 'delivered')) || ((key == json.data.events.length - 1) && (sortEventsTrigger == true) && (value['icon'] == 'delivered'))) { 
4496												       statusIcon = value['icon'];
4497												 }
4498												 else {
4499													  if ((value['icon'] != null) && (value['icon'] != "")) { 
4500														 if ((value['icon'] != 'accepted') &&  (value['icon'] != 'delivered')) {
4501															statusIcon = value['icon'];
4502														 }
4503													  }
4504												 }
4505											 
4506											 
4507											
4508											var operationDateTime = value['operationDateTime'].split(" ");
4509										
4510										 
4511                                            if ((value['operationType'] == "Вручение") || (value['operationAttribute'] == "Вручение адресату") || (value['operationAttribute'] == "Вручение получателю") || (value['operationAttribute'] == "Прибыло в место вручения")) {
4512										       lastOperationDateTime = value['operationDateTime'].split(" ");
4513											   progressBarPercent = 100;
4514										    }	
4515										    if ((value['operationTypeTranslated'] == "Вручение") || (value['operationAttributeTranslated'] == "Вручение адресату") || (value['operationAttributeTranslated'] == "Вручение получателю") || (value['operationAttributeTranslated'] == "Прибыло в место вручения")) {
4516										       lastOperationDateTime = value['operationDateTime'].split(" ");
4517											   progressBarPercent = 100;
4518										    }	 
4519											
4520											var deliveryDay = dateDiff(firstOperationDateTime[0], operationDateTime[0])+1;
4521											if ((deliveryDay > 0) && (deliveryDay < 21)) {
4522											   var	deliveryDayClass = 'label-success';
4523											}
4524											if (deliveryDay >= 21) {
4525											   var	deliveryDayClass = 'label-info';
4526											}
4527											if (deliveryDay >= 40) {
4528											   var deliveryDayClass = 'label-warning';
4529											}
4530											if (deliveryDay >= 60) {
4531											   var deliveryDayClass = 'label-danger';
4532											}
4533											
4534											if ((value['latitude'] != null) && (value['longitude'] != null)) {
4535											  var geoMarker = ' <i class="fa fa-map-marker" latitude="'+value['latitude']+'" longitude="'+value['longitude']+'" postindex="'+value['operationPlacePostalCode']+'"></i> ';
4536											}
4537											else
4538											{
4539												var geoMarker = '';
4540											}
4541										    
4542											var itemWeightClass = 'label-success';
4543											var itemWeightToolTip = '';
4544											
4545											
4546											 
4547											
4548											if (value['itemWeight'] > 0 ) {
4549											    if (sortEventsTrigger == true) {
4550												     if ((previosItemWeight > 0) && (value['itemWeight'] != previosItemWeight)) {
4551													   var itemWeightClass = 'label-danger';
4552													   itemWeightToolTip = 'Зафиксировано&nbsp;изменение&nbsp;веса!';													  
4553												      }	
4554													  previosItemWeight = value['itemWeight'];
4555												    }
4556													else {
4557														  for (niw=parseInt(key+1); niw <= parseInt(json.data.events.length-1); niw++){
4558															  if (json.data.events[niw].itemWeight > 0) {
4559																nextItemWeight = json.data.events[niw].itemWeight;
4560																break;
4561															  }
4562														  }
4563													  if ((nextItemWeight > 0) && (value['itemWeight'] != nextItemWeight)) {
4564													     var itemWeightClass = 'label-danger';
4565													     itemWeightToolTip = 'Зафиксировано&nbsp;изменение&nbsp;веса!';													  
4566												      }	
4567													    
4568													}
4569												  var itemWeight = 'Вес: '+value['itemWeight']+' г';
4570											} else {
4571												var itemWeight = '';
4572											}
4573										    
4574										    
4575										  
4576										  if ((typeof value['serviceName'] !== "undefined") && (value['serviceName'] !== null) && (value['serviceName'] !== ""))
4577											{
4578										      var serviceName = value['serviceName'];
4579											}  
4580											else {
4581											  var serviceName = "";
4582											}	
4583											 
4584										 var extendentInfo = '';
4585										 if ((value['operationType'] == "Экспорт") || (value['operationAttribute'] == "Экспорт")) {
4586										     extendentInfo = '(Операция производится в течение 7 - 60 дней начиная с '+operationDateTime[0]+')';
4587 										 }
4588										 
4589										    
4590										var eventStatus = ''; 
4591										if (dateDiff(value['eventDateTime'], nowDateTime.split(" ")[0]) == 0) {
4592										   eventStatus = '<span style="cursor: pointer;" class="label label-success label-as-badge myTooltip" data-toggle="tooltip" data-placement="top" data-html="false" title="Статус&nbsp;получен: '+value['eventDateTime'].split(" ")[1]+'">New</span>';
4593										}
4594											
4595									   if ((typeof value['operationAttributeInformation'] !== "undefined") && (value['operationAttributeInformation'] !== null) && (value['operationAttributeInformation'] !== "")) {
4596										        if (device.desktop()) { 
4597												  var operationAttributeInformationDataTriger = "click hover";
4598												} else {
4599												  var operationAttributeInformationDataTriger = "hover";	
4600												}	
4601										       var operationAttributeInformation = '<span class="fa fa-question-circle" style="position: relative; cursor:pointer; color:#03487D;" data-toggle="popover" data-trigger="'+operationAttributeInformationDataTriger+'" data-placement="top" data-html="true" title="Справочная информация <div><a href=\'https://track24.ru/?page=attributes#attribute-'+_translit(value['operationAttributeTranslated'].replace(/\[.*?\]/g, '').trim().replace(/[^a-zA-Zа-яА-Я0-9]/g, '_').toLowerCase())+'\' target=\'_blank\' style=\'position: absolute; right: 10px; top: 10px;\'><i class=\'fa fa-link fa-rotate-90\'></i></a></div>" data-content="'+value['operationAttributeInformation']+'"></span>';
4602										    }
4603										else {
4604										      var operationAttributeInformation = '';
4605										}
4606										
4607									   if (hideDublicateEventsTrigger == true) { 
4608										   compareCurrentAttribute = $.trim(value['operationAttribute'].toLowerCase());
4609										   compareCurrentType = $.trim(value['operationType'].toLowerCase());
4610										   compareCurrentPlace = $.trim(value['operationPlaceName'].toLowerCase()); 											 
4611										   
4612										   compareCurrentAttributeTranslated = (lng != "null") ? $.trim(value['operationAttributeTranslated'].toLowerCase()) : compareCurrentAttribute;
4613										   compareCurrentTypeTranslated = (lng !== "null") ? $.trim(value['operationTypeTranslated'].toLowerCase()): compareCurrentType;
4614										   compareCurrentPlaceTranslated = (lng !== "null") ? $.trim(value['operationPlaceNameTranslated'].toLowerCase()): compareCurrentPlace;										 
4615										   
4616										      if (rc != 0) {
4617														if (jQuery.inArray($.trim(operationDateTime[0]+compareCurrentAttribute+compareCurrentType+compareCurrentPlace), compareEventsArray) >= 0) {
4618														   var dublicateEventRowClass = "dublicateEventRow";
4619														} 
4620														else if (jQuery.inArray($.trim(operationDateTime[0]+compareCurrentAttributeTranslated+compareCurrentTypeTranslated+compareCurrentPlaceTranslated), compareEventsArray) >= 0) {
4621														   var dublicateEventRowClass = "dublicateEventRow";
4622														} 
4623														else {
4624														   var dublicateEventRowClass = "";
4625														}
4626											}
4627										   		
4628 										   compareEventsArray.push(operationDateTime[0]+compareCurrentAttributeTranslated+compareCurrentTypeTranslated+compareCurrentPlaceTranslated);
4629 										   compareEventsArray.push(operationDateTime[0]+compareCurrentAttribute+compareCurrentType+compareCurrentPlace);
4630										} 
4631										else {
4632										   var dublicateEventRowClass = "";
4633										}
4634										 
4635										
4636                                        if (jQuery.inArray(lng, availibleLanguageArray) != -1) {											 
4637										    $('#trackingInfoEvents').append('<div class="trackingInfoRow '+dublicateEventRowClass+'"><div class="trackingInfoDateTime"><span class="date"><b>'+operationDateTime[0]+'</b></span><br><span class="time muted">'+operationDateTime[1]+'</span><br><span class="label '+deliveryDayClass+' myTooltip" title="'+deliveryDay+' '+numberof(deliveryDay, '', ['день', 'дня', 'дней'])+' в пути" data-toggle="tooltip" data-placement="right">'+deliveryDay+' день</span></div><div class="trackingInfoStatus"><div class="trackingInfoStatusIcon '+statusIcon+'"></div></div>
4637<div class="trackingInfoDetails"><div class="operationAttribute myTooltip auto-tooltip" data-toggle="tooltip" data-placement="left" title="'+$.trim(value['operationAttribute'])+'" originaltext="'+$.trim(value['operationAttribute'])+'">'+value['operationAttributeTranslated']+' '+operationAttributeInformation+'</div><div class="operationType myTooltip auto-tooltip" data-toggle="tooltip" data-placement="left" title="'+$.trim(value['operationType'])+'" originaltext="'+$.trim(value['operationType'])+'">'+value['operationTypeTranslated']+'</div><div class="muted"> '+geoMarker+'<span style="color:grey;" class="operationPlace myTooltip auto-tooltip" data-toggle="tooltip" data-placement="left" title="'+$.trim(value['operationPlaceName'])+'" originaltext="'+$.trim(value['operationPlaceName'])+'">'+$.trim(value['operationPlacePostalCode']+' '+value['operationPlaceNameTranslated'])+'</span></div></div> <div class="trackingExtendedDetails hidden-xs___"><div style="text-align: right; height:18px; /* padding-right:20px; */">'+eventStatus+' <span class="label label-info serviceName">'+serviceName+'</span></div> <div style="text-align: right; height:18px;"></div> <div class="hidden-xs" style="text-align: right;   height:18px; /* padding-right:20px; */"><span class="label '+itemWeightClass+' myTooltip auto-tooltip"  data-toggle="tooltip" data-placement="left" title="'+itemWeightToolTip+'">'+itemWeight+'</span></div></div> </div>');
4638									    }
4639										else {
4640										        $('#trackingInfoEvents').append('<div class="trackingInfoRow '+dublicateEventRowClass+'"><div class="trackingInfoDateTime"><span class="date"><b>'+operationDateTime[0]+'</b></span><br><span class="time muted">'+operationDateTime[1]+'</span><br><span class="label '+deliveryDayClass+' myTooltip" title="'+deliveryDay+' '+numberof(deliveryDay, '', ['день', 'дня', 'дней'])+' в пути" data-toggle="tooltip" data-placement="right">'+deliveryDay+' день</span></div><div class="trackingInfoStatus"><div class="trackingInfoStatusIcon '+statusIcon+'"></div></div><div class="trackingInfoDetails"><div class="operationAttribute">'+value['operationAttributeOriginal']+' '+operationAttributeInformation+'</div><div class="operationType">'+value['operationTypeOriginal']+' '+extendentInfo+'</div><div class="muted"> '+geoMarker+'<span style="color:grey;" class="operationPlace">'+value['operationPlacePostalCode']+' '+value['operationPlaceNameOriginal']+'</span></div></div> <div class="trackingExtendedDetails hidden-xs"><div style="text-align: right; height:18px; /* padding-right:20px; */">'+eventStatus+' <span class="label label-info">'+serviceName+'</span></div> <div style="text-align: right; height:18px;"></div> <div style="text-align: right;   height:18px; /* padding-right:20px; */"><span class="label label-success">'+itemWeight+'</span></div></div> </div>');
4641										}
4642										
4643										
4644										  
4645										trackingInfoEventsDataForClipBoard += $.trim(operationDateTime[0]+' '+operationDateTime[1]+ ' '+ value['operationAttributeTranslated']+' '+value['operationTypeTranslated']+'')+'\n';
4646										trackingInfoEventsDataForClipBoard += $.trim(value['operationPlacePostalCode']+' '+value['operationPlaceNameTranslated']+'')+'\n\n';
4647										 
4648                                          
4649										 
4650										 
4651										//console.log(key); 
4652									}); 
4653								     
4654									 
4655									if (groupEventsByServiceTrigger == false) { 
4656								       //$('#trackingInfoEvents').append('<div class="trackingServiceName-">--</div>');
4657									}
4658									
4659									
4660								    if (groupEventsByServiceTrigger == false) {
4661								      return false;
4662								    }
4663									
4664									
4665								 });
4666								 
4667								   
4668								 
4669  			                          if (json.data.events.length == 1) {       					 
4670								         $(".trackingInfoStatus").css('background-image', 'url("")');
4671									  }
4672									  
4673								     if (sortEventsTrigger == true ) {										   
4674										  lastEventDataForClipBoard += $.trim(json.data.events[json.data.events.length - 1].operationDateTime+ '\n'+ json.data.events[json.data.events.length - 1].operationAttributeTranslated)+'\
4674n';  
4675									  }	  
4676									  else {
4677										   
4678										   lastEventDataForClipBoard += $.trim(json.data.events[0].operationDateTime+ '\n'+ json.data.events[0].operationAttributeTranslated)+'\n';
4679									  }
4680									  
4681									 if (sortEventsTrigger == true ) {	
4682								         if ((typeof json.data.events[json.data.events.length - 1].operationPlaceNameTranslated !== "undefined") && (json.data.events[json.data.events.length - 1].operationPlaceNameTranslated !== null) && (json.data.events[json.data.events.length - 1].operationPlaceNameTranslated !== "")) {
4683								           lastEventDataForClipBoard += $.trim(json.data.events[json.data.events.length - 1].operationPlaceNameTranslated)+'\n'; 
4684								         }
4685									  }	 
4686									 else {
4687                                       if ((typeof json.data.events[0].operationPlaceNameTranslated !== "undefined") && (json.data.events[0].operationPlaceNameTranslated !== null) && (json.data.events[0].operationPlaceNameTranslated !== "")) {
4688								           lastEventDataForClipBoard += $.trim(json.data.events[0].operationPlaceNameTranslated)+'\n'; 
4689								       }
4690									 }									 
4691								   
4692								     if (sortEventsTrigger == true ) {	
4693									     if ((typeof json.data.events[json.data.events.length - 1].operationAttributeInformation !== "undefined") && (json.data.events[json.data.events.length - 1].operationAttributeInformation !== null) && (json.data.events[json.data.events.length - 1].operationAttributeInformation !== "")) {
4694										   lastEventDataForClipBoard += '\n'+$.trim(json.data.events[json.data.events.length - 1].operationAttributeInformation).replace(/<br>/g, '\n').replace(/<b>|<\/b>/g, '').replace(/&lt;.*?&gt;/g, '')+'\n';  
4695									     } 
4696									 }
4697									 else {
4698										 if ((typeof json.data.events[0].operationAttributeInformation !== "undefined") && (json.data.events[0].operationAttributeInformation !== null) && (json.data.events[0].operationAttributeInformation !== "")) {
4699										   lastEventDataForClipBoard += '\n'+$.trim(json.data.events[0].operationAttributeInformation).replace(/<br>/g, '\n').replace(/<b>|<\/b>/g, '').replace(/&lt;.*?&gt;/g, '')+'\n';  
4700									     }										 
4701									 }	 
4702								   
4703								     if (json.projectedNextWaypoint !== null) {
4704									    if (json.projectedNextWaypoint.nextAttribute != null) {
4705										    lastEventDataForClipBoard += '-------------------------'+'\n';
4706								            lastEventDataForClipBoard += 'Ожидайте статус: '+json.projectedNextWaypoint.nextAttribute+'\n';
4707										}  
4708								     }
4709									 
4710								    if (json.deliveredStat !== null) {
4711									 lastEventDataForClipBoard += '-------------------------'+'\n';
4712								     lastEventDataForClipBoard +=  $.trim('Прогнозируемый период доставки: '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.maxDeliveryDays)))+'\n';
4713								    }
4714									 
4715								   lastEventDataForClipBoard += '-------------------------'+'\n';
4716 								   lastEventDataForClipBoard += 'Постоянная ссылка для отслеживания: https://track24.ru/?code='+inputedTrackCode+'\n\r';
4717										
4718								  
4719								  
4720								   var groupEventsByServiceText = (groupEventsByServiceTrigger == false ) ? "Группировать" : "Не группировать";	
4721								   var hideDublicateEventsText = (hideDublicateEventsTrigger == true ) ? "Отобразить дубликаты" : "Скрыть дубликаты";	
4722								   
4723								  
4724								   if (device.desktop()) {
4725									    if (json.data.events.length > 3) {
4726										   $("#trackingInfoEvents").after('<div style="margin-top:5px;"> <div class="text-right hidden-xs hidden-sm" style="padding:10px; display: inline-block;" id="trackingInfoEventsClipBoard"><i class="fa fa-lg fa-copy"></i> <span class="dotted">Все статусы</span></div> <div class="text-right hidden-xs hidden-sm" style="padding:10px; display: inline-block;" id="lastEventClipBoard""><i class="fa fa-lg fa-copy"></i> <span class="dotted">Последний статус</span></div> <div class="text-left hidden-xs" style="padding:10px; display: inline-block;" id=""><i class="fa fa-lg fa-globe"></i> <span class="dotted"><a href="http://track24.net/?code='+inputedTrackCode+'" target="_blank" style="text-decoration: none; color: #333;">Без перевода</a></span></div> <div class="text-right hidden-xs hidden-sm  hidden-md" style="padding:10px; display: inline-block; float:right;" id="hideDublicateEvents"><i class="fa fa-lg  fa-outdent"></i> <span class="dotted">'+hideDublicateEventsText+'</span></div>  <div class="text-right  hidden-xs" style="padding:10px; display: inline-block; float:right;" id="groupEventsByService"><i class="fa fa-lg fa-th-list"></i> <span class="dotted">'+groupEventsByServiceText+'</span></div></div><div id="'+adblock_prefix+'-2" class="'+adblock_prefix+'-2"></div>');
4727										}
4728											
4729									}
4730									else {
4731									  if (json.data.events.length > 3) { 
4732										    $("#trackingInfoEvents").after('<div id="'+adblock_prefix+'-2" class="'+adblock_prefix+'-2"></div>');
4733										}
4734									}
4735										  
4736										 var trackInfoToPanel = ''; 
4737										 
4738										
4739										if ((typeof json.data.trackName !== "undefined") && (json.data.trackName !== null) && (json.data.trackName !== "")) {
4740										      trackInfoToPanel += '<p><b>Описание трек-кода</b>: '+json.data.trackName +', '+ json.data.trackName +', '+ json.data.trackName+'</p>';
4741									     } 
4742											
4743										
4744										trackInfoToPanel += '<ul class="sp-list">';
4745										if ((typeof json.data.trackCreationDateTime !== "undefined") && (json.data.trackCreationDateTime !== null) && (json.data.trackCreationDateTime !== "")) {
4746										    trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Добавлен в базу</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.trackCreationDateTime+'</div></div></li>';
4747 									     }
4748										 if ((typeof json.data.trackUpdateDateTime !== "undefined") && (json.data.trackUpdateDateTime !== null) && (json.data.trackUpdateDateTime !== "")) {
4749 											trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Последнее обновление</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.trackUpdateDateTime+' <!-- (<span time="2016,08,15,05,24,32" class="need_to_time_update"></span>) --></div></div></li>';
4750									     }
4751										 
4752										 if (json.deliveredStat !== null) {
4753											      var myRegExp = /([A-Z]{2})[0-9]{9}([A-Z]{2})/;
4754													var match = myRegExp.exec(inputedTrackCode);
4755													if (match != null) { 
4756                                                       var trackCodePrefix = match[1]; 
4757													   var trackCodePostfix = match[2]; 	
4758													   var showDeliveredStatChartIcon = 'visible';
4759  													   
4760													}
4761													else {
4762													   var trackCodePrefix = ""; 
4763													   var trackCodePostfix = ""; 
4764													   var showDeliveredStatChartIcon = 'hidden';
4765													}
4766  											      
4767												    
4768												   if ((json.data.events[0].source != 'track24') && (json.data.events[0].source != 'garant')) {
4769												       trackInfoToPanel += '<li class="sp projectedDeliveryPeriodAffterEvents"><div class="sp_left"><span class="sp_title">Прогнозируемый период доставки</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span id="projectedDate" class="redMarker">'+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.maxDeliveryDays))+'</span> <span class="hidden-xs hidden-md">(не&nbsp;гарантируемый)</span> <span class="" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных международных почтовых отправлений.<br><b>'+trackCodePrefix+' ### ### ### '+trackCodePostfix+'</b>: среднее время доставки '+json.deliveredStat.averageDeliveryDays+' '+numberof(json.deliveredStat.averageDeliveryDays, '', ['день', 'дня', 'дней'])+' / максимальное время '+json.deliveredStat.maxDeliveryDays+' '+numberof(json.deliveredStat.maxDeliveryDays, '', ['день', 'дня', 'дней'])+'<br><br> В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д.<br> Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"> <i class="fa fa-question-circle"></i></span> <i class="fa fa-area-chart myTooltip showDeliveredStatChart '+showDeliveredStatChartIcon+'"  data-prefix="'+trackCodePrefix+'" data-postfix="'+trackCodePostfix+'" aria-hidden="true" style="cursor:pointer;" title="Статистика за месяц"></i></div></div></li>';
4770												       $("#projectedDeliveryPeriodBeforeEvents").html('<b><span class="hidden-xs hidden-sm hidden-md">Прогнозируемый период доставки</span><span class="hidden-xs hidden-sm hidden-lg">Прогнозируемый период доставки</span><span class="hidden-md hidden-lg">Прогноз</span></b>: '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.maxDeliveryDays))+' <span class="hidden-xs hidden-md">(не&nbsp;гарантируемый)</span> <span class="fa fa-question-circle" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" style="cursor:pointer;" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных международных почтовых отправлений.<br><b>'+trackCodePrefix+' ### ### ### '+trackCodePostfix+'</b>: среднее время доставки '+json.deliveredStat.averageDeliveryDays+' '+numberof(json.deliveredStat.averageDeliveryDays, '', ['день', 'дня', 'дней'])+' / максимальное время '+json.deliveredStat.maxDeliveryDays+' '+numberof(json.deliveredStat.maxDeliveryDays, '', ['день', 'дня', 'дней'])+'<br><br>В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д. Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"></span>');
4771												   }
4772                                                   
4773												   
4774										   }
4775										   else {
4776											       
4777												  if ((json.data.events[0].source != 'track24') && (json.data.events[0].source != 'garant')) {
4778													 trackInfoToPanel += '<li class="sp projectedDeliveryPeriodAffterEvents"><div class="sp_left"><span class="sp_title">Прогнозируемый период доставки</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span id="projectedDate" class="redMarker">'+projectedDate(firstOperationDateTime[0], (averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], (averageDeliveryDays)+10)+'</span> <span class="hidden-xs">(не&nbsp;гарантируемый)</span> <span class="fa fa-question-circle" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных международных почтовых отправлений за последний месяц. В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д. Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"></span></div></div></li>';
4779													 $("#projectedDeliveryPeriodBeforeEvents").html('<p><span class="hidden-xs hidden-sm hidden-md">Прогнозируемый период доставки</span><span class="hidden-xs hidden-sm hidden-lg">Прогнозируемый период доставки</span><span class="hidden-md hidden-lg">Прогноз</span></b>: '+projectedDate(firstOperationDateTime[0], (averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], (averageDeliveryDays)+10)+' <span class="hidden-xs">(не&nbsp;гарантируемый)</span> <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных почтовых отправлений за последний месяц. В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д. Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"></span></p>');
4780   												  }
4781											}
4782											  
4783										  if ((typeof json.data.fromName !== "undefined") && (json.data.fromName !== null) && (json.data.fromName !== "")) {
4784										      trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Отправитель</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.fromName+' </div></div></li>';
4785                                              trackingInfoEventsDataForClipBoard += 'Отправитель: '+json.data.fromName+'\n'; 
4786                                          }	
4787										  if ((typeof json.data.destinationName !== "undefined") && (json.data.destinationName !== null) && (json.data.destinationName !== "")) {
4788										      trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Получатель</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.destinationName+' <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hove
4788r" data-placement="top" data-html="true" title="Справочная информация" data-content="Достаточно часто (по необъяснимым причинам), после прохождения таможенных процедур, ФИО получателя может измениться, и не соответствовать действительности. Если адрес доставки совпадает с Вашим, то не стоит переживать по этому поводу. Посылка приедет с Вашими ФИО, и Вы без проблем сможете её получить в Вашем почтовом отделении. <br>В целях безопасности и защиты персональных данных некоторые символы в ФИО заменяются на ***."></span></div></div></li>';
4789                                              trackingInfoEventsDataForClipBoard += 'Получатель: '+json.data.destinationName+'\n'; 
4790                                          }	
4791										 
4792										  if ((json.data.fromCountry == "") || (json.data.destinationCountry == "")){
4793											   
4794												  if ((typeof json.data.fromCountry !== "undefined") && (json.data.fromCountry !== null) && (json.data.fromCountry !== "")) {
4795														  var fromCountry = json.data.fromCountry;
4796														  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Страна отправитель</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+fromCountry+'</div></div></li>';
4797                                             			  trackingInfoEventsDataForClipBoard += 'Страна отправитель: '+fromCountry+'\n'; 
4798												  } 
4799												  if ((typeof json.data.destinationCountry !== "undefined") && (json.data.destinationCountry !== null) && (json.data.destinationCountry !== "")) {
4800														  var destinationCountry = json.data.destinationCountry;
4801														  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Страна назначения</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+destinationCountry+'</div></div></li>';
4802														  trackingInfoEventsDataForClipBoard += 'Страна назначения: '+destinationCountry+'\n'; 
4803												  } 
4804												
4805												 if ((typeof json.data.destinationCountry === "undefined") || (json.data.destinationCountry === null) || (json.data.destinationCountry === "")) {
4806													 if ((typeof json.data.destinationCountryCode !== "undefined") && (json.data.destinationCountryCode !== null) && (json.data.destinationCountryCode !== "")) {
4807														  var destinationCountryCode = json.data.destinationCountryCode
4808														  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Код страны назначения</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+destinationCountryCode+'</div></div></li>';
4809														  trackingInfoEventsDataForClipBoard += 'Код страны назначения: '+destinationCountryCode+'\n'; 
4810													 }
4811												  } 
4812												  
4813												  
4814										 }
4815										 
4816										    var route = "";
4817											var routePointsCount = 0;
4818											
4819											if ((typeof json.data.fromCountry !== "undefined") && (json.data.fromCountry !== null) && (json.data.fromCountry !== "")) {
4820												  route +=  '<span class="route" id="routeOriginCountry" style="cursor:pointer;">'+json.data.fromCountry+'</span>';
4821											      route += ' <i class="fa fa-angle-double-right"></i> ';
4822												 routePointsCount++;
4823											 } 
4824											  
4825											 if ((typeof json.data.fromCity !== "undefined") && (json.data.fromCity !== null) && (json.data.fromCity !== "")) {
4826												    	route +=  '<span class="route" id="routeFromCity">'+json.data.fromCity+'</span>';
4827														route += ' <i class="fa fa-angle-double-right"></i> '; 
4828														routePointsCount++;
4829											 }
4830											 if ((typeof json.data.destinationCountry !== "undefined") && (json.data.destinationCountry !== null) && (json.data.destinationCountry !== "")) {
4831												  route +=  '<span class="route" id="routeDestinationCountry" style="cursor:pointer;">'+json.data.destinationCountry+'</span>';
4832											      route += ' <i class="fa fa-angle-double-right"></i> ';
4833												  routePointsCount++;											     
4834											 } 
4835 											 
4836											  
4837											   if ((typeof json.data.destinationPostalCode !== "undefined") && (json.data.destinationPostalCode !== null) && (json.data.destinationPostalCode !== "") ) {
4838												    
4839													if ((typeof json.data.destinationPostalAddress !== "undefined") && (json.data.destinationPostalAddress !== null) && (json.data.destinationPostalAddress !== "") && (json.data.destinationPostalCode.length == 6) && (Number.isInteger(parseInt(json.data.destinationPostalCode))) && (json.data.destinationCompany == 'rupost')) {
4840														var postal_code_info = '<span style="border-bottom: 1px dotted; cursor: pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="<b>Информация о почтовом отделении:</b> <a href=\'https://track24.ru/?page=postindex&index='+json.data.destinationPostalCode+'\' target=\'_blank\' class=\'dotted\'>'+json.data.destinationPostalCode+'</a> <a class=\'hidden-xs\' href=\'https://track24.ru/?page=postindex&index='+json.data.destinationPostalCode+'\' target=\'_blank\' style=\'/*position: absolute; right: 10px; top: 10px;*/\'><i class=\'fa fa-external-link\'></i></a>" data-content="<b>Адрес:</b> '+json.data.destinationPostalAddress+'<br><br><b>Телефоны:</b> '+json.data.destinationPostalPhones+'<br><br><b>Режим работы:</b><br>'+json.data.destinationPostalWorkTime+'">'+json.data.destinationPostalCode+'</span>';
4841															 
4842                                                            route +=  '<span class="route" id="routeDestinationPostalCode">'+postal_code_info+'</span>';
4843															route += ' <i class="fa fa-angle-double-right"></i> '; 
4844															routePointsCount++;
4845													}
4846                                                    else if ((typeof json.data.destinationPostalAddress !== "undefined") && (json.data.destinationPostalAddress !== null) && (json.data.destinationPostalAddress !== "") && (json.data.destinationCompany == 'cdek')) {
4847															var pvz_info = '<span style="border-bottom: 1px dotted; cursor: pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="<b>Информация о пункте выдачи заказов:</b> <a href=\'https://track24.ru/?page=cdek&scode='+json.data.destinationPostalCode.replace(/CDEK:\s*/gm, '')+'\' target=\'_blank\' class=\'dotted\'> СДЭК '+json.data.destinationPostalCode.replace(/CDEK:\s*/gm, '')+'</a> <div style=\'float: right; margin-left: 15px;\'><a href=\'https://track24.ru/?page=cdek&scode='+json.data.destinationPostalCode.replace(/CDEK:\s*/gm, '')+'\' target=\'_blank\' style=\'position: absolute; right: 10px; top: 10px;\'><i class=\'fa fa-external-link\'></i></a></div>" data-content="<b>Адрес:</b> '+json.data.destinationPostalAddress+'<br><br><b>Телефоны:</b> '+json.data.destinationPostalPhones+'<br><br><b>Режим работы:</b><br>'+json.data.destinationPostalWorkTime+'">ПВЗ - СДЭК</span>';
4848															
4849                                                            route +=  '<span class="route" id="routeDestinationPostalCode">'+pvz_info+'</span>';
4850                                                            route += ' <i class="fa fa-angle-double-right"></i> '; 
4851															routePointsCount++;
4852													}													
4853													else {
4854														    route +=  '<span class="route" id="routeDestinationPostalCode">'+json.data.destinationPostalCode+'</span>';
4855															route += ' <i class="fa fa-angle-double-right"></i> '; 
4856															routePointsCount++;
4857													}
4858											   }
4859											   
4860											   if ((typeof json.data.destinationCity !== "undefined") && (json.data.destinationCity !== null) && (json.data.destinationCity !== "")) {
4861												    	route +=  '<span class="route" id="routeDestinationCity">'+json.data.destinationCity+'</span>';
4862														route += ' <i class="fa fa-angle-double-right"></i> '; 
4863														routePointsCount++;
4864											   }
4865											   if ((typeof json.data.destinationAddress !== "undefined") && (json.data.destinationAddress !== null) && (json.data.destinationAddress !== "")) {
4866												    	 route +=  '<span class="route" id="routeDestinationAddress">'+json.data.destinationAddress+'</span>';
4867														 route += ' <i class="fa fa-angle-double-right"></i> '; 
4868														routePointsCount++;
4869											   }
4870											    
4871 
4872
4873
4874
4875											   
4876											   
4877											    
4878											  if (routePointsCount > 0) { 
4879											      route = $.trim(route).replace(/<i class="fa fa-angle-double-right"><\/i>$/gm, '');
4880											      trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title" id="routeTitle" style="">Маршрут</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+route+' <!-- <i class="fa fa-map-o myTooltip" id="routeMarker" aria-hidden="true" style="cursor:pointer;" style="cursor:pointer;" title="Маршрут на карте"></i>--></div></div></li>';												 
4881											  }
4882											 
4883										 
4884										 if (json.data.itemWeight > 0) {
4885 											trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Вес</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.itemWeight+' г</div></div></li>';
4886									     }
4887								         if ( (typeof json.deliveredStat !== "undefined") && (json.deliveredStat !== null) && (json.deliveredStat !== "") ) {
4888											  if ((typeof json.deliveredStat.type !== "undefined") && (json.deliveredStat.type !== null) && (json.deliveredStat.type !== "") && (json.deliveredStat.type !== "n/a")) {
4889												    	
4890														trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Тип отправления</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.deliveredStat.type+'</div></div></li>';
4891											  }
4892									     }
4893										 
4894										  
4895										  if  ((json.data.events[0].source != 'track24') && (json.data.events.length > 1)) {
4896											  var deliveredByShippers = [];
4897											   $.each(json.data.events, function(key, value) {
4898												   if (deliveredByShippers.indexOf(value.source) == -1) {
4899													 deliveredByShippers.push(value.source);   
4900												   }
4901											   });
4902											   if (deliveredByShippers.length > 0) { 
4903												   //console.log(deliveredByShippers);
4904												   trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Источники</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">';
4905													 var deliveredByShippersCount = 0;
4906													 $.each(deliveredByShippers, function(key, value) {
4907														   if (deliveredByShippersCount > 0) { 
4908														      trackInfoToPanel += '<i class="fa fa-angle-double-right" aria-hidden="true"></i>';
4909														   }
4910														  
4911														   if (isEmpty(json.serviceNames) === false) { 
4912														      trackInfoToPanel += '  <span class="sampleTrackCode_ dotted active"><a href="https://track24.ru/service/'+value.toLowerCase()+'/tracking/'+inputedTrackCode+'" target="_blank">'+json.serviceNames[value.toUpperCase()]+'</a></span> ';
4913															  deliveredByShippersCount++;
4914														   }
4915														   
4916														   
4917													 });
4918													trackInfoToPanel += '<span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Компании предоставившие статусы с информацией об отслеживании трек-кода: <b>'+inputedTrackCode+'</b>"></span></div></div></li>';
4919											   }
4920										  }
4921										  
4922										  var myTrackingNumbersDescriptions = new Map();  
4923													 $('.myTrackingNumbersDescriptionSpan').each(function(i, elem) {
4924														    if ( $(this).text() != "Нет описания") {
4925															   myTrackingNumbersDescriptions.set($(this).attr("trackcode"), $(this).text());
4926															}
4927													 });
4928										 
4929										 if ( (typeof json.data.trackCodeModified !== "undefined") && (json.data.trackCodeModified !== null) && (json.data.trackCodeModified !== "") && (json.data.trackCodeModified != "") ) {
4930										        var trackCodesModified = json.data.trackCodeModified.split(",");
4931												if (trackCodesModified.length == 1) {
4932                                                         
4933														 if (myTrackingNumbersDescriptions.has(json.data.trackCodeModified) !== true) {
4934														   trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Перемаркированный трек-код</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span class="sampleTrackCode active">'+json.data.trackCodeModified+'</span> <i class="fa fa-copy copyToClipBoard" data-for-clipboard="'+json.data.trackCodeModified+'" style=""></i> <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения для возможности дальнейшего отслеживания."></span></div></div></li>'; 
4935														 }
4936														 else {
4937															 trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Перемаркированный трек-код</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span class="sampleTrackCode active myTooltip" title="'+myTrackingNumbersDescriptions.get(json.data.trackCodeModified)+'">'+json.data.trackCodeModified+'</span> <i class="fa fa-copy copyToClipBoard" data-for-clipboard="'+json.data.trackCodeModified+'" style=""></i> <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения для возможности дальнейшего отслеживания."></span></div></div></li>';
4938														 }
4939												      
4940													
4941												}
4942												else {
4943													 trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Перемаркированный трек-код</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">';
4944													 $.each(trackCodesModified, function(key, value) {
4945														 if (key > 0) { 
4946														   trackInfoToPanel += '<i class="fa fa-angle-double-right" aria-hidden="true"></i>';
4947														 }
4948														 
4949														 if (myTrackingNumbersDescriptions.has(value) !== true) {
4950														    trackInfoToPanel += '  <span class="sampleTrackCode active">'+value+'</span>  ';
4951														 }
4952														 else {
4953															 trackInfoToPanel += '  <span class="sampleTrackCode active myTooltip" title="'+myTrackingNumbersDescriptions.get(value)+'">'+value+'</spa
4953n>  ';
4954														 }
4955														
4956														 
4957													 });
4958													 trackInfoToPanel += '<span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения для возможности дальнейшего отслеживания."></span></div></div></li>';
4959												}
4960										 }
4961                                          
4962									      if ( (typeof json.data.mergedTrackCodes !== "undefined") && (json.data.mergedTrackCodes !== null) && (json.data.mergedTrackCodes !== "") && (json.data.mergedTrackCodes != "") ) {
4963										        var trackCodesMerged = json.data.mergedTrackCodes.split(",");
4964												if (trackCodesMerged.length > 1) {  
4965													 
4966													
4967													 //console.log(myTrackingNumbersDescriptions);
4968														 
4969													 trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Объединённые отправления</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">';
4970													 $.each(trackCodesMerged, function(key, value) {
4971														 if (key > 0) { 
4972														   trackInfoToPanel += ', ';
4973														 }
4974														 //console.log(value, myTrackingNumbersDescriptions.has(value));
4975														 
4976														 if (myTrackingNumbersDescriptions.has(value) !== true) {
4977														   trackInfoToPanel += '  <span class="sampleTrackCode active_ redMarker_">'+value+'</span>';	 
4978														 }
4979														 else {
4980															 trackInfoToPanel += '  <span class="sampleTrackCode active redMarker_ myTooltip" title="'+myTrackingNumbersDescriptions.get(value)+'">'+value+'</span>';
4981														 }
4982													 });
4983													 trackInfoToPanel += ' <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Для уменьшения стоимости доставки, логистическая компания объединила мелкие пакеты с трек-кодами <b>'+trackCodesMerged.join(', ')+'</b> в одно почтовое отправление с трек-кодом <b>'+json.data.trackCodeModified+'</b>."></span></div></div></li>';
4984												}
4985										 }
4986								   			 						   
4987								  
4988										 
4989										 if ( (typeof json.projectedNextWaypoint !== "undefined") && (json.projectedNextWaypoint !== null) && (json.projectedNextWaypoint !== "") ) {
4990 											  if (json.projectedNextWaypoint.nextAttribute != null) {
4991												    	trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Ожидайте статус</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.projectedNextWaypoint.nextAttribute+' <span class="road-map-spoiler">
4991<svg width="12" height="11" viewBox="0 0 27 27"><path fill="#ccc" d="M26.7,4.895c-0.4-0.5-1.199-0.5-1.599,0L13.512,19.382L1.923,4.895c-0.4-0.5-1.199-0.5-1.599,0c-0.4,0.5-0.4,1.299,0,1.798L12.613,22.08c0.2,0.3,0.5,0.4,0.899,0.4c0.3,0,0.599-0.1,0.899-0.4L26.7,6.694C27.1,6.194,27.1,5.395,26.7,4.895z"></path></svg></span></div></div></li>';
4992												    	trackInfoToPanel += '<div id="road-map" style="display: none;"></div>';
4993											  }
4994									     }
4995										 
4996										 
4997											
4998										if ((typeof json.data.declaredValue !== "undefined") && (json.data.declaredValue !== null) && (json.data.declaredValue !== "")) {
4999											 trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Объявленная ценность</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.declaredValue+' руб.</div></div></li>';
5000										    }
5001										if ((typeof json.data.collectOnDeliveryPrice !== "undefined") && (json.data.collectOnDeliveryPrice !== null) && (json.data.collectOnDeliveryPrice !== "")) {
5002											  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Наложенный платеж</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.collectOnDeliveryPrice+' руб.</div></div></li>';
5003									    }
5004										
5005										
5006										
5007										if ((typeof json.data.allWayTracking !== "undefined") && (json.data.allWayTracking !== null) && (json.data.allWayTracking !== "") && (json.data.upu !== true) && (json.data.events[json.data.events.length - 1].serviceName != 'Track24.ru')) { 
5008											  if (json.data.allWayTracking === true) {
5009											     trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Отслеживание</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">до вручения</div></div></li>';
5010											  }
5011											  else {
5012												  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Отслеживание</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">частичное</div></div></li>';
5013											  }
5014										}
5015										
5016									 
5017									    if ((json.data.deliveredDaysAgo) && (typeof json.data.deliveredDaysAgo !== "undefined") && (json.data.deliveredDaysAgo !== null) && (json.data.deliveredDaysAgo !== "") && (json.data.deliveredDaysAgo > 0)) { 											  
5018											trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Доставлен</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span class="myTooltip dotted" data-toggle="tooltip" data-placement="top" title="'+json.data.trackDeliveredDateTime+'">'+json.data.deliveredDaysAgo+' '+numberof(json.data.deliveredDaysAgo, '', ['день', 'дня', 'дней'])+' назад</span></div></div></li>';
5019										}
5020										
5021										
5022										 if ((typeof json.controlDays !== "undefined") && (json.controlDays !== null) && (json.controlDays !== "")) {
5023										     trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Контрольный срок доставки</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.controlDays+' '+numberof(json.controlDays, '', ['день', 'дня', 'дней'])+'</div></div></li>';
5024									     }	
5025                                          trackInfoToPanel += '</ul>';  
5026										     
5027										       if ((json.data.events.length <= 1) && (json.data.events[0].serviceName == 'Track24.ru')) {
5028											        trackInfoToPanel += '<p><i class="fa fa-info-circle"></i> Мы сожалеем, но информация о трек-коде <a href="//track24.ru/?code='+inputedTrackCode+'">'+inputedTrackCode+'</a> еще не появилась в нашей системе.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Не переживайте! Для заказов оформленных менее 1 - 2 недель назад, это нормально.<br>&nbsp;&nbsp;&nbsp;&nbsp;Как правило, информация <b>начинает обновляться через 3-7 дней</b>, после получения трек-кода</b>.<br>&nbsp;&nbsp;&nbsp;&nbsp;Иногда, с момента получения трек-кода, до начала отслеживания может пройти <b>2 недели</b>.<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="//track24.ru/?page=faq#1" style="border-bottom: 1px dotted;">Подробнее в вопросах и ответах</a>.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Если трек-код не отслеживается более 14 дней, как на нашем сайте так и на сайте торговой площадки,<br>&nbsp;&nbsp;&nbsp;&nbsp;Вы вправе открыть спор, и требовать возврат денег.</p>';
5029													trackInfoToPanel += '<hr>';
5030													trackInfoToPanel += '<p>Рекомендуем, на всякий случай <a href="//track24.ru/?page=store-info" target="_blank">проверить продавца на "вшивость"</a>.</p>';
5031											        
5032												     
5033					                            } 
5034											    else {
5035												   if ((dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0]) > 0) && (dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0]) < 14) && (progressBarPercent <100)) {
5036											   	     trackInfoToPanel += '<p><hr>C момента обновления последнего статуса прошло всего: '+dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0])+' '+numberof(dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0]), '', ['день', 'дня', 'дней'])+ '<br>Если статус почтового отправления не меняется менее 14 дней, не стоит беспокоиться, это нормальное явление для международных почтовых отправлений.</p>';     
5037											       }
5038												}
5039                                              
5040											       trackInfoToPanel += '<p><b>Первый раз на сайте?</b><br> Воспользуйтесь кото-гидом <a href="https://track24.ru/?guide='+inputedTrackCode+'">https://track24.ru/?guide='+inputedTrackCode+'</a><br><small>Внимательно изучайте подсказки у статусов (под знаками вопросов) и информацию в красной рамке (если она есть).</small></p>';     												
5041											 
5042											    
5043											 
5044											   trackingInfoEventsDataForClipBoard += 'Отслеживается: '+json.data.daysTracking+' дней\n';
5045										       trackingInfoEventsDataForClipBoard += '-------------------------'+'\n';
5046 										       trackingInfoEventsDataForClipBoard += 'Постоянная ссылка для отслеживания: https://track24.ru/?code='+inputedTrackCode+'\n\r';
5047										
5048											    
5049											   	  if (progressBarPercent != 100)  {
5050												     progressBarPercent = Math.round((dateDiff(firstOperationDateTime[0], lastOperationDateTime[0])+1) / averageDeliveryDays * 100);
5051													  if (progressBarPercent >= 100) {
5052													     progressBarPercent = 90;													   
5053													  }
5054												  }
5055												 
5056												 
5057												    
5058												    var progress =  '<div style="position:relative; width:100%;">';
5059												      progress += '<span style=" text-align: center; width: 100%;  position: absolute; line-height: 40px;">';
5060												      if (json.data.events[0].source != 'track24') {
5061 													    progress += '<b>В пути '+json.data.daysInTransit+ ' '+numberof(json.data.daysInTransit, '', ['день', 'дня', 'дней'])+'</b>&nbsp;<span class="fa fa-question-circle hidden-xs" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Расчет сроков нахождения почтового отправления в пути, производится исходя из двух дат:<br> <b>1.</b> Дата первого статуса почтовой службы, либо сегодняшняя дата ('+firstDeliveryDateTime[0]+').<br><b>2.</b> Дата прибытия, либо сегодняшняя дата ('+lastDeliveryDateTime[0]+')."></span>&nbsp;<span class="hidden-xs">/</span>&nbsp;<b>Отслеживается&nbsp;'+json.data.daysTracking+ ' '+numberof(json.data.daysTracking, '', ['день', 'дня', 'дней'])+'</b>  <span class="fa fa-question-circle hidden-xs" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Расчет сроков отслеживания, производится исходя из двух дат:<br><b>1.</b> Дата, когда трек-код отслеживался первый раз ('+trackCreationDateTime[0]+').<br> <b>2.</b> Дата последнего обновления ('+trackUpdateDateTime[0]+')."></span>';
5062													  }
5063												      else {
5064                                                        progress += '<b>Отслеживается&nbsp;'+json.data.daysTracking+ ' '+numberof(json.data.daysTracking, '', ['день', 'дня', 'дней'])+'</b>  <span class="fa fa-question-circle hidden-xs" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Расчет сроков отслеживания, производится исходя из двух дат:<br><b>1.</b> Дата, когда трек-код отслеживался первый раз ('+trackCreationDateTime[0]+').<br> <b>2.</b> Дата последнего обновления ('+trackUpdateDateTime[0]+')."></span>';														  
5065													  }
5066													  progress += '</span>';
5067												      
5068													  progress += '<div class="progress progress-striped" style="border-radius: 0em; padding-top:3px; ">';
5069												      progress += '<div aria-valuemax="100" aria-valuemin="0" aria-valuenow="'+progressBarPercent+'" class="progress-bar progress-bar-info" role="progressbar" style="color: #000000; text-align:center; white-space:nowrap; padding-top:10px; font-size: 16px;"></div>';
5070												      progress += '</div>';
5071												      progress += '</div>';
5072												  
5073												  
5074												   
5075												  
5076												   $(progress).insertAfter('.trackingInfo-title-wrapper');
5077												   
5078												   if  ((typeof json.notice !== 'undefined') && (json.notice !== null) && (json.notice !== "") && (json.notice.length > 0)) {
5079													    $.each(json.notice, function(key, value) { 
5080														   $('#trackingInfo').append(trackingNotice(value['type'], value['title'], value['text'], value['spoiler'], value['link'], value['img'], value['details'], value['phone']));
5081													   });
5082												   }												   
5083												   
5084												   $('#trackingInfo').append('<div class="panel panel-info hidden-phone" style="margin-top:5px;"><div class="panel-heading  panel-heading-wrapper"><div class="panel-heading-left"><h4 class="panel-title" style="color: #000000;"><span class="hidden-xs">Информация</span> <span class="hidden-xs hidden-sm">о трек-коде</span><span class="hidden-xs">:</span> <b>'+inputedTrackCode+'</b></h4></div><div class="panel-heading-right"></div></div><div class="panel-body">'+trackInfoToPanel+'</div><div class="panel-footer"><p class="hidden-xs"><b>Постоянная ссылка</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p><div id="share" style="float:left;"> <div id="ya-share-tracking-link" class="_addthis_inline_share_toolbox" style="margin-top:10px; margin-bottom:5px;"></div><span class="hidden-xs hidden-sm hidden-md">Сохраните ссылку, чтобы не потерять!</span></div> <div style="float:right;"><div id="qrMin" class="hidden-xs hidden-sm hidden-md" style="float: left; cursor: pointer; float: right; position: relative; bottom: 1px; left: 4px; width: 80px;" width="80px" title="https://track24.ru/?code='+inputedTrackCode+'""></div><img class="hidden-xs" id="vanga" title="Узнать следующий статус и другие предсказания от котейки" src="https://track24.ru/img/cat-in-square.jpg?2" style="cursor:pointer; float: right; position: relative; bottom: 1px; width: 75px;"><img class="hidden-xs upTrackCode" title="Поднять приоритет трек-кода в общей очереди отслеживания" src="https://track24.ru/img/time-in-square.jpg?3" style="margin-right: 5px; cursor:pointer; float: right; position: relative; bottom: 1px; width: 75px;"><img class="visible-xs upTrackCode" title="Поднять приоритет трек-кода в общей очереди отслеживания" src="https://track24.ru/img/time-in-square.jpg?3" style="margin-right: 0px; cursor:pointer; float: right; position: relative; bottom: 1px; width: 32px;"></div><div class="clear"></div></div></div><div id="'+adblock_prefix+'-3" class="'+adblock_prefix+'-3"></div>'); 
5085												  
5086												  
5087												     if (historyTrackCodesAndNamesArray.length > 0) {       					 
5088															$.each(historyTrackCodesAndNamesArray, function(index, value) {
5089																if (inputedTrackCode == value["trackCode"]) { 
5090																	 $('.trackingInfo-title-right').html("<span class='trackTitleDescription' id='eip_title_"+value['trackCode']+"' trackCode='"+value['trackCode']+"'>"+value['trackName'].substr(0,26)+"</span>"); 
5091																	 $('.panel-heading-right').html("<span class='trackHeadingDescription' id='eip_heading_"+value['trackCode']+"' trackCode='"+value['trackCode']+"'>"+value['trackName'].substr(0,26)+"</span>"); 
5092																} 
5093															}); 
5094															
5095															$(".trackTitleDescription, .trackHeadingDescription").editInPlace({
5096																	 text_max: 26,
5097																	 textarea_max: 26,
5098																	 text_size: 25,
5099																	 textarea_cols:1,
5100																	 textarea_rows:1,															 
5101																	 url: "/ajax/history.ajax.php", 
5102																     success: function(data) {
5103																	   var json = JSON.parse(data);																				   
5104																		   if ((json) && (json.status == 'ok')) {																					   
5105																			   if (json.description != "") {																						  
5106																				   $(this).text(json.description);																						   
5107																			   } 
5108																			   else {
5109																				   $(this).text("");																						   
5110																			   } 
5111																		   }
5112																	 },
5113																	 params: 'checkLogin='+$.Storage.get('login')+'&checkAuthKey='+ $.Storage.get('authKey')+'&trackCode=' + $("#inputTrackCode").val() + '&action=description'															 
5114															});	
5115													}	
5116												  
5117												  
5118												   
5119													 $(window).scroll(function() {
5120														   if ($(".tracking-notice-block-redMarker").length > 0) {
5121													         if ($(".tracking-notice-block-redMarker").visible() === true)  {
5122																$('.tracking-notice-block-redMarker').each(function(i) {
5123																   $(this).delay((i+1)*300).queueAddClass('tracking-notice-block-redMarkerActive').delay((i+1)*600).queueRemoveClass('tracking-notice-block-redMarker');
5124																});
5125															 }
5126														   }
5127															  
5128															 if ($(".well").visible() === true) {
5129															         setTimeout( function() {
5130																	  $('.well').find(".redMarker").removeClass('redMarker').addClass('redMarkerActive');
5131	                                                                 }, 1600);
5132															 }
5133															 
5134															 if ($("#projectedDate").visible() === true) {
5135 																     setTimeout( function() {
5136																	   $('#projectedDate').removeClass('redMarker').addClass('redMarkerActive');
5137	                                                                 }, 2000);
5138															 }
5139															 
5140														});
5141													
5142										          $('[data-toggle="popover"]').popover({html:'true'});
5143									              
5144												  if (findBootstrapEnvironment() === "xs") { 
5145													  $('.sp').addClass('sp_m').removeClass('sp');
5146													  $('.sp_left').addClass('sp_left_m').removeClass('sp_left');
5147													  $('.sp_title').addClass('sp_title_m').removeClass('sp_title');
5148													  $('.sp_line').addClass('sp_line_m').removeClass('sp_line');
5149													  $('.sp_right').addClass('sp_right_m').removeClass('sp_right');
5150													  $('.sp_value').addClass('sp_value_m').removeClass('sp_value'); 
5151													  
5152													  
5153												  }
5154										
5155										if  (device.desktop()) {
5156                                           $('.road-map-spoiler').unbind();
5157										   $(".road-map-spoiler").bind("click", function(e) {
5158											$(".road-map-spoiler").toggleClass("road-map-spoiler-rotated");
5159											 if ($(".road-map-spoiler").hasClass("road-map-spoiler-rotated") === true) { 
5160											     roadMapInit(trackCode, json);
5161										         $("#road-map").slideDown(1000); 
5162											 }
5163											 else {
5164												  $("#road-map").slideUp(1000); 
5165											 }
5166										        
5167										   });
5168										   
5169										}
5170										else {
5171											$('.road-map-spoiler').hide();
5172										}
5173										
5174										 
5175                                           $('.tracking-notice-block-spoiler').unbind();
5176										   $(".tracking-notice-block-spoiler").bind("click", function(e) {
5177											$(".tracking-notice-block-spoiler").toggleClass("tracking-notice-block-spoiler-rotated");
5178												 if ($(".tracking-notice-block-spoiler").hasClass("tracking-notice-block-spoiler-rotated") === true) { 
5179													  
5180													 $(".tracking-notice-block-spoiler-content").slideDown(500); 
5181												 }
5182												 else {
5183													  $(".tracking-notice-block-spoiler-content").slideUp(500); 
5184												 }
5185										        
5186										   });
5187										   
5188										 
5189										if ((device.desktop()) && (groupEventsByServiceTrigger != true) && (hideDublicateEventsTrigger != true))  {
5190											 $(".trackingInfoRow").tooltip({title: "Клик левой кнопки мыши для копирования статуса в буфер обмена.", placement: 'left', delay : { show: 3000} });
5191											 $(".trackingInfoRow").bind("click", function(e) { 
5192											     
5193												 var rowElement = this;
5194												 var selectedEventDataForClipBoard  = "Информация о трек-коде: "+inputedTrackCode+"\n";
5195														 selectedEventDataForClipBoard +=  events[0][$(this).index()]["operationDateTime"]+" ["+events[0][$(this).index()]["serviceName"]+"]\n";
5196														 selectedEventDataForClipBoard +=  (typeof events[0][$(this).index()]["operationAttributeTranslated"] !== 'undefined') ? $.trim(events[0][$(this).index()]["operationAttributeTranslated"])+"\n" : $.trim(events[0][$(this).index()]["operationAttributeOriginal"])+"\n";
5197														 if (eventsArray[$(this).index()]["operationTypeTranslated"] != "") {
5198														   selectedEventDataForClipBoard +=  (typeof eventsArray[$(this).index()]["operationTypeTranslated"] !== 'undefined') ? $.trim(eventsArray[$(this).index()]["operationTypeTranslated"])+"\n" : $.trim(eventsArray[$(this).index()]["operationTypeOriginal"])+"\n";
5199														 }
5200														 selectedEventDataForClipBoard +=  ((typeof events[0][$(this).index()]["operationPlacePostalCode"] !== 'undefined') && (events[0][$(this).index()]["operationPlacePostalCode"] !== ""))  ? $.trim(events[0][$(this).index()]["operationPlacePostalCode"])+" " : "";
5201														 selectedEventDataForClipBoard +=  ((typeof events[0][$(this).index()]["operationPlaceNameTranslated"] !== 'undefined') && (events[0][$(this).index()]["operationPlaceNameTranslated"] !== "")) ? $.trim(events[0][$(this).index()]["operationPlaceNameTranslated"])+"\n" : $.trim(events[0][$(this).index()]["operationPlaceNameOriginal"])+"\n";
5202														 selectedEventDataForClipBoard += 'Отследить на сайте: https://track24.ru/?code='+inputedTrackCode+"\n";
5203														 try {
5204															navigator.clipboard.writeText(selectedEventDataForClipBoard).then(function() {
5205															   
5206															     $(rowElement).attr('data-original-title', "Copied!").tooltip("hide").tooltip('show');
5207															     setTimeout(function() {						  
5208																		  $(rowElement).attr('data-original-title', "Клик левой кнопки мыши для копирования статуса в буфер обмена."); 
5209																  }, 1000);
5210																  
5211															}, function(err) {
5212																console.error('Async: Could not copy text: ', err);
5213															});
5214														 } catch (err) {
5215															console.log(err);
5216															console.log('Oops, unable to copy');
5217														 }	
5218															 
5219											});	
5220										}
5221										
5222										//First / Last
5223										if ($(".trackingInfoStatus").length > 1) {
5224										   $('.trackingInfoStatus').each(function(i) {
5225										        if (i == 0) {
5226													  $(this).addClass('trackingInfoStatusFirst');								                      
5227												  }
5228												  if (i == $(".trackingInfoStatus").length-1) {
5229												 	 $(this).addClass('trackingInfoStatusLast');
5230												  }
5231										   });
5232										}		
5233										//First / Last										
5234										
5235										 if (hideProjectedDeliveryPeriodTrigger == true) {
5236										   $("#projectedDeliveryPeriodBeforeEvents").css('visibility', 'hidden');
5237										   $(".projectedDeliveryPeriodAffterEvents").hide();	 
5238										 }										 
5239										
5240										$('#translateEvents').bind('click', function() {
5241											$('.operationAttribute, .operationPlace').each(function(i) {
5242												 var translatedElement = $(this);
5243												  if ($.trim($(this).text().length) > 1) {
5244												   if  ((typeof $(this).attr("originalText") === "undefined") || ($(this).attr("originalText") === null) || ($(this).attr("originalText") === ""))  {
5245														 $(this).attr("originalText", $(this).text());
5246													}	
5247													
5248													$(this).html('<i class="fa fa-spinner fa-spin"></i> Переводим....');
5249													$.ajax({
5250													         url  : '/ajax/translate.ajax.php',
5251															 data : {'from': 'en', 'to': 'ru', 'text' : $.trim($(this).attr("originalText"))},
5252															 type :	'POST', 
5253															 dataType :  'json',
5254															 success : function(json){
5255															   if (json) { 
5256																   if  (json.status == 'ok') {
5257																		if (json.translatedText !== null) {
5258																		  translatedElement.attr("translatedText", json.translatedText);
5259																		} 
5260																		
5261																		if ((typeof translatedElement.attr("translatedText") !== "undefined") && (translatedElement.attr("translatedText") !== null) && (translatedElement.attr("translatedText") !== "")) {
5262																			translatedElement.text(translatedElement.attr("translatedText"));
5263																			translatedElement.addClass("myTooltip");
5264																			translatedElement.addClass("auto-tooltip");
5265																			translatedElement.attr("data-toggle", 'tooltip');						   	
5266																			translatedElement.attr("data-placement", 'left');
5267																			translatedElement.attr("data-title", translatedElement.attr("originalText"));
5268																			translatedElement.tooltip({container: 'body'});
5269																		} 
5270																		else {
5271																			translatedElement.text(translatedElement.attr("originalText"));
5272																		}
5273																			
5274																		
5275					
5276																	} 
5277																}
5278															},
5279															error: function() {
5280															  translatedElement.text('Упс... Произошла ошибка перевода... ');
5281															}	   
5282														 });
5283													 }	 
5284												 });		 
5285											   
5286											       $('#translateEvents').unbind();
5287												   $(this).delay(100).fadeOut().queue(function(){
5288														$(this).html('<i class="fa fa-check" style="color:green;"></i> <span class="dotted">Переведено</span>').fadeIn().dequeue();
5289												   });
5290											 
5291										 });
5292										  
5293										  var allEventsToClipboard = new Clipboard('#trackingInfoEventsClipBoard', {
5294												text: function() { 
5295													return trackingInfoEventsDataForClipBoard;  
5296												}
5297											});  
5298
5299										   allEventsToClipboard.on('success', function(e) {
5300												  $('#trackingInfoEventsClipBoard').delay(100).fadeOut().queue(function(){
5301															$('#trackingInfoEventsClipBoard').html('<i class="fa fa-check" style="color:green;"></i> <span class="dotted">Скопировано</span>').fadeIn().dequeue();
5302															$('#trackingInfoEventsClipBoard').unbind(); 														
5303														});
5304											});
5305										var lastEventsToClipboard = new Clipboard('#lastEventClipBoard', {
5306												text: function() { 
5307													return lastEventDataForClipBoard;  
5308												}
5309											});  
5310
5311										   lastEventsToClipboard.on('success', function(e) {
5312												  $('#lastEventClipBoard').delay(100).fadeOut().queue(function(){
5313															$('#lastEventClipBoard').html('<i class="fa fa-check" style="color:green;"></i> <span class="dotted">Скопировано</span>').fadeIn().dequeue();
5314															$('#lastEventClipBoard').unbind(); 														
5315														});
5316											});
5317											
5318										 $('#groupEventsByService').click(function(e){
5319 										   groupEventsByServiceTrigger ^= true; 
5320										   $.Storage.set('groupEventsByServiceTrigger', ''+groupEventsByServiceTrigger+'');
5321 										   $('html, body').animate({
5322											    scrollTop: $("#mainContainer").offset().top - 10
5323											 }, 1000);
5324											  tracking();
5325										 });
5326										 $('#hideDublicateEvents').click(function(e){
5327 										   hideDublicateEventsTrigger ^= true; 
5328										   $.Storage.set('hideDublicateEventsTrigger', ''+hideDublicateEventsTrigger+'');
5329										     if (hideDublicateEventsTrigger == false) {
5330											    $(".dublicateEventRow").slideDown(1000);
5331												var hideDublicateEventsText = (hideDublicateEventsTrigger == true ) ? "Отобразить дубликаты" : "Скрыть дубликаты";	
5332												$('#hideDublicateEvents > span').text(hideDublicateEventsText);
5333												$('html, body').animate({
5334													 scrollTop: $("#mainContainer").offset().top - 10
5335												 }, 1000);
5336											 }
5337											 else {
5338												 $('html, body').animate({
5339													 scrollTop: $("#mainContainer").offset().top - 10
5340												 }, 1000);
5341												  tracking();
5342											 }
5343											 
5344										 });
5345										
5346										
5347										$('#sortEvents').click(function(e){
5348 										   sortEventsTrigger ^= true; 
5349										   $.Storage.set('sortEventsTrigger', ''+sortEventsTrigger+'');
5350 										   $('html, body').animate({
5351											    scrollTop: $("#mainContainer").offset().top - 10
5352											 }, 1000);
5353											  tracking();
5354										 });
5355										
5356										
5357										   $('.sampleTrackCode').unbind();
5358										   $('.sampleTrackCode').bind('click', function() {
5359                                                 $("#inputTrackCode").val($(this).text());
5360				                                  tracking();
5361				                           });
5362									        
5363											$('.myTooltip').tooltip();
5364										 	var bar = $('.progress-bar');
5365											
5366											
5367											/* копирование в буффер из отслеживания*/ 
5368											$("#trackingInfo").find(".copyToClipBoard").click(function(e) {
5369												console.log(".copyToClipBoard in tracking");
5370												  e.stopPropagation(); 
5371												  var trackCodeForClipBoard =  $(this).attr("data-for-clipboard");
5372												  var el = $(this);
5373												   try {
5374														navigator.clipboard.writeText(trackCodeForClipBoard).then(function() { 
5375															  $(el).attr('data-original-title', "Скопировано!").tooltip("hide").tooltip('show');
5376															  setTimeout(function() {						  
5377																 $(el).tooltip("destroy");
5378															  }, 1000);
5379															  
5380														}, function(err) {
5381															console.error('Async: Could not copy text: ', err);
5382															alert('Async: Could not copy text: '+ err);
5383														});
5384													 } catch (err) {
5385														console.log(err);
5386														console.log('Oops, unable to copy');
5387														alert(err);
5388													 } 
5389												  return false; 
5390											});
5391											 
5392											$(function(){
5393													  $(bar).each(function(){
5394														bar_width = $(this).attr('aria-valuenow');
5395														  $(this).width(bar_width + '%');
5396																								  
5397													  });
5398											 });	
5399											
5400											  $('.printTracking').click(function(e){
5401													 $("#trackingInfo").printThis( {
5402												        debug: false,      
5403													    importCSS: true, 
5404														importStyle: true,  
5405														printContainer: true, 
5406														pageTitle: "Информация предоставлена системой отслеживания почтовых отправлений: Track24.ru",
5407														printDelay: 333,
5408                                                        removeInline:false														
5409													 });  
5410											  });
5411											  
5412											  
5413											 
5414										      $('.upTrackCode').bind('click', function(e) {
5415											     $.ajax({
5416															 url:   '/ajax/upTrackCode.ajax.php',
5417															 data : {'code' : inputedTrackCode},
5418															 type:	 'GET',
5419                                                             dataType:  'json', 
5420															 success: function(data){
5421															 },
5422															 beforeSend :  function() {  
5423																
5424															 },
5425															 complete: function() {  
5426															 },
5427															 error: function() { 
5428															 }	   
5429														 });
5430											    
5431												 
5432												 var imElement = $(this);
5433											         imElement.fadeOut( function() {
5434													   imElement.attr("src", "https://track24.ru/img/updated-in-square.jpg?3").fadeIn();
5435 													     setTimeout(function() {
5436															  imElement.fadeOut(function() {
5437															     imElement.attr("src", "https://track24.ru/img/ali-logo-in-square.jpg").attr("title", "Перейти на AliExpress за покупками").fadeIn(700); 
5438															     imElement.unbind();	
5439																 imElement.bind('click', function(e) {
5440																				 window.open(
5441																				  'https://track24.ru/?g=upTrackCode', 
5442																				  '_blank' 
5443																				);
5444																});
5445															  });
5446														 }, 2300);
5447													  
5448												   });
5449											   });
5450											   
5451											  $("#qrMin").qrcode({
5452																	render: 'image', // render method: 'canvas', 'image' or 'div'
5453                                                                    minVersion: 1, // version range somewhere in 1 .. 40
5454																	maxVersion: 40,
5455																	ecLevel: 'M', // error correction level: 'L', 'M', 'Q' or 'H'
5456																	left: 0, // offset in pixel if drawn onto existing canvas
5457																	top: 0,																
5458																	size: 71, // size in pixel																	
5459																	fill: '#000', // code color or image element																	
5460																	background: null, // background color or image element, null for transparent background
5461																	text: 'https://track24.ru/?code='+inputedTrackCode,  //content
5462																	radius: 0,// corner radius relative to module width: 0.0 .. 0.5																	
5463																	quiet: 0,// quiet zone in modules
5464																	mode: 0, // modes // 0: normal // 1: label strip // 2: label box // 3: image strip // 4: image box 
5465																	mSize: 0.1,
5466																	mPosX: 0.5,
5467																	mPosY: 0.5,
5468																	label: 'no label',
5469																	fontname: 'sans',
5470																	fontcolor: '#000',
5471																	image: null
5472														});
5473											  
5474											   $('#qrMin').bind('click', function(e) { 
5475												 	var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog text-center"><div id="qrCode"></div><br><div class="text-center" id="kendoBarcode-container"><center><span id="kendoBarcode"></span></center><div class="track-number-scaner"></div></div></div>';
5476												 
5477
5478													
5479													
5480													$.magnificPopup.open({
5481													  items: { src: dialogHtml},
5482													  type: 'inline',
5483													  fixedBgPos: false,
5484													  fixedContentPos: true,
5485													  overflowY: 'scroll',
5486													  closeBtnInside: true,
5487													  preloader: false,          
5488													  midClick: false,
5489													  removalDelay: 400,
5490													  mainClass: 'my-mfp-zoom-in',
5491													  alignTop:false,
5492													  showCloseBtn: true,
5493													  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
5494													  callbacks: {
5495														   open: function() { 
5496																  $('.navbar-fixed-top').css('overflow-y', 'scroll');
5497																	  $("#qrCode").qrcode( {
5498																			render: 'image', // render method: 'canvas', 'image' or 'div'
5499																			minVersion: 1, // version range somewhere in 1 .. 40
5500																			maxVersion: 40,
5501																			ecLevel: 'M', // error correction level: 'L', 'M', 'Q' or 'H'
5502																			left: 0, // offset in pixel if drawn onto existing canvas
5503																			top: 0,																
5504																			size: 200, // size in pixel																	
5505																			fill: '#000', // code color or image element																	
5506																			background: null, // background color or image element, null for transparent background
5507																			text: 'https://track24.ru/?code='+inputedTrackCode,  //content
5508																			radius: 0,// corner radius relative to module width: 0.0 .. 0.5																	
5509																			quiet: 1,// quiet zone in modules
5510																			mode: 0, // modes // 0: normal // 1: label str
5510ip // 2: label box // 3: image strip // 4: image box 
5511																			mSize: 0.1,
5512																			mPosX: 0.5,
5513																			mPosY: 0.5,
5514																			label: 'no label',
5515																			fontname: 'sans',
5516																			fontcolor: '#000',
5517																			image: null
5518																	 });
5519																	 
5520																	  $("#kendoBarcode").kendoBarcode({
5521																			value: inputedTrackCode,
5522																			type: "code128",
5523																			width: 280,
5524																			height: 100
5525																		});
5526																		setTimeout(function() {
5527					                                                        $('.track-number-scaner').animate({left: "100%"}, 600).fadeOut(300);
5528					 													}, 300);
5529																		
5530															},
5531															close: function() {
5532																  $('.navbar-fixed-top').css('overflow-y', 'visible');
5533															}
5534													  }
5535													  
5536
5537												  });
5538												});   
5539											   
5540											 $('.showDeliveredStatChart').bind('click', function(e) {
5541												  var currentPrefix = $(this).attr("data-prefix");
5542												  var currentPostfix = $(this).attr("data-postfix");
5543												  showDeliveredStatChart(currentPrefix, currentPostfix);
5544											 });   
5545										     if  (json.data.upu !== true) {
5546											    $('#vanga').hide();
5547										    }
5548											   $('#vanga').click(function(){ 
5549												    var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog" style="min-width:700px;"><div id="vangaModal"><div class="vanga-header"><h4 class="modal-title">Информация о трек-коде</h4></div><div class="vanga-body"></div><hr><div class="vanga-footer" style="padding-top:10px;"><center>Информация предоставлена по данным звезд, кофейной гущи, карт таро и магических шаров =))</center></div></div> </div>';    
5550													  $.magnificPopup.open({
5551													  items: { src: dialogHtml},
5552													  type: 'inline',
5553													  fixedBgPos: false,
5554													  fixedContentPos: true,
5555													  overflowY: 'scroll',
5556													  closeBtnInside: true,
5557													  preloader: false,          
5558													  midClick: false,
5559													  removalDelay: 400,
5560													  mainClass: 'my-mfp-zoom-in',
5561													  alignTop:false,
5562													  showCloseBtn: true,
5563													  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
5564													  callbacks: {
5565														   open: function() { 
5566																  $('.navbar-fixed-top').css('overflow-y', 'scroll');
5567															},
5568															close: function() {
5569																  $('.navbar-fixed-top').css('overflow-y', 'visible');
5570															}
5571													  }
5572													  
5573
5574												  });
5575												  $('#vangaModal > div.vanga-header > h4').text('Информация о трек-коде: '+$('#inputTrackCode').val());
5576												   $('#vangaModal > div.vanga-body').html('<center><br><br><img src="/img/magic-cat.gif" style=""><br><br>Сбор данных, минуточку...</center>');
5577													 $.get('/ajax/vanga.ajax.php?code=' + $('#inputTrackCode').val(), function(data) {
5578														   $('#vangaModal > div.vanga-body').fadeOut(function(){
5579																 $('#vangaModal > div.vanga-body').html(data).fadeIn();
5580																 $('#vangaModal > div.vanga-body > div:nth-child(1) > img').bind('click', function(e) {
5581 																	 var statTable = $('#vangaDeliveryStatistics').html();
5582																	  $('#vangaModal > div.vanga-body').html("<br><br><br><br><br><br>"+statTable);
5583																 });
5584                 
5585														   });
5586													   }); 	  
5587													 
5588											    });
5589											   
5590											    
5591											       var trackCatClickCounter = 0;
5592													 $(".trackCat").click(function() {
5593													   trackCatClickCounter = trackCatClickCounter + 1;
5594													   if (trackCatClickCounter == 3) {
5595															$('.embed').remove();
5596															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/meow.mp3" preload="auto"></audio>');
5597															document.getElementById('meow').play();
5598														}
5599													   if (trackCatClickCounter == 5) {
5600															$('.embed').remove();
5601															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/mrrr.mp3" preload="auto"></audio>');
5602															document.getElementById('meow').play();
5603														}
5604													   if (trackCatClickCounter > 5) {
5605															trackCatClickCounter = 0;
5606														}
5607													 });
5608											   
5609  											       
5610													 
5611											    
5612												   setTimeout(function() {
5613													   
5614													   ya_share_title = "Отследить посылку: "+inputedTrackCode;
5615													   ya_share_description = "Отслеживание посылок на Track24.ru";
5616													   ya_share_url = 'https://track24.ru/?code='+inputedTrackCode; 
5617													   ya_share_img_url = 'https://track24.ru/img/share-968x504.jpg'; 
5618													   yaShareInit('ya-share-tracking-link', ya_share_title, ya_share_description, ya_share_url, ya_share_img_url); 
5619													    
5620														/*
5621														   try { 
5622																 if (typeof addthis.layers.refresh === "function") {	
5623																	 addthis.layers.refresh(); 																 
5624																 }
5625															 } catch(e) {
5626																 console.log('Error: ' + e.name + ":" + e.message + "\n" + e.stack);  
5627															 }
5628														 */
5629													 }, 500);								
5630												    
5631												 
5632												
5633												 $('#routeOriginCountry, #routeDestinationCountry').bind('click', function(e) {
5634													     var addrr = $(this).text();
5635														 console.log(addrr);  
5636													    var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog"> <fieldset class="content"><legend>&nbsp;&nbsp;<b><font color="#1B81B1">'+addrr+'</font></b>&nbsp;&nbsp;</legend><div class="map" id="YMapsID"  style="margin:5px; width: 98%; height: 400px; border: 0px #000000 solid;"></div></fieldset></div>';
5637														 $.magnificPopup.open({
5638															  items: { src: dialogHtml},
5639															  type: 'inline',
5640															  fixedBgPos: false,
5641															  fixedContentPos: true,
5642															  overflowY: 'scroll',
5643															  closeBtnInside: true,
5644															  preloader: false,          
5645															  midClick: false,
5646															  removalDelay: 400,
5647															  mainClass: 'my-mfp-zoom-in',
5648															  alignTop:false,
5649															  showCloseBtn: true,
5650															  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
5651															  callbacks: {
5652																   open: function() { 
5653																		  $('.navbar-fixed-top').css('overflow-y', 'scroll');
5654																		     	 $.getScript('https://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU&apikey=56f90107-af88-461a-9880-839fbac1cdbd').done(function() {
5655																				     ymaps.ready(init);
5656																					 
5657																					 /*
5658																					 function init() {
5659																							    
5660																							    ymaps.geocode(addrr, { results: 1 }).then(function(res) { 
5661																									 myMap = new ymaps.Map("YMapsID", {
5662																											center: res.geoObjects.get(0).geometry.getCoordinates(),
5663																											zoom: 10
5664																										});
5665																									 myMap.container.fitToViewport();
5666																									 var myPlacemark = window.lastPoint = new ymaps.Placemark(res.geoObjects.get(0).geometry.getCoordinates(), {
5667																										 balloonContent: '<i class="fa fa-building"></i> '+addrr,										 
5668																									   }, 
5669																									   {
5670																										preset: "twirl#buildingsIcon",
5671																										balloonCloseButton: true,
5672																										hideIconOnBalloonOpen: true 
5673																										});
5674																									   myMap.geoObjects.add(myPlacemark);
5675																									   myMap.controls.add('zoomControl');
5676																								}); 				 
5677																								
5678																						
5679																						}
5680																						*/
5681																						function init() {
5682																							$.getJSON(
5683																								'/ajax/geocoder.ajax.php', {address: addrr},
5684																								function(response) {
5685
5686																									// Проверяем результат API
5687																									if (response.result !== 'success' || !response.data) {
5688																										alert('Не удалось определить координаты: ' + (response.message || 'неизвестная ошибка')
5689																										);
5690																										return;
5691																									}
5692
5693																									const coords = [response.data.latitude,	response.data.longitude];
5694
5695																									myMap = new ymaps.Map("YMapsID", {
5696																										center: coords,
5697																										zoom: 5
5698																									});
5699
5700																									myMap.container.fitToViewport();
5701
5702																									const myPlacemark = new ymaps.Placemark(
5703																										coords,
5704																										{
5705																											balloonContent:
5706																												'<i class="fa fa-building"></i> ' + addrr
5707																										},
5708																										{
5709																											preset: "twirl#buildingsIcon",
5710																											balloonCloseButton: true,
5711																											hideIconOnBalloonOpen: true
5712																										}
5713																									);
5714
5715																									myMap.geoObjects.add(myPlacemark);
5716
5717																									myMap.controls.add('zoomControl');
5718
5719																								}
5720																							);
5721																						}
5722																						
5723																						
5724
5725																				 });
5726																				 
5727																				
5728
5729																	},
5730																	close: function() {
5731																		 $('.navbar-fixed-top').css('overflow-y', 'hidden');
5732																	}
5733															  }
5734															  
5735
5736														  });
5737														  
5738												 });	 
5739                                 
5740                               }
5741							   else if ((json.status == 'ok') && ((typeof json.data.events === "undefined") || (json.data.events !== null) || (json.data.events !== "")))  {
5742                                   $('#trackingInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">К сожалению, информация о почтовом отправлении с номером <b>'+inputedTrackCode+'</b> не найдена.</br>Попробуйте еще раз, но чуть позже, например завтра...<br>Или зарегистрируйтесь и добавьте трек-код в историю отслеживания, и мы уведомим Вас, как только обновится информация по Вашему трек-коду!</div><div class="panel-footer"><p><b>Постоянная ссылка для отслеживания</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p></div></div>');
5743								   
5744                               }
5745							                                      
5746							   else if (json.status == 'error') {
5747                                       $('#trackingInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+json.message+'</div></div>');
5748									    $('.addTransportCompany').click(function(e){
5749											   addTransportCompany();
5750										 });
5751										 
5752										 $('.sampleTrackCode').unbind();
5753										   $('.sampleTrackCode').bind('click', function() {
5754                                                 $("#inputTrackCode").val($(this).text());
5755				                                 tracking();
5756				                         });
5757										 
5758										 $('[data-toggle="popover"]').popover({html:'true'});
5759										 $('[data-toggle="tooltip"]').tooltip();
5760										 
5761										 var trackCatClickCounter = 0;
5762													 $(".trackCat").click(function() {
5763													   trackCatClickCounter = trackCatClickCounter + 1;
5764													   if (trackCatClickCounter == 10) {
5765															$('.embed').remove();
5766															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/meow.mp3" preload="auto"></audio>');
5767															document.getElementById('meow').play();
5768														}
5769													   if (trackCatClickCounter == 15) {
5770															$('.embed').remove();
5771															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/mrrr.mp3" preload="auto"></audio>');
5772															document.getElementById('meow').play();
5773														}
5774													   if (trackCatClickCounter > 15) {
5775															trackCatClickCounter = 0;
5776														}
5777										 });
5778													  
5779											  
5780							       }
5781						       else {
5782                                    $('#trackingInfo').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">Ошибка получения данных. Пожалуйста сообщите разрабочикам!</div><div class="panel-footer"><p><b>Постоянная ссылка для отслеживания</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p></div></div>');
5783						       }
5784}
5785
5786
5787
5788function trackingNotice(type, titleString, textString, spoilerString, linkUrl, imgrl, buttonText, phone) { 
5789		   var htmlResult = ""; 
5790		   
5791		   var blockClass =  ((typeof type !== 'undefined') && (type !== null) && (type !== ""))  ? 'tracking-notice-block-'+type : 'tracking-notice-block-danger'
5792		   
5793		   
5794			
5795			htmlResult = 	'<div class="tracking-notice-block '+blockClass+'">';
5796			if  ((typeof linkUrl !== 'undefined') && (linkUrl !== null) && (linkUrl !== "") && (typeof imgrl !== 'undefined') && (imgrl !== null) && (imgrl !== "")) {		
5797				htmlResult += 	'   <div class="tracking-notice-block-img-wrapper">\
5798								   <a href="'+linkUrl +'" target="_blank">\
5799									   <img class="tracking-notice-block-img" src="'+imgrl+'" width="120px">\
5800								   </a>\
5801								</div>';
5802			}	
5803            if  (((typeof linkUrl === 'undefined') || (linkUrl === null) || (linkUrl === "")) && ((typeof imgrl !== 'undefined') && (imgrl !== null) && (imgrl !== ""))) {
5804				htmlResult += 	'   <div class="tracking-notice-block-img-wrapper">\
5805									   <img class="tracking-notice-block-img" src="'+imgrl+'" width="120px">\
5806								</div>';
5807			}				
5808			
5809			if  (((typeof titleString !== 'undefined') && (titleString !== null) && (titleString !== "")) || ((typeof textString !== 'undefined') && (textString !== null) && (textString !== ""))) {		
5810				htmlResult += 	'<div class="tracking-notice-block-text-wrapper">';
5811					if  ((typeof titleString !== 'undefined') && (titleString !== null) && (titleString !== "")) {	
5812						 htmlResult += 	'	 <div class="tracking-notice-block-title">'+titleString+'</div>';
5813					}
5814					if  ((typeof phone !== 'undefined') && (phone !== null) && (phone !== "")) {	
5815						 htmlResult += 	'	 <div class="tracking-notice-block-phone"><a href="tel:'+phone+'"><i class="fa fa-phone"></i> '+phone+'</a></div>';
5816					}
5817					if  ((typeof textString !== 'undefined') && (textString !== null) && (textString !== "")) {	
5818						 htmlResult += 	'    <div class="tracking-notice-block-text">'+textString+'</div>';
5819						
5820					} 
5821					if  ( (typeof spoilerString !== 'undefined') && (spoilerString !== null) && (spoilerString !== "")) {
5822					     htmlResult += 	'    <div class="tracking-notice-block-spoiler-content">'+spoilerString+'</div>';
5823					}
5824					 
5825				htmlResult += 	'</div>';
5826			}
5827			
5828			if  ((typeof linkUrl !== 'undefined') && (linkUrl !== null) && (linkUrl !== "") && (typeof buttonText !== 'undefined') && (buttonText !== null) && (buttonText !== "")) {				  
5829				htmlResult += 	'<div class="tracking-notice-block-link">\
5830								  <span><a href="'+linkUrl+'" class="dotted" target="_blank">'+buttonText+'</a></span>\
5831							</div>';
5832			}
5833			
5834			if  ((typeof linkUrl !== 'undefined') && (linkUrl !== null) && (linkUrl !== "") ) {
5835				htmlResult += 	'<br class="tracking-notice-block-clear">';
5836			} 
5837			
5838			if  ( (typeof spoilerString !== 'undefined') && (spoilerString !== null) && (spoilerString !== "")) {				   
5839				htmlResult += 	'<div class="tracking-notice-block-spoiler-wrapper">\
5840				  			         <span><span class="tracking-notice-block-spoiler"><svg width="12" height="11" viewBox="0 0 27 27"><path fill="#ccc" d="M26.7,4.895c-0.4-0.5-1.199-0.5-1.599,0L13.512,19.382L1.923,4.895c-0.4-0.5-1.199-0.5-1.599,0c-0.4,0.5-0.4,1.299,0,1.798L12.613,22.08c0.2,0.3,0.5,0.4,0.899,0.4c0.3,0,0.599-0.1,0.899-0.4L26.7,6.694C27.1,6.194,27.1,5.395,26.7,4.895z"></path></svg></span></span>\
5841  							     </div>';
5842			}
5843			
5844			
5845			htmlResult += 	'</div>';						  
5846					 
5847			
5848		  
5849	 return htmlResult;
5850}
5851
5852$.fn.queueAddClass = function(className) {
5853    this.queue('fx', function(next) {
5854        $(this).addClass(className);
5855        next();
5856    });
5857    return this;
5858};
5859$.fn.queueRemoveClass = function(className) {
5860    this.queue('fx', function(next) {
5861        $(this).removeClass(className);
5862        next();
5863    });
5864    return this;
5865}; 
5866
5867function activateRoadPoint(ind) { 
5868		     var roadMapsPoints = $('.road-map-point');   
5869			 $('.road-map-point').each(function() {
5870				 if ($(this).index() > ind) {
5871				   $(this).removeClass('complete');  
5872				 }
5873				 else {
5874					 $(this).addClass('complete');
5875				 }
5876			 });
5877			 $(roadMapsPoints).not($(roadMapsPoints).eq(ind)).removeClass('active');
5878			 $($(roadMapsPoints).eq(ind)).addClass('active');
5879	}
5880	  
5881	  function roadMapInit(trackCode, json) {
5882		  var roadMapContent = '\
5883		  <div class="road-map-wrapper">\
5884		             <div class="road-map-parent">\
5885						<div class="road-map-points-container">\
5886							<div class="road-map-point">\
5887								<span data-date="" data-info="Регистрация"></span>\
5888							</div>\
5889							<div class="road-map-point">\
5890								<span data-date="" data-info="Прием / отправка"></span>\
5891							</div>\
5892							<div class="road-map-point">\
5893								<span data-date="" data-info="Отправка в страну назначения"></span>\
5894							</div>\
5895							<div class="road-map-point">\
5896								<span data-date="" data-info="Прибытие в ММПО"></span>\
5897							</div>\
5898							<div class="road-map-point">\
5899								<span data-date="" data-info="Экспорт"></span>\
5900							</div>\
5901							<div class="road-map-point">\
5902								<span data-date="" data-info="Прибытие в страну"></span>\
5903							</div>\
5904							<div class="road-map-point">\
5905								<span data-date="" data-info="Импорт"></span>\
5906							</div>\
5907							<div class="road-map-point">\
5908								<span data-date="" data-info="Передача таможне"></span>\
5909							</div>\
5910							<div class="road-map-point">\
5911								<span data-date="" data-info="Выпуск таможней"></span>\
5912							</div>\
5913							<div class="road-map-point">\
5914								<span data-date="" data-info="Убытие из ММПО"></span>\
5915							</div>\
5916							<div class="road-map-point">\
5917								<span data-date="" data-info="Прибытие в место вручения"></span>\
5918							</div>\
5919							<div class="road-map-point">\
5920								<span data-date="" data-info="Вручение"></span>\
5921							</div>\
5922						</div>\
5923						<div class="road-map-country-container">\
5924							<div class="road-map-origin-country">'+json.data.fromCountry+'</div>\
5925							<div class="road-map-track-code"></div>\
5926							<div class="road-map-destination-country">'+json.data.destinationCountry+'</div>\
5927						</div>\
5928				  </div>\
5929			</div>';
5930		    //'+trackCode+'
5931	        $('#road-map').html(roadMapContent);
5932	   
5933			var roadMapsPoints = $('.road-map-point');  
5934			var completedWaypointNumberKey = -1;		
5935		 
5936			if ((json.projectedNextWaypoint !== null) && (json.projectedNextWaypoint.completedWaypointsByDate.length > 1)) {
5937			   $.each(json.projectedNextWaypoint.completedWaypointsByDate, function(key, value) {
5938						 if (value.date != null) {
5939							 $(roadMapsPoints).eq(key).find("span").attr('data-date', value.date);
5940							 completedWaypointNumberKey = (completedWaypointNumberKey <= key) ? key: completedWaypointNumberKey;
5941						 }
5942				});
5943				var totalCompletePoints = 12;
5944				$.each(roadMapsPoints, function(key, value) {
5945					if ((key < completedWaypointNumberKey) && ($(this).find("span").attr('data-date') == "")) { 
5946						totalCompletePoints = totalCompletePoints - 1;
5947					}
5948				});
5949			}
5950			
5951		 
5952			if (completedWaypointNumberKey >= 0) {
5953				 
5954				 setTimeout( function() {
5955					 activateRoadPoint(completedWaypointNumberKey);
5956				  }, 1000); 
5957			}
5958			
5959			$($('.road-map-point')).dblclick(function(){ 
5960				activateRoadPoint($(this).index());
5961			});
5962		  
5963	  }
5964
5965function trackingInComments(el, tc, e) {
5966	     //console.log(el);
5967	     //console.log(tc);
5968	     //console.log("trackingInComments");
5969		 ctrlKeyPressed = e.ctrlKey; 
5970		 shiftKeyPressed = e.shiftKey; 
5971         
5972				 if  ($('#trackingInfo2').length > 0) {
5973                       $(".trackingInCommentsFlagRotated").removeClass("trackingInCommentsFlagRotated");
5974					   
5975                      if ($("#trackingInfo2").attr("data-track-code") == tc) {					  
5976                           $("#trackingInfo2").slideUp(600, function() { 
5977								$("#trackingInfo2").empty().remove();
5978					       }); 	
5979                         return false;						   
5980					  }
5981					  else {
5982						  $('#trackingInfo2').each(function() {	
5983                               $(this).empty().remove();						  
5984							});
5985					  }
5986				 }
5987				 $(el).addClass("trackingInCommentsFlagRotated");
5988 				   
5989				 var inputedTrackCode = tc.toUpperCase();
5990				     inputedTrackCode = inputedTrackCode.replace(/[^А-Яа-яA-Za-z0-9\-\.\/]/gi, '');
5991					 inputedTrackCode = $.trim(inputedTrackCode);
5992                					 
5993				if  (inputedTrackCode.length < 1) { 
5994					  return false;
5995				}
5996
5997				   $(el).parent().parent().after('<div id="trackingInfo2" class="trackingInfoInComments" data-track-code="'+tc+'"><div id="tracking-in-comments-ajax-loader"><div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div></div></div>');
5998				  $("#tracking-in-comments-ajax-loader").fadeIn();
5999				  
6000				  
6001				  
6002			 
6003
6004				 var lng = $.Storage.get("lng");	  
6005				 
6006					if ((inputedTrackCode.length >= 5) && (inputedTrackCode.length <= 28)) {
6007						$.Storage.set('lastPostTrackingCode', inputedTrackCode);
6008		                  document.title = 'Отслеживание почтового отправления: '+inputedTrackCode;
6009 						  if ((typeof selectedService === "undefined") || (selectedService === null) || (selectedService === "") )  {
6010								var tUrl = document.location.toString();
6011                          } 
6012						  else {
6013						    window.history.pushState('', 'Отслеживание почтового отправления: '+inputedTrackCode, '/service/'+selectedService.toLowerCase()+'/tracking/'+inputedTrackCode);
6014						  }
6015						
6016						
6017						if ((device.desktop()) || (device.tablet())) {
6018						    lastTrackCodesBuilder(inputedTrackCode);	 						 
6019						}
6020						 
6021						if (shiftKeyPressed === true) {  
6022						    $.ajax({
6023								    url:   '/ajax/upTrackCode.ajax.php',
6024									data : {'code' : inputedTrackCode},
6025									type:	 'GET',
6026                                    dataType:  'json', 
6027									async: false,
6028									success: function(data){ 
6029									} 	   
6030							});
6031						}	
6032						shiftKeyPressed = false;
6033						  
6034                        xhrTracking =  $.ajax({
6035                            
6036							url  : trackingUrlCache,
6037							crossDomain: true,
6038							data : {'code' : inputedTrackCode, 'selectedService':selectedService, 'lng':lng, 'sort':sortEventsTrigger, 'grouped':groupEventsByServiceTrigger, 'type': 'cache', 'key':trackingKey, 'clientIp':clientIp, 'uuid':uuid, 'fingerprint': $.Storage.get("fingerprint")},
6039        	                type :	 'POST',
6040                            dataType :  'json',
6041							 
6042							timeout : (trackingTimeOut),
6043							   success: function(json){  
6044							 
6045							    $("#tracking-in-comments-ajax-loader").hide();
6046							      if (json) { 
6047								      
6048									    try { 											 
6049										    var _0x6a0a=["\x63\x74","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","","\x65\x6E\x63","\x73\x74\x72\x69\x6E\x67\x69\x66\x79", cp, "\x64\x65\x63\x72\x79\x70\x74","\x41\x45\x53","\x70\x61\x72\x73\x65"];if( typeof json[_0x6a0a[0]]!== _0x6a0a[1]&& json[_0x6a0a[0]]!== null&& json[_0x6a0a[0]]!== _0x6a0a[2]){var json=JSON[_0x6a0a[8]](CryptoJS[_0x6a0a[7]][_0x6a0a[6]](JSON[_0x6a0a[4]](json),_0x6a0a[5],{format:CryptoJSAesJson}).toString(CryptoJS[_0x6a0a[3]].Utf8))}
6050										 } 
6051										catch(e) {
6052											 endTrackingProgress();
6053											 $(".progress").remove();
6054											 $(".progressBarText").empty();
6055											 trackingErrorLoggerFunction([clientIp, clientCountryCode, inputedTrackCode, "catch CryptoJSAesJson"]);
6056											 console.log('Error: ' + e.name + ":" + e.message + "\n" + e.stack);  
6057										 }
6058									  
6059									   
6060										
6061										
6062										
6063										if (json.status == 'ok') {
6064											
6065										if (json && json.challenge && json.challenge === true) {
6066											  //clearInterval(getTrackingDataInterval);	 
6067											   $("#turnstile-container").show();
6068													loadTurnstileScript(function () {
6069														turnstile.render('#turnstile-container', {
6070															sitekey: '0x4AAAAAAA9kACzU3nI8h1V0',
6071															size: 'flexible',
6072															theme: 'light',
6073															callback: function (cf_turnstile_response) {
6074																verifyCaptchaInComments(cf_turnstile_response, el, tc, e);  
6075															}
6076														});
6077													});
6078											return false;
6079										}
6080										
6081										if (json && json.data && json.data.events && json.data.events.length > 0) {	
6082											trackingBuilderInComments(inputedTrackCode, json);									
6083										}
6084										else {
6085											GrowlNotification.notify({title:"Error",description:"Ooops... Item is not found at this moment, If necessary, please verify with the package sender and check back later.",type:"error",closeTimeout:5000,showProgress: true});
6086										} 
6087										
6088                                        
6089										
6090										if (device.desktop()) {		
6091											 if ($('#trackingAvailableServices').length > 0) {
6092												 serviceInfoBuilder(inputedTrackCode, json); 
6093											 }
6094											  upuValidateInfo(inputedTrackCode, json);
6095										 }										
6096											
6097											
6098											
6099										  //if  (json['data']['trackUpdateDiffMinutes'] >= 240)  {
6100										   if  ((json['data']['trackUpdateDiffMinutes'] >= 240) && ((typeof json['data']['deliveredDaysAgo'] === "undefined") || (json['data']['deliveredDaysAgo'] === null) || (json['data']['deliveredDaysAgo'] === "") || (json['data']['deliveredDaysAgo'] <= maxDeliveredDaysAgoForTracking))) {
6101											      var progress =  '';
6102												      progress += '<span style=" text-align: center; width: 100%;  position: absolute; line-height: 40px;" class="progressBarText"><b>Обновление информации...</b></span>';
6103												      progress += '<div class="progress progress-striped active" style="border-radius: 0em; padding-top:3px; /* position: relative;*/">';
6104												      progress += '<div aria-valuemax="100" aria-valuemin="0" aria-valuenow="100" class="progress-bar progress-bar-info" role="progressbar" style="color: #000000; text-align:center; white-space:nowrap; padding-top:10px; font-size: 16px; width:100%;"></div>';
6105												      progress += '</div>';
6106												      
6107												$(".progress-striped").parent().empty().html(progress); 
6108												
6109											    xhrTracking = $.ajax({
6110													url  : trackingUrl,
6111													crossDomain: true,
6112													data : {'code' : inputedTrackCode, 'selectedService':selectedService, 'lng':lng, 'sort':sortEventsTrigger, 'grouped':groupEventsByServiceTrigger, 'type': 'update', 'key':trackingKey, 'clientIp':clientIp, 'uuid':uuid, 'fingerprint': $.Storage.get("fingerprint")}, 
6113													type :	 'POST',
6114													dataType :  trackingDataType,
6115													  timeout : (trackingTimeOut),
6116													   success: function(json){  
6117														   if (json) {
6118															    
6119																 try { 											 
6120																   var _0x6a0a=["\x63\x74","\x75\x6E\x64\x65\x66\x69\x6E\x65\x64","","\x65\x6E\x63","\x73\x74\x72\x69\x6E\x67\x69\x66\x79", cp, "\x64\x65\x63\x72\x79\x70\x74","\x41\x45\x53","\x70\x61\x72\x73\x65"];if( typeof json[_0x6a0a[0]]!== _0x6a0a[1]&& json[_0x6a0a[0]]!== null&& json[_0x6a0a[0]]!== _0x6a0a[2]){var json=JSON[_0x6a0a[8]](CryptoJS[_0x6a0a[7]][_0x6a0a[6]](JSON[_0x6a0a[4]](json),_0x6a0a[5],{format:CryptoJSAesJson}).toString(CryptoJS[_0x6a0a[3]].Utf8))}
6121																 } 
6122																catch(e) {
6123																	 endTrackingProgress();
6124																	 $(".progress").remove();
6125																	 $(".progressBarText").empty();
6126																	 trackingErrorLoggerFunction([clientIp, clientCountryCode, inputedTrackCode, "catch CryptoJSAesJson"]);
6127																	 console.log('Error: ' + e.name + ":" + e.message + "\n" + e.stack);  																	 
6128																 }
6129																$('#trackingInfo2').empty();
6130																trackingBuilderInComments(inputedTrackCode, json); 
6131																
6132															}
6133															else {
6134																    console.log("Error: !json");
6135															        setTimeout( function() {
6136																			location.reload();
6137																    }, 100); 
6138															}
6139													   },
6140													   beforeSend :  function() {  
6141															 
6142													   },
6143													   complete: function(response) { 
6144														  $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
6145								                          $("#trackingButton").toggleClass('disabled');
6146								                          $(".load-bar-disabled").hide();
6147														  $(".load-bar-under-stripe-disabled").hide();
6148														  $(".load-bar").toggleClass('active');
6149														  
6150														    
6151													   },
6152													   error: function(objAJAXRequest, strError) {
6153															     console.log("ajax update error: "+strError);
6154															       setTimeout( function() {
6155																			 location.reload();
6156																	 }, 100); 
6157															 
6158															 
6159															   if (objAJAXRequest['status'] == "404") {
6160																	 setTimeout( function() {
6161																			 location.reload();
6162																	 }, 5000); 
6163																}
6164																if (objAJAXRequest['status'] == "502") {
6165																	 setTimeout( function() {
6166																			 location.reload();
6167																	 }, 300); 
6168																}
6169																
6170																
6171																
6172
6173															 
6174													   }	   
6175												 });	
6176								             }
6177											 else {
6178											     $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
6179								                 $("#trackingButton").toggleClass('disabled');
6180								                 $(".load-bar-disabled").hide();
6181												 $(".load-bar-under-stripe-disabled").hide();
6182												 $(".load-bar").toggleClass('active');
6183												  
6184											 }
6185										}
6186										else {
6187											  
6188										      $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
6189								              $("#trackingButton").toggleClass('disabled');
6190								              $(".load-bar-disabled").hide();
6191											  $(".load-bar-under-stripe-disabled").hide();
6192											  $(".load-bar").toggleClass('active');
6193											  
6194											  if ((json.status == 'error') && (typeof json.message !== "undefined") && (json.message !== null) && (json.message !== ""))  {
6195                                                 $('#trackingInfo2').html('<div class="panel panel-danger hidden-phone" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+json.message+'</div></div>');										
6196											  }
6197										}
6198									}
6199							   },
6200							   beforeSend :  function() {  
6201									 $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
6202									 $("#trackingButton").toggleClass('disabled');
6203									 $(".load-bar-disabled").show();													
6204									 $(".load-bar").toggleClass('active');
6205							   },
6206							   complete: function(response) { 
6207								  
6208										
6209							   },
6210							  
6211								 error: function(objAJAXRequest, strError, errorThrown) {
6212									   console.log("ajax cache error: "+strError);
6213									 
6214									 
6215								    $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
6216                                    $("#trackingButton").toggleClass('disabled');
6217								    $(".load-bar-disabled").hide();														  
6218									$(".load-bar-under-stripe-disabled").hide();
6219									$(".load-bar").toggleClass('active');
6220									
6221									if (objAJAXRequest['status'] != "502") {
6222									    $('#trackingInfo2').html('<div class="panel panel-danger hidden-phone" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка отслеживания: <b>'+strError+' '+objAJAXRequest['status']+'</b></h4></div><div class="panel-body">К сожалению, информация о почтовом отправлении с номером <b>'+inputedTrackCode+'</b> не найдена.</br>Попробуйте еще раз, но чуть позже, например завтра...<br>Или зарегистрируйтесь и добавьте трек-код в историю отслеживания, и мы уведомим Вас, как только обновится информация по Вашему трек-коду!</div><div class="panel-footer"><p><b>Постоянная ссылка</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p></div></div>');
6223										 var dataArray = [clientIp, clientCountryCode, inputedTrackCode, strError, objAJAXRequest['status'], window.location.href, trackingUrl, navigator.userAgent];
6224										 trackingErrorLoggerFunction(dataArray);
6225                                           
6226										   setTimeout( function() {
6227												location.reload();
6228										   }, 5000); 										 
6229									}    
6230									
6231									if (objAJAXRequest['status'] == "404") {
6232										setTimeout( function() {
6233											 location.reload();
6234										}, 5000); 
6235									}
6236									else if (objAJAXRequest['status'] == "429") {																	 
6237										 $.notify('Вы делаете слишком частые запросы!\nПомедленее пожалуйста...', "error");																		 
6238									}
6239									else if (objAJAXRequest['status'] == "502") {
6240										 setTimeout( function() {
6241												location.reload();
6242										}, 5000); 
6243									} 
6244									
6245									
6246
6247							   },
6248							   fail: function(objAJAXRequest, strError, errorThrown) {
6249							      alert(strError);
6250							   }
6251							   
6252                         });
6253						  
6254					   }
6255					   else {						  
6256						    return false;
6257					   }
6258                  
6259  }
6260   
6261function trackingBuilderInComments(trackCode, dataJson) {
6262	var lng = $.Storage.get("lng");
6263	var json = dataJson;
6264	var inputedTrackCode = trackCode;
6265	var eventsArray = [];
6266	
6267	
6268								   if ((json.status == 'ok') && ((typeof json.data.events !== "undefined") && (json.data.events !== null) && (json.data.events !== "")) ) {
6269								   var sortEventsIcon =  (sortEventsTrigger == true ) ? "fa-sort-asc" : "fa-sort-desc";
6270								   var sortToolTipText =  (sortEventsTrigger == true ) ? "Прямая&nbsp;сортировка" : "Обратная&nbsp;сортировка";
6271								   
6272								   if (json.data.trackCodeModified != "") {
6273									   var trackCodesModified = json.data.trackCodeModified.split(",");
6274									     if (trackCodesModified.length == 1) {
6275											var trackCodeModifiedLink = (json.data.trackCodeModified != "") ? ' <i class="fa fa-angle-double-right" aria-hidden="true"></i> <a href="//track24.ru/?code='+json.data.trackCodeModified+'" class="myTooltip" data-toggle="tooltip" data-placement="top" title="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения">'+json.data.trackCodeModified+'</a>' : "";
6276										}
6277										else {
6278											var trackCodeModifiedLink = "";
6279										     $.each(trackCodesModified, function(key, value) {
6280											    trackCodeModifiedLink += '  <i class="fa fa-angle-double-right" aria-hidden="true"></i> <a href="//track24.ru/?code='+value+'" class="myTooltip" data-toggle="tooltip" data-placement="top" title="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения">'+value+'</a>';
6281 											 });
6282										}
6283								   }
6284								   else {
6285									   var trackCodeModifiedLink = "";
6286								   }
6287								  
6288								    $('#trackingInfo2').append('<div id="trackingInfoEvents2"></div>');
6289								  	 
6290									var progressBarPercent = 0;   
6291									var trackingInfoEventsDataForClipBoard  = "Информация о трек-коде: "+inputedTrackCode+"\n";
6292									    trackingInfoEventsDataForClipBoard += '-------------------------'+'\n';
6293										
6294									var lastEventDataForClipBoard  = "Информация о трек-коде: "+inputedTrackCode+"\n";
6295									    lastEventDataForClipBoard += '-------------------------'+'\n';	
6296										
6297									var dateTimeEvents = [];
6298									 
6299									
6300								var trackCreationDateTime = json.data.trackCreationDateTime.split(" ");
6301								var trackUpdateDateTime = (typeof json.data.trackUpdateDateTime !== 'undefined' && json.data.trackUpdateDateTime !== null && json.data.trackUpdateDateTime !== "") ?  json.data.trackUpdateDateTime.split(" ") : nowDateTime.split(" ");  
6302							    var firstDeliveryDateTime = (json.data.events[0].source != 'track24') ?  json.data.events[0].operationDateTime.split(" ") : nowDateTime.split(" ");  
6303								var lastDeliveryDateTime = (typeof json.data.deliveredStatus !== 'undefined' && json.data.deliveredStatus !== null && json.data.deliveredStatus !== "" && json.data.deliveredStatus == 1) ?  json.data.trackDeliveredDateTime.split(" ") : nowDateTime.split(" ");  
6304								var firstOperationDateTime = json.data.events[0].operationDateTime.split(" ");
6305								var lastOperationDateTime = json.data.events[json.data.events.length-1].operationDateTime.split(" ");
6306								var previosItemWeight = 0;
6307							    var nextItemWeight = 0;
6308								
6309								
6310								  var compareEventsArray = []; 
6311								  var dublicateEventRowClass = "";
6312								 
6313								 var events = [];
6314									if (groupEventsByServiceTrigger == false) {
6315								        if (sortEventsTrigger == true) {
6316 										      events.push(json.data.events); 
6317									    }
6318									    else {
6319 										      events.push(json.data.events.reverse()); 
6320									    }										
6321								    }
6322								    else {
6323									
6324 								        if (sortEventsTrigger == true) {
6325 											 $.each(json.data.groupedEvents, function(key, value) {
6326											       events.push(value);
6327 											 });
6328									    }
6329									    else {
6330									         	 json.data.groupedCompanyNames.reverse();
6331												 $.each(json.data.groupedEvents.reverse(), function(key, value) {
6332											         events.push(value.reverse());
6333												 
6334											    });
6335									    }									   
6336								    }
6337								 	   
6338								rc = 0;
6339                               						
6340								$.each(events, function(key, currentService) {
6341									
6342								    eventsArray =  currentService;
6343 									if ((groupEventsByServiceTrigger == true) && (json.data.groupedCompanyNames[key] != "Track24")) {
6344									   $('#trackingInfoEvents2').append('<div class="trackingServiceName2">'+json.data.groupedCompanyNames[key]+'</div>');
6345									}
6346									  
6347 									  $.each(eventsArray, function(key, value) {
6348									      rc++;
6349										  dateTimeEvents.push(value['operationDateTime']);
6350									 
6351											
6352											
6353											var statusIcon =  (sortEventsTrigger == true ) ? "" : "reverse";
6354											    
6355												 if (((key == 0) && (sortEventsTrigger == true)) || ((key == json.data.events.length - 1) && (sortEventsTrigger == false))) {
6356													 statusIcon = 'box'; 
6357												 }
6358												 else if (((key == 0) && (sortEventsTrigger == false) && (value['icon'] == 'delivered')) || ((key == json.data.events.length - 1) && (sortEventsTrigger == true) && (value['icon'] == 'delivered'))) { 
6359												       statusIcon = value['icon'];
6360												 }
6361												 else {
6362													  if ((value['icon'] != null) && (value['icon'] != "")) { 
6363														 if ((value['icon'] != 'accepted') &&  (value['icon'] != 'delivered')) {
6364															statusIcon = value['icon'];
6365														 }
6366													  }
6367												 }
6368												 
6369											  
6370											
6371											var operationDateTime = value['operationDateTime'].split(" ");
6372										
6373										 
6374                                            if ((value['operationType'] == "Вручение") || (value['operationAttribute'] == "Вручение адресату") || (value['operationAttribute'] == "Вручение получателю") || (value['operationAttribute'] == "Прибыло в место вручения")) {
6375										       lastOperationDateTime = value['operationDateTime'].split(" ");
6376											   progressBarPercent = 100;
6377										    }	
6378										    if ((value['operationTypeTranslated'] == "Вручение") || (value['operationAttributeTranslated'] == "Вручение адресату") || (value['operationAttributeTranslated'] == "Вручение получателю") || (value['operationAttributeTranslated'] == "Прибыло в место вручения")) {
6379										       lastOperationDateTime = value['operationDateTime'].split(" ");
6380											   progressBarPercent = 100;
6381										    }	 
6382											
6383											var deliveryDay = dateDiff(firstOperationDateTime[0], operationDateTime[0])+1;
6384											if ((deliveryDay > 0) && (deliveryDay < 21)) {
6385											   var	deliveryDayClass = 'label-success';
6386											}
6387											if (deliveryDay >= 21) {
6388											   var	deliveryDayClass = 'label-info';
6389											}
6390											if (deliveryDay >= 40) {
6391											   var deliveryDayClass = 'label-warning';
6392											}
6393											if (deliveryDay >= 60) {
6394											   var deliveryDayClass = 'label-danger';
6395											}
6396											
6397											if ((value['latitude'] != null) && (value['longitude'] != null)) {
6398											  var geoMarker = ' <i class="fa fa-map-marker" latitude="'+value['latitude']+'" longitude="'+value['longitude']+'" postindex="'+value['operationPlacePostalCode']+'"></i> ';
6399											}
6400											else
6401											{
6402												var geoMarker = '';
6403											}
6404										    
6405											var itemWeightClass = 'label-success';
6406											var itemWeightToolTip = '';
6407											
6408											
6409											 
6410											
6411											if (value['itemWeight'] > 0 ) {
6412											    if (sortEventsTrigger == true) {
6413												     if ((previosItemWeight > 0) && (value['itemWeight'] != previosItemWeight)) {
6414													   var itemWeightClass = 'label-danger';
6415													   itemWeightToolTip = 'Зафиксировано&nbsp;изменение&nbsp;веса!';													  
6416												      }	
6417													  previosItemWeight = value['itemWeight'];
6418												    }
6419													else {
6420														  for (niw=parseInt(key+1); niw <= parseInt(json.data.events.length-1); niw++){
6421															  if (json.data.events[niw].itemWeight > 0) {
6422																nextItemWeight = json.data.events[niw].itemWeight;
6423																break;
6424															  }
6425														  }
6426													  if ((nextItemWeight > 0) && (value['itemWeight'] != nextItemWeight)) {
6427													     var itemWeightClass = 'label-danger';
6428													     itemWeightToolTip = 'Зафиксировано&nbsp;изменение&nbsp;веса!';													  
6429												      }	
6430													    
6431													}
6432												  var itemWeight = 'Вес: '+value['itemWeight']+' г';
6433											} else {
6434												var itemWeight = '';
6435											}
6436										    
6437										    
6438										  
6439										  if ((typeof value['serviceName'] !== "undefined") && (value['serviceName'] !== null) && (value['serviceName'] !== ""))
6440											{
6441										      var serviceName = value['serviceName'];
6442											}  
6443											else {
6444											  var serviceName = "";
6445											}	
6446											 
6447										 var extendentInfo = '';
6448										 if ((value['operationType'] == "Экспорт") || (value['operationAttribute'] == "Экспорт")) {
6449										     extendentInfo = '(Операция производится в течение 7 - 60 дней начиная с '+operationDateTime[0]+')';
6450 										 }
6451										
6452										 var eventStatus = ''; 
6453										 if (dateDiff(value['eventDateTime'], nowDateTime.split(" ")[0]) == 0) {
6454											  eventStatus = '<span style="cursor: pointer;" class="label label-success label-as-badge myTooltip" data-toggle="tooltip" data-placement="top" data-html="false" title="Статус&nbsp;получен: '+value['eventDateTime'].split(" ")[1]+'">New</span>';
6455										 }
6456
6457
6458									   if ((typeof value['operationAttributeInformation'] !== "undefined") && (value['operationAttributeInformation'] !== null) && (value['operationAttributeInformation'] !== "")) {
6459										        if (device.desktop()) { 
6460												  var operationAttributeInformationDataTriger = "click hover";
6461												} else {
6462												  var operationAttributeInformationDataTriger = "hover";	
6463												}	
6464										       var operationAttributeInformation = '<span class="fa fa-question-circle" style="position: relative; cursor:pointer; color:#03487D;" data-toggle="popover" data-trigger="'+operationAttributeInformationDataTriger+'" data-placement="top" data-html="true" title="Справочная информация" data-content="'+value['operationAttributeInformation']+' <div><a href=\'https://track24.ru/?page=attributes#attribute-'+_translit(value['operationAttributeTranslated'].replace(/\[.*?\]/g, '').trim().replace(/[^a-zA-Zа-яА-Я0-9]/g, '_').toLowerCase())+'\' target=\'_blank\' style=\'position: absolute; right: 10px; top: 10px;\'><i class=\'fa fa-link fa-rotate-90\'></i></a></div>"></span>';
6465										    }
6466										else {
6467										      var operationAttributeInformation = '';
6468										}
6469										
6470										
6471									   if (hideDublicateEventsTrigger == true) { 
6472										  
6473										   
6474										   compareCurrentAttribute = $.trim(value['operationAttribute'].toLowerCase());
6475										   compareCurrentType = $.trim(value['operationType'].toLowerCase());
6476										   compareCurrentPlace = $.trim(value['operationPlaceName'].toLowerCase()); 											 
6477										   
6478										   compareCurrentAttributeTranslated = (lng != "null") ? $.trim(value['operationAttributeTranslated'].toLowerCase()) : compareCurrentAttribute;
6479										   compareCurrentTypeTranslated = (lng !== "null") ? $.trim(value['operationTypeTranslated'].toLowerCase()): compareCurrentType;
6480										   compareCurrentPlaceTranslated = (lng !== "null") ? $.trim(value['operationPlaceNameTranslated'].toLowerCase()): compareCurrentPlace;										 
6481										   
6482										   
6483											   if (rc != 0) {
6484														if (jQuery.inArray($.trim(operationDateTime[0]+compareCurrentAttribute+compareCurrentType+compareCurrentPlace), compareEventsArray) >= 0) {
6485														   //console.log(rc+" if 1");
6486														   var dublicateEventRowClass = "dublicateEventRow";
6487														} 
6488														else if (jQuery.inArray($.trim(operationDateTime[0]+compareCurrentAttributeTranslated+compareCurrentTypeTranslated+compareCurrentPlaceTranslated), compareEventsArray) >= 0) {
6489															//console.log(rc+" if 2");
6490														   var dublicateEventRowClass = "dublicateEventRow";
6491														} 
6492														else {
6493															//console.log(rc+" else");
6494														   var dublicateEventRowClass = "";
6495														}
6496											}
6497										   		
6498 										   compareEventsArray.push(operationDateTime[0]+compareCurrentAttributeTranslated+compareCurrentTypeTranslated+compareCurrentPlaceTranslated);
6499 										   compareEventsArray.push(operationDateTime[0]+compareCurrentAttribute+compareCurrentType+compareCurrentPlace);
6500										   //console.log(compareEventsArray);
6501										} 
6502										else {
6503										   var dublicateEventRowClass = "";
6504										}
6505										
6506                                        if (jQuery.inArray(lng, availibleLanguageArray) != -1) {										     
6507										    $('#trackingInfoEvents2').append('<div class="trackingInfoRow2 '+dublicateEventRowClass+'"><div class="trackingInfoDateTime2"><span class="date"><b>'+operationDateTime[0]+'</b></span><br><span class="time muted">'+operationDateTime[1]+'</span><br><span class="label '+deliveryDayClass+' myTooltip" title="'+deliveryDay+' '+numberof(deliveryDay, '', ['день', 'дня', 'дней'])+' в пути" data-toggle="tooltip" data-placement="right">'+deliveryDay+' день</span></div><div class="trackingInfoStatus2"><div class="trackingInfoStatusIcon '+statusIcon+'"></div></div><div class="trackingInfoDetails2"><div class="operationAttribute myTooltip auto-tooltip" data-toggle="tooltip" data-placement="left" title="'+$.trim(value['operationAttribute'])+'" originaltext="'+$.trim(value['operationAttribute'])+'">'+value['operationAttributeTranslated']+' '+operationAttributeInformation+'</div><div class="operationType myTooltip auto-tooltip" data-toggle="tooltip" data-placement="left" title="'+$.trim(value['operationType'])+'" originaltext="'+$.trim(value['operationType'])+'">'+value['operationTypeTranslated']+'</div><div class="muted"> '+geoMarker+'<span style="color:grey;" class="operationPlace2 myTooltip auto-tooltip" data-toggle="tooltip" data-placement="left" title="'+$.trim(value['operationPlaceName'])+'" originaltext="'+$.trim(value['operationPlaceName'])+'">'+$.trim(value['operationPlacePostalCode']+' '+value['operationPlaceNameTranslated'])+'</span></div></div> <div class="trackingExtendedDetails2 hidden-xs"><div style="text-align: right; height:18px; /* padding-right:20px; */">'+eventStatus+' <span class="label label-info serviceName">'+serviceName+'</span></div> <div style="text-align: right; height:18px;"></div> <div style="text-align: right;   height:18px; /* padding-right:20px; */"><span class="label '+itemWeightClass+' myTooltip auto-tooltip"  data-toggle="tooltip" data-placement="left" title="'+itemWeightToolTip+'">'+itemWeight+'</span></div></div> </div>');
6508									    }
6509										else {
6510										        $('#trackingInfoEvents2').append('<div class="trackingInfoRow2 '+dublicateEventRowClass+'"><div class="trackingInfoDateTime2"><span class="date"><b>'+operationDateTime[0]+'</b></span><br><span class="time muted">'+operationDateTime[1]+'</span><br><span class="label '+deliveryDayClass+' myTooltip" title="'+deliveryDay+' '+numberof(deliveryDay, '', ['день', 'дня', 'дней'])+' в пути" data-toggle="tooltip" data-placement="right">'+deliveryDay+' день</span></div><div class="trackingInfoStatus"><div class="trackingInfoStatusIcon '+statusIcon+'"></div></div><div class="trackingInfoDetails2"><div class="operationAttribute">'+value['operationAttributeOriginal']+' '+operationAttributeInformation+'</div><div class="operationType">'+value['operationTypeOriginal']+' '+extendentInfo+'</div><div class="muted"> '+geoMarker+'<span style="color:grey;" class="operationPlace2">'+value['operationPlacePostalCode']+' '+value['operationPlaceNameOriginal']+'</span></div></div> <div class="trackingExtendedDetails2 hidden-xs"><div style="text-align: right; height:18px; /* padding-right:20px; */">'+eventStatus+' <span class="label label-info">'+serviceName+'</span></div> <div style="text-align: right; height:18px;"></div> <div style="text-align: right;   height:18px; /* padding-right:20px; */"><span class="label label-success">'+itemWeight+'</span></div></div> </div>');
6511										}
6512										
6513										
6514										  
6515										trackingInfoEventsDataForClipBoard += $.trim(operationDateTime[0]+' '+operationDateTime[1]+ ' '+ value['operationAttributeTranslated']+' '+value['operationTypeTranslated']+'')+'\n';
6516										trackingInfoEventsDataForClipBoard += $.trim(value['operationPlacePostalCode']+' '+value['operationPlaceNameTranslated']+'')+'\n\n';
6517										 
6518                                         
6519										 
6520										 
6521									}); 
6522								     
6523									 
6524								    if (groupEventsByServiceTrigger == false) {
6525								      return false;
6526								    }
6527								 });
6528  			                          
6529									  if (json.data.events.length == 1) {       					 
6530								         $(".trackingInfoStatus2").css('background-image', 'url("")');
6531									  }
6532									  
6533								     if (sortEventsTrigger == true ) {										   
6534										  lastEventDataForClipBoard += $.trim(json.data.events[json.data.events.length - 1].operationDateTime+ '\n'+ json.data.events[json.data.events.length - 1].operationAttributeTranslated)+'\
6534n';  
6535									  }	  
6536									  else {
6537										   
6538										   lastEventDataForClipBoard += $.trim(json.data.events[0].operationDateTime+ '\n'+ json.data.events[0].operationAttributeTranslated)+'\n';
6539									  }
6540									  
6541									 if (sortEventsTrigger == true ) {	
6542								         if ((typeof json.data.events[json.data.events.length - 1].operationPlaceNameTranslated !== "undefined") && (json.data.events[json.data.events.length - 1].operationPlaceNameTranslated !== null) && (json.data.events[json.data.events.length - 1].operationPlaceNameTranslated !== "")) {
6543								           lastEventDataForClipBoard += $.trim(json.data.events[json.data.events.length - 1].operationPlaceNameTranslated)+'\n'; 
6544								         }
6545									  }	 
6546									 else {
6547                                       if ((typeof json.data.events[0].operationPlaceNameTranslated !== "undefined") && (json.data.events[0].operationPlaceNameTranslated !== null) && (json.data.events[0].operationPlaceNameTranslated !== "")) {
6548								           lastEventDataForClipBoard += $.trim(json.data.events[0].operationPlaceNameTranslated)+'\n'; 
6549								       }
6550									 }									 
6551								   
6552								     if (sortEventsTrigger == true ) {	
6553									     if ((typeof json.data.events[json.data.events.length - 1].operationAttributeInformation !== "undefined") && (json.data.events[json.data.events.length - 1].operationAttributeInformation !== null) && (json.data.events[json.data.events.length - 1].operationAttributeInformation !== "")) {
6554										   lastEventDataForClipBoard += '\n'+$.trim(json.data.events[json.data.events.length - 1].operationAttributeInformation).replace(/<br>/g, '\n').replace(/<b>|<\/b>/g, '').replace(/&lt;.*?&gt;/g, '')+'\n';  
6555									     } 
6556									 }
6557									 else {
6558										 if ((typeof json.data.events[0].operationAttributeInformation !== "undefined") && (json.data.events[0].operationAttributeInformation !== null) && (json.data.events[0].operationAttributeInformation !== "")) {
6559										   lastEventDataForClipBoard += '\n'+$.trim(json.data.events[0].operationAttributeInformation).replace(/<br>/g, '\n').replace(/<b>|<\/b>/g, '').replace(/&lt;.*?&gt;/g, '')+'\n';  
6560									     }										 
6561									 }	 
6562								   
6563								     if (json.projectedNextWaypoint !== null) {
6564									    if (json.projectedNextWaypoint.nextAttribute != null) {
6565										    lastEventDataForClipBoard += '-------------------------'+'\n';
6566								            lastEventDataForClipBoard += 'Ожидайте статус: '+json.projectedNextWaypoint.nextAttribute+'\n';
6567										}  
6568								     }
6569									 
6570								    if (json.deliveredStat !== null) {
6571									 lastEventDataForClipBoard += '-------------------------'+'\n';
6572								     lastEventDataForClipBoard +=  $.trim('Прогнозируемый период доставки: '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.maxDeliveryDays)))+'\n';
6573								    }
6574									 
6575								   lastEventDataForClipBoard += '-------------------------'+'\n';
6576 								   lastEventDataForClipBoard += 'Постоянная ссылка для отслеживания: https://track24.ru/?code='+inputedTrackCode+'\n\r';
6577										
6578								  
6579								  
6580								   var groupEventsByServiceText = (groupEventsByServiceTrigger == false ) ? "Группировать" : "Не группировать";	
6581								   var hideDublicateEventsText = (hideDublicateEventsTrigger == true ) ? "Отобразить дубликаты" : "Скрыть дубликаты";	
6582								 
6583 										 
6584										 
6585										var trackInfoToPanel = '';  
6586																				
6587										if ((typeof json.data.trackName !== "undefined") && (json.data.trackName !== null) && (json.data.trackName !== "")) {
6588										      trackInfoToPanel += '<p><b>Описание трек-кода</b>: '+json.data.trackName +', '+ json.data.trackName +', '+ json.data.trackName+'</p>';
6589									    	} 
6590											
6591										
6592										trackInfoToPanel += '<ul class="sp-list">';
6593										if ((typeof json.data.trackCreationDateTime !== "undefined") && (json.data.trackCreationDateTime !== null) && (json.data.trackCreationDateTime !== "")) {
6594										    trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Добавлен в базу</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.trackCreationDateTime+'</div></div></li>';
6595 									     }
6596										 if ((typeof json.data.trackUpdateDateTime !== "undefined") && (json.data.trackUpdateDateTime !== null) && (json.data.trackUpdateDateTime !== "")) {
6597 											trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Последнее обновление</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.trackUpdateDateTime+' <!-- (<span time="2016,08,15,05,24,32" class="need_to_time_update"></span>) --></div></div></li>';
6598									     }
6599										 
6600										 if (json.deliveredStat !== null) {
6601											      var myRegExp = /([A-Z]{2})[0-9]{9}([A-Z]{2})/;
6602													var match = myRegExp.exec(inputedTrackCode);
6603													if (match != null) { 
6604                                                       var trackCodePrefix = match[1]; 
6605													   var trackCodePostfix = match[2]; 	
6606													   var showDeliveredStatChartIcon = 'visible';
6607  													   
6608													}
6609													else {
6610													   var trackCodePrefix = ""; 
6611													   var trackCodePostfix = ""; 
6612													   var showDeliveredStatChartIcon = 'hidden';
6613													}
6614  											      
6615												   if (json.data.events[0].source != 'track24') {												   
6616												       trackInfoToPanel += '<li class="sp projectedDeliveryPeriodAffterEvents2"><div class="sp_left"><span class="sp_title">Прогнозируемый период доставки</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span id="projectedDate" class="redMarker">'+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.maxDeliveryDays))+'</span> <span class="hidden-xs">(не&nbsp;гарантируемый)</span> <span class="" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных международных почтовых отправлений.<br><b>'+trackCodePrefix+' ### ### ### '+trackCodePostfix+'</b>: среднее время доставки '+json.deliveredStat.averageDeliveryDays+' '+numberof(json.deliveredStat.averageDeliveryDays, '', ['день', 'дня', 'дней'])+' / максимальное время '+json.deliveredStat.maxDeliveryDays+' '+numberof(json.deliveredStat.maxDeliveryDays, '', ['день', 'дня', 'дней'])+'<br><br> В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д.<br> Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"> <i class="fa fa-question-circle"></i></span> <i class="fa fa-area-chart myTooltip showDeliveredStatChart '+showDeliveredStatChartIcon+'"  data-prefix="'+trackCodePrefix+'" data-postfix="'+trackCodePostfix+'" aria-hidden="true" style="cursor:pointer;" title="Статистика за месяц"></i></div></div></li>';
6617												       $("#projectedDeliveryPeriodBeforeEvents").html('<b><span class="hidden-xs hidden-sm hidden-md">Прогнозируемый период доставки</span><span class="hidden-xs hidden-sm hidden-lg">Прогнозируемый период доставки</span><span class="hidden-md hidden-lg">Прогноз</span></b>: '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], parseInt(json.deliveredStat.maxDeliveryDays))+' <span class="hidden-xs">(не&nbsp;гарантируемый)</span> <span class="fa fa-question-circle" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" style="cursor:pointer;" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных международных почтовых отправлений.<br><b>'+trackCodePrefix+' ### ### ### '+trackCodePostfix+'</b>: среднее время доставки '+json.deliveredStat.averageDeliveryDays+' '+numberof(json.deliveredStat.averageDeliveryDays, '', ['день', 'дня', 'дней'])+' / максимальное время '+json.deliveredStat.maxDeliveryDays+' '+numberof(json.deliveredStat.maxDeliveryDays, '', ['день', 'дня', 'дней'])+'<br><br>В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д. Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"></span>');
6618												   }
6619                                                   
6620												   
6621											  }
6622											  else {
6623												  if (json.data.events[0].source != 'track24') {
6624												     trackInfoToPanel += '<li class="sp projectedDeliveryPeriodAffterEvents2"><div class="sp_left"><span class="sp_title">Прогнозируемый период доставки</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span id="projectedDate" class="redMarker">'+projectedDate(firstOperationDateTime[0], (averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], (averageDeliveryDays)+10)+'</span> <span class="hidden-xs">(не&nbsp;гарантируемый)</span> <span class="fa fa-question-circle" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных международных почтовых отправлений за последний месяц. В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д. Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"></span></div></div></li>';
6625													 $("#projectedDeliveryPeriodBeforeEvents").html('<p><span class="hidden-xs hidden-sm hidden-md">Прогнозируемый период доставки</span><span class="hidden-xs hidden-sm hidden-lg">Прогнозируемый период доставки</span><span class="hidden-md hidden-lg">Прогноз</span></b>: '+projectedDate(firstOperationDateTime[0], (averageDeliveryDays))+' - '+projectedDate(firstOperationDateTime[0], (averageDeliveryDays)+10)+' <span class="hidden-xs">(не&nbsp;гарантируемый)</span> <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Срок доставки рассчитывается на основании анализа статистики доставленных почтовых отправлений за последний месяц. В расчет не берутся задержки с отправкой посылки, зависания на таможне, утерянные посылки и т.д. Указанный период, это не 100% информация, а всего лишь прогноз, ориентирующий Вас когда ждать посылку. Если срок доставки Вашей посылки больше, чем  указано в прогнозе, не переживайте, она приедет, но чуть позже ;)"></span></p>');
6626   												  }
6627												  
6628												    
6629											  }
6630										 if ((typeof json.data.fromName !== "undefined") && (json.data.fromName !== null) && (json.data.fromName !== "")) {
6631										      trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Отправитель</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.fromName+' </div></div></li>';
6632                                              trackingInfoEventsDataForClipBoard += 'Отправитель: '+json.data.fromName+'\n'; 
6633                                          }	 
6634										  
6635										 if ((typeof json.data.destinationName !== "undefined") && (json.data.destinationName !== null) && (json.data.destinationName !== "")) {
6636										      trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Получатель</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.destinationName+' <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Достаточно часто (по необъяснимым причинам), после прохождения таможенных процедур, ФИО получателя может измениться, и не соответствовать действительности. Если адрес доставки совпадает с Вашим, то не стоит переживать по этому поводу. Посылка приедет с Вашими ФИО, и Вы без проблем сможете её получить в Вашем почтовом отделении. <br>В целях безопасности и защиты персональных данных некоторые символы в ФИО заменяются на ***."></span></div></div></li>';
6637                                              trackingInfoEventsDataForClipBoard += 'Получатель: '+json.data.destinationName+'\n'; 
6638                                          }	
6639										 
6640										  if ((json.data.fromCountry == "") || (json.data.destinationCountry == "")){
6641											   
6642												  if ((typeof json.data.fromCountry !== "undefined") && (json.data.fromCountry !== null) && (json.data.fromCountry !== "")) {
6643														  var fromCountry = json.data.fromCountry; 
6644														  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Страна отправитель</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+fromCountry+'</div></div></li>';
6645                                             			  trackingInfoEventsDataForClipBoard += '
6645Страна отправитель: '+fromCountry+'\n'; 
6646												  } 
6647												  if ((typeof json.data.destinationCountry !== "undefined") && (json.data.destinationCountry !== null) && (json.data.destinationCountry !== "")) {
6648														  var destinationCountry = json.data.destinationCountry; 
6649														  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Страна назначения</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+destinationCountry+'</div></div></li>';
6650														  trackingInfoEventsDataForClipBoard += 'Страна назначения: '+destinationCountry+'\n'; 
6651												  } 
6652												
6653												 if ((typeof json.data.destinationCountry === "undefined") || (json.data.destinationCountry === null) || (json.data.destinationCountry === "")) {
6654													 if ((typeof json.data.destinationCountryCode !== "undefined") && (json.data.destinationCountryCode !== null) && (json.data.destinationCountryCode !== "")) {
6655														  var destinationCountryCode = json.data.destinationCountryCode;
6656														  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Код страны назначения</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+destinationCountryCode+'</div></div></li>';
6657														  trackingInfoEventsDataForClipBoard += 'Код страны назначения: '+destinationCountryCode+'\n'; 
6658													 }
6659												  } 
6660												  
6661												  
6662										 }
6663										 
6664										    var route = "";
6665											var routePointsCount = 0;
6666											
6667											if ((typeof json.data.fromCountry !== "undefined") && (json.data.fromCountry !== null) && (json.data.fromCountry !== "")) {
6668												  route +=  '<span class="route" id="routeOriginCountry" style="cursor:pointer;">'+json.data.fromCountry+'</span>';
6669											      route += ' <i class="fa fa-angle-double-right"></i> ';
6670												 routePointsCount++;
6671											 } 
6672											if ((typeof json.data.fromCity !== "undefined") && (json.data.fromCity !== null) && (json.data.fromCity !== "")) {
6673												    	route +=  '<span class="route" id="routeFromCity">'+json.data.fromCity+'</span>';
6674														route += ' <i class="fa fa-angle-double-right"></i> '; 
6675														routePointsCount++;
6676											 } 
6677											 if ((typeof json.data.destinationCountry !== "undefined") && (json.data.destinationCountry !== null) && (json.data.destinationCountry !== "")) {
6678												  route +=  '<span class="route" id="routeDestinationCountry" style="cursor:pointer;">'+json.data.destinationCountry+'</span>';
6679											      route += ' <i class="fa fa-angle-double-right"></i> ';
6680												  routePointsCount++;
6681											     
6682											 } 
6683 											
6684 										   
6685											  
6686											   if ((typeof json.data.destinationPostalCode !== "undefined") && (json.data.destinationPostalCode !== null) && (json.data.destinationPostalCode !== "") ) {
6687												    if ((typeof json.data.destinationPostalAddress !== "undefined") && (json.data.destinationPostalAddress !== null) && (json.data.destinationPostalAddress !== "") && (json.data.destinationPostalCode.length == 6) && (Number.isInteger(parseInt(json.data.destinationPostalCode))) && (json.data.destinationCompany == 'rupost')) {
6688															var postal_code_info = '<span style="border-bottom: 1px dotted; cursor: pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="<b>Информация о почтовом отделении:</b> <a href=\'https://track24.ru/?page=postindex&index='+json.data.destinationPostalCode+'\' target=\'_blank\' class=\'dotted\'>'+json.data.destinationPostalCode+'</a> <a class=\'hidden-xs\' href=\'https://track24.ru/?page=postindex&index='+json.data.destinationPostalCode+'\' target=\'_blank\' style=\'/*position: absolute; right: 10px; top: 10px;*/\'><i class=\'fa fa-external-link\'></i></a>" data-content="<b>Адрес:</b> '+json.data.destinationPostalAddress+'<br><br><b>Телефоны:</b> '+json.data.destinationPostalPhones+'<br><br><b>Режим работы:</b><br>'+json.data.destinationPostalWorkTime+'">'+json.data.destinationPostalCode+'</span>';
6689															
6690                                                            route +=  '<span class="route" id="routeDestinationPostalCode">'+postal_code_info+'</span>';
6691															route += ' <i class="fa fa-angle-double-right"></i> '; 
6692															routePointsCount++;
6693													} 
6694													else if ((typeof json.data.destinationPostalAddress !== "undefined") && (json.data.destinationPostalAddress !== null) && (json.data.destinationPostalAddress !== "") && (json.data.destinationCompany == 'cdek')) {
6695															var pvz_info = '<span style="border-bottom: 1px dotted; cursor: pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="<b>Информация о пункте выдачи заказов:</b> <a href=\'https://track24.ru/?page=cdek&scode='+json.data.destinationPostalCode.replace(/CDEK:\s*/gm, '')+'\' target=\'_blank\' class=\'dotted\'> СДЭК '+json.data.destinationPostalCode.replace(/CDEK:\s*/gm, '')+'</a> <div style=\'float: right; margin-left: 15px;\'><a href=\'https://track24.ru/?page=cdek&scode='+json.data.destinationPostalCode.replace(/CDEK:\s*/gm, '')+'\' target=\'_blank\' style=\'position: absolute; right: 10px; top: 10px;\'><i class=\'fa fa-external-link\'></i></a></div>" data-content="<b>Адрес:</b> '+json.data.destinationPostalAddress+'<br><br><b>Телефоны:</b> '+json.data.destinationPostalPhones+'<br><br><b>Режим работы:</b><br>'+json.data.destinationPostalWorkTime+'">ПВЗ - СДЭК</span>';
6696                                                            route +=  '<span class="route" id="routeDestinationPostalCode">'+pvz_info+'</span>';
6697															route += ' <i class="fa fa-angle-double-right"></i> '; 
6698															routePointsCount++;
6699													}
6700													else {
6701														    route +=  '<span class="route" id="routeDestinationPostalCode">'+json.data.destinationPostalCode+'</span>';
6702															route += ' <i class="fa fa-angle-double-right"></i> '; 
6703															routePointsCount++;
6704													}
6705											   }
6706											   
6707											   if ((typeof json.data.destinationCity !== "undefined") && (json.data.destinationCity !== null) && (json.data.destinationCity !== "")) {
6708												    	route +=  '<span class="route" id="routeDestinationCity">'+json.data.destinationCity+'</span>';
6709														route += ' <i class="fa fa-angle-double-right"></i> '; 
6710														routePointsCount++;
6711											   }
6712											   if ((typeof json.data.destinationAddress !== "undefined") && (json.data.destinationAddress !== null) && (json.data.destinationAddress !== "")) {
6713												    	 route +=  '<span class="route" id="routeDestinationAddress">'+json.data.destinationAddress+'</span>';
6714														 route += ' <i class="fa fa-angle-double-right"></i> '; 
6715														routePointsCount++;
6716											   }      
6717											     
6718											  if (routePointsCount > 0) { 
6719											      route = $.trim(route).replace(/<i class="fa fa-angle-double-right"><\/i>$/gm, '');  
6720											     trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title" id="routeTitle" style="/*cursor:pointer;*/">Маршрут</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+route+' <!-- <i class="fa fa-map-o myTooltip" id="routeMarker" aria-hidden="true" style="cursor:pointer;" style="cursor:pointer;" title="Маршрут на карте"></i>--></div></div></li>';
6721												 
6722											  }
6723											 
6724										 
6725										 if (json.data.itemWeight > 0) {
6726 											trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Вес</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.itemWeight+' г</div></div></li>';
6727									     }
6728								         if ( (typeof json.deliveredStat !== "undefined") && (json.deliveredStat !== null) && (json.deliveredStat !== "") ) {
6729											  if ((typeof json.deliveredStat.type !== "undefined") && (json.deliveredStat.type !== null) && (json.deliveredStat.type !== "") && (json.deliveredStat.type !== "n/a")) {
6730												    	
6731														trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Тип отправления</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.deliveredStat.type+'</div></div></li>';
6732											  }
6733									     }
6734										 
6735										 
6736										  if  ((json.data.events[0].source != 'track24') && (json.data.events.length > 1)) {
6737											  var deliveredByShippers = [];
6738											   $.each(json.data.events, function(key, value) {
6739												   
6740												   if (deliveredByShippers.indexOf(value.source) == -1) {
6741													 deliveredByShippers.push(value.source);   
6742												   }
6743											    
6744 											   });
6745											   if (deliveredByShippers.length > 0) {
6746												   trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Источники</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">';
6747													 var deliveredByShippersCount = 0;
6748													 $.each(deliveredByShippers, function(key, value) {
6749														 
6750														   if (deliveredByShippersCount > 0) { 
6751														      trackInfoToPanel += '<i class="fa fa-angle-double-right" aria-hidden="true"></i>';
6752														   }
6753														 
6754														    if (isEmpty(json.serviceNames) === false) {	   
6755														      trackInfoToPanel += '  <span class="sampleTrackCode_ dotted active"><a href="https://track24.ru/service/'+value.toLowerCase()+'/tracking/'+inputedTrackCode+'" target="_blank">'+json.serviceNames[value.toUpperCase()]+'</a></span>  ';
6756														      deliveredByShippersCount++;
6757														    }
6758														  
6759													 });
6760													trackInfoToPanel += '<span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Компании предоставившие статусы с информацией об отслеживании трек-кода: <b>'+inputedTrackCode+'</b>"></span></div></div></li>';
6761											   }
6762											   
6763											   
6764											  
6765										  }
6766										  
6767										 
6768										 
6769										 if ( (typeof json.data.trackCodeModified !== "undefined") && (json.data.trackCodeModified !== null) && (json.data.trackCodeModified !== "") && (json.data.trackCodeModified != "") ) {
6770										        var trackCodesModified = json.data.trackCodeModified.split(",");
6771												if (trackCodesModified.length == 1) {
6772													trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Перемаркированный трек-код</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value"><span class="sampleTrackCode active">'+json.data.trackCodeModified+'</span> <i class="fa fa-copy copyToClipBoard" data-for-clipboard="'+json.data.trackCodeModified+'" style=""></i> <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения для возможности дальнейшего отслеживания."></span></div></div></li>';
6773												}
6774												else {
6775													 trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Перемаркированный трек-код</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">';
6776													 $.each(trackCodesModified, function(key, value) {
6777														 if (key > 0) { 
6778														   trackInfoToPanel += '<i class="fa fa-angle-double-right" aria-hidden="true"></i>';
6779														 }
6780														 trackInfoToPanel += '  <span class="sampleTrackCode active">'+value+'</span>  ';
6781													 });
6782													 trackInfoToPanel += '<span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Перемаркированный трек-код присваивается при передаче почтовой службе страны назначения для возможности дальнейшего отслеживания."></span></div></div></li>';
6783												}
6784										 }
6785                                          
6786									      if ( (typeof json.data.mergedTrackCodes !== "undefined") && (json.data.mergedTrackCodes !== null) && (json.data.mergedTrackCodes !== "") && (json.data.mergedTrackCodes != "") ) {
6787										        var trackCodesMerged = json.data.mergedTrackCodes.split(",");
6788												if (trackCodesMerged.length == 1) { 
6789													
6790												}
6791												else {
6792													 trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Объединённые отправления</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">';
6793													 $.each(trackCodesMerged, function(key, value) {
6794														 if (key > 0) {  
6795														   trackInfoToPanel += ', ';
6796														 }
6797														 trackInfoToPanel += '  <span class="sampleTrackCode active redMarkerActive">'+value+'</span>';
6798													 });
6799													 trackInfoToPanel += ' <span class="fa fa-question-circle" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Для уменьшения стоимости доставки, логистическая компания объединила мелкие пакеты с трек-кодами <b>'+trackCodesMerged.join(', ')+'</b> в одно почтовое отправление с трек-кодом <b>'+json.data.trackCodeModified+'</b>."></span></div></div></li>';
6800												}
6801										 }
6802								   			 						   
6803								  
6804										 
6805										 if ( (typeof json.projectedNextWaypoint !== "undefined") && (json.projectedNextWaypoint !== null) && (json.projectedNextWaypoint !== "") ) {
6806 											  if (json.projectedNextWaypoint.nextAttribute != null) {
6807												    	trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Ожидайте статус</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.projectedNextWaypoint.nextAttribute+'</div></div></li>';
6808											  }
6809									     }
6810										 
6811										 
6812											
6813										if ((typeof json.data.declaredValue !== "undefined") && (json.data.declaredValue !== null) && (json.data.declaredValue !== "")) {
6814											  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Объявленная ценность</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.declaredValue+' руб.</div></div></li>';
6815										    }
6816										if ((typeof json.data.collectOnDeliveryPrice !== "undefined") && (json.data.collectOnDeliveryPrice !== null) && (json.data.collectOnDeliveryPrice !== "")) {
6817											  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Наложенный платеж</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.data.collectOnDeliveryPrice+' руб.</div></div></li>';
6818									    	}
6819										
6820										if ((typeof json.data.allWayTracking !== "und
6820efined") && (json.data.allWayTracking !== null) && (json.data.allWayTracking !== "") && (json.data.upu !== true) && (json.data.events[json.data.events.length - 1].serviceName != 'Track24.ru')) {
6821											  if (json.data.allWayTracking === true) {
6822											     trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Отслеживание</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">до вручения</div></div></li>';
6823											  }
6824											  else {
6825												  trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Отслеживание</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">частичное</div></div></li>';
6826											  }
6827										}
6828										
6829										 if ((typeof json.controlDays !== "undefined") && (json.controlDays !== null) && (json.controlDays !== "")) {
6830										     trackInfoToPanel += '<li class="sp"><div class="sp_left"><span class="sp_title">Контрольный срок доставки</span><div class="sp_line"></div></div>  <div class="sp_right"><div class="sp_value">'+json.controlDays+' '+numberof(json.controlDays, '', ['день', 'дня', 'дней'])+'</div></div></li>';
6831									     }	
6832										 
6833										  trackInfoToPanel += '<div style="width:100%; text-align: right;"><span class="trackCodeInComments- trackingInCommentsFlag trackingInCommentsFlagRotatedDown" data-track-code="'+inputedTrackCode+'" title="Свернуть отслеживание ⭡">
6833<svg width="12" height="11" viewBox="0 0 27 27"><path fill="#ccc" d="M26.7,4.895c-0.4-0.5-1.199-0.5-1.599,0L13.512,19.382L1.923,4.895c-0.4-0.5-1.199-0.5-1.599,0c-0.4,0.5-0.4,1.299,0,1.798L12.613,22.08c0.2,0.3,0.5,0.4,0.899,0.4c0.3,0,0.599-0.1,0.899-0.4L26.7,6.694C27.1,6.194,27.1,5.395,26.7,4.895z"></path></svg></span>';
6834											 
6835                                          trackInfoToPanel += '</ul>';  
6836												 
6837			         					       if ((json.data.events.length <= 1) && (json.data.events[0].serviceName == 'Track24.ru')) {
6838											        trackInfoToPanel += '<p><i class="fa fa-info-circle"></i> Мы сожалеем, но информация о трек-коде <a href="//track24.ru/?code='+inputedTrackCode+'">'+inputedTrackCode+'</a> еще не появилась в нашей системе.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Не переживайте! Для заказов оформленных менее 1 - 2 недель назад, это нормально.<br>&nbsp;&nbsp;&nbsp;&nbsp;Как правило, информация <b>начинает обновляться через 3-7 дней</b>, после получения трек-кода</b>.<br>&nbsp;&nbsp;&nbsp;&nbsp;Иногда, с момента получения трек-кода, до начала отслеживания может пройти <b>2 недели</b>.<br>&nbsp;&nbsp;&nbsp;&nbsp;<a href="//track24.ru/?page=faq#1" style="border-bottom: 1px dotted;">Подробнее в вопросах и ответах</a>.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;Если трек-код не отслеживается более 14 дней, как на нашем сайте так и на сайте торговой площадки,<br>&nbsp;&nbsp;&nbsp;&nbsp;Вы вправе открыть спор, и требовать возврат денег.</p>';
6839													trackInfoToPanel += '<hr>';
6840													trackInfoToPanel += '<p>Рекомендуем, на всякий случай <a href="//track24.ru/?page=store-info" target="_blank">проверить продавца на "вшивость"</a>.</p>';
6841					                            } 
6842											    else {
6843												   if ((dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0]) > 0) && (dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0]) < 14) && (progressBarPercent <100)) {
6844											   	     trackInfoToPanel += '<p><hr>C момента обновления последнего статуса прошло всего: '+dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0])+' '+numberof(dateDiff(lastOperationDateTime[0], lastDeliveryDateTime[0]), '', ['день', 'дня', 'дней'])+ '<br>Если статус почтового отправления не меняется менее 14 дней, не стоит беспокоиться, это нормальное явление для международных почтовых отправлений.</p>';     
6845											       }
6846												}
6847                                               
6848											 
6849											   trackingInfoEventsDataForClipBoard += 'Отслеживается: '+json.data.daysTracking+' дней\n';
6850										       trackingInfoEventsDataForClipBoard += '-------------------------'+'\n';
6851 										       trackingInfoEventsDataForClipBoard += 'Постоянная ссылка для отслеживания: https://track24.ru/?code='+inputedTrackCode+'\n\r';
6852										
6853											    
6854											   	  if (progressBarPercent != 100)  {
6855												     progressBarPercent = Math.round((dateDiff(firstOperationDateTime[0], lastOperationDateTime[0])+1) / averageDeliveryDays * 100);
6856													  if (progressBarPercent >= 100) {
6857													     progressBarPercent = 90;													   
6858													  }
6859												  }
6860												  
6861												    var progress =  '<div style="position: relative; /* width: 100%; */ margin-left: -9px; margin-right: -9px;">';
6862												      progress += '<span style=" text-align: center; width: 100%;  position: absolute; line-height: 40px;">';
6863												      if (json.data.events[0].source != 'track24') {
6864 													    progress += '<b>В пути '+json.data.daysInTransit+ ' '+numberof(json.data.daysInTransit, '', ['день', 'дня', 'дней'])+'</b>&nbsp;<span class="fa fa-question-circle hidden-xs" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Расчет сроков нахождения почтового отправления в пути, производится исходя из двух дат:<br> <b>1.</b> Дата первого статуса почтовой службы, либо сегодняшняя дата ('+firstDeliveryDateTime[0]+').<br><b>2.</b> Дата прибытия, либо сегодняшняя дата ('+lastDeliveryDateTime[0]+')."></span>&nbsp;<span class="hidden-xs">/</span>&nbsp;<b>Отслеживается&nbsp;'+json.data.daysTracking+ ' '+numberof(json.data.daysTracking, '', ['день', 'дня', 'дней'])+'</b>  <span class="fa fa-question-circle hidden-xs" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Расчет сроков отслеживания, производится исходя из двух дат:<br><b>1.</b> Дата, когда трек-код отслеживался первый раз ('+trackCreationDateTime[0]+').<br> <b>2.</b> Дата последнего обновления ('+trackUpdateDateTime[0]+')."></span>';
6865													  }
6866												      else {
6867                                                        progress += '<b>Отслеживается&nbsp;'+json.data.daysTracking+ ' '+numberof(json.data.daysTracking, '', ['день', 'дня', 'дней'])+'</b>  <span class="fa fa-question-circle hidden-xs" style="cursor:pointer;" data-toggle="popover" data-trigger="click hover" data-placement="top" data-html="true" title="Справочная информация" data-content="Расчет сроков отслеживания, производится исходя из двух дат:<br><b>1.</b> Дата, когда трек-код отслеживался первый раз ('+trackCreationDateTime[0]+').<br> <b>2.</b> Дата последнего обновления ('+trackUpdateDateTime[0]+')."></span>';														  
6868													  }
6869													  progress += '</span>';
6870												      
6871													  progress += '<div class="progress progress-striped" style="border-radius: 0em; /* padding-top: 3px; */ /* position: relative;*/">';
6872												      progress += '<div aria-valuemax="100" aria-valuemin="0" aria-valuenow="'+progressBarPercent+'" class="progress-bar progress-bar-info" role="progressbar" style="color: #000000; text-align:center; white-space:nowrap; padding-top:10px; font-size: 16px;"></div>';
6873												      progress += '</div>';
6874												      progress += '</div>';
6875												  
6876												  
6877												   $('#trackingInfo2').prepend(progress);
6878												   
6879												   if  ((typeof json.notice !== 'undefined') && (json.notice !== null) && (json.notice !== "") && (json.notice.length > 0)) {
6880													    $.each(json.notice, function(key, value) { 
6881														   $('#trackingInfo2').append(trackingNotice(value['type'], value['title'], value['text'], value['spoiler'], value['link'], value['img'], value['details']));
6882													   });
6883												   }	
6884												   
6885												   $('#trackingInfo2').append('<hr><div class="">'+trackInfoToPanel+'</div><div class="clear"></div>'); 
6886												   
6887												    $(".trackingInCommentsFlagRotatedDown").unbind(); 			     
6888													$(".trackingInCommentsFlagRotatedDown").bind("click", function(e) {  
6889													   
6890													      $(this).fadeOut(3000);
6891                                                           if ($('#trackingInfo2').length > 0) { 
6892																    $('html, body').animate({scrollTop: $(".trackingInCommentsFlagRotated").offset().top - 190}, 300, 'swing', function(){
6893																		$("#trackingInfo2").slideUp(300, function() { 
6894																				 $("#trackingInfo2").empty().remove();
6895																				 $(".trackingInCommentsFlagRotated").removeClass("trackingInCommentsFlagRotated"); 
6896																		});
6897																    }); 
6898														   } 
6899													});	
6900													
6901													 $(window).scroll(function() {
6902														  //console.log($(".tracking-notice-block-text-wrapper").visible());
6903														    if ($(".tracking-notice-block-text-wrapper").visible() === true) {															         
6904																     setTimeout( function() {
6905																	   $('.tracking-notice-block-text-wrapper').find(".tracking-notice-block-redMarker").removeClass('tracking-notice-block-redMarker').addClass('tracking-notice-block-redMarkerActive');
6906	                                                                 }, 1000);
6907															 }
6908															 
6909													        //console.log($(".well").visible());
6910															 if ($(".well").visible() === true) {															         
6911																     setTimeout( function() {
6912																	   $('.well').find(".redMarker").removeClass('redMarker').addClass('redMarkerActive');
6913	                                                                 }, 1600);
6914															 } 
6915															  //console.log($("#projectedDate").visible());
6916															 if ($("#projectedDate").visible() === true) {
6917 																     setTimeout( function() {
6918																	  $('#projectedDate').removeClass('redMarker').addClass('redMarkerActive');
6919	                                                                 }, 2000);
6920															 }
6921															 
6922														});
6923													
6924										          $('[data-toggle="popover"]').popover({html:'true'});
6925									              
6926												  if (findBootstrapEnvironment() === "xs") {
6927													  $('.sp').addClass('sp_m').removeClass('sp');
6928													  $('.sp_left').addClass('sp_left_m').removeClass('sp_left');
6929													  $('.sp_title').addClass('sp_title_m').removeClass('sp_title');
6930													  $('.sp_line').addClass('sp_line_m').removeClass('sp_line');
6931													  $('.sp_right').addClass('sp_right_m').removeClass('sp_right');
6932													  $('.sp_value').addClass('sp_value_m').removeClass('sp_value');
6933												  }
6934												  
6935												  
6936									$('.tracking-notice-block-spoiler').unbind();
6937										   $(".tracking-notice-block-spoiler").bind("click", function(e) {
6938											$(".tracking-notice-block-spoiler").toggleClass("tracking-notice-block-spoiler-rotated");
6939												 if ($(".tracking-notice-block-spoiler").hasClass("tracking-notice-block-spoiler-rotated") === true) { 
6940													  
6941													 $(".tracking-notice-block-spoiler-content").slideDown(500); 
6942												 }
6943												 else {
6944													  $(".tracking-notice-block-spoiler-content").slideUp(500); 
6945												 }
6946										        
6947										   });
6948										
6949                                        
6950										if ((device.desktop()) && (groupEventsByServiceTrigger != true) && (hideDublicateEventsTrigger != true))  {
6951											$(".trackingInfoRow2").tooltip({title: "Клик левой кнопки мыши для копирования статуса в буфер обмена.", placement: 'left', delay : { show: 3000} });
6952											$(".trackingInfoRow2").bind("click", function(e) { 
6953											     
6954												 var rowElement = this;
6955												 var selectedEventDataForClipBoard  = "Информация о трек-коде: "+inputedTrackCode+"\n";
6956														 selectedEventDataForClipBoard +=  events[0][$(this).index()]["operationDateTime"]+" ["+events[0][$(this).index()]["serviceName"]+"]\n";
6957														 selectedEventDataForClipBoard +=  (typeof events[0][$(this).index()]["operationAttributeTranslated"] !== 'undefined') ? $.trim(events[0][$(this).index()]["operationAttributeTranslated"])+"\n" : $.trim(events[0][$(this).index()]["operationAttributeOriginal"])+"\n";
6958														 if (eventsArray[$(this).index()]["operationTypeTranslated"] != "") {
6959														   selectedEventDataForClipBoard +=  (typeof eventsArray[$(this).index()]["operationTypeTranslated"] !== 'undefined') ? $.trim(eventsArray[$(this).index()]["operationTypeTranslated"])+"\n" : $.trim(eventsArray[$(this).index()]["operationTypeOriginal"])+"\n";
6960														 }
6961														 selectedEventDataForClipBoard +=  ((typeof events[0][$(this).index()]["operationPlacePostalCode"] !== 'undefined') && (events[0][$(this).index()]["operationPlacePostalCode"] !== ""))  ? $.trim(events[0][$(this).index()]["operationPlacePostalCode"])+" " : "";
6962														 selectedEventDataForClipBoard +=  ((typeof events[0][$(this).index()]["operationPlaceNameTranslated"] !== 'undefined') && (events[0][$(this).index()]["operationPlaceNameTranslated"] !== "")) ? $.trim(events[0][$(this).index()]["operationPlaceNameTranslated"])+"\n" : $.trim(events[0][$(this).index()]["operationPlaceNameOriginal"])+"\n";
6963														 selectedEventDataForClipBoard += 'Отследить на сайте: https://track24.ru/?code='+inputedTrackCode+"\n";
6964														 try {
6965															navigator.clipboard.writeText(selectedEventDataForClipBoard).then(function() {
6966															   
6967															     $(rowElement).attr('data-original-title', "Copied!").tooltip("hide").tooltip('show');
6968															    
6969															     setTimeout(function() {						  
6970																		  $(rowElement).attr('data-original-title', "Клик левой кнопки мыши для копирования статуса в буфер обмена."); 
6971																  }, 1000);
6972																  
6973															}, function(err) {
6974																console.error('Async: Could not copy text: ', err);
6975															});
6976														 } catch (err) {
6977															console.log(err);
6978															console.log('Oops, unable to copy');
6979														 }	
6980															 
6981											});	
6982										}
6983										
6984										//First / Last
6985										if ($(".trackingInfoStatus2").length > 1) {
6986										   $('.trackingInfoStatus2').each(function(i) {
6987										        if (i == 0) {
6988													  $(this).addClass('trackingInfoStatusFirst2');								                      
6989												  }
6990												  if (i == $(".trackingInfoStatus2").length-1) {
6991												 	 $(this).addClass('trackingInfoStatusLast2');
6992												  }
6993										   });
6994										}		
6995										//First / Last										
6996										
6997										 if (hideProjectedDeliveryPeriodTrigger == true) {
6998										   $("#projectedDeliveryPeriodBeforeEvents2").css('visibility', 'hidden');
6999										   $(".projectedDeliveryPeriodAffterEvents2").hide();	 
7000										 }
7001										 
7002										//
7003										$('#translateEvents').bind('click', function() {
7004											$('.operationAttribute, .operationPlace').each(function(i) {
7005												 var translatedElement = $(this);
7006												  if ($.trim($(this).text().length) > 1) {
7007												   if  ((typeof $(this).attr("originalText") === "undefined") || ($(this).attr("originalText") === null) || ($(this).attr("originalText") === ""))  {
7008														 $(this).attr("originalText", $(this).text());
7009													}	
7010													
7011													$(this).html('<i class="fa fa-spinner fa-spin"></i> Переводим....');
7012													$.ajax({
7013													         url  : '/ajax/translate.ajax.php',
7014															 data : {'from': 'en', 'to': 'ru', 'text' : $.trim($(this).attr("originalText"))},
7015															 type :	'POST', 
7016															 dataType :  'json',
7017															 success : function(json){
7018															   if (json) { 
7019																   if  (json.status == 'ok') {
7020																		if (json.translatedText !== null) {
7021																		  translatedElement.attr("translatedText", json.translatedText);
7022																		} 
7023																		
7024																		if ((typeof translatedElement.attr("translatedText") !== "undefined") && (translatedElement.attr("translatedText") !== null) && (translatedElement.attr("translatedText") !== "")) {
7025																			translatedElement.text(translatedElement.attr("translatedText"));
7026																			translatedElement.addClass("myTooltip");
7027																			translatedElement.addClass("auto-tooltip");
7028																			translatedElement.attr("data-toggle", 'tooltip');						   	
7029																			translatedElement.attr("data-placement", 'left');
7030																			translatedElement.attr("data-title", translatedElement.attr("originalText"));
7031																			translatedElement.tooltip({container: 'body'});
7032																		} 
7033																		else {
7034																			translatedElement.text(translatedElement.attr("originalText"));
7035																		}
7036																			
7037																		
7038					
7039																	} 
7040																}
7041															},
7042															error: function() {
7043															  translatedElement.text('Упс... Произошла ошибка перевода... ');
7044															}	   
7045														 });
7046													 }	 
7047												 });		 
7048											   
7049											       $('#translateEvents').unbind();
7050												   $(this).delay(100).fadeOut().queue(function(){
7051														$(this).html('<i class="fa fa-check" style="color:green;"></i> <span class="dotted">Переведено</span>').fadeIn().dequeue();
7052												   });
7053											 
7054										 });
7055										  
7056										  var allEventsToClipboard = new Clipboard('#trackingInfoEventsClipBoard', {
7057												text: function() { 
7058													return trackingInfoEventsDataForClipBoard;  
7059												}
7060											});  
7061
7062										   allEventsToClipboard.on('success', function(e) {
7063												  $('#trackingInfoEventsClipBoard').delay(100).fadeOut().queue(function(){
7064															$('#trackingInfoEventsClipBoard').html('<i class="fa fa-check" style="color:green;"></i> <span class="dotted">Скопировано</span>').fadeIn().dequeue();
7065															$('#trackingInfoEventsClipBoard').unbind(); 														
7066														});
7067											});
7068										var lastEventsToClipboard = new Clipboard('#lastEventClipBoard', {
7069												text: function() { 
7070													return lastEventDataForClipBoard;  
7071												}
7072											});  
7073
7074										   lastEventsToClipboard.on('success', function(e) {
7075												  $('#lastEventClipBoard').delay(100).fadeOut().queue(function(){
7076															$('#lastEventClipBoard').html('<i class="fa fa-check" style="color:green;"></i> <span class="dotted">Скопировано</span>').fadeIn().dequeue();
7077															$('#lastEventClipBoard').unbind(); 														
7078														});
7079											});
7080											
7081										 $('#groupEventsByService').click(function(e){
7082 										   groupEventsByServiceTrigger ^= true; 
7083										   $.Storage.set('groupEventsByServiceTrigger', ''+groupEventsByServiceTrigger+'');
7084 										   $('html, body').animate({
7085											    scrollTop: $("#mainContainer").offset().top - 10
7086											 }, 1000);
7087											  tracking();
7088										 });
7089										 $('#hideDublicateEvents').click(function(e){
7090 										   hideDublicateEventsTrigger ^= true; 
7091										   $.Storage.set('hideDublicateEventsTrigger', ''+hideDublicateEventsTrigger+'');
7092										     if (hideDublicateEventsTrigger == false) {
7093											    $(".dublicateEventRow").slideDown(1000);
7094												var hideDublicateEventsText = (hideDublicateEventsTrigger == true ) ? "Отобразить дубликаты" : "Скрыть дубликаты";	
7095												$('#hideDublicateEvents > span').text(hideDublicateEventsText);
7096												$('html, body').animate({
7097													 scrollTop: $("#mainContainer").offset().top - 10
7098												 }, 1000);
7099											 }
7100											 else {
7101												 $('html, body').animate({
7102													 scrollTop: $("#mainContainer").offset().top - 10
7103												 }, 1000);
7104												  tracking();
7105											 }
7106											 
7107										 });
7108										
7109										
7110										$('#sortEvents').click(function(e){
7111 										   sortEventsTrigger ^= true; 
7112										   $.Storage.set('sortEventsTrigger', ''+sortEventsTrigger+'');
7113 										   $('html, body').animate({
7114											    scrollTop: $("#mainContainer").offset().top - 10
7115											 }, 1000);
7116											  tracking();
7117										 });
7118										
7119										
7120										   $('.sampleTrackCode').unbind();
7121										   $('.sampleTrackCode').bind('click', function() {
7122                                                 $("#inputTrackCode").val($(this).text());
7123				                                  tracking();
7124				                           });
7125									        $('.myTooltip').tooltip();
7126										 	var bar = $('.progress-bar');
7127											
7128											/* копирование в буффер из отслеживания в комментариях */ 
7129											$("#trackingInfo2").find(".copyToClipBoard").click(function(e) {
7130												console.log(".copyToClipBoard in tracking");
7131												  e.stopPropagation(); 
7132												  var trackCodeForClipBoard =  $(this).attr("data-for-clipboard");
7133												  var el = $(this);
7134												   try {
7135														navigator.clipboard.writeText(trackCodeForClipBoard).then(function() { 
7136															  $(el).attr('data-original-title', "Скопировано!").tooltip("hide").tooltip('show');
7137															  setTimeout(function() {						  
7138																 $(el).tooltip("destroy");
7139															  }, 1000);
7140															  
7141														}, function(err) {
7142															console.error('Async: Could not copy text: ', err);
7143															alert('Async: Could not copy text: '+ err);
7144														});
7145													 } catch (err) {
7146														console.log(err);
7147														console.log('Oops, unable to copy');
7148														alert(err);
7149													 } 
7150												  return false; 
7151											});
7152											 
7153											$(function(){
7154													  $(bar).each(function(){
7155														bar_width = $(this).attr('aria-valuenow');
7156														  $(this).width(bar_width + '%');
7157																								  
7158													  });
7159											 });	
7160											
7161											  $('.printTracking').click(function(e){
7162													 $("#trackingInfo2").printThis( {
7163												        debug: false,      
7164													    importCSS: true, 
7165														importStyle: true,  
7166														printContainer: true, 
7167														pageTitle: "Информация предоставлена системой отслеживания почтовых отправлений: Track24.ru",
7168														printDelay: 333,
7169                                                        removeInline:false														
7170													 });  
7171											  });
7172											   
7173						   
7174											  
7175										      $('.upTrackCode').bind('click', function(e) {
7176											     $.ajax({
7177															 url:   '/ajax/upTrackCode.ajax.php',
7178															 data : {'code' : inputedTrackCode},
7179															 type:	 'GET',
7180                                                             dataType:  'json', 
7181															 success: function(data){
7182															 },
7183															 beforeSend :  function() {  
7184																
7185															 },
7186															 complete: function() {  
7187															 },
7188															 error: function() { 
7189															 }	   
7190														 });
7191											    
7192												 
7193												 var imElement = $(this);
7194											         imElement.fadeOut( function() {
7195													   imElement.attr("src", "https://track24.ru/img/updated-in-square.jpg?3").fadeIn();
7196 													     setTimeout(function() {
7197															  imElement.fadeOut(function() {
7198															     imElement.attr("src", "https://track24.ru/img/ali-logo-in-square.jpg").attr("title", "Перейти на AliExpress за покупками").fadeIn(700); 
7199															     imElement.unbind();	
7200																 imElement.bind('click', function(e) {
7201																				 window.open(
7202																				  'https://track24.ru/?g=upTrackCode', 
7203																				  '_blank' 
7204																				);
7205																});
7206															  });
7207														 }, 2300);
7208													  
7209												   });
7210											   });
7211											   
7212											 $('.showDeliveredStatChart').bind('click', function(e) {
7213												  var currentPrefix = $(this).attr("data-prefix");
7214												  var currentPostfix = $(this).attr("data-postfix");
7215												  showDeliveredStatChart(currentPrefix, currentPostfix);
7216											 });   
7217										   
7218											  
7219											       var trackCatClickCounter = 0;
7220													 $(".trackCat").click(function() {
7221													   trackCatClickCounter = trackCatClickCounter + 1;
7222													   if (trackCatClickCounter == 3) {
7223															$('.embed').remove();
7224															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/meow.mp3" preload="auto"></audio>');
7225															document.getElementById('meow').play();
7226														}
7227													   if (trackCatClickCounter == 5) {
7228															$('.embed').remove();
7229															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/mrrr.mp3" preload="auto"></audio>');
7230															document.getElementById('meow').play();
7231														}
7232													   if (trackCatClickCounter > 5) {
7233															trackCatClickCounter = 0;
7234														}
7235													 });
7236											   
7237  											       
7238													 
7239											      /*
7240												   setTimeout(function() {
7241													   
7242													   
7243														   try { 
7244																 if (typeof addthis.layers.refresh === "function") {	
7245																	 addthis.layers.refresh(); 																 
7246																 }
7247															 } catch(e) {
7248																 console.log('Error: ' + e.name + ":" + e.message + "\n" + e.stack);  
7249															 }
7250													
7251													 }, 500);								
7252												   */
7253  
7254												 $('#routeOriginCountry, #routeDestinationCountry').bind('click', function(e) {
7255													    //var aa = $(this).attr("action"); 
7256														 var addrr = $(this).text();
7257														 console.log(addrr);  
7258													    var dialogHtml = '<div class="my-mfp-white-popup zoom-anim-dialog"> <fieldset class="content"><legend>&nbsp;&nbsp;<b><font color="#1B81B1">'+addrr+'</font></b>&nbsp;&nbsp;</legend><div class="map" id="YMapsID"  style="margin:5px; width: 98%; height: 400px; border: 0px #000000 solid;"></div></fieldset></div>';
7259														 $.magnificPopup.open({
7260															  items: { src: dialogHtml},
7261															  type: 'inline',
7262															  fixedBgPos: false,
7263															  fixedContentPos: true,
7264															  overflowY: 'scroll',
7265															  closeBtnInside: true,
7266															  preloader: false,          
7267															  midClick: false,
7268															  removalDelay: 400,
7269															  mainClass: 'my-mfp-zoom-in',
7270															  alignTop:false,
7271															  showCloseBtn: true,
7272															  closeMarkup: '<button title="%title%" type="button" class="mfp-close"></button>',
7273															  callbacks: {
7274																   open: function() { 
7275																		  $('.navbar-fixed-top').css('overflow-y', 'scroll');
7276																		      
7277																				 
7278																				 $.getScript('https://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU&apikey=56f90107-af88-461a-9880-839fbac1cdbd').done(function() { 
7279																				     ymaps.ready(init);
7280																					 
7281																					 function init() {
7282																							 ymaps.geocode(addrr, { results: 1 }).then(function(res) { 
7283																										 myMap = new ymaps.Map("YMapsID", {
7284																												center: res.geoObjects.get(0).geometry.getCoordinates(),
7285																												zoom: 10
7286																											});
7287																										 myMap.container.fitToViewport();
7288																										 var myPlacemark = window.lastPoint = new ymaps.Placemark(res.geoObjects.get(0).geometry.getCoordinates(), {
7289																											 balloonContent: '<i class="fa fa-building"></i> '+addrr,										 
7290																										   }, 
7291																										   {
7292																											preset: "twirl#buildingsIcon",
7293																											balloonCloseButton: true,
7294																											hideIconOnBalloonOpen: true 
7295																											});
7296																										   myMap.geoObjects.add(myPlacemark);
7297																										   myMap.controls.add('zoomControl');
7298																									}); 				 
7299																						
7300																						}
7301
7302																				 });
7303																				 
7304																				
7305
7306																	},
7307																	close: function() {
7308																		 $('.navbar-fixed-top').css('overflow-y', 'hidden');
7309																	}
7310															  }
7311															  
7312
7313														  });
7314														  
7315												 });	 
7316												  
7317												  
7318
7319                                 
7320                               }
7321							   else if ((json.status == 'ok') && ((typeof json.data.events === "undefined") || (json.data.events !== null) || (json.data.events !== "")))  {
7322                                   $('#trackingInfo2').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">К сожалению, информация о почтовом отправлении с номером <b>'+inputedTrackCode+'</b> не найдена.</br>Попробуйте еще раз, но чуть позже, например завтра...<br>Или зарегистрируйтесь и добавьте трек-код в историю отслеживания, и мы уведомим Вас, как только обновится информация по Вашему трек-коду!</div><div class="panel-footer"><p><b>Постоянная ссылка для отслеживания</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p></div></div>');
7323								   
7324                               }
7325							                                      
7326							   else if (json.status == 'error') {
7327                                       $('#trackingInfo2').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">'+json.message+'</div></div>');
7328									    $('.addTransportCompany').click(function(e){
7329											   addTransportCompany();
7330										 });
7331										 
7332										 $('.sampleTrackCode').unbind();
7333										   $('.sampleTrackCode').bind('click', function() {
7334                                                 $("#inputTrackCode").val($(this).text());
7335				                                 tracking();
7336				                         });
7337										 
7338										 $('[data-toggle="popover"]').popover({html:'true'});
7339										 $('[data-toggle="tooltip"]').tooltip();
7340										 
7341										 var trackCatClickCounter = 0;
7342													 $(".trackCat").click(function() {
7343													   trackCatClickCounter = trackCatClickCounter + 1;
7344													   if (trackCatClickCounter == 10) {
7345															$('.embed').remove();
7346															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/meow.mp3" preload="auto"></audio>');
7347															document.getElementById('meow').play();
7348														}
7349													   if (trackCatClickCounter == 15) {
7350															$('.embed').remove();
7351															$('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/mrrr.mp3" preload="auto"></audio>');
7352															document.getElementById('meow').play();
7353														}
7354													   if (trackCatClickCounter > 15) {
7355															trackCatClickCounter = 0;
7356														}
7357										 });
7358													  
7359											  
7360							       }
7361						       else {
7362                                    $('#trackingInfo2').html('<div class="panel panel-danger" style="margin-top:20px;"><div class="panel-heading"><h4 class="panel-title">Ошибка</h4></div><div class="panel-body">Ошибка получения данных. Пожалуйста сообщите разрабочикам!</div><div class="panel-footer"><p><b>Постоянная ссылка для отслеживания</b>: <a href="//track24.ru/?code='+inputedTrackCode+'" style="border-bottom: 1px dotted;">https://track24.ru/?code='+inputedTrackCode+'</a></p></div></div>');
7363						       }
7364}	
7365
7366function checkApiTrackingUrlAvailability(checkUrl, callback) {  
7367	try {
7368			$.ajax({
7369					url     :   checkUrl, 
7370					type    :   'GET', 
7371					data    :   {'action' : "check"},
7372					dataType:   'json',
7373					success : function(json){
7374						if (json) {
7375							if  (json.status == "ok") {
7376								if (json.message == "success") {
7377								   callback(true);
7378								}
7379								else {
7380									callback(false);
7381								}
7382						   }
7383						   else {
7384							 callback(false);
7385						  }
7386					   }
7387					   else {
7388						   callback(false);
7389					   }
7390				   },
7391				   error: function(objAJAXRequest, strError, errorThrown) {
7392						var dataArray = [clientIp, clientCountryCode, strError, errorThrown, objAJAXRequest['status'], window.location.href, checkUrl, navigator.userAgent];
7393							console.log("checkApiTrackingUrlAvailability Error!");
7394							console.log(dataArray);
7395								$.ajax({
7396									url:   '/ajax/tracking.error.logger.ajax.php',
7397									data : {'data' : dataArray},
7398									type:	 'POST',
7399									dataType:  'json', 
7400								  });
7401							callback(false);
7402				   } 
7403			 }); 
7404	} 
7405    catch (err) {
7406		console.log("checkApiTrackingUrlAvailability error: "+err);
7407		callback(false); 
7408	}
7409}
7410 						  
7411
7412function serviceInfoBuilder(inputedTrackCode, dataJson) {
7413	var json = dataJson;
7414	var trackCode = inputedTrackCode;
7415      $('#trackingPrepand').html('<i class="fa fa-barcode"></i>');
7416	  $('.availableServiceCode').fadeOut(400);	
7417	   
7418	           if (json.status == 'ok') {	  
7419				  var trackingAvailableServicesUrls = []; 
7420				    $.each(json.services, function(key, value) {
7421						      if ((value != "UPU") && (value != "DBPOST") && (value != "INTRU") && (value != "RUPOST")) { 
7422							     trackingAvailableServicesUrls.push('<a href="https://track24.ru/service/'+value.toLowerCase()+'/tracking/'+trackCode+'" title="'+json.serviceNames[value]+'" service-code="'+value+'" class="dotted myTooltip availableServiceCode" data-toggle="tooltip" data-placement="bottom" style="margin-right:5px; display:none;">'+value+'</a>');
7423							  }
7424					 })
7425	
7426 					 $('#trackingAvailableServices').html(trackingAvailableServicesUrls.join(' '));
7427					
7428					 if (trackingAvailableServicesUrls.length >= 12) {
7429						 $('#trackingAvailableServices').removeClass("trackingAvailableServices").addClass("trackingAvailableServices_2");
7430						 $('#lastTrackCodesWrapper').removeClass("lastTrackCodesWrapper").addClass("lastTrackCodesWrapper_2");
7431						 $('#lastTrackCodesNotice').removeClass("lastTrackCodesNotice").addClass("lastTrackCodesNotice_2");
7432						 $('#browserExtension').removeClass("browserExtension").addClass("browserExtension_2");
7433					 }
7434					 else {
7435						 $('#trackingAvailableServices').removeClass("trackingAvailableServices_2").addClass("trackingAvailableServices");
7436						 $('#lastTrackCodesWrapper').removeClass("lastTrackCodesWrapper_2").addClass("lastTrackCodesWrapper");
7437						 $('#lastTrackCodesNotice').removeClass("lastTrackCodesNotice_2").addClass("lastTrackCodesNotice");
7438						 $('#browserExtension').removeClass("browserExtension_2").addClass("browserExtension");
7439					 }
7440					
7441					 
7442					 $('.availableServiceCode').each(function(i, t) {
7443							  var $this = $(t);
7444							  setTimeout(function(){
7445 								  $this.fadeIn(400); 
7446								  $this.tooltip();								  
7447								  }, i*100);
7448					 }); 
7449			 } 			
7450      			 
7451} 
7452
7453 
7454function lastTrackCodesBuilder(inputedTrackCode) { 
7455 	if  ((typeof inputedTrackCode === "undefined") || (inputedTrackCode === null) || (inputedTrackCode === ""))   {
7456	     var lastTrackCodesArray = JSON.parse($.Storage.get("lastTrackCodes"));	
7457		    if (lastTrackCodesArray.length > 0) {
7458				 lastTrackCodesArray.reverse();
7459				  $("#exampleTrackCodes").hide();
7460				  $("#lastTrackCodesWrapper").show();
7461				  $("#lastTrackCodes").empty();
7462				     $.each(lastTrackCodesArray, function(index, value) {
7463					     $('#lastTrackCodes').append('<span class="sampleTrackCode active" style="margin-right:10px; margin-bottom:3px;">'+value+'</span> ');
7464					 });
7465				 
7466				    var cws = 0;
7467					$("#lastTrackCodes > .sampleTrackCode").each(function() { 
7468					      var cWidth = $(this).width();
7469						  cws = Number(cws) + Number(cWidth);
7470						  if ((Number(cws)+Number(25)) > $("#lastTrackCodesWrapper").width()) {
7471							 $(this).hide();  
7472						  }
7473					 });
7474				 
7475					
7476											
7477		   }
7478		   else {
7479		       $("#exampleTrackCodes").show();
7480		   }
7481		   
7482		   $("#lastTrackCodesWrapper").hover(function () {
7483			   
7484				window.initHandler = setTimeout(handler, 1300);
7485				var $this = this;
7486				function handler() { 
7487                       if ($(".lastTrackCodesCleaner").length === 0) {
7488						 $('#lastTrackCodes').append('<span class="lastTrackCodesCleaner" title="Очистить список"><i class="fa fa-times text-danger" aria-hidden="true"></i></span>');   
7489						 //$('#lastTrackCodesWrapper').append('<span class="lastTrackCodesCleaner" title="Очистить список"><i class="fa fa-times text-danger" aria-hidden="true"></i></span>');   
7490						     $('#lastTrackCodesWrapper').bind('mouseleave', function() {
7491								    setTimeout( function() {
7492									    $(".lastTrackCodesCleaner").remove();
7493	                                }, 300);
7494									
7495									
7496							 });
7497							   $('.lastTrackCodesCleaner').bind('click', function() {
7498									   $.Storage.set('lastTrackCodes' , JSON.stringify([]));
7499									   $(".lastTrackCodesCleaner").remove();
7500									   $("#exampleTrackCodes").show();
7501									   $("#lastTrackCodesWrapper").hide();
7502									   $("#lastTrackCodes").empty(); 
7503									   
7504										 var tmpcookie = document.cookie.split(';');
7505										 while(name = tmpcookie.pop()) { 
7506 											 $.cookie($.trim(name.split('=')[0]), null);
7507										 }										 
7508										
7509										
7510									   
7511							 });
7512					   }   
7513						   
7514					   
7515					
7516				}
7517			}, function () {
7518				clearTimeout( window.initHandler );
7519			});
7520			
7521             
7522			
7523		   
7524		   
7525	}
7526	 else {
7527	                     var myRegExp = /[А-Яа-я]+/;
7528			             var match = myRegExp.exec(inputedTrackCode);
7529						 if (match === null) { 
7530							 var lastTrackCodesArray = JSON.parse($.Storage.get("lastTrackCodes"));
7531							    if (jQuery.inArray(inputedTrackCode, lastTrackCodesArray) == -1) {
7532								 lastTrackCodesArray.push(escape(inputedTrackCode));
7533								  if (lastTrackCodesArray.length > 5) { 
7534								     lastTrackCodesArray.reverse();
7535								     lastTrackCodesArray.length = 5;
7536									 lastTrackCodesArray.reverse();
7537								  }
7538								
7539							  $.Storage.set('lastTrackCodes' , JSON.stringify(lastTrackCodesArray));
7540								     if (lastTrackCodesArray.length > 0) {
7541											  lastTrackCodesArray.reverse();
7542											  $("#exampleTrackCodes").hide();
7543											  $("#lastTrackCodesWrapper").show();
7544											  $("#lastTrackCodes").empty();
7545											  $.each(lastTrackCodesArray, function(index, value) {
7546												  $('#lastTrackCodes').append('<span class="sampleTrackCode active" style="margin-right:10px; margin-bottom:3px;">'+value+'</span> ');
7547											  });
7548											
7549									  }
7550								}
7551						  }		
7552	 }				  
7553}
7554
7555function autoUpdate(){		 
7556  $('.autoUpdateHistory').unbind();
7557  $('.autoUpdateHistory').addClass('disabled');
7558  $('.autoUpdateHistory').addClass('fa-spin'); 
7559  
7560  
7561   $("#trackingButton").toggleClass('disabled');
7562   $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
7563   $(".load-bar-disabled").show();													
7564   $(".load-bar").toggleClass('active');
7565  
7566     var queue = new Array();
7567     $('.myTrackingNumbersCard').each(function() {
7568		   queue.push($(this).attr("data-trackcode"));		  
7569	 });	
7570	 if (queue.length > 0) { 
7571	      autoUpdateQueue(queue, 1);
7572	 } 
7573	
7574}	
7575 
7576function autoUpdateQueue(queue, n) {
7577	 var readyForAutoUpdate = 0;
7578	 var totalCount = $(".myTrackingNumbersCard").length;  
7579 	 var activeCount = $(".myTrackingNumbersCardActive").length;
7580	 var currentElementIndex = totalCount - queue.length;
7581	
7582	  
7583	  $('.myTrackingNumbersCardActive').each(function() { 
7584		   if (($(this).attr("data-update-diff-minutes") >= minMinutesForMultiTracking) && ($(this).attr("data-delivered-status") == 0)) {
7585			    readyForAutoUpdate = readyForAutoUpdate + 1;
7586		   }
7587	 }); 
7588	 
7589	  
7590	 $('.multiTrackingCounter').find("span").text(n +' / '+readyForAutoUpdate); 	
7591 	 
7592	 if (queue.length > 0) {
7593		 var ct = queue.shift();
7594		 		if ($(".myTrackingNumbersCard").length > 0) {
7595					if ($(".myTrackingNumbersCard").eq(currentElementIndex).attr("class").indexOf("myTrackingNumbersCardArchive") < 0) {
7596						   if (($(".myTrackingNumbersCard").eq(currentElementIndex).attr("data-update-diff-minutes") >= minMinutesForMultiTracking) && ($(".myTrackingNumbersCard").eq(currentElementIndex).attr("data-delivered-status") == 0)) {
7597								 var n = n + 1; 
7598								 var lng = $.Storage.get("lng");  
7599								 
7600								 
7601								    //23.03.2025
7602									$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa").hide();
7603									$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").append('<i class="fa fa-spinner fa-spin"></i>');
7604									$(".myTrackingNumbersCard").eq(currentElementIndex).addClass('active');
7605								     
7606									 setTimeout(function(){  
7607						             
7608										  $.ajax({
7609												url  : trackingUrl,
7610												crossDomain: true,
7611												data : {'code' : ct, 'selectedService':selectedService, 'lng':lng, 'sort':sortEventsTrigger, 'grouped':groupEventsByServiceTrigger, 'type': 'update', 'key':trackingKey, 'clientIp':clientIp, 'uuid':uuid, 'fingerprint': $.Storage.get("fingerprint"), 'auto':true},   
7612												type :	 'POST', 
7613												dataType :  trackingDataType, 
7614												timeout : (trackingTimeOut),
7615												success: function(json) {
7616													
7617													if (json.status == 'ok') {
7618
7619															if (json && json.challenge && json.challenge === true) {
7620																   $("#turnstile-container").show();
7621																		loadTurnstileScript(function () {
7622																			turnstile.render('#turnstile-container', {
7623																				sitekey: '0x4AAAAAAA9kACzU3nI8h1V0',
7624																				size: 'flexible',
7625																				theme: 'light',
7626																				callback: function (cf_turnstile_response) {
7627																					verifyCaptcha(cf_turnstile_response);  
7628																				}
7629																			});
7630																		});
7631																return false;
7632															}
7633													}
7634													
7635													$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa-spinner").remove();
7636													$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa").show();
7637													$(".myTrackingNumbersCard").eq(currentElementIndex).removeClass('active');
7638													
7639													
7640													
7641													
7642													
7643													 
7644												},
7645												complete: function(){
7646													
7647													
7648													 $(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa-spinner").remove();
7649													 $(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa").show();
7650													 $(".myTrackingNumbersCard").eq(currentElementIndex).removeClass('active');
7651													  
7652													  autoUpdateQueue(queue, n); 
7653													 
7654													 
7655												},
7656												beforeSend :  function() {  
7657													$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa").hide();
7658													$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").append('<i class="fa fa-spinner fa-spin"></i>');
7659													$(".myTrackingNumbersCard").eq(currentElementIndex).addClass('active');
7660													
7661													 
7662												},
7663												error: function(objAJAXRequest, strError) {
7664													console.log("ajax update error: "+strError); 
7665													$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa-spinner").remove();
7666													$(".myTrackingNumbersCard").eq(currentElementIndex).find(".myTrackingNumbersSetting").find(".fa").show();
7667													$(".myTrackingNumbersCard").eq(currentElementIndex).removeClass('active');
7668													
7669													if (objAJAXRequest['status'] == "404") {
7670														 setTimeout( function() {
7671																 location.reload();
7672														 }, 5000); 
7673													}
7674													else if (objAJAXRequest['status'] == "502") {
7675														 setTimeout( function() {
7676																 location.reload();
7677														 }, 5000); 
7678													}
7679													else if (objAJAXRequest['status'] == "429") {																	 
7680														 $.notify('Вы делаете слишком частые запросы!\nПомедленее пожалуйста...', "error");																		 
7681													}
7682													else {
7683														 setTimeout( function() {
7684																 location.reload();
7685														 },  5000);
7686													}
7687
7688													 
7689												}	   								
7690											});
7691											
7692									  }, 10000);		
7693									
7694									
7695									
7696							}
7697							else {
7698								
7699								 autoUpdateQueue(queue, n);	
7700							}
7701					}
7702					else {
7703						
7704					   autoUpdateQueue(queue, n);	
7705					}	
7706				}
7707				else {
7708					 
7709					 var queue = new Array();
7710					
7711					 autoUpdateQueue(queue, n);
7712				}
7713        }
7714        else {
7715			  updateHistoryBlock(); 
7716			  $("#trackingButton").toggleClass('disabled');			  
7717			  $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
7718			  $(".load-bar-disabled").hide();
7719			  $(".load-bar-under-stripe-disabled").hide();
7720			  $(".load-bar").toggleClass('active');
7721			  $('.multiTrackingCounter').hide();			 
7722			 
7723		}
7724 }   	
7725 
7726function clickLoggerFunction(element) { 
7727	  if ($(element).length > 0) {		  
7728	      $.ajax({
7729		    url:   '/ajax/click.logger.ajax.php',
7730		    data : {'elementId' : element.attr("id")}, 
7731		    type:	 'POST',
7732            dataType:  'json', 
7733          });
7734	   } 
7735    }
7736	
7737function trackCodeValidatorLoggerFunction(code) { 
7738	  if (code.length > 0) {		  
7739	      $.ajax({
7740		    url:   '/ajax/track.code.validator.logger.ajax.php',
7741		    data : {'code' : code}, 
7742		    type:	 'POST',
7743            dataType:  'json', 
7744          });
7745	   } 
7746    }
7747	
7748function trackingErrorLoggerFunction(dataArray) { 
7749	  if (dataArray.length > 0) {		  
7750	      $.ajax({
7751		    url:   '/ajax/tracking.error.logger.ajax.php',
7752		    data : {'data' : dataArray},
7753		    type:	 'POST',
7754            dataType:  'json', 
7755          });
7756	   } 
7757   }			
7758
7759
7760
7761$(document).ready(function() { 
7762       //$('.lazy').lazy();
7763});
7764/*	 
7765$(document).ready(function() { 
7766	  var loadedElements = 0;
7767		 $('.lazy').lazy({
7768			  beforeLoad: function(element){
7769				  console.log('image "' + (element.data('src')) + '" is about to be loaded');
7770			  },
7771			  afterLoad: function(element) {
7772				  loadedElements++;
7773				  console.log('image "' + (element.data('src')) + '" was loaded successfully');
7774			  },
7775			  onError: function(element) {
7776				  loadedElements++;
7777				  console.log('image "' + (element.data('src')) + '" could not be loaded');
7778			  },
7779			  onFinishedAll: function() {
7780				  console.log('finished loading ' + loadedElements + ' elements');
7781				  console.log('lazy instance is about to be destroyed')
7782			  },
7783			  //scrollDirection: 'vertical',
7784			  delay: 1000, // For testing
7785              effect: "fadeIn",
7786              effectTime: 1000,
7787              //threshold: 0
7788		  });
7789	});
7790*/	
7791$(document).ready(function() { 
7792
7793  if ((device.desktop()) || (device.tablet())) { 
7794	 var $toTop = $('<div id="scroll-up-left-side" class="scroll-up-button hidden-xs hidden-sm hidden-md"><svg xmlns="http://www.w3.org/2000/svg" class="icon icon--scroll-up-button__arrow"><svg id="icon--scroll-up-button__arrow" viewBox="0 0 9 7" width="100%" height="100%"><path d="M1 6l3.5-4L8 6" fill="none"></path></svg></svg></div>');
7795	 $('html').append($toTop);
7796	  $toTop.hide().click(function(){ 
7797			  $('html, body').stop().animate({scrollTop:0}, 800); return false;
7798	  });
7799	  
7800	   $(window).scroll(function(){
7801			  var sd = jQuery(window).scrollTop();
7802			  if ( typeof document.body.style.maxHeight === "undefined") {
7803				   $toTop.css({'position':'absolute','top':jQuery(window).scrollTop( )+ $(window).height() - 20});
7804			 }
7805		   if( sd > 400){
7806				$toTop.fadeIn(600);
7807			}
7808			 else{
7809				 $toTop.fadeOut(400);
7810			}
7811	   }); 
7812 }
7813 
7814  $('body').append('<div id="back-to-top"><span class="glyphicon glyphicon-arrow-up"></span> Вверх</div>'); 
7815	  $("#back-to-top").hide();
7816		$(function () {
7817			  $(window).scroll(function () {
7818						if ($(this).scrollTop() > 1000) {
7819							$('#back-to-top').fadeIn();
7820						} else {
7821							$('#back-to-top').fadeOut();
7822						}
7823			  });
7824			  $('#back-to-top').click(function () {
7825						$('body,html').animate({
7826							scrollTop: 0
7827						}, 800);
7828						return false;
7829			  });
7830		});
7831		
7832		
7833		
7834		if (device.desktop()) { 
7835			var browser = detectBrowser();
7836			var browserExtensionUrl = null;
7837			 
7838			if (browser  == "chrome") {
7839				$(".browserExtensionLogo").css('background-image', 'url(//track24.ru/img/browser-logo-google-24.png)');
7840				$(".browserExtensionName").text('Google Chrome');
7841				  browserExtensionUrl = getExtensionUrl('chrome-webstore-item');
7842			 }
7843			 if (browser  == "yabrowser") {
7844				$(".browserExtensionLogo").css('background-image', 'url(//track24.ru/img/browser-logo-yandex-24.png)');
7845				$(".browserExtensionName").text('Yandex Browser');
7846				browserExtensionUrl = getExtensionUrl('chrome-webstore-item');
7847			 }
7848			 if (browser  == "amigo") {
7849			   $(".browserExtensionLogo").css('background-image', 'url(//track24.ru/img/browser-logo-amigo-24.png)');
7850			   $(".browserExtensionName").text('Amigo');
7851			   browserExtensionUrl = getExtensionUrl('chrome-webstore-item');
7852			 } 
7853			 if (browser  == "opera") {
7854			   $(".browserExtensionLogo").css('background-image', 'url(//track24.ru/img/browser-logo-opera-24.png)');
7855			   $(".browserExtensionName").text('Opera');
7856			   browserExtensionUrl = getExtensionUrl('chrome-webstore-item');
7857			 } 
7858			 
7859			 if (browserExtensionUrl !== null) {
7860			   $("#browserExtension").fadeIn(300);
7861			 }  
7862			  
7863			  $("#browserExtension").click(function(e) {
7864				   if (browser  == "chrome")  {
7865						window.location.href = browserExtensionUrl;
7866					}
7867					else {
7868					   window.location.href = browserExtensionUrl;
7869					}
7870			   });  
7871		  }
7872		  
7873		  if (!isLocalStorageNameSupported()) {
7874				alert('Ooops... Your web browser does not support storing settings locally. The most common cause of this is using "Private Browsing Mode".\nSome settings may not save or some features may not work properly for you. \n\nОй ... Ваш  браузер не поддерживает локальное хранение настроек.  Наиболее распространенной причиной является использование "Режима инкогнито".\nНекоторые функции могут работать некорректно...');
7875		}
7876		
7877});
7878
7879
7880
7881
7882function adsCounter(bid) { 
7883	 $.ajax({
7884		 url:   '/ajax/ads.counter.ajax.php',
7885		 data : {'bid' : bid},
7886		 type:	'POST', 
7887		 dataType:  'json',
7888		 success: function(data){
7889				   if (data.status == 'ok') {
7890					   return true;
7891				   }
7892				   else { 
7893					  return false;
7894				   } 	
7895				 } 	   
7896		});
7897}
7898 
7899
7900(function($) {
7901			var input_class = 'zbz-input-clearable',
7902				input_class_x = input_class + '__x',
7903				input_class_x_over = input_class + '__x-over',
7904				input_selector = '.' + input_class,
7905				input_selector_x = '.' + input_class_x,
7906				input_selector_x_over = '.' + input_class_x_over,
7907				event_main = input_class + '-init',
7908				event_names = [event_main, 'click focus drop paste keydown keypress input change'].join(' '),
7909			   // event_names = [event_main, 'click'].join(' '),    
7910				btn_width = 20,
7911				btn_height = 20,
7912				btn_margin = 7;
7913
7914			function tog(v) {
7915				return v ? 'addClass' : 'removeClass';
7916			}
7917 
7918			$(document).on(event_names, input_selector, function () {
7919				  
7920				 if ($("#inputTrackCode").hasClass("inputTrackCode-validate") == true) {
7921					 //$("#inputTrackCode").removeClass("zbz-input-clearable");
7922					 //$("#inputTrackCode").removeClass("zbz-input-clearable__x");
7923					 //$("#inputTrackCode").removeClass("zbz-input-clearable__x-over");
7924				  }  
7925				 $(this)[tog(this.value)](input_class_x);		
7926			});
7927
7928			$(document).on('mousemove', input_selector_x, function (e) {
7929				var input = $(this),
7930					input_width = this.offsetWidth,
7931					input_height = this.offsetHeight,
7932					input_border_bottom = parseFloat(input.css('borderBottomWidth')),
7933					input_border_right = parseFloat(input.css('borderRightWidth')),
7934					input_border_left = parseFloat(input.css('borderLeftWidth')),
7935					input_border_top = parseFloat(input.css('borderTopWidth')),
7936					input_border_hr = input_border_left + input_border_right,
7937					input_border_vr = input_border_top + input_border_bottom,
7938					client_rect = this.getBoundingClientRect(),
7939					input_cursor_pos_x = e.clientX - client_rect.left,
7940					input_cursor_pos_y = e.clientY - client_rect.top,
7941					is_over_cross = true;
7942
7943				is_over_cross = is_over_cross && (input_cursor_pos_x >= input_width - input_border_hr - btn_margin - btn_width);
7944				is_over_cross = is_over_cross && (input_cursor_pos_x <= input_width - input_border_hr - btn_margin);
7945				is_over_cross = is_over_cross && (input_cursor_pos_y >= (input_height - input_border_vr - btn_height) / 2);
7946				is_over_cross = is_over_cross && (input_cursor_pos_y <= (input_height - input_border_vr - btn_height) / 2 + btn_height);
7947
7948				$(this)[tog(is_over_cross)](input_class_x_over);
7949			});
7950
7951			$(document).on('click', input_selector_x_over, function () {
7952				$(this).removeClass([input_class_x, input_class_x_over].join(' ')).val('').trigger('input');
7953			});
7954
7955			$(function () {
7956				$(input_selector).trigger(event_main);
7957			});
7958
7959        
7960    
7961})(jQuery);
7962
7963$(document).ready(function () {
7964   var trackCatClickCounter = 0;
7965     $(".trackCat").click(function() {
7966	   trackCatClickCounter = trackCatClickCounter + 1;
7967	   if (trackCatClickCounter == 3) {
7968	        $('.embed').remove();
7969		    $('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/meow.mp3" preload="auto"></audio>');
7970			document.getElementById('meow').play();
7971		}
7972	   if (trackCatClickCounter == 5) {
7973	        $('.embed').remove();
7974		    $('body').append('<audio id="meow" class="embed" src="//track24.ru/files/mp3/mrrr.mp3" preload="auto"></audio>');
7975			document.getElementById('meow').play();
7976		}
7977
7978	   if (trackCatClickCounter > 5) {
7979	        trackCatClickCounter = 0;
7980	    }
7981     }); 
7982
7983 });
7984  
7985   
7986    $(document).ready(function() { 
7987	   /*
7988         $('.g-covid-2019-1').bind('click', function() {
7989		   window.location.href =  "https://track24.ru/?page=covid-19";					
7990		});	
7991		*/
7992		 
7993		
7994		$(document).on("a.click", ".smooth-scroll", function(e) {
7995				e.preventDefault(); 
7996				var t = $($(this)[0]),
7997					n = $(t.attr("href")); 
7998				scrollToElement(n)
7999		   }); 
8000		
8001	});
8002	
8003	
8004	 function scrollToElement(e) {
8005		 console.log(e, e.length);
8006				if (e.length == 1) {
8007					var t = e.offset().top - (38 + $("#navbar").height()) || 0;
8008					 $("html, body").stop().animate({
8009						scrollTop: t
8010					})
8011				}
8012	 }
8013	 function _translit(str) { 
8014		var ru = {
8015			'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 
8016			'е': 'e', 'ё': 'e', 'ж': 'j', 'з': 'z', 'и': 'i', 
8017			'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 
8018			'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 
8019			'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 
8020			'щ': 'shch', 'ы': 'y', 'э': 'e', 'ю': 'ju', 'я': 'ya',
8021			'йо': 'jo', 'йе':'je' 
8022		}, n_str = [];
8023		
8024		str = str.replace(/[ъь]+/g, '').replace(/й/g, 'j');
8025		
8026		for ( var i = 0; i < str.length; ++i ) {
8027		   n_str.push(
8028				  ru[ str[i] ]
8029			   || ru[ str[i].toLowerCase() ] == undefined && str[i]
8030			   || ru[ str[i].toLowerCase() ].toUpperCase()
8031		   );
8032		}
8033		
8034		return n_str.join('');
8035	}
8036
8037
8038	  /*
8039	function readClipboard____() {
8040		        var promise = navigator.clipboard.readText();
8041				console.log(promise);
8042
8043		      
8044				//navigator.clipboard.writeText(text).then(function() {
8045				navigator.clipboard.readText().then(function() {
8046					 console.log('Async: reading clipboard was successful!');
8047					 
8048					 var copyResult = document.getElementById('copyResult');
8049						 copyResult.style.visibility = 'visible';
8050						 copyResult.style.display = 'block';
8051						 
8052						 setTimeout(function(){ 
8053							var copyResult = document.getElementById('copyResult');
8054								copyResult.style.visibility = 'hidden';
8055								copyResult.style.display = 'none';
8056						 }, 1000);
8057				}, 
8058				  function(err) {
8059					console.error('Async: Could not readClipboard: ', err);
8060				});
8061				
8062			}
8063			*/
8064async function readClipboard() {
8065  
8066  if (!navigator.clipboard) {
8067    // Clipboard API not available
8068      return;
8069  }
8070 
8071  try {
8072     const clipboardText = await navigator.clipboard.readText(); 
8073	    //console.log('clipboard readText: '+clipboardText);		
8074		var myRegExp = /^[A-Za-z0-9\-]{3,32}$/; 
8075		//console.log(myRegExp.exec(clipboardText));
8076		if (myRegExp.exec($.trim(clipboardText)) !== null) { 
8077		     setTimeout( function() {
8078			    document.getElementById('addTrackingNumberFormInput').value = $.trim(clipboardText);	
8079			 }, 100);
8080			setTimeout( function() {
8081			     //document.getElementById('addTrackingNumberFormInputHelpBlock').innerText = "вставленно из буффера обмена";	
8082				 $('#addTrackingNumberFormInputHelpBlock').text("вставленно из буффера обмена").fadeIn(1300);				 
8083			 }, 300);
8084			
8085		    
8086			
8087		} 
8088	  
8089  } catch (err) {
8090       //console.error('Failed to copy!', err);
8091  }
8092}
8093
8094function updateClipboard() {
8095  // Here You Can Debug without DomException
8096  debugger
8097  const clipboard = document.querySelector('.clipboard-content').innerText;
8098  document.querySelector('.clipboard-content').innerText = 'Updated => ' + clipboard;
8099}			
8100			
8101
8102
8103$(document).ready(function() { 
8104	//console.time("fingerprint time");
8105    if (fingerprint === null) {
8106		 //setTimeout(function () {
8107			var fingerprintOptions = {
8108				 excludes: {hardwareConcurrency: true, doNotTrack: true, pixelRatio: true, adBlock: true, canvas: true, plugins: true, webgl: true, audio: true, enumerateDevices: true},
8109				 sortPluginsFor: [/palemoon/i]
8110			}
8111			if (window.requestIdleCallback) {
8112				requestIdleCallback(function () {
8113					Fingerprint2.get(fingerprintOptions, function (components) {
8114					  //console.log("v1: "+components)  
8115					  var values = components.map(function (component) { return component.value });
8116						 /*  
8117						 var keys = components.map(function (component) { return component.key });
8118						 var cr = "";
8119						 for (var i = 0; i < keys.length; i++) {
8120							cr = cr+"\n"+keys[i]+": "+values[i];
8121						  }
8122						  console.log(cr);
8123						  */
8124						  fingerprint = Fingerprint2.x64hash128(values.join(''), 31);
8125						  $.Storage.set('fingerprint', fingerprint);
8126						  //console.timeEnd("fingerprint time");  
8127					})
8128				}); 
8129			} 
8130			else {
8131				setTimeout(function () {
8132					Fingerprint2.get(fingerprintOptions, function (components) {
8133					   //console.log("v2: "+components)  
8134						  var values = components.map(function (component) { return component.value });
8135						  /*
8136						  var keys = components.map(function (component) { return component.key });
8137						  var cr = "";
8138						  for (var i = 0; i < keys.length; i++) {
8139							cr = cr+"\n"+keys[i]+": "+values[i];
8140						  }
8141						  console.log(cr);
8142						  */
8143						  fingerprint = Fingerprint2.x64hash128(values.join(''), 31);
8144						  $.Storage.set('fingerprint', fingerprint);
8145						  
8146						  //console.timeEnd("fingerprint time");			  
8147					}); 
8148				}, 1000);
8149			}
8150
8151			 //setTimeout(function () {
8152				 //console.log("fingerprint: "+fingerprint);
8153			 //}, 1500);
8154		//}, 2000);
8155	}
8156	
8157	if (visitors == true) {
8158		   setTimeout(function () {
8159			 $.ajax({
8160				 url:	 'https://track24.ru/ajax/visitors.ajax.php',
8161				 data : {'fingerprint' : $.Storage.get("fingerprint")}, 
8162				 type:	 'POST', 
8163				 dataType:  'json',
8164				 success: function(data){
8165				   
8166				},
8167				beforeSend :  function() {  
8168					 
8169				},
8170				complete: function(response) { 
8171					  
8172				},
8173				error: function(objAJAXRequest, strError, errorThrown) {
8174					if (objAJAXRequest['status'] == "505") {
8175						 setTimeout( function() {
8176							 location.reload();
8177						}, 500); 
8178					} 
8179				}	   
8180			 });
8181		}, 300);
8182   }
8183
8184});
8185
8186
8187function loadTurnstileScript(callback) {
8188       const scriptSrc = "https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit";
8189       const existingScript = document.querySelector(`script[src="${scriptSrc}"]`);
8190
8191		if (!existingScript) {
8192			const script = document.createElement('script');
8193			script.src = scriptSrc;
8194			script.defer = true;
8195			script.onload = callback;
8196			document.head.appendChild(script);			
8197		}
8198		else {
8199			callback();
8200			return;
8201		}
8202}	
8203function verifyCaptcha(cf_turnstile_response) {
8204	$.ajax({
8205        url: 'https://track24.ru/ajax/verify.captcha.php',
8206        type: 'POST',
8207        data: {"cf-turnstile-response": cf_turnstile_response },
8208        success: function (response) {
8209            if (response.success) {
8210                 $("#turnstile-container").empty().hide();                 
8211				 //var inputedTrackCode = $.trim($("#inputTrackCode").val().replace(/[^А-Яа-яA-Za-z0-9\-\.\/]/gi, ''));
8212                 //var lng = $.Storage.get("lng"); 
8213				 //getTrackingData(inputedTrackCode, selectedService, lng, refreshStep, refreshTime, key, cp, clientIp).done(getTrackingHandle);				 
8214				 
8215				
8216				 
8217				  setTimeout(function() {
8218					  
8219					$("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
8220				    $("#trackingButton").toggleClass('disabled');
8221				    $(".load-bar-disabled").hide();
8222				    $(".load-bar-under-stripe-disabled").hide();
8223				    $(".load-bar").toggleClass('active');
8224					  
8225					  tracking();
8226					  
8227			      }, 5000);				 
8228				 
8229            } 
8230			else {
8231                GrowlNotification.notify({title:"Error",description:"Captcha verification failed.<br>Please try again later.",type:"error",closeTimeout:5000,showProgress: true});
8232            }
8233        }
8234    });
8235} 
8236
8237function verifyCaptchaInComments(cf_turnstile_response, el, tc, e) {
8238	$.ajax({
8239        url: 'https://track24.ru/ajax/verify.captcha.php',
8240        type: 'POST',
8241        data: {"cf-turnstile-response": cf_turnstile_response },
8242        success: function (response) {
8243            if (response.success) {
8244                   $("#turnstile-container").empty().hide(); 
8245
8246                   $("#trackingButton").find("i").toggleClass("fa-spinner").toggleClass("fa-spin").toggleClass("fa-binoculars");
8247				   $("#trackingButton").toggleClass('disabled');
8248				   $(".load-bar-disabled").hide();
8249				   $(".load-bar-under-stripe-disabled").hide();
8250				   $(".load-bar").toggleClass('active');
8251					
8252				   trackingInComments(el, tc, e); 
8253            } 
8254			else {
8255                GrowlNotification.notify({title:"Error",description:"Captcha verification failed.<br>Please try again later.",type:"error",closeTimeout:5000,showProgress: true});
8256            }
8257        }
8258    });
8259} 
8260
8261function getBrowserLanguage() {
8262    try {
8263        let lang = navigator.language || navigator.languages?.[0];
8264        return lang ? lang.split('-')[0].toUpperCase() : "EN";
8265    } catch (error) {
8266        console.error("Ошибка получения языка браузера:", error);
8267        return "EN";
8268    }
8269} 

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.