PageSourceSearch

https://www.memoriad.com/assets/global/plugins/mr-custom/js/custom.js

js memoriad.com collected 2026-10-02 13:21:21 UTC 24,746 bytes, 865 lines download raw bytes

1/**
2Custom module for you to write your own javascript functions
3**/
4var Custom = function () {
5
6	// private functions & variables
7	var assetsPath = 'assets/plugins/mr-custom/';
8	var globalImgPath = assetsPath + 'img/';
9
10	var handleScrollTop = function () {
11		$("body").on('click', '.scroll-top', function () {
12			Custom.scrollTop();
13		})
14	}
15
16
17	/******************* cModal ********************/
18	var cModal = function () {
19
20		var modalContentAutoZindexElements = [".colorpicker", ".datetimepicker", ".datepicker"];
21		var backdropZindex = 10049;
22		var modalZindex = 10050;
23
24		var backdrop_auto_zindex = true;
25
26		var openedModalIDs = [];
27		var setZIndex = function (params) {
28
29			$(params.element).attr('style', 'z-index: ' + params.zindex + ' !important');
30		};
31
32		var createModal = function (params) {
33
34			params = $.extend({
35				title: "",
36				width: "90%",
37				reloader_class: "",
38				class: "modal-lg"
39			}, params);
40
41
42			if (params.class) {
43				params.width = "auto";
44			}
45
46
47
48			modalZindex++;
49			var modal_uniq_id = 'modal_' + Math.floor(Math.random() * (new Date()).getTime());
50			var modalHtml = "<div style='z-index: " + modalZindex + "' data-modal-id='" + modal_uniq_id + "' class='dyn-modal modal fade active-modal' id='" + modal_uniq_id + "'   tabindex='-1' aria-hidden='true'  data-backdrop='static' data-keyboard='false'><div class='modal-dialog " + params.class + "' ><div class='modal-content'><div class='modal-header'><button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button> <h4 class='modal-title' id='main-modal-1_modal-title'>" + params.title + "</h4></div><a href='javascript:void(0)' data-modal='" + modal_uniq_id + "' data-url='" + params.url + "' class='modal-content-reloader " + params.reloader_class + "'></a> <div class='ajax-content modal-body'></div><div class='modal-footer'><button class='btn btn-default' data-dismiss='modal' aria-hidden='true'>×</button></div></div></div></div>";
51			$('body').append(modalHtml);
52			openedModalIDs.push(modal_uniq_id);
53			return modal_uniq_id;
54		};
55
56		var openModal = function (elm) {
57
58
59			// Önceki active modalların hepsinden classı kaldır.
60			$('.active-modal').removeClass('active-modal');
61			var cmodal_width = elm.data('cmodal-width');
62			var cmodal_class = elm.data('cmodal-class');
63			var cmodal_title = elm.data('cmodal-title');
64			var cmodal_zindex = elm.data('cmodal-zindex');
65			var cmodal_reloader_class = elm.data('cmodal-reloader-class');
66			if (cmodal_zindex === 'auto') {
67				backdrop_auto_zindex = true;
68			}
69
70			var modal_content_url = elm.attr('href');
71
72
73			var modal_uniq_id = createModal({
74				width: cmodal_width,
75				title: cmodal_title,
76				url: modal_content_url,
77				reloader_class: cmodal_reloader_class,
78				class: cmodal_class
79			});
80
81
82			var modal_id = "#" + modal_uniq_id;
83
84			$(modal_id).modal('show');
85
86			$(modal_id).on('shown.bs.modal', function () {
87
88
89
90
91				loadModal({
92					url: modal_content_url,
93					object: $(modal_id + ' .ajax-content'),
94					modal_id: modal_uniq_id
95				});
96
97
98			});
99
100
101
102
103
104
105
106			if (backdrop_auto_zindex === true) {
107				backdropZindex++;
108				$(modal_id).nextAll(".modal-backdrop:first").css('z-index', backdropZindex + " !important").attr('data-target', modal_uniq_id);
109			}
110
111
112
113
114
115			$(modal_id).on('hidden.bs.modal', function () {
116
117
118				var prev_modal = $(modal_id).prevAll(".dyn-modal:first");
119
120				prev_modal.addClass('active-modal');
121
122				var prev_load = $(this).data('prev-load');
123				var prev_reload = $(this).data('prev-reload');
124
125				if (prev_load) {
126					loadModal({
127						url: prev_load,
128						object: prev_modal.find('.ajax-content'),
129						modal_id: prev_modal.attr('id')
130					});
131
132				}
133
134				if (prev_reload === "true" || prev_reload === true) {
135					$("a.modal-content-reloader", prev_modal).click();
136				}
137
138				openedModalIDs.splice(openedModalIDs.indexOf(modal_uniq_id), 1);
139
140				$('body').find(modal_id).remove();
141
142				backdropZindex--;
143				modalZindex--;
144
145			});
146
147
148
149
150		};
151
152		var loadModal = function (params) {
153			var block_ui_target = $("#" + params.modal_id).find(".modal-body");
154
155			Custom.blockUI({
156
157
158				target: block_ui_target,
159
160				animate: true
161
162
163			});
164
165
166			jQuery.ajax({
167				type: "GET",
168				url: params.url,
169				beforeSend: function () {
170					//params.object.css('height',current_height);		 
171				},
172				error: function () {
173					params.object.html("Bir hata algılandı.");
174				},
175				success: function (veri) {
176					params.object.html(veri).show('slow');
177					$("#" + params.modal_id).modal('handleUpdate');
178					/*DilTara("#"+params.modal_id);*/
179					Custom.unblockUI(block_ui_target);
180				 
181					 
182
183				}
184			});
185
186
187
188
189		};
190
191		return {
192
193			init: function () {
194
195
196
197				$('body').on('click', 'a.modal-content-reloader', function (ev) {
198					ev.preventDefault();
199					var this_modal = $(this).data("modal");
200					this_modal = $("#" + this_modal);
201
202					loadModal({
203						url: $(this).data('url'),
204						object: this_modal.find('.ajax-content'),
205						modal_id: this_modal.attr('id')
206					});
207				});
208
209
210				$('body').on('click', 'a[data-toggle="cmodal"]', function (ev) {
211					ev.preventDefault();
212					openModal($(this));
213				});
214
215			},
216
217			getActiveModalID: function () {
218
219				return $(".active-modal").data('modal-id');
220			},
221
222			getOpenedModalIDs: function () {
223
224				return openedModalIDs;
225			},
226			getActiveModal: function () {
227
228				return $(".active-modal");
229			}
230
231
232
233		};
234
235	}();
236
237	/******************* cModal // ********************/
238	
239	// Ajax Tabs
240	 
241		
242	var handleAjaxTabTools = function () {
243 
244        $('body').on('click', '.ajax-tabs > ul > li > a[data-toggle="tab"]', function (e) {
245            e.preventDefault();
246			
247			var targetObjId = $(this).attr('href'); 
248			
249			//$(this).closest(".li").addClass('active');
250			
251            var el = $(this).closest(".ajax-tabs").children(".tab-content").children(".tab-pane");
252			 
253			//var el = $(this).closest(".ajax-tabs").children(".tab-content").children(elObj);
254			 	
255			// console.log($(this).closest(".ajax-tabs").children(".tab-content").find(el));
256			/*if(el.length == 0){
257 				 var divObj = "<div class='tab-pane' id='"+targetObjId+"'></div>"; 
258				 $(this).closest(".ajax-tabs").children(".tab-content").append(divObj);
259			}*/
260			
261            var url = $(this).attr("data-url");
262            var error = $(this).attr("data-error-display");
263            if (url) {
264                Custom.blockUI({target: el, iconOnly: true});
265                $.ajax({
266                    type: "GET",
267                    cache: false,
268                    url: url,
269                    dataType: "html",
270                    success: function(res) 
271                    {                      
272                        Custom.unblockUI(el);
273                        el.html(res);
274					 
275                    },
276                    error: function(xhr, ajaxOptions, thrownError)
277                    {
278                        Custom.unblockUI(el);
279                        var msg = 'Error on reloading the content. Please check your connection and try again.';
280                        
281                            alert(msg);
282                        
283                    }
284                });
285            }          
286        });
287		
288		
289			$('.ajax-tabs > ul > li.active > a[data-toggle="tab"]').click();
290
291	}
292	
293	
294	var customAjaxLink = function (params) {
295		$("body").on('click', '.ajax-link', function (ev) {
296
297
298			ev.preventDefault();
299			var target_url = $(this).data('href');
300
301			if (typeof target_url === 'undefined') {
302				target_url = $(this).attr("href");
303			}
304			var target = $(this).data('target');
305 			var hasConfirm = $(this).data('confirm');
306			var loading = $(this).data('loading');
307			var loading_message = $(this).data('loading-message');
308 			if (!loading_message) {
309				loading_message = null;
310			}
311
312			if (hasConfirm) {
313				if (!confirm(hasConfirm)) {
314					return false;
315				}
316			}
317
318
319
320			jQuery.ajax({
321				beforeSend: function () {
322					if (loading === true)
323					 
324						if(loading_message){
325							 alert('msg')
326							Custom.blockUI({
327								target: $(target),
328								message:loading_message
329							});
330						}else{
331							Custom.blockUI({
332								target: $(target),
333								animate: true
334								 
335							});
336							alert('burasi')
337						}
338						
339					
340					
341						 
342				},
343				async: true,
344				type: 'GET',
345				url: target_url,
346				error: function () {
347					$(target).html("Bir hata algılandı.");
348				},
349				success: function (veri) {
350					$(target).html(veri);
351 
352					if (loading == true)
353					 
354						Custom.unblockUI($(target));
355				}
356			});
357
358
359
360
361		});
362
363
364		$('a.ajax-link[data-load="true"]').click();
365
366	}
367	var customAjaxForm = function (params) {
368		//
369		
370		
371		
372		
373 $('body').on('submit','.ajax-form',function(ev){
374	 	 
375		ev.preventDefault();
376		
377		var f_target = $(this).data('target');
378		var f_url	 = $(this).attr('action');
379	//peşpeşe tıklanmaya karşı	
380	 var self = this; 
381 	 if ($(self).data('executing'))  
382       return;
383
384    $(self).data('executing', true);  
385 	
386  $(self).ajaxSubmit({
387  	url: f_url, 
388 	target: f_target,
389	 
390	beforeSubmit: function () { 
391	// $(f_target).prepend('<div style=text-align:center;><img style=margin:auto; src="<%=GetContent("assets/css/AjaxLoader.gif")%>" /></div>');
392  	  Custom.blockUI({
393					target: self,
394					animate: true,
395					overlayColor: 'none'
396				});
397      },
398	
399    success: function () { 
400	 		Custom.unblockUI(self);
401    	$(f_target).fadeIn('slow');
402  	 	 $(self).removeData('executing');  
403    },
404       error: function () { 
405 	  	return false;
406       }
407      });	
408 	
409	 
410	 });
411	 
412	 
413	 /*
414	 
415		$('body').on("keyup keypress", '.ajax-form', function (e) {
416			var code = e.keyCode || e.which;
417 
418			if (code == 13 && ($(event.target)[0] != $("textarea")[0])) {
419
420				e.preventDefault();
421				return false;
422			}
423		});
424 
425		var ajax_form = $(".ajax-form");
426		var submit_btn = $(".ajax-form .ajax-submit");
427		var result_div = ajax_form.data('target');
428
429		 
430
431		var curr_submit_button_text = submit_btn.val();
432
433
434
435
436		ajax_form.ajaxForm({
437			url: ajax_form.attr('action'),
438			target: result_div,
439			beforeSubmit: function () {
440				alert('eee');
441				Custom.blockUI({
442					target: ajax_form,
443					animate: true,
444					overlayColor: 'none'
445				});
446
447				// ajaxDivAdi.prepend('<div style=text-align:center;><img style=margin:auto; src="<%=strSanalDizin%>/images/loading.gif" /></div>');
448				submit_btn.val('...');
449			},
450
451			success: function () {
452
453				//result_div.fadeIn('slow');
454				submit_btn.val(curr_submit_button_text);
455
456				Custom.unblockUI(ajax_form);
457
458			},
459			error: function () {
460				return false;
461			}
462		});
463		
464		*/
465
466
467		//
468	}
469
470	// public functions
471	return {
472
473		//main function
474		init: function () {
475			cModal.init();
476			customAjaxForm();
477			customAjaxLink();
478			handleScrollTop();
479			handleAjaxTabTools();
480		},
481		getUniqueID: function (prefix) {
482			return 'prefix_' + Math.floor(Math.random() * (new Date()).getTime());
483		},
484		alert: function (options) {
485
486			options = $.extend(true, {
487				container: "", // alerts parent container(by default placed after the page breadcrumbs)
488				place: "append", // append or prepent in container 
489				type: 'success', // alert's type
490				message: "", // alert's message
491				close: true, // make alert closable
492				reset: true, // close all previouse alerts first
493				focus: true, // auto scroll to the alert after shown
494				closeInSeconds: 0, // auto close after defined seconds
495				icon: "" // put icon before the message
496			}, options);
497
498			var id = Custom.getUniqueID("custom_alert");
499
500
501
502			var html = '<div id="' + id + '" class="custom_alerts alert-dismissible alert alert-' + options.type + ' fade in">' + (options.close ? '<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>' : '') + (options.icon !== "" ? '<i class="fa-lg fa fa-' + options.icon + '"></i>  ' : '') + options.message + '</div>';
503
504			if (options.reset) {
505				$('.custom_alerts').remove();
506			}
507
508			if (!options.container) {
509				if ($('body').hasClass("page-container-bg-solid")) {
510					$('.page-title').after(html);
511				} else {
512					if ($('.page-bar').size() > 0) {
513						$('.page-bar').after(html);
514					} else {
515						$('.page-breadcrumb').after(html);
516					}
517				}
518			} else {
519				if (options.place == "append") {
520					$(options.container).append(html);
521				} else {
522					$(options.container).prepend(html);
523				}
524			}
525
526			if (options.focus) {
527				Custom.scrollTo($('#' + id));
528			}
529
530			if (options.closeInSeconds > 0) {
531				setTimeout(function () {
532					$('#' + id).remove();
533				}, options.closeInSeconds * 1000);
534			}
535
536			return id;
537		},
538
539
540
541		scrollTo: function (el, offeset) {
542			var pos = (el && el.size() > 0) ? el.offset().top : 0;
543
544			if (el) {
545				if ($('body').hasClass('page-header-fixed')) {
546					pos = pos - $('.page-header').height();
547				}
548				pos = pos + (offeset ? offeset : -1 * el.height());
549			}
550
551			$('html,body').animate({
552				scrollTop: pos
553			}, 'slow');
554		},
555		// function to scroll to the top
556		scrollTop: function () {
557			Custom.scrollTo();
558		},
559
560		// wrMetronicer function to  block element(indicate loading)
561		blockUI: function (options) {
562			options = $.extend(true, {}, options);
563			var html = '';
564			if (options.animate) {
565				html = '<div class="loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '">' + '<div class="block-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>' + '</div>';
566			} else if (options.iconOnly) {
567				html = '<div class="loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '"><img src="' + this.getGlobalImgPath() + 'loading-spinner-grey.gif" align=""></div>';
568			} else if (options.textOnly) {
569				html = '<div class="loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '"><span>  ' + (options.message ? options.message : 'LOADING...') + '</span></div>';
570			} else {
571				html = '<div class="loading-message ' + (options.boxed ? 'loading-message-boxed' : '') + '"><img src="' + this.getGlobalImgPath() + 'loading-spinner-grey.gif" align=""><span>  ' + (options.message ? options.message : 'LOADING...') + '</span></div>';
572			}
573
574			if (options.target) { // element blocking
575				var el = $(options.target);
576				if (el.height() <= ($(window).height())) {
577					options.cenrerY = true;
578				}
579				el.block({
580					message: html,
581					baseZ: options.zIndex ? options.zIndex : 1000,
582					centerY: options.cenrerY !== undefined ? options.cenrerY : false,
583					css: {
584						top: '10%',
585						border: '0',
586						padding: '0',
587						backgroundColor: 'none'
588					},
589					overlayCSS: {
590						backgroundColor: options.overlayColor ? options.overlayColor : '#555',
591						opacity: options.boxed ? 0.05 : 0.1,
592						cursor: 'wait'
593					}
594				});
595			} else { // page blocking
596				$.blockUI({
597					message: html,
598					baseZ: options.zIndex ? options.zIndex : 1000,
599					css: {
600						border: '0',
601						padding: '0',
602						backgroundColor: 'none'
603					},
604					overlayCSS: {
605						backgroundColor: options.overlayColor ? options.overlayColor : '#555',
606						opacity: options.boxed ? 0.05 : 0.1,
607						cursor: 'wait'
608					}
609				});
610			}
611		},
612
613		// wrMetronicer function to  un-block element(finish loading)
614		unblockUI: function (target) {
615			if (target) {
616				$(target).unblock({
617					onUnblock: function () {
618						$(target).css('position', '');
619						$(target).css('zoom', '');
620					}
621				});
622			} else {
623				$.unblockUI();
624			}
625		},
626
627		getGlobalImgPath: function () {
628			return globalImgPath;
629		},
630		getParameterByName:function (name, url) {
631			if (!url) {
632			  url = window.location.href;
633			}
634			name = name.replace(/[\[\]]/g, "\\$&");
635			var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
636				results = regex.exec(url);
637			if (!results) {
638				return null;
639			 }
640			
641			if (!results[2]) {
642				return '';
643			}
644			return decodeURIComponent(results[2].replace(/\+/g, " "));
645		},
646		
647		
648		
649		updateUrlByKey : function(uri, key, value) {
650				var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
651			  var separator = uri.indexOf('?') !== -1 ? "&" : "?";
652			  if (uri.match(re)) {
653				return uri.replace(re, '$1' + key + "=" + value + '$2');
654			  }
655			  else {
656				return uri + separator + key + "=" + value;
657			  }
658		},
659		getUserDeviceInfo : function(){
660			
661			var deferredObject = $.Deferred();
662			
663            var unknown = '-';
664
665            // screen
666            var screenSize = '';
667            if (screen.width) {
668                width = (screen.width) ? screen.width : '';
669                height = (screen.height) ? screen.height : '';
670                screenSize += '' + width + " x " + height;
671            }
672
673            // browser
674            
675            var nVer = navigator.appVersion;
676            var nAgt = navigator.userAgent;
677            var browser = navigator.appName;
678            var version = '' + parseFloat(navigator.appVersion);
679            var majorVersion = parseInt(navigator.appVersion, 10);
680            var nameOffset, verOffset, ix;
681
682            // Opera
683            if ((verOffset = nAgt.indexOf('Opera')) != -1) {
684                browser = 'Opera';
685                version = nAgt.substring(verOffset + 6);
686                if ((verOffset = nAgt.indexOf('Version')) != -1) {
687                    version = nAgt.substring(verOffset + 8);
688                }
689            }
690            // Opera Next
691            if ((verOffset = nAgt.indexOf('OPR')) != -1) {
692                browser = 'Opera';
693                version = nAgt.substring(verOffset + 4);
694            }
695            // MSIE
696            else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
697                browser = 'Microsoft Internet Explorer';
698                version = nAgt.substring(verOffset + 5);
699            }
700            // Chrome
701            else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
702                browser = 'Chrome';
703                version = nAgt.substring(verOffset + 7);
704            }
705            // Safari
706            else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
707                browser = 'Safari';
708                version = nAgt.substring(verOffset + 7);
709                if ((verOffset = nAgt.indexOf('Version')) != -1) {
710                    version = nAgt.substring(verOffset + 8);
711                }
712            }
713            // Firefox
714            else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
715                browser = 'Firefox';
716                version = nAgt.substring(verOffset + 8);
717            }
718            // MSIE 11+
719            else if (nAgt.indexOf('Trident/') != -1) {
720                browser = 'Microsoft Internet Explorer';
721                version = nAgt.substring(nAgt.indexOf('rv:') + 3);
722            }
723            // Other browsers
724            else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
725                browser = nAgt.substring(nameOffset, verOffset);
726                version = nAgt.substring(verOffset + 1);
727                if (browser.toLowerCase() == browser.toUpperCase()) {
728                    browser = navigator.appName;
729                }
730            }
731            // trim the version string
732            if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
733            if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
734            if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
735
736            majorVersion = parseInt('' + version, 10);
737            if (isNaN(majorVersion)) {
738                version = '' + parseFloat(navigator.appVersion);
739                majorVersion = parseInt(navigator.appVersion, 10);
740            }
741
742            // mobile version
743            var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
744
745            // cookie
746            var cookieEnabled = (navigator.cookieEnabled) ? true : false;
747
748            if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
749                document.cookie = 'testcookie';
750                cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
751            }
752
753            // system
754            var os = unknown;
755            var clientStrings = [
756                {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},
757                {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
758                {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
759                {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
760                {s:'Windows Vista', r:/Windows NT 6.0/},
761                {s:'Windows Server 2003', r:/Windows NT 5.2/},
762                {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
763                {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
764                {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
765                {s:'Windows 98', r:/(Windows 98|Win98)/},
766                {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
767                {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
768                {s:'Windows CE', r:/Windows CE/},
769                {s:'Windows 3.11', r:/Win16/},
770                {s:'Android', r:/Android/},
771                {s:'Open BSD', r:/OpenBSD/},
772                {s:'Sun OS', r:/SunOS/},
773                {s:'Linux', r:/(Linux|X11)/},
774                {s:'iOS', r:/(iPhone|iPad|iPod)/},
775                {s:'Mac OS X', r:/Mac OS X/},
776                {s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
777                {s:'QNX', r:/QNX/},
778                {s:'UNIX', r:/UNIX/},
779                {s:'BeOS', r:/BeOS/},
780                {s:'OS/2', r:/OS\/2/},
781                {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}
782            ];
783            for (var id in clientStrings) {
784                var cs = clientStrings[id];
785                if (cs.r.test(nAgt)) {
786                    os = cs.s;
787                    break;
788                }
789            }
790
791            var osVersion = unknown;
792
793            if (/Windows/.test(os)) {
794                osVersion = /Windows (.*)/.exec(os)[1];
795                os = 'Windows';
796            }
797
798            switch (os) {
799                case 'Mac OS X':
800                    osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
801                    break;
802
803                case 'Android':
804                    osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
805                    break;
806
807                case 'iOS':
808                    osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
809                    osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
810                    break;
811            }
812				
813			
814			 var _extraDeviceInfoFromService = {
815				 deviceIsMobile:"",
816				 deviceName:"",
817				 deviceType:"",
818				 
819				 };
820			 
821			 var return_data = {
822                screen: screenSize,
823                browserName: browser,
824                browserVersion: version,
825                browserMajorVersion: majorVersion,
826                mobile: mobile,
827                os: os,
828                osVersion: osVersion,
829                cookies: cookieEnabled,
830				deviceWindowHeight : $(window).height(),
831				deviceWindowWidth : $(window).width(),
832				deviceScreenAvalHeight: screen.availHeight,
833				deviceScreenAvalWidth: screen.availWidth,
834				extraDeviceInfoFromService : {} 
835				 
836            };
837			 
838			$.ajax({
839				url: "//wurfl.io/wurfl.js",
840				dataType: "script",
841				timeout: 5 * 1000 // Servisin yüklenmesini 5 saniye bekle...
842			}).done(function() {
843				_extraDeviceInfoFromService.deviceIsMobile = WURFL.is_mobile.toString();
844				_extraDeviceInfoFromService.deviceName = WURFL.complete_device_name;
845				_extraDeviceInfoFromService.deviceType = WURFL.form_factor;    
846				return_data.extraDeviceInfoFromService = _extraDeviceInfoFromService;
847				deferredObject.resolve(return_data); 
848				
849			}).fail(function() {
850				deferredObject.resolve(return_data); 
851			});
852			
853            return deferredObject.promise();
854       
855    	}
856
857	};
858
859}();
860
861/***
862Usage
863***/
864//Custom.init();
865//Custom.doSomeStuff();

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.