PageSourceSearch

https://xn----8sbitifcg.xn--p1ai/callme/js/callme.js

js xn----8sbitifcg.xn--p1ai collected 2026-10-07 03:34:14 UTC 13,474 bytes, 408 lines download raw bytes

1// jQuery.Callme 2.0 * NazarTokar.com * dedushka.org * Copyright 2010-2014
2// Nazar Tokar @ Ukraine
3// updated on 2014-06-10
4
5function getScriptFolder (e) { // find script folder
6	var scripts = document.getElementsByTagName("script");
7	for (var i = 0; i < scripts.length; i++) {
8		if (scripts[i].src.indexOf(e) >= 0) {
9			var res = scripts[i].src.substring(0, scripts[i].src.indexOf(e));
10		}
11	}
12	return res.replace("callme/js", "callme");
13}
14
15window.onload = function(){
16	jQuery.getScript(getScriptFolder("callme.js")+"js/config.js", function(){
17		callMe();
18	});
19}
20
21function callMe() {
22
23var tpl = {}, cmeForm, cmeCSS = jQuery("<link>"); // add css
24cmeCSS.attr ({
25	type: "text/css",
26	rel: "stylesheet",
27	href: getScriptFolder("callme.js") + "templates/" + cmeData["template"] + "/style.css"
28});
29
30jQuery("head").append(cmeCSS);
31
32var hr = new Date().getHours(); // get usr hour
33
34var callmeData = { // data to send
35	fields: cmeData["fields"],
36	title: cmeData["title"],
37	calltime: cmeData["callTime"],
38	time_start: cmeData["startWork"],
39	time_end: cmeData["endWork"],
40	button: cmeData["button"],
41	hr: hr
42};
43
44function replaceData(data, key, str) {  // replace template
45	if (!data || !key || !str) { return ""; }
46	return data = data.replace((new RegExp("{{:"+key+"}}", "gi")), str);
47}
48
49function rpl(e,d,r) { // replace
50	if (!d) {
51		var t = ["\"", "'", "~", ";", "{", "}"];
52		for (var i=0; i<t.length; i++) {
53			var o = new RegExp(t[i], "g");
54			e = e.replace(o, "");
55		}
56	} else {
57		o = new RegExp(d, "g");
58		e = e.replace(o, r);
59	}
60	return e;
61}
62
63function loadHTML() { // load templates html 
64	if (!tpl.length) { 
65		jQuery(".cme-form").find(".cme-template").each(function(){
66			tpl[getData(jQuery(this))] = jQuery(this).html();
67			jQuery(this).html("");
68		});
69	}
70}
71
72function isIE() { // check if IE
73	var msie = window.navigator.userAgent.indexOf("MSIE ");
74	return msie > 0 ? true : false;
75}
76
77function getData(e) { // get "data-bs" attribute
78	return jQuery(e).attr("data-cme") ? jQuery(e).attr("data-cme") : false;
79}
80
81function getPlaceholder(e,t) { // find placeholder and caption
82	var f = [" ", e];
83	if (e.lastIndexOf("(") != "-1") { // если указан placeholder
84		f[0] = e.replace(/.*\(|\)/gi,""); // достать placeholder между скобками
85		f[1] = e.substring(0, e.lastIndexOf("(")); // достать имя поля
86	}
87	return t == 1 ? f[0] : f[1];
88}
89
90//
91
92jQuery.get(getScriptFolder("callme.js") + "templates/form.html", function (d) {
93	var keys = Object.keys(cmeData);
94	for (var i=0; i<keys.length; i++) {
95		d = replaceData(d, keys[i], cmeData[keys[i]]);
96	}
97	jQuery("body").append(d);
98	loadHTML();
99
100// обработка полей для формы
101	var fields, fieldType, f, required, selects, data="", selectData="";
102	fields = rpl(cmeData["fields"], ", ", ","); // убираем лишние запятые
103	fields = rpl(fields).split(","); // создаем массив полей
104
105	var cmeFields = jQuery(".cme-form").find(".cme-fields"); // указываем блок, куда сохранять поля
106
107	for (var i=0; i < fields.length; i++) {
108		if (fields[i].charAt(fields[i].length-1) == "*") {
109			fields[i] = fields[i].substring(0,fields[i].length-1);
110			required = 1;
111		} else { 
112			required = 0;
113		}
114
115		switch (fields[i].charAt(0)) {
116			case "-":
117				fieldType = "textArea";
118				f = replaceData(tpl[fieldType], "caption", getPlaceholder(fields[i].substring(1,fields[i].length), 0));
119				f = replaceData(f, "placeholder", getPlaceholder(fields[i].substring(1,fields[i].length), 1));
120				f = required==0 ? rpl(f, "required",  "") : f;
121				break;
122			case "?":
123				fieldType = "checkBox";
124				f = replaceData(tpl[fieldType], "caption", fields[i].substring(1,fields[i].length));
125				break;
126			case "!":
127				fieldType = "select";
128				f = tpl[fieldType], selectData = ""; 
129				//f = required==0 ? rpl(f, "required",  "") : f;
130				selects = fields[i].split("!");
131				f = replaceData(f, "caption", selects[1]);
132				for (var k = 2; k < f.length; k++) {
133					selectData += replaceData(tpl["selectOption"], "option", selects[k]);
134				}
135				f = replaceData(f, "selectArea", selectData);
136				break;
137			default:
138				fieldType = "textField";
139				f = replaceData(tpl[fieldType], "caption", getPlaceholder(fields[i],0));
140				f = replaceData(f, "placeholder", getPlaceholder(fields[i],1));
141				f = required==0 ? rpl(f, "required",  "") : f;
142		}
143		data += f;
144	}
145
146	if (parseInt(cmeData["callTime"]) == 1) { // время звонка
147		var curHour = new Date().getHours(), hours;
148
149		var workStart = curHour < Number(cmeData["workStart"]) ? Number(cmeData["workStart"]) : curHour;
150		workStart = curHour < Number(cmeData["workEnd"]) ?  workStart : Number(cmeData["workStart"]);
151
152		var workDay = curHour > Number(cmeData["workEnd"]) ? cmeData["txt.tmrw"] : cmeData["txt.today"];
153		var f = replaceData(tpl["selectTime"], "txt.day", workDay);
154
155		hours = "<option value=''>~</option>";
156
157		for (var i = workStart; i <= Number(cmeData["workEnd"]); i++) {
158			hours += "<option value='"+i+"'>"+i+"</option>";
159		}
160		f = replaceData(f, "time.start", hours);
161
162		hours = "<option value=''>~</option>";
163
164		var workEnd = workDay == cmeData["txt.tmrw"] ? cmeData["workStart"] : curHour;
165		for (var i = workStart; i <= Number(cmeData["workEnd"]); i++) {
166			hours += "<option value='"+i+"'>"+i+"</option>";
167		}
168		f = replaceData(f, "time.end", hours);
169		data += f;
170	}
171
172// 
173
174eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('6(E).r(Y);15=6(x).I(".c-u");4 9=["J.K","L"];4 f=0;f=9[0]+9[1]==q.o(g,l,g,Q,R,S,X,n,Z,10,11,12)+q.o(14,n,p,p,z,l)?0:1;b(f==1){6(".c-u").r("B")}6("<a>",{C:9[1],D:"1d",F:"G://"+9[0]}).H(".c-h-j k");b(d["M"]==0){6("#N").O()}P m(s){4 t="";s=T(s.U("V.","").W());e(4 i=0;i<s.8;i++){t+=(i%2==0?(s.w(i)*7):(s.w(i)*3))}t=t.13("");e(4 i=0;i<t.8;i++){t[i]=(i%3==0?(y(t[i])+3):(y(t[i])+5));t[i]=(i%2==0?(t[i]*2):(t[i]*3))}e(4 i=0;i<t.8;i++){b((i%2==0)&&(i<t.8/2)){4 v=t[i];t[i]=t[t.8-i-1];t[t.8-i-1]=v}}t=t.16("");t+=t;t=t.17(0,18);19 t}b((d["1a"]==m(x.1b))&&(d["1c"]==0)){6(".c-h-j k").A()}',62,76,'||||var||jQuery||length|callmeLink||if|cme|cmeData|for|callmeError|100|btn||place|span|101|cmeCount|97|fromCharCode|108|Str
174ing|html|||form||charCodeAt|document|Number|109|remove|oops|text|target|cmeFields|href|http|appendTo|find|dedushka|org|Callme|showButton|viewform|hide|function|117|115|104|unescape|replace|www|toLowerCase|107|data|46|111|114|103|split|67|cmeForm|join|substr|30|return|license|domain|showCopyright|_blank'.split('|'),0,{}))
175
176//
177
178});
179
180	function dl (f,t) { // delay
181		var t = t * 1000;
182		setTimeout(function(){
183			eval(f+"()");
184		}, t); 
185	}
186
187	function cmePr (o,i,t) { // opacity animate
188		jQuery(o).animate({ opacity: i }, t);
189	} 
190
191	function cmeMsg (c,t) { // set status
192		jQuery(".cme-form .callme-result").html( c.length > 0 ? "<div class='"+c+"'>"+t+"</div>" : "" );
193	}
194
195	function cmeClr () { // clear form
196		jQuery(document).find(".cme-form [type=text]").val("");
197		cmeMsg ("", "");
198	} 
199
200	function cmeHide () { // show/hide
201		jQuery(document).find(".cme-form").fadeOut("fast");
202		jQuery("#cme-back").fadeOut("fast");
203	}
204
205	function cmeShow (e, a) {
206		jQuery (cmeForm).css("position","absolute");
207		if (jQuery(cmeForm).is(":visible")) {
208			jQuery(cmeForm).fadeOut("fast");
209			jQuery("#cme-back").fadeOut("fast");
210		} else {
211			var dh = jQuery(document).height(); // высота документа
212			var wh = jQuery(window).height(); 
213			var dw = jQuery(window).width(); // ширина окна
214
215			if (cmeData["center"] == 0) {
216				tp_cr = e.pageY + 20;
217				tp = dh - e.pageY;
218				
219				if (tp < 300) { tp_cr = dh - 280; } // близко к низу
220				
221				lf_cr = e.pageX - 150;
222				lf = dw - e.pageX;
223					
224				if (lf < 300) { lf_cr = dw - 350; } // близко к правому
225				
226				if (e.pageX < 300) { lf_cr = e.pageX + 20; } // близко к левому
227
228			} else {
229				lf_cr = dw/2 - 150;
230				tp_cr = wh/2 - 250 + jQuery(document).scrollTop();
231			}
232
233			if (tp_cr < 0) { 
234				tp_cr = 0; 
235			} // если слишком близко к верху страницы
236			
237			jQuery(cmeForm).css("left", lf_cr);
238			jQuery(cmeForm).css("top", tp_cr);
239			jQuery("#cme-back").css("height", jQuery(document).height());
240			jQuery("#cme-back").fadeToggle("fast");
241			jQuery(cmeForm).fadeToggle("fast");
242			cmeClr();
243		}
244	} 
245
246
247	function cmeSend () { // send data
248		var error_sending = 0, allRequired = 1;
249
250		jQuery(".cme-form").find("[type=text], textarea").each(function (){
251			if (jQuery(this).attr("required") != undefined) { allRequired = 0; }
252
253			if (jQuery(this).val().length < 1 && jQuery(this).attr("required") != undefined) {
254				jQuery(this).addClass("has-error");
255				error_sending = 1;
256			} 
257		});
258
259		if (allRequired == 1) { 
260			jQuery(".cme-form").find("[type=text], textarea").each(function (){
261				if (jQuery(this).val().length < 1) {
262					error_sending = 1; 
263					jQuery(this).addClass("has-error");
264				}
265			});
266		}
267
268		if (jQuery(".cme-form .cme-ct_start :selected").val() == '~'){
269			cmeMsg("c_error", cmeData["alert.setCallTime"]);
270			error_sending = 1;
271		}
272
273		if (error_sending == 1) { return false; }
274
275		cmeMsg ("sending", cmeData["alert.sending"]);
276
277		var cnt = getCookie("callme-sent"); // load sent time
278		if (!cnt) { cnt = 0; }
279		var cs = [];
280		var os = [];
281
282		jQuery(".cme-form").find("[type=text], textarea").each(function() { // текстовые поля и textarea
283			if (jQuery(this).val().length > 2) {
284				cs.push(jQuery(this).attr("data-cme"));
285				os.push(jQuery(this).val());
286			}
287		});	
288
289		jQuery(".cme-form").find("select").each(function () { // селекты
290			if (!jQuery(this).hasClass("cme-ct-start") && !jQuery(this).hasClass("cme-ct-finish")) { // кроме времени
291				cs.push( jQuery(this).attr("name") );
292				os.push( jQuery(this).find(":selected").text() );
293			}
294		});
295
296		if (jQuery(".cme-ct-start").find(":selected").val() > 0) { // время звонка
297			cs.push(cmeData["txt.callTime"]);
298			os.push("с "+jQuery(".cme-ct-start").find(":selected").text()+" "+cmeData["txt.till"]+" "+ jQuery(".cme-ct-finish").find(":selected").text()+" "+cmeData["txt.hours"]);
299		}
300
301		jQuery(".cme-form").find("[type=checkbox]").each(function () { // чекбоксы
302			cs.push(jQuery(this).attr("data-cme"));
303			os.push(jQuery(this).is(":checked") ? "Да" : "Нет");
304		});
305
306		var rf = getCookie("cmeRef"); // источник трафика
307		if ((rf) && (rf.length > 0) ) {
308			cs.push(cmeData["mail.referrer"]);
309			os.push(rf);
310		}
311
312		cs.push(cmeData["mail.url"]); // страница с запросом
313		os.push(location.href);
314
315		jQuery.getJSON(getScriptFolder("callme.js") + "lib/send.php", { // отправка данных
316			contentType: "text/html; charset=utf-8",
317			cs: cs,
318			os: os,
319			ctime: cnt
320		}, function(i) {
321			cmeMsg(i.cls,i.message);
322			if (i.result == "success") {
323				setCookie("callme-sent", i.time);
324				jQuery(".cme-btn").attr("disabled", "disabled");
325				dl("cmeHide", 4);
326				dl("cmeClr", 5);
327			}
328		});
329	}
330
331//jQuery(function(){ // ready
332
333	jQuery(document).delegate(".cme-form .cme-btn", "mouseover", function() { // button opacity
334		cmePr(".cme-btn", 0.8, 150);
335	}).delegate(".cme-form .cme-btn", "mouseleave", function() {
336		cmePr(".cme-btn", 1, 100);
337	}); 
338
339	jQuery(document).delegate(".callme_viewform", "click", function(e) { // click show form link 
340		cmeShow(e);
341		return false;
342	}); 
343
344	jQuery(document).delegate(".cme-form .cme-cls", "click", function(e) { // close button
345		cmeHide();
346		return false;
347	});
348
349	jQuery(document).delegate("#cme-back", "click", function() { // bg click
350		cmeHide();
351	}); 
352
353	jQuery(document).delegate(".cme-form .cme-btn", "click", function() { // отправка уведомления
354		cmeSend();
355	});	
356
357	jQuery(document).delegate(".cme-form [type=text], .cme-form textarea", "keypress", function() {
358		jQuery(this).removeClass("has-error");
359	});
360
361	jQuery(document).delegate(".cme-form .cme-ct-start", "change", function() { // выбор времени звонка 
362		jQuery(".cme-ct-finish option").each(function() {
363			jQuery(this).removeAttr("disabled");
364		});
365		var cme_h = Number(jQuery(this).find(":selected").text()) + 1;
366		jQuery(".cme-ct-finish option").each(function(){
367			if (jQuery(this).val() < cme_h) {
368				jQuery(this).attr("disabled", "disabled");
369			}
370		});
371		jQuery(".cme-ct-finish").css("background", "#dff0d8");
372	});
373
374	jQuery(document).delegate(".cme-ct-finish", "change", function() {
375		jQuery(this).css("background", "");
376	});
377
378	jQuery(document).keyup(function(a) { //обработка esc
379		if ( (a.keyCode == 27) && (jQuery(cmeForm).is(":visible"))) {
380			cmeHide();
381		} 
382	});
383
384//}); // ready
385
386	var ref = getCookie("cmeRef"); // load sent time
387	if ((!ref) && (document.referrer)) {
388		ref = document.referrer;
389		setCookie("cmeRef", ref);
390	}
391
392	function getCookie(e) { // get cookie
393		var name = e + "=";
394		var ca = document.cookie.split(';');
395		for (var i = 0; i < ca.length; i++) {
396			var c = ca[i].trim();
397			if (c.indexOf(name)==0) return c.substring(name.length,c.length);
398		}
399		return false;
400	}
401
402	function setCookie(e,v) { // save cookie
403		var d = new Date();
404		d.setTime(d.getTime()+(5*24*60*60*1000));
405		var expires = "expires="+d.toGMTString();
406		document.cookie = e + "=" + v + "; " + expires;
407	}
408}

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.