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.