PageSourceSearch

https://static.pismodedamraza.rs/js/nr.20220721.dev.js?r=202209081790299758

js pismodedamraza.rs collected 2026-09-25 01:29:39 UTC 35,628 bytes, 1,067 lines download raw bytes

1var selectedText = "";
2var selectedNode = null;
3
4function formatMoney(t,a,s,e){var r=t,a=isNaN(a=Math.abs(a))?2:a,s=void 0==s?",":s,e=void 0==e?".":e,i=0>r?"-":"",o=parseInt(r=Math.abs(+r||0).toFixed(a))+"",d=(d=o.length)>3?d%3:0;return i+(d?o.substr(0,d)+e:"")+o.substr(d).replace(/(\d{3})(?=\d)/g,"$1"+e)+(a?s+Math.abs(r-o).toFixed(a).slice(2):"")}
5
6function microtime(){
7	const d = new Date();
8	let ms = d.getMilliseconds();
9	return ms*ms;
10};
11
12var dataCollapse = {
13	init: function(a) {
14		var this_ = this;
15		var _elems = document.querySelectorAll("[data-collapse]");
16		if (_elems.length > 0) {
17			[].forEach.call(_elems, function(el) {
18				el.addEventListener("click", function(e) {
19					e.preventDefault();
20					var thisEl = e.currentTarget;
21					var targetEl = document.querySelector(e.target.dataset.collapse);
22
23					if(thisEl.classList.contains("collapsed")){
24						thisEl.classList.remove("collapsed")
25					}else{
26						thisEl.classList.add("collapsed")
27					}
28
29					if (targetEl !== null) {
30						if(targetEl.classList.contains("collapsed")){
31							targetEl.classList.remove("collapsed");
32							this_.onShow();
33						}else{
34							targetEl.classList.add("collapsed")
35						}
36						if(e.target.dataset.autoremove!==undefined){
37							el.remove();
38						}
39					}
40				});
41			});
42		}
43	},
44	onShow: function(a){
45		if($(".owl-carousel-page-hidden").length>0){
46			if(!$('.owl-carousel-page-hidden').hasClass('processed')){
47				$('.owl-carousel-page-hidden').addClass('processed').addClass('owl-carousel-page');
48				$(".owl-carousel-page").owlCarouselPage({items:1,autoplay:true,autoplayTimeout:3000,autoplayHoverPause:true,loop:true,margin:0,dots:true,nav:true,navText:["<span class='icon-arrow icon-arrow-left'></span>","<span class='icon-arrow icon-arrow-right'></span>"],navigation:true,navigationText:["<span class='icon-arrow icon-arrow-left'></span>","<span class='icon-arrow icon-arrow-right'></span>"],slideSpeed:300,paginationSpeed:400,responsive:false});
49				initOwlGallery();
50			}
51		}
52	}
53};
54
55function zoom(e){
56  var zoomer = e.currentTarget;
57  e.offsetX ? offsetX = e.offsetX : offsetX = e.touches[0].pageX
58  e.offsetY ? offsetY = e.offsetY : offsetX = e.touches[0].pageX
59  x = offsetX/zoomer.offsetWidth*100
60  y = offsetY/zoomer.offsetHeight*100
61  zoomer.style.backgroundPosition = x + '% ' + y + '%';
62};
63
64function getSelectionText(){
65	s = '';
66	if (window.getSelection){ // all modern browsers and IE9+
67		selectedNode = window.getSelection();
68		// console.log(selectedNode);
69		if(selectedNode.rangeCount>0){
70			var oRange = selectedNode.getRangeAt(0); //get the text range
71			// console.log(oRange);
72			var oRect = oRange.getBoundingClientRect();
73			s = selectedNode.toString();
74		}
75	}
76  return s;
77}
78
79function pasteHtmlAtCaret(html) {
80	let sel, range;
81	if (window.getSelection) {
82		// IE9 and non-IE
83		sel = window.getSelection();
84		if (sel.getRangeAt && sel.rangeCount) {
85			range = sel.getRangeAt(0);
86			range.deleteContents();
87
88			// Range.createContextualFragment() would be useful here but is
89			// non-standard and not supported in all browsers (IE9, for one)
90			const el = document.createElement("div");
91			el.innerHTML = html;
92			let frag = document.createDocumentFragment(),
93				node,
94				lastNode;
95			while ((node = el.firstChild)) {
96				lastNode = frag.appendChild(node);
97			}
98			range.insertNode(frag);
99			console.log('lastNode', lastNode);
100			lastNode.focus();
101			// Preserve the selection
102			if (lastNode) {
103				console.log('@lastNode');
104				range = range.cloneRange();
105				// range.setStartAfter(lastNode);
106				// console.log(range);
107				// range.setStart(lastNode, 0);
108				// range.setEnd(lastNode, 0);
109				range.collapse(true);
110				sel.removeAllRanges();
111				sel.addRange(range);
112			}
113			lastNode.focus();
114		}
115	} else if (document.selection && document.selection.type != "Control") {
116		// IE < 9
117		document.selection.createRange().pasteHTML(html);
118	}
119};
120
121function __keyboardType(s, kt){
122	if(String(kt).toLowerCase()=='cyr2lat'){
123		return mutf8.Cyr2Lat(s)
124	}else if(String(kt).toLowerCase()=='lat2cyr'){
125		return mutf8.Lat2Cyr(s)
126	}else{
127		return mutf8.Cyr2Lat(s)
128	}
129};
130
131function recalculateCart(){
132	var totalAmount = 0;
133	document.querySelectorAll('tr[data-price]').forEach((el)=>{
134		var _dataset = el.dataset;
135		var qty = parseFloat(_dataset.qty);
136		var price = parseFloat(_dataset.price);
137		var trAmount = qty * price;
138		el.querySelector('[data-amount]').innerText = formatMoney(trAmount, 2, ",", ".");
139		totalAmount += trAmount;
140	});
141	document.querySelectorAll('[data-total-amount]').forEach((el)=>{
142		el.innerText = formatMoney(totalAmount, 2, ",", ".");
143	});
144}
145class NR {
146	constructor(name){
147		this.name = name;
148		this.myDropzone;
149		this._payment_instructions = [];
150		this.payment_instructions_show = false;
151	}
152	bindOrderFormValidate(required){
153		var this_ = this;
154
155		var _required = $.parseJSON(required);
156		var _rules = {}, _messages = {};
157		$.each(_required, function(i, _i) {
158
159			$.each(_i.rules, function(r, rc) {
160				if(_rules[_i.name]===undefined){
161					_rules[_i.name] = {};
162				}
163				_rules[_i.name][r] = rc;
164			});
165			$.each(_i.messages, function(m, mt) {
166					if(_messages[_i.name]===undefined){
167						_messages[_i.name] = {};
168					}
169					_messages[_i.name][m] = mt;
170			});
171		});
172
173		/*$("button.btn-submit-order").removeClass("hide");*/
174
175		if ($("#form_order")[0]) {
176
177			var formOrder = document.querySelector('#form_order');
178
179			var promoStatus = null;
180
181			/* Promo */
182			// $.validator
183			// 	.addMethod(
184			// 		'validatePromo',
185			// 		function(){
186			// 			$.ajax({
187			// 				url: /path/to/script,
188			// 				async: false,
189      //       	dataType: 'json',
190      //       	data: {
191			//
192			// 				},
193			// 				success: function(data){
194			// 					errorMessages['validatePromo'] = data.message;
195      //           promoStatus = data.status;
196			// 				},
197			// 				complete: function(){},
198			// 				error: function(){}
199			// 			});
200			// 			return promoStatus;
201			// 		},
202			// 		function(){
203			// 			return errorMessages['validatePromo'];
204			// 		}
205			// 	);
206
207
208
209			$.validator.addMethod("promo", function(value, element) {
210				$('span.promo-status').empty().addClass('hide');
211				$.ajax({
212					url: '?action=promo_code',
213					async: false,
214					dataType: 'json',
215					data: {
216						'promo_code': value
217					},
218					success: function(data){
219						// console.log(data);
220						// _messages['promo'] = {
221						// 	promo: data.message
222						// };
223						promoStatus = data.status;
224						if(!data.satus){
225							$('span.promo-status').html(data.message).removeClass('hide');
226						}
227					},
228					complete: function(){
229						// console.log('@2');
230					},
231					error: function(){
232						// console.log('@3');
233					}
234				});
235				return promoStatus;
236			});
237
238			// _rules['promo'] = {
239			// 	remote: {
240			//     type: 'post',
241			//     url: '?action=promo_code',
242			//     data: {
243			//         'code': function () { return $('input[name="promo_code"]').val(); }
244			//     },
245			//     dataType: 'json'
246			// 	}
247			// 	// remote: validatePromo
248			// };
249
250			// _messages['promo_code'] = {
251			// 	remote: _('Promo kôd nije ispravan.')
252			// };
253
254			$.validator.addMethod("alpha", function(value, element) {
255				return this.optional(element) || value == value.match(/^[a-zA-ZАБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШабвгдђежзијклљмнњопрстћуфхцчџшŠĐČĆŽšđčćžßäÄöÖüÜÅåÖöÄ䯨æøåÅÁáĎďÉĚéěÍíŇňÓóŘřŤťÚúŮůÝýŁłŹźŻżŚśŃńĘęАаБбВвГгДдЕеЁёЖжЗÐ
255·Ð˜Ð¸Ð™Ð¹ÐšÐºÐ›Ð»ÐœÐ¼ÐÐ½ÐžÐ¾ÐŸÐ¿Ð Ñ€Ð¡ÑÐ¢Ñ‚УуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяß\s\-]+$/);
256			});
257			$.validator.addMethod("alphanum", function(value, element) {
258				return this.optional(element) || value == value.match(/^[0-9a-zA-ZАБВГДЂЕЖЗИЈКЛЉМНЊОПРСТЋУФХЦЧЏШабвгдђежзијклљмнњопрстћуфхцчџшŠĐČĆŽšđčćžßäÄöÖüÜÅåÖöÄ䯨æøåÅÁáĎďÉĚéěÍíŇňÓóŘřŤťÚúŮůÝýŁłŹźŻżŚśŃńĘęАаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяß\s\-]+$/);
259			});
260			$.validator.addMethod("phone", function(value, element) {
261				return this.optional(element) || value == value.match(/^[0-9\/\-\.\+\s]+$/);
262			});
263			// var formOrderValidate = $("#form_order");
264			formOrderValidate.validate({
265				ignore: ":hidden",
266				rules: _rules,
267				messages: _messages,
268				invalidHandler: function(event, validator) {
269			    // 'this' refers to the form
270			    var errors = validator.numberOfInvalids();
271					// console.log('@errors', errors);
272			    if (errors) {
273						var invalidInputs = document.querySelectorAll('.validate-highlight:not(.valid)');
274						console.log(invalidInputs);
275						if(invalidInputs.length>0){
276						    invalidInputs[0].focus();
277						    invalidInputs[0].scrollIntoView({
278						        block: 'center'
279						    });
280						}
281			    } else {
282			      // $("div.error").hide();
283			    }
284			  },
285				highlight: function(e) {
286					// validateErrors++;
287					// console.log('@highlight', e);
288					$(e).closest("form").removeClass("success").addClass("error")
289					// $(m).addClass('validate-highlight');
290					e.classList.remove('valid');
291					e.classList.add('validate-highlight');
292				},
293				success: function(e, v) {
294					// console.log('@success', e, v);
295					e.text("").addClass("valid").closest("form").removeClass("error").addClass("success")
296					// e.classList.remove('validate-highlight');
297				},
298				errorPlacement: function(error, element){
299					$(error).addClass('error-column');
300					//$(element).parent().parent().addClass('error-column').append(error);
301					console.log('@errorPlacement', $(element).attr('name'));
302					element.classList.remove('valid');
303					switch($(element).attr('name')){
304						case 'imedeteta~':
305						case 'pohvala':
306						case 'kritika':
307						case 'address':
308						case 'address_alt':
309						case 'house_no':
310						case 'house_no_alt':
311						case 'zipcode':
312						case 'zipcode_alt':
313						case 'city':
314						case 'city_alt':
315						case 'tos':
316						case 'promo_code':
317						case '_commendation[]':
318						case '_commendation[]':
319							$(element).parents('.einput').parent().append(error);
320							$(element).closest('.valid').removeClass('valid');
321						break;
322						default:
323							/*console.log($(element));*/
324							/*console.log($(element).parents('.column'));*/
325							/*$(element).parent().parent().append(error);*/
326							$(element).parents('.einput').append(error);
327						break;
328					}
329				},
330				submitHandler: function(f) {
331					/*console.log(f);*/
332					/*$('body').removeAttr('data-loading-message').removeClass('loading');*/
333					swal.close();
334					$('body').attr('data-loading-message', $('form#form_order').attr('data-loading-message')).addClass('loading');
335					f.submit();
336				}
337			});
338		}
339
340		if($('input[name="tooth_skip"]').length>0){
341			$('input[name="tooth_skip"]').off('change');
342			$('input[name="tooth_skip"]').on('change', function(){
343				if($('input[name="tooth_skip"]').is(':checked')){
344					$('input[name="tooth"]').rules('remove', 'required');
345				}else{
346					$('input[name="tooth"]').rules( "add", {
347						required: true,
348						messages: {
349							required: _('Neophodno popuniti')
350						}
351					});
352				}
353			});
354		}
355
356		if($('input[name="pos_alt"]').length>0){
357			$('input[name="pos_alt"]').off('change');
358			$('input[name="pos_alt"]').on('change', function(){
359				if($('input[name="pos_alt"]').is(':checked')){
360					$('.column-address-alt').removeClass('disabled');
361					/*
362					$('.column-address').addClass('disabled');
363					$('input[name="address"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
364					$('input[name="house_no"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
365					$('input[name="zipcode"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
366					$('input[name="city"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
367
368					$('em#address-error').remove();
369					$('em#house_no-error').remove();
370					$('em#zipcode-error').remove();
371					$('em#city-error').remove();
372					*/
373
374					$('input[name="address_alt"]').removeAttr('disabled').rules('add', {
375						required: true,
376						messages: {
377							required: _('Neophodno popuniti')
378						}
379					});
380					$('input[name="house_no_alt"]').removeAttr('disabled').rules('add', {
381						required: true,
382						messages: {
383							required: _('Neophodno popuniti')
384						}
385					});
386					$('input[name="zipcode_alt"]').removeAttr('disabled').rules('add', {
387						required: true,
388						messages: {
389							required: _('Neophodno popuniti')
390						}
391					});
392					$('input[name="city_alt"]').removeAttr('disabled').rules('add', {
393						required: true,
394						messages: {
395							required: _('Neophodno popuniti')
396						}
397					});
398				}else{
399					/*$('.column-address').removeClass('disabled');*/
400					$('.column-address-alt').addClass('disabled');
401
402					$('input[name="address_alt"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
403					$('input[name="house_no_alt"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
404					$('input[name="zipcode_alt"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
405					$('input[name="city_alt"]').removeAttr('aria-invalid').removeAttr('aria-describedby').attr('disabled', true).rules('remove', 'required');
406
407					$('em#address_alt-error').remove();
408					$('em#house_no_alt-error').remove();
409					$('em#zipcode_alt-error').remove();
410					$('em#city_alt-error').remove();
411
412					/*
413					$('input[name="address"]').removeAttr('disabled').rules('add', {
414						required: true,
415						messages: {
416							required: _('Neophodno popuniti')
417						}
418					});
419					$('input[name="house_no"]').removeAttr('disabled').rules('add', {
420						required: true,
421						messages: {
422							required: _('Neophodno popuniti')
423						}
424					});
425					$('input[name="zipcode"]').removeAttr('disabled').rules('add', {
426						required: true,
427						messages: {
428							required: _('Neophodno popuniti')
429						}
430					});
431					$('input[name="city"]').removeAttr('disabled').rules('add', {
432						required: true,
433						messages: {
434							required: _('Neophodno popuniti')
435						}
436					});
437					*/
438				}
439			});
440		}
441
442		/* LETTER PREVIEW */
443		var letterMain = document.querySelector('#dedatext');
444		var letterPreview = document.querySelector('#letter-preview');
445		if(letterPreview!==null){
446			console.log('@letterPreview');
447			var columnSubmitBtn = formOrder.querySelector('.column-submit-btn');
448			var btnPreview = document.querySelector('button.btn-preview');
449			var btnSubmitOrder = formOrder.querySelector('button.btn-submit-order');
450			var btnEdit = formOrder.querySelector('button.btn-edit');
451			var btnEditCancel = formOrder.querySelector('button.btn-edit-cancel');
452			var btnSave = formOrder.querySelector('button.btn-save');
453
454
455			function letterPreviewAutoSave(){
456				document.querySelector('textarea[name="letter_text_by_user"]').value = letterPreview.innerHTML;
457			};
458
459			function saveLetterPreview(){
460				console.log('@saveLetterPreview');
461				letterPreview.removeAttribute('contenteditable');
462				this.classList.add('hide');
463				btnEdit.removeAttribute('disabled');
464				btnEditCancel.classList.add('hide');
465				btnEdit.classList.remove('hide');
466				btnSave.classList.add('hide');
467				document.querySelector('textarea[name="letter_text_by_user"]').value = letterPreview.innerHTML;
468			}
469
470			function editCancelLetterPreview(){
471				console.log('@editCancelLetterPreview');
472				letterPreview.removeAttribute('contenteditable');
473				// btnEdit.removeAttribute('disabled');
474				this.classList.add('hide');
475				btnSave.classList.add('hide');
476				btnEdit.classList.remove('hide');
477				letterPreview.innerHTML = document.querySelector('textarea#letter-preview-text').value;
478
479			}
480
481			function editLetterPreview(){
482				console.log('@editLetterPreview');
483				// this.setAttribute('disabled', true);
484				btnEdit.classList.add('hide');
485				btnSave.classList.remove('hide');
486				btnEditCancel.classList.remove('hide');
487				btnSave.addEventListener('click', saveLetterPreview);
488				btnEditCancel.addEventListener('click', editCancelLetterPreview);
489				// btnSubmitOrder.classList.remove('hide');
490
491				letterPreview.setAttribute('contenteditable', true);
492
493				/* CONTENTEDITABLE */
494				// letterPreview.addEventListener('mouseup', function(){
495				// 	var theText = getSelectionText();
496				// 	console.log('theText', theText);
497				// 	console.log('@selectedNode.baseNode.parentNode.nodeName', selectedNode.baseNode.parentNode.nodeName);
498				//
499				// 	// if (theText.length > 0){ // check there's some text selected
500				// 	// 	// console.log(theText) // logs whatever textual content the user has selected on the page
501				// 	// 	selectedText = theText;
502				// 	// 	console.log('@selectedNode.baseNode.parentNode.nodeName', selectedNode.baseNode.parentNode.nodeName);
503				// 	// 	switch(selectedNode.baseNode.parentNode.nodeName){
504				// 	// 		case 'SPAN':
505				// 	// 			console.log('SPAN AREA');
506				// 	// 		break;
507				// 	// 		default:
508				// 	// 			console.log('OTHER AREA');
509				// 	// 			pasteHtmlAtCaret('<span>@@@</span>');
510				// 	// 			// pasteHtmlAtCaret('<span></span>');
511				// 	// 		break;
512				// 	// 	}
513				// 	// }else{
514				// 	//
515				// 	// }
516				//
517				// 	switch(selectedNode.baseNode.parentNode.nodeName){
518				// 		case 'SPAN':
519				// 			console.log('SPAN AREA');
520				// 		break;
521				// 		default:
522				// 			console.log('OTHER AREA');
523				// 			// pasteHtmlAtCaret('<span>@@@</span>');
524				// 			// pasteHtmlAtCaret('<span>&#200B</span>');
525				// 			pasteHtmlAtCaret('<span></span>');
526				// 		break;
527				// 	}
528				//
529				// }, false);
530
531				letterPreview.addEventListener('keypress',function(evt){
532			    var range = window.getSelection().getRangeAt(0),
533			        modifiers = [0,8]; // List of keys to ignore (0 is arrows & 8 is delete in firefox)
534
535			    if(range.startContainer.parentNode.className!=='highlight' && modifiers.indexOf(evt.which) <  0){
536		        if(!range.collapsed){
537		            range.deleteContents();
538		        }
539		        var el =  document.createElement('span');
540		        el.appendChild(document.createTextNode('A'));
541		        el.className = 'highlight';
542		        range.insertNode(el);
543
544		        var sel = window.getSelection();
545		        range.setStartBefore(el.childNodes[0]);
546		        range.setEndAfter(el.childNodes[0]);
547		        sel.removeAllRanges();
548		        sel.addRange(range);
549			    }
550				});
551			}
552
553			function getLetterPreview(){
554				console.log('@getLetterPreview');
555
556				console.log(formOrderValidate);
557				console.log(formOrderValidate.valid());
558
559				if(formOrderValidate.valid()){
560					var _pohvale = [];
561					formOrder.querySelectorAll('.tr-pohvala').forEach((el)=>{
562				    // console.log(el);
563						_pohvale.push(el.value);
564					});
565					// console.log(_pohvale);
566
567					var _kritike = [];
568					formOrder.querySelectorAll('.tr-kritika').forEach((el)=>{
569				    // console.log(el);
570						_kritike.push(el.value);
571					});
572					// console.log(_kritike);
573
574					var _params = {
575						abc: 123,
576						userdata: {
577							lid: formOrder.querySelector('input[name="lid"]').value,
578							gender: formOrder.querySelector('input[name="gender"]').value,
579							tooth_fallout: formOrder.querySelector('input[name="tooth_fallout"]').value,
580							tooth_condition: formOrder.querySelector('input[name="tooth_condition"]').value,
581							imedeteta: formOrder.querySelector('input[name="imedeteta"]').value,
582							pohvala: _pohvale,
583							kritika: _kritike
584						}
585					};
586					console.log(_params);
587
588					$('body').attr('data-loading-message', $('form#form_order').attr('data-loading-message')).addClass('loading');
589
590					$.ajax({
591						type: "POST",
592						url: ROOTURL+"/?action=preview&json",
593						data: JSON.stringify(_params),
594						dataType: "json",
595						contentType: "application/json",
596						success: function(){},
597						complete: function(n){
598							console.log(n);
599							n = $.parseJSON(n.responseText);
600							console.log(n);
601
602							btnPreview.classList.add('hide');
603							letterMain.classList.add('hide');
604							btnEdit.classList.remove('hide');
605							letterPreview.innerHTML = n.content;
606							document.querySelector('textarea#letter-preview-text').value = letterPreview.innerHTML;
607
608							document.querySelector('.column-preview-back').classList.remove('hide');
609							document.querySelectorAll('.column-product-package').forEach((el)=>{
610								el.classList.remove('hide');
611							});
612							document.querySelector('.column-submit-btn').classList.remove('hide');
613
614							document.querySelector('.column-preview').classList.remove('hide');
615							document.querySelector('.column-preview').scrollIntoView({
616								block: 'start'
617					    });
618
619							var previewTooth = document.querySelector('#letter_preview .tooth');
620							if(previewTooth!==null){
621								previewTooth.remove();
622							}
623							var toothValue = parseInt(String(document.querySelector('input[name="tooth"]').value).replace(/[^0-9]/g, ''));
624							if(toothValue>0){
625								var newSpan = document.createElement("span");
626								newSpan.classList.add('tooth');
627								newSpan.classList.add(String(document.querySelector('input[name="tooth"]').value).toLowerCase());
628								letterPreview.appendChild(newSpan);
629							}
630
631							var previewToothCondition = document.querySelector('#letter_preview .tooth_condition');
632							if(previewToothCondition!==null){
633								previewToothCondition.remove();
634							}
635							var newSpan = document.createElement("span");
636							newSpan.classList.add('tooth_condition');
637							newSpan.classList.add('tooth_condition' + formOrder.querySelector('input[name="tooth_condition"]').value);
638							letterPreview.appendChild(newSpan);
639
640
641							columnSubmitBtn.classList.remove('hide');
642							btnEdit.addEventListener('click', editLetterPreview);
643
644							$('body').removeAttr('data-loading-message').removeClass('loading');
645						}
646					});
647				}
648			}
649
650			btnPreview.addEventListener('click', getLetterPreview);
651
652			dataCollapse.init();
653
654			letterPreview.addEventListener('keyup', letterPreviewAutoSave);
655
656
657		}
658
659		/* LETTER */
660		if($('input[name="shipping_type"]').length>0){
661			$('input[name="shipping_type"]').off('change');
662			$('input[name="shipping_type"]').on('change', function(){
663				this_.paymentTypesByShippingType($(this).val());
664
665				// document.querySelectorAll('[data-price-leter]').forEach((el)=>{
666    			// el.innerText = formatMoney(parseFloat($(this).attr('data-price')), 2, ",", ".");
667    			// el.setAttribute('data-price', $(this).attr('data-price');
668				// });
669
670				var trPriceLetter = document.querySelector('tr[data-price-letter]');
671				if(trPriceLetter!==null){
672					trPriceLetter.setAttribute('data-price', $(this).attr('data-price'));
673					var tdPrice = trPriceLetter.querySelector('[data-price]');
674					tdPrice.setAttribute('data-price', $(this).attr('data-price'));
675					var qty = trPriceLetter.dataset.qty;
676					var tdAmount = trPriceLetter.querySelector('[data-amount]');
677					tdPrice.innerText = formatMoney($(this).attr('data-price'), 2, ",", ".");
678					tdAmount.innerText = formatMoney(parseFloat(qty)*parseFloat($(this).attr('data-price')), 2, ",", ".");
679				}
680				console.info('@recalculateCart 1');
681				recalculateCart();
682			});
683		}
684
685		if($('input[name="is_tracking_code"]').length>0){
686			$('input[name="is_tracking_code"]').off('change');
687			$('input[name="is_tracking_code"]').on('change', function(){
688
689				var trPriceTracking = document.querySelector('tr[data-price-tracking]');
690				if(trPriceTracking!==null){
691					trPriceTracking.setAttribute('data-qty', $(this).is(':checked') ? 1 : 0);
692					var tdPrice = trPriceTracking.querySelector('[data-price]');
693					var tdQty = trPriceTracking.querySelector('[data-qty]');
694					var tdAmount = trPriceTracking.querySelector('[data-amount]');
695					var qty = parseFloat(trPriceTracking.dataset.qty);
696					tdPrice.innerText = formatMoney($(this).attr('data-price'), 2, ",", ".");
697					tdQty.innerText = qty;
698					tdAmount.innerText = formatMoney(qty*parseFloat($(this).attr('data-price')), 2, ",", ".");
699					if(qty>0){
700						trPriceTracking.classList.remove('hide');
701					}else{
702						trPriceTracking.classList.add('hide');
703					}
704				}
705				console.info('@recalculateCart 2');
706				recalculateCart();
707			});
708		}
709		this_.bindPaymentTypeChange();
710	}
711
712	bindCommon(){
713		var this_ = this;
714
715		$('.nav-toggle').off('click');
716		$('.nav-toggle').on('click', function(e){
717			e.preventDefault();
718			$('.nav-toggle').toggleClass('active');
719			$('.nav-menu').toggleClass('active');
720			$('.nav-overlay').toggleClass('active');
721		})
722		$('.nav-overlay').off('click');
723		$('.nav-overlay').on('click', function(e){
724			e.preventDefault();
725			$('.nav-toggle').toggleClass('active');
726			$('.nav-menu').toggleClass('active');
727			$('.nav-overlay').toggleClass('active');
728		})
729
730		if($(".owl-carousel-page").length>0){
731			$(".owl-carousel-page").owlCarouselPage({items:1,autoplay:true,autoplayTimeout:3000,autoplayHoverPause:true,loop:true,margin:0,dots:true,nav:true,navText:["<span class='icon-arrow icon-arrow-left'></span>","<span class='icon-arrow icon-arrow-right'></span>"],navigation:true,navigationText:["<span class='icon-arrow icon-arrow-left'></span>","<span class='icon-arrow icon-arrow-right'></span>"],slideSpeed:300,paginationSpeed:400,responsive:false})
732			initOwlGallery();
733		}
734
735		$('#tabs_payment_types a').off('click');
736		$('#tabs_payment_types a').on('click', function (e) {
737			e.preventDefault()
738			$(this).tab('show');
739			$('#tabs_payment_types+.tab-content input').prop('disabled', true);
740			$($(this).attr('href')).find('input').prop('disabled', false);
741			$('#form_order input[name="payment_type"]').val($(this).attr('data-id'));
742		});
743		$('[data-video-show]').off('click');
744		$('[data-video-show').on('click', function(e){
745			e.preventDefault();
746			var $this = $('#'+$(this).attr('data-video-show'));
747			if($this.hasClass('hide')){
748				$this.removeClass('hide');
749				$this.parent().addClass('active');
750				this_.lazy(0);
751			}else{
752				$this.addClass('hide');
753				$this.parent().removeClass('active');
754			}
755		});
756		$('[data-email]').each(function(){
757			var $this = $(this);
758			var _e = String(($this).attr('data-email')).split('|');
759			var e = '';
760			for(var i in _e){
761				e += String.fromCharCode(_e[i]);
762			}
763			$this.attr('href', 'mailto:'+e);
764			if($this.attr('data-text')!==undefined){
765				$this.text($this.attr('data-text'));
766			}else{
767				$this.text(e);
768			}
769		});
770
771		$('[data-clipboard]').off('click');
772		$('[data-clipboard]').on('click', function(e){
773			e.preventDefault();
774			var copyText = document.getElementById($(this).attr('data-clipboard'));
775			copyText.select();
776			copyText.setSelectionRange(0, 99999)
777			document.execCommand("copy");
778			console.log("Copied the text: " + copyText.value);
779			swal({
780				type: 'info',
781				confirmButtonText: _('OK'),
782				title: _('Info'),
783				html: '<p>' + _('Order number has been copied.') + '</p>',
784				timer: 3000
785			});
786		});
787
788		if($("div#upload_dropzone")[0]){
789			Dropzone.autoDiscover = false;
790
791			function paramNameForSend() {
792			   return VIDEO_IMAGE_UPLOAD_PARAM;
793			}
794			if(!$("div#upload_dropzone").hasClass('dz-started')){
795				this_.myDropzone = new Dropzone("div#upload_dropzone", {
796					url: ROOTURL+'/index.php?action=video_image_upload',
797					maxFilesize: 25, // MB
798					maxFiles: 1,
799					autoProcessQueue: true,
800					uploadMultiple: true,
801					paramName: paramNameForSend,
802					method: 'post',
803					parallelUploads: 1,
804					init: function() {
805						if(!$('.nr-knob').hasClass('knobbed')){
806							$('.nr-knob').addClass('knobbed');
807							setTimeout(function(){
808								$("input.knob").knob();
809							}, 777);
810						}
811						this.on("sending", function(file, xhr, formData) {
812							$('body').attr('data-loading-message', $('div#upload_dropzone').attr('data-loading-message')).addClass('loading');
813							if(this_.albumControl==false){
814								this_.albumControl = true;
815								formData.append("album", $('input[name="album"]').val());
816							}
817						});
818						this.on("addedfile", function(file){
819							$('.form-control.counter').val(parseFloat($('.form-control.counter').val())+1);
820						});
821						this.on("removedfile", function(file){
822							$('.form-control.counter').val(parseFloat($('.form-control.counter').val())-1);
823						});
824						this.on("totaluploadprogress", function(progress){
825							$('input.knob')
826								.val(parseFloat(progress))
827								.trigger('change');
828						});
829						this.on("queuecomplete", function(file){
830							this.removeAllFiles();
831							$('body').removeAttr('data-loading-message').removeClass('loading');
832							//$('.nr-knob').addClass('hide');
833							this_.albumControl = false;
834
835							$('button[type="reset"]').removeClass('hide');
836							$('p.alert').removeClass('hide');
837							$('fieldset').addClass('hide');
838
839						});
840						this.on("success", function(file, r){
841							r = $.parseJSON(r);
842							if(r.response=='success'){
843								$("input[name='video_image']").val(r.name);
844								$("#video_image").attr("src", r.src);
845								$("#crop-avatar").show();
846								new CropAvatar($("#crop-avatar"));
847								setTimeout(function(){
848									$('.avatar-view').trigger('click');
849								}, 500);
850							}else{
851								swal({
852									type: 'error',
853									confirmButtonText: _('OK'),
854									title: _('Error'),
855									html: '<p>'+r.message+'</p>',
856								});
857							}
858						});
859
860						/*
861						$('#form_validation').validate({
862								rules: {
863										counter: {
864											min: true
865										}
866								},
867								messages: {
868									counter: {
869										min: 'Molimo učitajte slike'
870									}
871								},
872								highlight: function (input) {
873										$(input).parents('.form-line').addClass('error');
874								},
875								unhighlight: function (input) {
876										$(input).parents('.form-line').removeClass('error');
877								},
878								errorPlacement: function (error, element) {
879										$(element).parents('.form-group').append(error);
880								},
881								submitHandler: function() {
882									$('.nr-knob').removeClass('hide');
883							this_.myDropzone.processQueue();
884								}
885						});
886						*/
887					 }
888				 });
889			}
890		}
891
892		if($("#form_order")[0]){
893			console.log('zzzzzzzzzz@bindOrderFormValidate');
894			// this_.bindOrderFormValidate($("#form_order").attr('data-required'));
895		}
896
897		// Dodatno (paketi)
898		document.querySelectorAll('[data-qty-to]').forEach((el)=>{
899			el.addEventListener('change', function(e){
900				console.log(e.currentTarget.dataset.qtyTo);
901				document.querySelector(e.currentTarget.dataset.qtyTo).value = e.currentTarget.checked ? e.currentTarget.value : 0;
902			});
903		});
904
905		document.querySelectorAll('[data-qty-plus-to]').forEach((el)=>{
906			el.addEventListener('click', function(e){
907				console.log(e.currentTarget.dataset);
908				var qtyElem = document.querySelector(e.currentTarget.dataset.qtyPlusTo);
909				var currentQty = parseFloat(qtyElem.value);
910				qtyElem.value = currentQty + 1;
911				const eventQtyChange = new Event('change', {
912					cancelable: true
913				});
914				document.querySelector(e.currentTarget.dataset.qtyPlusTo).dispatchEvent(eventQtyChange);
915			});
916		});
917
918		document.querySelectorAll('[data-qty-minus-to]').forEach((el)=>{
919			el.addEventListener('click', function(e){
920				console.log(e.currentTarget.dataset);
921				var qtyElem = document.querySelector(e.currentTarget.dataset.qtyMinusTo);
922				var currentQty = parseFloat(qtyElem.value);
923				qtyElem.value = currentQty - 1;
924				const eventQtyChange = new Event('change', {
925					cancelable: true
926				});
927				document.querySelector(e.currentTarget.dataset.qtyMinusTo).dispatchEvent(eventQtyChange);
928			});
929		});
930
931		document.querySelectorAll('[data-checkbox-to]').forEach((el)=>{
932			el.addEventListener('change', function(e){
933				console.log(parseFloat(e.currentTarget.value));
934				console.log(parseFloat(e.currentTarget.value) > 0);
935				var checkboxTo = document.querySelector(e.currentTarget.dataset.checkboxTo);
936				if(parseFloat(e.currentTarget.value) > 0){
937					console.log(checkboxTo.checked);
938					if(!checkboxTo.checked){
939						checkboxTo.checked = true;
940					}
941				}else{
942					checkboxTo.checked = false;
943				}
944			});
945		});
946
947	}
948	slider(){
949		var this_ = this;
950		/*console.log("@slider");*/
951		var sync1 = $("#main-slider");
952		var sync2 = $("#main-slider-thumbs");
953		if(sync1[0]){
954			/*console.log("@");*/
955			var __current = 0;
956			sync1.owlMCarousel({
957				items: 1,
958				singleItem : true,
959				video: true,
960				slideSpeed : 1000,
961				dots:false,
962				nav:true,
963				navText: [
964					"<i class='fa fa-chevron-left fa-white'></i>",
965					"<i class='fa fa-chevron-right fa-white'></i>"
966				],
967				pagination: false,
968				onChanged : syncPosition,
969				responsiveRefreshRate : 200,
970				lazyLoad : !0,
971				transitionStyle : "fade",
972				onInitialized : function(){
973					$("#main-slider .owl-next").prepend('<span class="slider-status">1/'+this._items.length+'</span>');
974				}
975			});
976			if(sync2[0]){
977				sync2.owlCarousel({
978					items : 3,
979					itemsDesktop      : [1199,3],
980					itemsDesktopSmall     : [979,3],
981					itemsTablet       : [768,3],
982					itemsMobile       : [479,1],
983					pagination: false,
984					dots:false,
985					lazyLoad : !0,
986					responsiveRefreshRate : 100,
987					onInitialized : function(){
988						var el = this._items[0];
989						el.addClass("synced");
990						var thumbTxt = el.find(".item").data("text");
991						$(".main-slider-text").html(thumbTxt).fadeIn();
992						var ilen = this._items.length;
993
994						setTimeout(function(){
995							$("#main-slider .owl-next .slider-status").html((__current+1)+"/"+ilen);
996						}, 333);
997					}
998				});
999			}
1000			function syncPosition(){
1001				/*$("video").trigger("pause").addClass("hide");*/
1002				__current = this._current;
1003				$(".main-slider-text").fadeOut(function(){
1004					var thumbTxt = $("#main-slider-thumbs")
1005					.find(".owl-item")
1006					.eq(__current)
1007					.find(".item")
1008					.data("text");
1009					$(this).html(thumbTxt).fadeIn();
1010				});
1011				$("#main-slider .owl-next .slider-status").html((__current+1)+"/"+this._items.length);
1012				$("#main-slider-thumbs")
1013					.find(".owl-item")
1014					.removeClass("synced")
1015					.eq(__current)
1016					.addClass("synced");
1017				if($("#main-slider-thumbs").data("owlCarousel") !== undefined){
1018					center(__current)
1019				}
1020				/*$("a.item-video").fadeIn();*/
1021				if(__current==0){
1022				}
1023			}
1024
1025			$("#main-slider-thumbs").on("click", ".owl-item", function(e){
1026				e.preventDefault();
1027				var number = $(this).find(".item").data("number");
1028				if(number!=__current){
1029					sync1.trigger("to", [number, 1, true]);
1030				}
1031			});
1032
1033			function center(number){
1034				/*var sync2visible = sync2.data("owlCarousel").owl.visibleItems;*/
1035				var sync2visible = $("#main-slider-thumbs .owl-item.active");
1036
1037				var num = number;
1038				var found = false;
1039				for(var i in sync2visible){
1040					if(num === sync2visible[i]){
1041						var found = true;
1042					}
1043				}
1044				/*
1045				if(found===false){
1046					if(num>sync2visible[sync2visible.length-1]){
1047						sync2.trigger("owl.goTo", num - sync2visible.length+2)
1048					}else{
1049						if(num - 1 === -1){
1050							num = 0;
1051						}
1052						sync2.trigger("owl.goTo", num);
1053					}
1054				} else if(num === sync2visible[sync2visible.length-1]){
1055					sync2.trigger("owl.goTo", sync2visible[1])
1056				} else if(num === sync2visible[0]){
1057					sync2.trigger("owl.goTo", num-1)
1058				}
1059				*/
1060			}
1061		}
1062	}
1063	init(){
1064		this.bindCommon();
1065		this.slider();
1066	}
1067}

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.