PageSourceSearch

https://www.bestchange.ru/js/main65.js

js bestchange.ru collected 2026-10-01 11:49:30 UTC 160,198 bytes, 4,659 lines download raw bytes

1var lc_curr = 0;
2var rc_curr = 0;
3var lc_value = 0;
4var rc_value = 0;
5var nr = false;
6var ud = 0;
7var show_add_name = '';
8var show_box = -1;
9var show_lab_box = false;
10var show_two_box = false;
11var show_del_box = false;
12var show_cmt_box = false;
13var show_all_box = false;
14var show_lang_box = false;
15var show_ar_form = false;
16var show_cm_form = false;
17var show_ow_info = false;
18var show_all_est = false;
19var show_th_info = false;
20var ar_form_height;
21var dc, db, di, fn, wd;
22var permanent_update_timer = 0;
23var reload_update_timer = 0;
24var status_timer = 0;
25var is_calc_rates = false;
26var is_twostep_rates = false;
27var twostep_rate_id = 0;
28var twostep_rate_id_next = 0;
29var twostep_rate_id_old = 0;
30var chart_time = 0;
31var chart_update_stop = false;
32var chart_unsuccessful = 0;
33var wishes_default_text = '';
34var last_exch_id = 0;
35var finkdata;
36var citylist;
37var page_active = true;
38var page_active_timer = 0;
39var page_tracked = 0;
40var last_mouse_move = 0;
41var favd_cookie = getCookie('favd');
42var update_request = false;
43var tglink_checking = false;
44var tglink_check_count = 0;
45var is_leave_page = false;
46var sort_manual = false;
47var bonus_captcha;
48var bonus_captcha_timer;
49var invisible_captcha;
50var mouse_on_geo_details = false;
51var is_page_loaded = false;
52var lc_searched = false;
53var rc_searched = false;
54var cy_list = new Array();
55var sort_type = '';
56var sort_range = '';
57var calc_type = '';
58var calc_give = '';
59var calc_get = '';
60var calc_timer = 0;
61var country = 0;
62var city = 0;
63var last_ci = 0;
64var last_cc = '';
65var light_id = 0;
66var layout_map = {};
67var time_offset_changed = false;
68var last_field_check_obj = false;
69var last_field_check_timer = 0;
70var info_filter = '';
71var langcode = 'en';
72var langprefix = '';
73
74//**** Fixes ********************************************
75
76if (!Date.now) {
77  Date.now = function now() {
78    return new Date().getTime();
79  };
80}
81var last_update = Date.now();
82
83if (window.NodeList && !NodeList.prototype.forEach) {
84  NodeList.prototype.forEach = function (callback, thisArg) {
85    thisArg = thisArg || window;
86    for (var i = 0; i < this.length; i++) callback.call(thisArg, this[i], i, this);
87  };
88}
89
90//**** General functions ********************************
91
92function l(value) {
93  if (document.all && !document.addEventListener) {
94    alert(value);
95  } else {
96    console.log(value);
97  }
98}
99
100function createRequest() {
101  var req = false;
102  if (window.XMLHttpRequest) {
103    req = new XMLHttpRequest();
104  } else if (window.ActiveXObject) {
105    try {
106      req = new ActiveXObject('Msxml2.XMLHTTP');
107    } catch (e) {
108    }
109    try {
110      req = new ActiveXObject('Microsoft.XMLHTTP');
111    } catch (e) {
112    }
113  }
114  return req;
115}
116
117function sendRequest(req, data, errorEvent) {
118  try {
119    req.open('POST', '/action.php?lang=' + langcode, true);
120    if (!window.XMLHttpRequest) {
121      req.setRequestHeader('Accept-Charset', lang['language_charset']);
122      req.setRequestHeader('Connection', 'keep-alive');
123      req.setRequestHeader('Content-length', data.length);
124    }
125    req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=' + lang['language_charset']);
126    req.send(data);
127  } catch(e) {
128    if (typeof errorEvent == 'function') errorEvent();
129    return false;
130  }
131  return true;
132}
133
134try {
135  function js_error_handler(message, url, line, column, error) {
136    if (message == 'Script error.' && line == 0) return;//different domain
137    if (message == 'uncaught exception: [object Object]' && line == 0 && column == 0) return;
138    if (message.indexOf('chrome-extension://') != -1 || url.indexOf('chrome-extension://') != -1) return;
139    if (message.indexOf('chrome://internal') != -1 || url.indexOf('chrome://internal') != -1) return;
140    var req = createRequest();
141    if (req) sendRequest(req, 'action=error&message=' + message + '&location=' + encodeURIComponent(window.location.toString()) + '&url=' + url + '&line=' + line + '&column=' + column + '&error=' + (isEmpty(error) ? '' : error.stack));
142    //return true;
143  }
144  window.onerror = js_error_handler;
145} catch (e) {
146}
147
148function eventPush(obj, event, handler) {
149  if (obj.addEventListener) {
150    obj.addEventListener(event, handler, false);
151  } else if (obj.attachEvent) {
152    obj.attachEvent('on' + event, handler);
153  }
154}
155
156function fireEvent(node, eventName) {
157  var doc;
158  if (node.ownerDocument) {
159    doc = node.ownerDocument;
160  } else if (node.nodeType == 9) {
161    doc = node;
162  } else {
163    return;
164  }
165  if (node.dispatchEvent) {
166    var eventClass = '';
167    switch (eventName) {
168      case 'click':
169      case 'mousedown':
170      case 'mouseup': eventClass = 'MouseEvents'; break;
171      case 'focus':
172      case 'change':
173      case 'blur':
174      case 'select': eventClass = 'HTMLEvents'; break;
175      default: break;
176    }
177    var event = doc.createEvent(eventClass);
178    var bubbles = eventName == 'change' ? false : true;
179    event.initEvent(eventName, bubbles, true);
180    event.synthetic = true;
181    node.dispatchEvent(event, true);
182  } else if (node.fireEvent) {
183    var event = doc.createEventObject();
184    event.synthetic = true;
185    node.fireEvent('on' + eventName, event);
186  }
187}
188
189function isHidden(el) {
190  var width = el.offsetWidth, height = el.offsetHeight, tr = el.nodeName.toLowerCase() === 'tr';
191  return width === 0 && height === 0 && !tr ? true : width > 0 && height > 0 && !tr ? false : getRealDisplay(el);
192}
193
194function moveToEnd(el) {
195  if (typeof el.selectionStart == 'number') {
196    el.selectionStart = el.selectionEnd = el.value.length;
197  } else if (typeof el.createTextRange != 'undefined') {
198    el.focus();
199    var range = el.createTextRange();
200    range.collapse(false);
201    range.select();
202  }
203}
204
205function setFocus(obj) {
206  if (obj) setTimeout(function () {
207    try {
208      obj.style.display = '';
209      moveToEnd(obj);
210      obj.focus();
211    } catch(e) {
212    }
213  }, 1);
214}
215
216function isEmpty(value) {
217  return value === null || typeof(value) === 'undefined';
218}
219
220function setCookie(name, value) {
221  var date = new Date();
222  date.setTime(date.getTime() + (10 * 365 * 24 * 60 * 60 * 1000));
223  document.cookie = name + '=' + escape(value) + '; expires=' + date.toGMTString() + '; path=/';
224}
225
226function getCookie(name) {
227  var cookie = ' ' + document.cookie;
228  var search = ' ' + name + '=';
229  var setStr = '';
230  var offset = 0;
231  var end = 0;
232  if (cookie.length > 0) {
233    offset = cookie.indexOf(search);
234    if (offset != -1) {
235      offset += search.length;
236      end = cookie.indexOf(';', offset)
237      if (end == -1) end = cookie.length;
238      setStr = unescape(cookie.substring(offset, end));
239    }
240  }
241  return(setStr);
242}
243
244function addClass(o, c) {
245  if (o == null) return;
246  var re = new RegExp('(^|\\s)' + c + '(\\s|$)', 'g');
247  if (re.test(o.className)) return;
248  o.className = (o.className + ' ' + c).replace(/\s+/g, ' ').replace(/(^ | $)/g, '');
249}
250
251function removeClass(o, c) {
252  if (o == null) return;
253  var re = new RegExp('(^|\\s)' + c + '(\\s|$)', 'g');
254  o.className = o.className.replace(re, '$1').replace(/\s+/g, ' ').replace(/(^ | $)/g, '');
255}
256
257function classExists(o, c) {
258  if (o == null) return false;
259  var re = new RegExp('(^|\\s)' + c + '(\\s|$)', 'g');
260  return re.test(o.className);
261}
262
263function getCursor(ctrl) {
264  var CaretPos = 0;
265  if (document.selection) {
266    ctrl.focus ();
267    var Sel = document.selection.createRange ();
268    Sel.moveStart ('character', -ctrl.value.length);
269    CaretPos = Sel.text.length;
270  } else if (ctrl.selectionStart || ctrl.selectionStart == '0') CaretPos = ctrl.selectionStart;
271  return CaretPos;
272}
273
274function setCursor(ctrl, pos) {
275  if (ctrl.setSelectionRange){
276    ctrl.focus();
277    ctrl.setSelectionRange(pos,pos);
278  } else if (ctrl.createTextRange) {
279    var range = ctrl.createTextRange();
280    range.collapse(true);
281    range.moveEnd('character', pos);
282    range.moveStart('character', pos);
283    range.select();
284  }
285}
286
287function arraySum(a) {
288  var r = 0;
289  for (var i = 0; i < a.length; i++) r += a[i];
290  return r;
291}
292
293function add_favorite(a, url, title) {
294  try {
295    window.external.AddFavorite(url, title);
296  }
297  catch (e) {
298    try {
299      window.sidebar.addPanel(title, url, '');
300    }
301    catch (e) {
302      if (typeof opera == 'object') {
303        a.rel = 'sidebar';
304        a.title = title;
305        a.url = url;
306        return true;
307      } else {
308        alert(lang['fav_save']);
309      }
310    }
311  }
312  return false;
313}
314
315function objectsAreSame(x, y) {
316  for (var propertyName in x) if (x[propertyName] !== y[propertyName]) return false;
317  return true;
318}
319
320function openDocument(url, new_window) {
321  var a = document.createElement('a');
322  if (!a.click || a.click != undefined) {
323    if (new_window) {
324      window.open(url, '', '');
325    } else {
326      document.location = url;
327    }
328    return;
329  }
330  a.setAttribute('href', url);
331  if (new_window) a.setAttribute('target', '_blank');
332  a.style.display = 'none';
333  document.body.appendChild(a);
334  a.click();
335}
336
337function isNumeric(value) {
338  return !isNaN(parseInt(value));
339}
340
341function getPageScroll() {
342  var yScroll;
343  if (self.pageYOffset) {
344    yScroll = self.pageYOffset;
345  } else if (document.documentElement && document.documentElement.scrollTop) {
346    yScroll = document.documentElement.scrollTop;
347  } else if (document.body) {
348    yScroll = document.body.scrollTop;
349  }
350  arrayPageScroll = new Array('', yScroll);
351  return arrayPageScroll;
352}
353
354function getPageSize() {
355  var xScroll, yScroll;
356  if (window.innerHeight && window.scrollMaxY) {
357    xScroll = document.body.scrollWidth;
358    yScroll = window.innerHeight + window.scrollMaxY;
359  } else if (document.body.scrollHeight > document.body.offsetHeight) {
360    xScroll = document.body.scrollWidth;
361    yScroll = document.body.scrollHeight;
362  } else if (document.documentElement && document.documentElement.scrollHeight) {
363    xScroll = document.documentElement.scrollWidth;
364    yScroll = document.documentElement.scrollHeight;
365  } else {
366    xScroll = document.body.offsetWidth;
367    yScroll = document.body.offsetHeight;
368  }
369
370  var windowWidth, windowHeight;
371  if (self.innerHeight) {
372    windowWidth = self.innerWidth;
373    windowHeight = self.innerHeight;
374  } else if (document.documentElement && document.documentElement.clientHeight) {
375    windowWidth = document.documentElement.clientWidth;
376    windowHeight = document.documentElement.clientHeight;
377  } else if (document.body) {
378    windowWidth = document.body.clientWidth;
379    windowHeight = document.body.clientHeight;
380  }
381
382  pageHeight = Math.max(yScroll, windowHeight);
383  pageWidth = Math.max(xScroll, windowWidth);
384
385  arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
386  return arrayPageSize;
387}
388
389(function() {
390  var cache = {};
391  window.nodeById = function(id) {
392    return cache[id] ? cache[id] : cache[id] = document.getElementById(id);
393  }
394})()
395
396function checkParent(parent, elem) {
397  if (!elem) return false;
398  return elem == parent || checkParent(parent, elem.parentNode);
399}
400
401function stopBubbling(event) {
402  event = event || window.event;
403  if (event.stopPropagation) {
404    event.stopPropagation();
405  } else {
406    event.cancelBubble = true;
407  }
408}
409
410function numFormat(n, del_sep, th_sep) {
411  if (!del_sep) del_sep = '.';
412  if (!th_sep) th_sep = ' ';
413  
414  n = Math.round(n * 100000000) / 100000000;
415  if (n == Math.ceil(n)) n = Math.ceil(n);
416  var s = n.toString();
417  var pos = s.indexOf('.');
418  var rest = pos > -1 ? s.slice(pos + 1) : '';
419  n = n - (n%1);
420  return n.toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1' + th_sep) + (rest ? del_sep + rest : '');
421}
422
423function getTimeFormat(time, needSec) {
424  var time_sec = time.getSeconds();
425  var time_min = time.getMinutes();
426  var time_hours = time.getHours();
427  var result = (time_hours < 10 ? '0' : '') + time_hours + ':' + (time_min < 10 ? '0' : '') + time_min + (needSec ? ':' + (time_sec < 10 ? '0' : '') + time_sec : ''); 
428  return result;
429}
430
431function prepareFloat(s) {
432  if (typeof s == 'undefined') return 0;
433  var r = s.toString().replace(/,/gi, s.indexOf('.') == -1 ? '.' : '').replace(/[^\d\.]/gi, '');
434  return r == '' ? 0 : parseFloat(r);
435}
436
437function emptyObject(obj) {
438  for (var i in obj) return false;
439  return true;
440}
441
442function isFramed() {
443  try {
444    return window != window.top || document != top.document || self.location != top.location;
445  } catch (e) {
446    return true;
447  }
448}
449
450function copyTextToClipboard(text) {
451  var copyFrom = document.createElement('textarea');
452  copyFrom.textContent = text;
453  var body = document.getElementsByTagName('body')[0];
454  body.appendChild(copyFrom);
455  copyFrom.select();
456  document.execCommand('copy');
457  body.removeChild(copyFrom);
458}
459
460var recaptcha_callback = function () {};
461
462function recaptcha_check(action, success_callback, fail_callback) {
463  recaptcha_callback = function () {
464    grecaptcha.ready(function() {
465      grecaptcha.execute('6Le8iM4ZAAAAADEjw_VY4eW97zvA923JmDWGvdaq', {'action': action}).then(function (token) {
466        if (typeof success_callback == 'function') success_callback(token);
467        addClass(document.getElementsByClassName('grecaptcha-badge')[0], 'grecaptcha-hide');
468      }, function () {
469        if (typeof fail_callback == 'function') fail_callback();
470      });
471    });
472  };
473  
474  if (typeof grecaptcha == 'undefined') {
475    var grecaptcha_s = document.createElement('script');
476    grecaptcha_s.src = 'https://www.recaptcha.net/recaptcha/api.js?onload=recaptcha_callback&render=6Le8iM4ZAAAAADEjw_VY4eW97zvA923JmDWGvdaq';
477    grecaptcha_s.setAttribute('async', 'async');
478    grecaptcha_s.setAttribute('defer', 'defer');
479    grecaptcha_s.onerror = function() {
480      if (typeof fail_callback == 'function') fail_callback();
481    };
482    var grecaptcha_h = document.getElementsByTagName('script')[0];
483    grecaptcha_h.parentNode.insertBefore(grecaptcha_s, grecaptcha_h);
484  } else {
485    removeClass(document.getElementsByClassName('grecaptcha-badge')[0], 'grecaptcha-hide');
486    recaptcha_callback();
487  }
488}
489
490function levenshtein_min(d0, d1, d2, bx, ay) {
491  return d0 < d1 || d2 < d1 ? (d0 > d2 ? d2 + 1 : d0 + 1) : (bx === ay ? d1 : d1 + 1);
492}
493
494function levenshtein(a, b) {
495  if (a === b) return 0;
496  if (a.length > b.length) {
497    var tmp = a;
498    a = b;
499    b = tmp;
500  }
501  var la = a.length;
502  var lb = b.length;
503  while (la >
503 0 && (a.charCodeAt(la - 1) === b.charCodeAt(lb - 1))) {
504    la--;
505    lb--;
506  }
507  var offset = 0;
508  while (offset < la && (a.charCodeAt(offset) === b.charCodeAt(offset))) {
509    offset++;
510  }
511  la -= offset;
512  lb -= offset;
513  if (la === 0 || lb < 3) return lb;
514  var x = 0, vector = [];
515  var y, d0, d1, d2, d3, dd, dy, ay, bx0, bx1, bx2, bx3;
516  for (y = 0; y < la; y++) {
517    vector.push(y + 1);
518    vector.push(a.charCodeAt(offset + y));
519  }
520  var len = vector.length - 1;
521  for (; x < lb - 3;) {
522    bx0 = b.charCodeAt(offset + (d0 = x));
523    bx1 = b.charCodeAt(offset + (d1 = x + 1));
524    bx2 = b.charCodeAt(offset + (d2 = x + 2));
525    bx3 = b.charCodeAt(offset + (d3 = x + 3));
526    dd = (x += 4);
527    for (y = 0; y < len; y += 2) {
528      dy = vector[y];
529      ay = vector[y + 1];
530      d0 = levenshtein_min(dy, d0, d1, bx0, ay);
531      d1 = levenshtein_min(d0, d1, d2, bx1, ay);
532      d2 = levenshtein_min(d1, d2, d3, bx2, ay);
533      dd = levenshtein_min(d2, d3, dd, bx3, ay);
534      vector[y] = dd;
535      d3 = d2;
536      d2 = d1;
537      d1 = d0;
538      d0 = dy;
539    }
540  }
541  for (; x < lb;) {
542    bx0 = b.charCodeAt(offset + (d0 = x));
543    dd = ++x;
544    for (y = 0; y < len; y += 2) {
545      dy = vector[y];
546      vector[y] = dd = levenshtein_min(dy, d0, dd, bx0, vector[y + 1]);
547      d0 = dy;
548    }
549  }
550  return dd;
551}
552
553//**** Custom functions ********************************
554
555function id2pos(number) {
556  for (var i = 0; i < ds_list.length; i++) if (ds_list[i] == number) return i;
557}
558
559function is_cash_cy(id) {
560  return ty_list[id2pos(id)] == 5;
561}
562
563function goto_list(from, to) {
564  var fromcur = from ? from : lc_curr;
565  var tocur = to ? to : rc_curr;
566  var is_cash = is_cash_cy(fromcur) || is_cash_cy(tocur);
567  openDocument(langprefix + '/' + cu_list[id2pos(fromcur)] + '-to-' + cu_list[id2pos(tocur)] + (is_cash && last_cc ? '-in-' + last_cc : '') + '.html', false);
568}
569
570function list_clk() {
571  lc_curr = document.getElementById('currency_lc').value;
572  rc_curr = document.getElementById('currency_rc').value;
573  goto_list();
574  return false;
575}
576
577function mark_selected(id, direct) {
578  var item = document.getElementById('d' + direct + id);
579  if (item != null) item.className = 'c' + direct;
580  if (sc_list[id2pos(id)] == 0) {
581    removeClass(document.getElementById('ti' + id), 'hide');
582    resize_tab_line(id);
583    tab_repainting();
584  }
585}
586
587function mark_unav(id, direct) {
588  var id_pos = id2pos(id);
589  for (var i = 0; i < ds_list.length; i++) {
590    var item = document.getElementById((direct == 'rc' ? 'alc' : 'arc') + ds_list[i]);
591    if (!isEmpty(item)) item.className = direct == 'rc' ? (av_list[i].substring(id_pos, id_pos + 1) == '0' ? 'unav' : '') : (av_list[id_pos].substring(i, i + 1) == '0' ? 'unav' : '');
592  }
593}
594
595function make_tablink(direct) {
596  var a_name, a_id;
597  eval('var current_curr = ' + direct + '_curr');
598  for (var i = 0; i < ds_list.length; i++) {
599    if (ds_list[i] == current_curr) continue;
600    a_id = document.getElementById('a' + direct + ds_list[i]);
601    if (a_id.name) a_id.href = langprefix + '/' + a_id.name;
602  }
603}
604
605function clk(id, direct, nofollow) {
606  eval('var old_curr = ' + direct + '_curr');
607  if (old_curr == id) return false;
608  if (lc_curr != 0 && rc_curr != 0 && ((direct == 'lc' && rc_curr == id) || (direct == 'rc' && lc_curr == id))) {
609    var adirect = direct == 'rc' ? 'lc' : 'rc';
610    eval(adirect + '_curr = 0');
611    var item = document.getElementById('d' + adirect + id);
612    if (!isEmpty(item)) item.className = adirect;
613  }
614  var b = (old_curr > 0 && old_curr != id);
615  eval(direct + '_curr = ' + id);
616  if (b) {
617    var item = document.getElementById('d' + direct + old_curr);
618    if (!isEmpty(item)) item.className = direct;
619  }
620  mark_selected(id, direct);
621  mark_unav(id, direct);
622  if (lc_curr != 0 && rc_curr != 0 && !nofollow) goto_list();
623  return false;
624}
625
626function reverse_direct() {
627  var temp_curr = lc_curr;
628  if (rc_curr > 0) clk(rc_curr, 'lc', true);
629  if (temp_curr > 0) clk(temp_curr, 'rc');
630  return false;
631}
632
633function sel_change(direct, locate) {
634  var adirect = direct == 'rc' ? 'lc' : 'rc';
635  var direct_sel = document.getElementById('currency_' + direct);
636  var adirect_sel = document.getElementById('currency_' + adirect);
637  if (direct_sel == null || adirect_sel == null) return;
638  if (locate) {
639    eval(direct + '_curr = direct_sel.value');
640    if (lc_curr != 0 && rc_curr != 0) goto_list();
641  }
642  var id_pos = id2pos(direct_sel.value);
643  for (var i = 0; i < adirect_sel.options.length; i++) adirect_sel.options[i].style.color = direct == 'rc' ? (av_list[i].substring(id_pos, id_pos + 1) == '0' ? '#aaaaaa' : '#222222') : (av_list[id_pos].substring(i, i + 1) == '0' ? '#aaaaaa' : '#222222');
644  return false;
645}
646
647function change_upd_img(class_name, src) {
648  var obj = document.getElementById('update_image');
649  if (obj) {
650    obj.className = class_name;
651    if (src) obj.src = src;
652  }
653}
654
655function error_upd_img() {
656  change_upd_img('', '/images/error.png');
657  setTimeout(function () {
658    change_upd_img('hide');
659  }, 500);
660}
661
662function corr_tab(id, direct) {
663  if (id != 0) {
664    for (var i = 0; i < ds_list.length; i++) if (ds_list[i] != id) nodeById('d' + direct + ds_list[i]).className = direct;
665    mark_selected(id, direct);
666    if (direct == 'lc' || (direct == 'rc' && lc_curr == 0)) mark_unav(id, direct);
667  }
668}
669
670function corr_list(id, direct) {
671  if (id != 0) {
672    sel_el = document.getElementById('currency_' + direct);
673    sel_el.value = id;
674    sel_el.onchange();
675    sel_change(direct, false);
676  }
677}
678
679function change_tab(type, name, oldname) {
680  if (type == 'content') {
681    if ((name == 'calc' || name == 'notify' || name == 'twostep') && oldname != 'rates') document.getElementById('content_rates').className = '';
682    if ((oldname == 'calc' || oldname == 'notify' || oldname == 'twostep') && (name != 'rates' && name != 'calc' && name != 'notify' && name != 'twostep')) document.getElementById('content_rates').className = 'hide';
683    if (name == 'twostep' && oldname != 'calc') document.getElementById('content_calc').className = '';
684    if (oldname == 'twostep') {
685      if (name != 'calc') document.getElementById('content_calc').className = 'hide';
686    } else {
687      document.getElementById(type + '_' + oldname).className = (oldname == 'rates' && (name == 'calc' || name == 'notify' || name == 'twostep')) || oldname == 'calc' && name == 'twostep' ? '' : 'hide';
688    }
689    if (name == 'stats') {
690      chart_update_stop = false;
691      update_stats();
692    }
693    if (oldname == 'stats') chart_update_stop = true;
694  } else {
695    document.getElementById(type + '_' + oldname).className = 'hide';
696  }
697  if (name != 'twostep') document.getElementById(type + '_' + name).className = '';
698  document.getElementById('tab_' + oldname).className = '';
699  document.getElementById('tab_' + name).className = 'active';
700}
701
702function change_ctab(name) {
703  if (name != ct) {
704    change_tab('curr', name, ct);
705    setCookie('ct', name);
706    ct = name;
707    if (name == 'tab') {
708      corr_tab(lc_curr, 'lc');
709      corr_tab(rc_curr, 'rc');
710    }
711    if (name == 'list') {
712      corr_list(lc_curr, 'lc');
713      corr_list(rc_curr, 'rc');
714    }
715  }
716  return false;
717}
718
719function change_mtab(name) {
720  if (name != mt) {
721    if (update_request) abort_update_rates(document.getElementById('calc_button'), document.getElementById('sets_button'));
722    
723    change_tab('content', name, mt);
724    if (name == 'calc' || name == 'twostep') {
725      sort_manual = false;
726      sort_type = '';
727      sort_range = '';
728      if (calc_type == '') {
729        var lc_old = getCookie('give' + lc_value);
730        var lc_old_entry = {};
731        try {
732          if (lc_old) lc_old_entry = JSON.parse(lc_old);
733        } catch (e) {
734        }
735        var rc_old = getCookie('get' + rc_value);
736        var rc_old_entry = {};
737        try {
738          if (rc_old) rc_old_entry = JSON.parse(rc_old);
739        } catch (e) {
740        }
741        
742        var is_lc_exists = typeof lc_old_entry['date'] != 'undefined';
743        var is_rc_exists = typeof rc_old_entry['date'] != 'undefined';
744        
745        if (is_lc_exists || is_rc_exists) {
746          if ((is_lc_exists && !is_rc_exists) || lc_old_entry['date'] > rc_old_entry['date']) {
747            calc_give = lc_old_entry['amount'];
748            document.getElementById('give').value = lc_old_entry['amount'];
749            setCalcType('give');
750          } else {
751            calc_get = rc_old_entry['amount'];
752            document.getElementById('get').value = rc_old_entry['amount'];
753            setCalcType('get');
754          }
755        }
756      }
757      setCalcFocus();
758    }
759    if (name == 'notify') setNotifyFocus();
760    if (name != 'calc' && name != 'twostep') {
761      sort_manual = false;
762      sort_type = '';
763      sort_range = '';
764      calc_type = '';
765    }
766    mt = name;
767    eval('var is_calc_update = name == \'calc\' && calc_type != \'\' && calc_' + calc_type + ' != \'\'');
768    if (name != 'stats' && ((name == 'twostep' && !is_twostep_rates) || (name != 'twostep' && is_twostep_rates) || (name != 'calc' && is_calc_rates) || is_calc_update)) update_rates();
769  }
770  return false;
771}
772
773function change_itab(name, cu_page) {
774  eval('var b = name != ' + cu_page);
775  if (b) {
776    change_tab('info', name, eval(cu_page));
777    setCookie(cu_page, name);
778    eval(cu_page + ' = name');
779  }
780  return false;
781}
782
783function change_etab(name) {
784  if (name != it) {
785    change_tab('content', name, it);
786    it = name;
787  }
788  return false;
789}
790
791function set_cur_cookies() {
792  if (lc_curr && rc_curr) {
793    document.cookie = 'from=' + lc_curr + '; path=/';
794    document.cookie = 'to=' + rc_curr + '; path=/';
795  }
796}
797
798function fco(id) {
799  nr = true;
800  if (typeof id != 'undefined') last_exch_id = id;
801  if (typeof gtag == 'function') {
802    gtag('event', 'click', {
803      'event_category': 'exchanger' + (lc_curr != 0 && rc_curr != 0 ? '' : '-main'),
804      'event_label': id
805    });
806  }
807  if (typeof yaCounter55602688 != 'undefined' && lc_curr != 0 && rc_curr != 0) {
808    yaCounter55602688.reachGoal('exchanger');
809  }
810  return true;
811}
812
813function ccl(id, from, to, city) {
814  if (nr) {
815    nr = false;
816    return false;
817  }
818  if (!city) city = 0;
819  last_exch_id = id;
820  openDocument('/click.php?id=' + id + (from && to ? '&from=' + from + '&to=' + to : '') + '&city=' + city, true);
821  
822  if (typeof gtag == 'function') {
823    gtag('event', 'click', {
824      'event_category': 'exchanger' + (lc_curr != 0 && rc_curr != 0 ? '' : '-main'),
825      'event_label': id
826    });
827  }
828}
829
830function open_reviews(id) {
831  if (typeof direct_data != 'undefined' && direct_data) {
832    set_cur_cookies();
833    openDocument(langprefix + '/' + direct_data[id]['u'] + '-exchanger.html', false);
834  }
835  return false;
836}
837
838function crw(id) {
839  if (nr) return false;
840  fco();
841  open_reviews(id);
842}
843
844function arw(id) {
845  if ('\v'=='v') {
846    crw(id);
847    return false;
848  } else {
849    fco();
850    set_cur_cookies();
851    return true;
852  }
853}
854
855function set_status(name, status, filename, noclear) {
856  if (status_timer != 0) clearTimeout(status_timer);
857  status_timer = 0;
858  var img_content = status != '' ? '<img src="/images/' + filename + '" width="16" height="16" />' : '';
859  document.getElementById(name + '_img').innerHTML = img_content;
860  document.getElementById(name + '_status').innerHTML = status;
861  if (name == 'bonus' && status == '') {
862    document.getElementById('bonus_result').className = 'hide';
863    document.getElementById('bonus_form').className = '';
864  }
865  if (name == 'manage_review') document.getElementById('manage_review_status_block').className = status ? '' : 'hide';
866  if (!noclear) status_timer = setTimeout(function () {
867   set_status(name, '', '', true);
868  }, 2500);
869}
870
871function save_sets() {
872  var req = createRequest();
873  if (req) {
874    var sets_button = document.getElementById('sets_button');
875    sets_button.disabled = true;
876    set_status('sets', lang['sets_save'], 'ajax.png', true);
877
878    var ajax_timer = setTimeout(function() {
879      req.abort();
880      req.onreadystatechange = function() {
881        return true;
882      };
883      set_status('sets', lang['str_fail_serv'], 'error.png');
884      sets_button.disabled = false;
885    }, 25000);
886
887    var sets_vars = new Array('dc', 'db', 'di', 'ud', 'fn', 'wd');
888    for (var i = 0; i < sets_vars.length; i++) {
889      var set_value = document.getElementById(sets_vars[i]).value;
890      setCookie(sets_vars[i], set_value);
891      eval(sets_vars[i] + ' = \'' + set_value.replace(/[\']/, '\\\'') + '\'');
892    }
893
894    req.onreadystatechange = function() {
895      if (req.readyState != 4) return;
896      clearTimeout(ajax_timer);
897      if (req.status == 200) {
898        var results = req.responseText.split('[delimiter]');
899        if (results.length == 2 && results[0] == 'OK') {
900          document.getElementById('custom_style').innerHTML = '&nbsp; <style type="text/css">' + results[1] + '</style>';
901          update_rates();
902          set_status('sets', lang['sets_save_ok'], 'ok.png', true);
903          setTimeout(function () {
904            hide_overlay();
905          }, 700);
906        } else {
907          set_status('sets', lang['sets_save_fail'], 'error.png');
908        }
909      } else {
910        set_status('sets', lang['sets_save_fail'], 'error.png');
911      }
912      sets_button.disabled = false;
913    }
914
915    sendRequest(req, 'action=savesets&name=' + fn + '&type=' + wd, function () {
916      set_status('sets', lang['str_fail_con'], 'error.png');
917      sets_button.disabled = false;
918    });
919  }
920  return false;
921}
922
923function show_info(id) {
924  if (typeof direct_data != 'undefined' && direct_data) {
925    if (id !== show_box) {
926      var info_box = nodeById('details');
927      var obj = document.getElementById('io' + id);
928
929      var x = 0, y = 0;
930      try {
931        while (obj && obj.id != 'content_rates') {
932          x += parseInt(obj.offsetLeft);
933          y += parseInt(obj.offsetTop);
934          obj = obj.offsetParent;
935        }
936      } catch (error) {
937        show_box = -1;
938        return false;
939      }
940      show_box = id;
941      info_box.style.left = Math.round(x + 22) + 'px';
942      info_box.style.top = Math.round(y - 13) + 'px';
943      info_box.onmouseover = function () {
944        show_box = id;
945      };
946      info_box.className = '';
947      var star_content = '';
948      for (i = 1; i <= (direct_data[id]['s'] > 5 ? 5 : direct_data[id]['s']); i++) star_content += '<span class="star"></span>';
949      nodeById('det_changer').innerHTML = '<a target="_blank" href="/click.php?' + direct_data[id]['a'] + '" title="' + lang['str_goto_exch'] + '">' + direct_data[id]['n'] + '</a>' + 
950      (direct_data[id]['v'] ? '<span class="full" title="' + lang['info_exch_verify'] + '"></span>' : '') + 
951      (direct_data[id]['o'] ? '<span class="company" title="' + lang['info_exch_company'] + '"></span>' : '') + 
952      (star_content ? '<span class="stars" title="' + lang['details_rating'] + '">' + star_content + '</span>' : '') +
953      '<span class="amlclarity aml' + direct_data[id]['l'] + '" onclick="load_overlay(\'gethint&name=aml' + direct_data[id]['l'] + '\')" title="' + lang['aml_tag_' + direct_data[id]['l']] + '"><span class="amltext">AML</span><span class="amldot"></span></span>';
954      nodeById('det_date').innerHTML = direct_data[id]['d'];
955      nodeById('det_bcage').innerHTML = direct_data[id]['b'] ? direct_data[id]['b'] : '&mdash;';
956      nodeById('det_reviews').innerHTML = direct_data[id]['t'] ? direct_data[id]['t'] : '&mdash;';
957      nodeById('det_claims').innerHTML = direct_data[id]['r'] ? direct_data[id]['r'] : '&mdash;';
958      nodeById('det_country').innerHTML = '<img src="/images/countries/' + direct_data[id]['c'] + '.svg" valign="middle" />' + direct_data[id]['m'];
959    }
960  }
961}
962
963function hide_info() {
964  if (show_box == -1) nodeById('details').className = 'hide';
965}
966
967function shd() {
968  show_box = -1;
969  setTimeout(function () {
970    hide_info();
971  }, 200);
972}
973
974function shc(id) {
975  if (show_box > -1) {
976    show_box = -1;
977    hide_info();
978  } else {
979    show_info(id);
980  }
981}
982
983function sld(id) {
984  show_lab_box = true;
985  var obj = document.getElementById('la' + id);
986  var info_box = document.getElementById('label_details');
987  if (!info_box) {
988    info_box = document.createElement('div');
989    info_box.id = 'label_details';
990    info_box.className = 'hide';
991    info_box.innerHTML = '<table class="stretch_label">\
992<tr><td class="sl1"></td><td class="sl2"></td><td class="sl3"></td></tr>\
993<tr><td class="sl4"></td><td class="sl5"><div id="label_text"></div></td><td class="sl6"></td></tr>\
994<tr><td class="sl7"></td><td class="sl8"></td><td class="sl9"></td></tr>\
995</table>';
996  }
997  obj.parentNode.appendChild(info_box);
998  info_box.style.left = Math.round(parseInt(obj.offsetLeft) + 14) + 'px';
999  info_box.style.top = Math.round(parseInt(obj.offsetTop) - 17) + 'px';
1000
1001  document.getElementById('label_text').innerHTML = document.getElementById('ld' + id).innerHTML;
1002  info_box.className = '';
1003}
1004
1005function hld() {
1006  show_lab_box = false;
1007  setTimeout(function () {
1008    if (!show_lab_box) {
1009      var label_details = document.getElementById('label_details');
1010      if (label_details) label_details.className = 'hide';
1011    }
1012  }, 100);
1013}
1014
1015function std(id) {
1016  show_two_box = true;
1017  var obj = document.getElementById('eb' + id);
1018  var info_box = document.getElementById('twostep_details');
1019  if (!info_box) {
1020    info_box = document.createElement('div');
1021    info_box.id = 'twostep_details';
1022    info_box.className = 'hide';
1023    info_box.innerHTML = '<div id="twostep_text"></div><div class="inner"></div>';
1024  }
1025  document.body.appendChild(info_box);
1026
1027  var x = 0, y = 0;
1028  while (obj) {
1029    x += parseInt(obj.offsetLeft);
1030    y += parseInt(obj.offsetTop);
1031
1032    obj = obj.offsetParent;
1033  }
1034  info_box.style.left = Math.round(x - 153) + 'px';
1035  info_box.style.top = Math.round(y + 14) + 'px';
1036
1037  document.getElementById('twostep_text').innerHTML = document.getElementById('ed' + id).innerHTML;
1038  info_box.className = '';
1039}
1040
1041function htd() {
1042  show_two_box = false;
1043  setTimeout(function () {
1044    if (!show_two_box) document.getElementById('twostep_details').className = 'hide';
1045  }, 100);
1046}
1047
1048function reset_calc_timer() {
1049  if (calc_timer != 0) {
1050    clearTimeout(calc_timer);
1051    calc_timer = 0;
1052  }
1053}
1054
1055function calcChange(obj) {
1056  eval('calc_' + obj.name + ' = \'' + obj.value.replace(/[^0-9.,]/g, '') + '\'');
1057  //if (!calc_type) calc_type = obj.name;
1058  reset_calc_timer();
1059  calc_timer = setTimeout(function () {
1060    update_rates();
1061  }, 1500);
1062}
1063
1064function calcKeyPress(obj, event) {
1065  var evt = event || window.event;
1066  var keycode = evt.keyCode || evt.which;
1067  if (keycode == 13) {
1068    calcChange(obj);
1069    update_rates();
1070    return false;
1071  }
1072}
1073
1074function setCalcFocus() {
1075  obj = document.getElementById('give');
1076  if (!isHidden(obj)) {
1077    setFocus(obj);
1078    calc_type = 'give';
1079    sort_manual = false;
1080  } else {
1081    obj = document.getElementById('get');
1082    if (!isHidden(obj)) {
1083      setFocus(obj);
1084      calc_type = 'get';
1085      sort_manual = false;
1086    }
1087  }
1088}
1089
1090function setCalcType(type) {
1091  document.getElementById('type' + type).checked = true;
1092  nodeById('givefield').className = type == 'give' ? '' : 'hide';
1093  nodeById('getfield').className = type == 'get' ? '' : 'hide';
1094  sort_manual = false;
1095  sort_type = type == 'give' ? 'to' : 'from';
1096  sort_range = type == 'give' ? 'desc' : 'asc';
1097  setCalcFocus();
1098  reset_calc_timer();
1099}
1100
1101function setNotifyFocus(to_address_only) {
1102  var notify_address_el = document.getElementById('notify_address');
1103  if (to_address_only || !notify_address_el.value) {
1104    setFocus(notify_address_el);
1105  } else {
1106    setFocus(document.getElementById('notify_rate'));
1107  }
1108}
1109
1110function reset_reload_update_timer() {
1111  if (reload_update_timer != 0) {
1112    clearTimeout(reload_update_timer);
1113    reload_update_timer = 0;
1114  }
1115}
1116
1117function abort_update_rates(calc_button, sets_button) {
1118  reset_reload_update_timer();
1119  if (update_request !== false) {
1120    update_request.onreadystatechange = function() {
1121      return true;
1122    };
1123    if (update_request.abort) update_request.abort();
1124    update_request = false;
1125  }
1126  change_upd_img('hide');
1127  if (calc_button) calc_button.disabled = false;
1128  if (sets_button) sets_button.disabled = false;
1129}
1130
1131function update_rates(success_callback) {
1132  reset_calc_timer();
1133  
1134  var calc_button = document.getElementById('calc_button');
1135  var sets_button = document.getElementById('sets_button');
1136  
1137  last_update = Date.now();
1138  if (update_request) abort_update_rates(calc_button, sets_button);
1139  
1140  if (is_leave_page) return;
1141  
1142  update_request = createRequest();
1143  if (update_request) {
1144    change_upd_img('', '/images/ajax.png');
1145    if (calc_button) calc_button.disabled = true;
1146    if (sets_button) sets_button.disabled = true;
1147    reload_update_timer = setTimeout(function() {
1148      abort_update_rates(calc_button, sets_button);
1149      error_upd_img();
1150    }, 25000);
1151    
1152    update_request.onreadystatechange = function() {
1153      if (update_request.readyState != 4) return;
1154      reset_reload_update_timer();
1155      if (update_request.status == 200) {
1156        var results = update_request.responseText.split('[delimiter]');
1157        if (results.length >= 4 && (results[0].indexOf('content_table') || results[0].indexOf('content_norates'))) {
1158          document.getElementById('rates_block').innerHTML = results[0];
1159          document.getElementById('headinfo').innerHTML = results[1];
1160          set_local_dates();
1161          var undertable = document.getElementById('undertable');
1162          if (undertable) undertable.innerHTML = results[2];
1163          var old_ds_list = ds_list;
1164          eval(results[3]);
1165          if (!objectsAreSame(ds_list, old_ds_list)) {
1166            window.location.reload(true);
1167          }
1168          if (ct == 'tab') {
1169            if (lc_curr > 0) mark_unav(lc_curr, 'lc');
1170            if (rc_curr > 0) mark_unav(rc_curr, 'rc');
1171            if (lc_searched) search_cy('lc');
1172            if (rc_searched) search_cy('rc');
1173          } else if (ct == 'list') {
1174            if (lc_curr > 0) sel_change('lc', false);
1175            if (rc_curr > 0) sel_change('rc', false);
1176          }
1177          is_calc_rates = ud_page == 'rates' && calc_type != '' && (calc_give != '' || calc_get != '');
1178          is_twostep_rates = ud_page == 'rates' && mt == 'twostep';
1179
1180          if (is_twostep_rates && twostep_rate_id_old > 0 && twostep_rate_id_old != twostep_rate_id_next) {
1181            addClass(document.getElementById('dr' + twostep_rate_id_old), 'hide');
1182            removeClass(document.getElementById('tsl' + twostep_rate_id_old), 'tsa');
1183            if (twostep_rate_id_next > 0) {
1184              removeClass(document.getElementById('dr' + twostep_rate_id_next), 'hide');
1185              addClass(document.getElementById('tsl' + twostep_rate_id_next), 'tsa');
1186            }
1187          }
1188          if (mt == 'stats') update_stats();
1189          
1190          if (results[4] !== null) document.title = results[4];
1191          if (results[6] !== null) {
1192            //var small_text_cont = document.getElementById('small_text');
1193            //if (small_text_cont != null) small_text_cont.innerHTML = results[6];
1194          }
1195          if (results[7] !== null) {
1196            //var big_text_cont = document.getElementById('big_text');
1197            //if (big_text_cont != null) big_text_cont.innerHTML = results[7];
1198          }
1199        } else {
1200          error_upd_img();
1201        }
1202        if (typeof success_callback == 'function') success_callback();
1203      } else {
1204        error_upd_img();
1205      }
1206      if (calc_button) calc_button.disabled = false;
1207      if (sets_button) sets_button.disabled = false;
1208      update_request = false;
1209      update_runner();
1210    }
1211
1212    var data = 'action=getrates&page=' + (mt == 'twostep' ? mt : ud_page);
1213    if (ud_page == 'rates') {
1214      data += '&from=' + lc_curr + '&to=' + rc_curr + '&city=' + city + '&type=' + calc_type + '&give=' + encodeURIComponent(calc_give) + '&get=' + encodeURIComponent(calc_get) + '&light=' + light_id;
1215    }
1216    if (ud_page == 'list' || ud_page == 'rates') data += '&sort=' + sort_type + '&range=' + sort_range + '&sortm=' + (sort_manual ? '1' : '0');
1217    data += '&tsid=' + twostep_rate_id_next;
1218    
1219    sendRequest(update_request, data, function () {
1220      reset_reload_update_timer();
1221      error_upd_img();
1222      if (calc_button) calc_button.disabled = false;
1223      if (sets_button) sets_button.disabled = false;
1224      update_request = false;
1225    });
1226  }
1227  return false;
1228}
1229
1230function update_runner() {
1231  if (permanent_update_timer != 0) {
1232    clearTimeout(permanent_update_timer);
1233    permanent_update_timer = 0;
1234  }
1235  if (ud == 0) return;
1236  
1237  permanent_update_timer = setTimeout(function () {
1238    if (page_active) {
1239      update_rates();
1240    } else {
1241      update_runner();
1242      change_upd_img('', '/images/update.png');
1243    }
1244  }, ud * 15000);
1245}
1246
1247eventPush(window, 'beforeunload', function () {
1248  is_leave_page = true;
1249  if (permanent_update_timer != 0) {
1250    clearTimeout(permanent_update_timer);
1251    permanent_update_timer = 0;
1252  }
1253});
1254
1255function track_page() {
1256  if (Date.now() - page_tracked < 3600 * 1000) return;
1257  page_tracked = Date.now();
1258  
1259  var req = createRequest();
1260  if (req) {
1261    var ajax_timer = setTimeout(function() {
1262      req.abort();
1263      req.onreadystatechange = function() {
1264        return true;
1265      };
1266    }, 5000);
1267    req.onreadystatechange = function() {
1268      if (req.readyState != 4) return;
1269      clearTimeout(ajax_timer);
1270    }
1271    sendRequest(req, 'action=track');
1272  }
1273}
1274
1275function restart_stop_timer() {
1276  clearTimeout(page_active_timer);
1277  page_active_timer = setTimeout(function () {
1278    page_active = false;
1279  }, 55000);
1280}
1281
1282function activate_page() {
1283  page_active = true;
1284  if (ud > 0 && Date.now() - last_update > ud * 15000) update_rates();
1285}
1286
1287activate_page();
1288restart_stop_timer();
1289
1290window.onfocus = function () {
1291  if (!page_active) activate_page();
1292  restart_stop_timer();
1293};
1294window.onmousemove = function () {
1295  if (!last_mouse_move || Date.now() - last_mouse_move > 500) {
1296    if (!page_active) activate_page();
1297    restart_stop_timer();
1298    last_mouse_move = Date.now();
1299  }
1300  track_page();
1301};
1302window.onkeydown = function () {
1303  if (!page_active) activate_page();
1304  restart_stop_timer();
1305  track_page();
1306};
1307if ('ontouchstart' in document.documentElement) eventPush(document, 'touchstart', function () {
1308  if (!page_active) activate_page();
1309  restart_stop_timer();
1310  track_page();
1311});
1312if ('onwheel' in document.documentElement) eventPush(document, 'wheel', function () {
1313  if (!page_active) activate_page();
1314  restart_stop_timer();
1315  track_page();
1316});
1317window.onblur = function () {
1318  page_active = false;
1319  clearTimeout(page_active_timer);
1320};
1321
1322function check_telegram_link() {
1323  var telegram_status = nodeById('telegram_status');
1324  telegram_status.innerHTML = '<img src="/images/ajax.png" width="16" height="16" alt= />';
1325  telegram_status.style.display = 'inline-block';
1326  var req = createRequest();
1327  if (req) {
1328    var ajax_timer = setTimeout(function() {
1329      req.abort();
1330      req.onreadystatechange = function() {
1331        return true;
1332      };
1333      telegram_status.style.display = 'none';
1334    }, 5000);
1335
1336    req.onreadystatechange = function() {
1337      if (req.readyState != 4) return;
1338      clearTimeout(ajax_timer);
1339      if (req.status == 200) {
1340        var results = req.responseText.split('[delimiter]');
1341        if (results.length == 2) {
1342          if (results[0] == 'OK') {
1343            var re = new RegExp('([0-9]+)-(.+)');
1344            var found = results[1].match(re);
1345            if (found[1] && found[2]) {
1346              var notify_address = nodeById('notify_address');
1347              notify_address.value = found[2];
1348              notify_address.lang = found[1];
1349              notify_address.title = lang['notify_tg_linked'];
1350              def_telegram = results[1];
1351              setCookie('telegram', results[1]);
1352            }
1353            stop_tglink_checking();
1354          }
1355        }
1356      }
1357      telegram_status.style.display = 'none';
1358    }
1359    sendRequest(req, 'action=tglink', function () {
1360      telegram_status.style.display = 'none';
1361    });
1362  }
1363  return false;
1364}
1365
1366function start_tglink_checking() {
1367  tglink_check_count++;
1368  if (!tglink_checking || tglink_check_count > 100) {
1369    stop_tglink_checking();
1370    return;
1371  }
1372  setTimeout(function () {
1373    if (tglink_checking) {
1374      check_telegram_link();
1375      start_tglink_checking();
1376    }
1377  }, 6000);
1378}
1379
1380function stop_tglink_checking() {
1381  tglink_checking = false;
1382  window.onfocus = null;
1383  window.onblur = null;
1384  window.onmousemove = null;
1385}
1386
1387function notify_address_click(id) {
1388  if (nodeById('notify_type').value != 'telegram') return;
1389  
1390  stop_tglink_checking();
1391  
1392  page_active = true;
1393  tglink_checking = true;
1394  tglink_check_count = 0;
1395  
1396  window.onfocus = function () {
1397    if (!tglink_checking) {
1398      stop_tglink_checking();
1399    } else {
1400      if (!page_active) check_telegram_link();
1401      page_active = true;
1402    }
1403  };
1404  window.onblur = function () {
1405    if (!tglink_checking) {
1406      stop_tglink_checking();
1407    } else {
1408      page_active = false;
1409    }
1410  };
1411  window.onmousemove = function () {
1412    if (!page_active) {
1413      if (!tglink_checking) {
1414        stop_tglink_checking();
1415      } else {
1416        page_active = true;
1417        check_telegram_link();
1418      }
1419    }
1420  };
1421  
1422  openDocument('tg://resolve?domain=bestchange_bot&start=n-' + lang['id'] + '-' + id, true);
1423  start_tglink_checking();
1424}
1425
1426function change_notify_type() {
1427  var notify_type = nodeById('notify_type');
1428  var notify_address = nodeById('notify_address');
1429  
1430  if (notify_type.value == 'telegram') {
1431    var re = new RegExp('([0-9]+)-(.+)');
1432    var found = def_telegram.match(re);
1433    if (found) {
1434      notify_address.value = found[2];
1435      notify_address.lang = found[1];
1436      notify_address.title = lang['notify_tg_linked'];
1437    } else {
1438      notify_address.value = lang['notify_tg_link'];
1439      notify_address.lang = '';
1440      notify_address.title = lang['notify_tg_howto_link'];
1441    } 
1442    notify_address.readOnly = true;
1443    addClass(notify_address, 'telegram');
1444  } else {
1445    notify_address.value = '';
1446    notify_address.lang = '';
1447    notify_address.readOnly = false;
1448    removeClass(notify_address, 'telegram');
1449    notify_address.title = '';
1450  }
1451  
1452  if (notify_type.value == 'email' && def_email) {
1453    notify_address.value = def_email;
1454  } else if (notify_type.value == 'wmid' && def_wmid) {
1455    notify_address.value = def_wmid;
1456  }
1457  setNotifyFocus(true);
1458}
1459
1460function send_notify_request(token) {
1461  var notify_type = nodeById('notify_type').value;
1462  var notify_address = nodeById('notify_address').value;
1463  var notify_rate = nodeById('notify_rate').value;
1464  var notify_reserve = nodeById('notify_reserve').value;
1465  var notify_close = nodeById('notify_close').value;
1466  var notify_button = nodeById('notify_button');
1467  setCookie('notify_type', notify_type);
1468  if (notify_type == 'telegram') {
1469    notify_address = nodeById('notify_address').lang;
1470  } else {
1471    setCookie(notify_type, notify_address);
1472  }
1473  setCookie('notify_close', notify_close);
1474
1475  var req = createRequest();
1476  if (req) {
1477    notify_button.disabled = true;
1478    var ajax_timer = setTimeout(function() {
1479      req.abort();
1480      req.onreadystatechange = function() {
1481        return true;
1482      };
1483      set_status('notify', lang['str_fail_serv'], 'error.png');
1484      notify_button.disabled = false;
1485    }, 25000);
1486    set_status('notify', lang['notify_send'], 'ajax.png', true);
1487
1488    req.onreadystatechange = function() {
1489      if (req.readyState != 4) return;
1490      clearTimeout(ajax_timer);
1491      if (req.status == 200) {
1492        var results = req.responseText.split('[delimiter]');
1493        if (results.length == 2) {
1494          if (results[0] == 'OK') {
1495            set_status('notify', lang['notify_success'], 'ok.png');
1496            alert(results[1]);
1497          } else if (results[0] == 'ERROR') {
1498            set_status('notify', lang['notify_error'], 'error.png');
1499            alert(lang['notify_error_det'] + ':\n' + results[1]);
1500          } else {
1501            set_status('notify', lang['notify_fail'], 'error.png');
1502          }
1503        } else {
1504          set_status('notify', lang['notify_fail'], 'error.png');
1505        }
1506      } else {
1507        set_status('notify', lang['notify_fail_serv'], 'error.png');
1508      }
1509      notify_button.disabled = false;
1510    }
1511
1512    sendRequest(req, 'action=newnotify&from=' + lc_curr + '&to=' + rc_curr + '&city=' + city + '&type=' + notify_type + '&address=' + encodeURIComponent(notify_address) + '&rate=' + encodeURIComponent(notify_rate) + '&by_from_id=' + byfrom + '&reserve=' + encodeURIComponent(notify_reserve) + '&close=' + notify_close + '&captcha=' + token, function () {
1513      set_status('notify', lang['str_fail_con'], 'error.png');
1514      notify_button.disabled = false;
1515    });
1516  }
1517  
1518  if (typeof gtag == 'function') {
1519    gtag('event', 'request', {
1520      'event_category': 'notify'
1521    });
1522  }
1523  return false;
1524}
1525
1526function submit_notify_request() {
1527  var send_button = document.getElementById('notify_button');
1528  send_button.disabled = true;
1529  set_status('notify', lang['info_review_check'], 'ajax.png', true);
1530  
1531  recaptcha_check('newnotify', function (token) {
1532    send_button.disabled = false;
1533    send_notify_request(token);
1534  }, function () {
1535    send_button.disabled = false;
1536    set_status('notify', lang['str_fail_err'], 'error.png');
1537  });
1538  return false;
1539}
1540
1541function chart_update_complete(success) {
1542  if (success) {
1543    document.getElementById('chartcanvas').className = 'chart';
1544    chart_time = new Date();
1545    chart_unsuccessful = 0;
1546  } else {
1547    chart_unsuccessful++;
1548  }
1549  update_stats();
1550}
1551
1552function update_stats(forcibly) {
1553  var stats_button = document.getElementById('stats_button');
1554  if (!stats_button) return;
1555  stats_button.disabled = false;
1556  if (!forcibly && (chart_update_stop || chart_unsuccessful >= 3)) {
1557    chart_unsuccessful = 0;
1558    return;
1559  }
1560  var chartcanvas = document.getElementById('chartcanvas');
1561  if (forcibly || chartcanvas.className == 'waitchart' || new Date() - chart_time > 2 * 60 * 1000) {
1562    stats_button.disabled = true;
1563    chartcanvas.className = 'waitchart';
1564
1565    var stats_type = document.getElementById('stats_type').value;
1566    var stats_interval = document.getElementById('stats_interval').value;
1567    var chart_url = '/chart.php?type=' + stats_type + '&ci=' + stats_interval;
1568    if (ud_page == 'rates') chart_url += '&from=' + lc_curr + '&to=' + rc_curr;
1569    chart_url += '&rnd=' + Math.random() + '&session=' + session_params;
1570
1571    chartcanvas.innerHTML = '<div class="waitborder"></div>
1571 <img src="/images/ajax-big.gif" class="waitimg" alt="' + lang['str_ajax_title'] + '" /> <img src="' + chart_url + '" class="chartimg" onload="chart_update_complete(true)" onerror="chart_update_complete(false)" />';
1572  }
1573  return false;
1574}
1575
1576function wishesFocus(is_active) {
1577  var suggesttext = document.getElementById('suggesttext');
1578  if (suggesttext) {
1579    if (is_active) {
1580      if (wishes_default_text == '') wishes_default_text = suggesttext.value;
1581      if (suggesttext.value == wishes_default_text) suggesttext.value = '';
1582      suggesttext.className = 'wishesenable';
1583    } else {
1584      if (suggesttext.value == '') {
1585        suggesttext.value = wishes_default_text;
1586        suggesttext.className = 'wishesdisable';
1587      }
1588    }
1589  }
1590}
1591
1592function send_email(email_type) {
1593  var textfield = nodeById(email_type + 'text');
1594  var text = '';
1595  var name = '';
1596  var email = '';
1597  var type = '';
1598  var exchid = 0;
1599  var last_exchid = 0;
1600  var order = '';
1601  var last_order = '';
1602  var phone = '';
1603  var address = '';
1604  var blog_type = 0;
1605  var blog_theme = 0;
1606  var blog_size = 0;
1607  if (textfield.value && (email_type == 'contact' || email_type == 'blogger' || (email_type == 'suggest' && wishes_default_text && textfield.value != wishes_default_text))) {
1608    text = textfield.value;
1609    if (email_type == 'contact') {
1610      name = nodeById('contactname').value;
1611      email = nodeById('contactemail').value;
1612      type = nodeById('type').value;
1613      exchid = nodeById('exch').value;
1614      order = nodeById('order').value;
1615      phone = nodeById('phone').value;
1616      address = nodeById('address').value;
1617    } else if (email_type == 'suggest') {
1618      type = 20;
1619    } else if (email_type == 'blogger') {
1620      type = 21;
1621      name = nodeById('bloggername').value;
1622      email = nodeById('bloggeremail').value;
1623      blog_type = nodeById('blog_type').value;
1624      blog_theme = nodeById('blog_theme').value;
1625      blog_size = nodeById('blog_size').value;
1626      address = nodeById('blog_link').value;
1627    }
1628  } else {
1629    set_status(email_type, lang['contact_err_text'], 'error.png');
1630    if (email_type == 'contact' || email_type == 'blogger') setFocus(textfield);
1631  }
1632  
1633  var req = createRequest();
1634  if (req && text) {
1635    var send_button = document.getElementById(email_type + '_button');
1636    send_button.disabled = true;
1637    
1638    if (text) {
1639      if (name) {
1640        setCookie('name', name);
1641      } else {
1642        name = getCookie('name');
1643      }
1644      if (email) {
1645        setCookie('email', email);
1646      } else {
1647        email = getCookie('email');
1648        if (!email && email_type == 'suggest') {
1649          var email_request = prompt(lang['contact_email_request']);
1650          if (email_request != null) {
1651            email = email_request;
1652            setCookie('email', email);
1653          }
1654        }
1655      }
1656      if (exchid) {
1657        setCookie('exchid', exchid);
1658      } else {
1659        last_exchid = getCookie('exchid');
1660      }
1661      if (order) {
1662        setCookie('order', order);
1663      } else {
1664        last_order = getCookie('order');
1665      }
1666      if (phone) {
1667        setCookie('phone', phone);
1668      } else {
1669        phone = getCookie('phone');
1670      }
1671      if (address) {
1672        setCookie('website', address);
1673      } else {
1674        address = getCookie('website');
1675      }
1676      
1677      if (email_type == 'contact' && !document.getElementById('agree').checked) {
1678        set_status(email_type, lang['contact_agree_need'], 'error.png');
1679        send_button.disabled = false;
1680        return false;
1681      }
1682      if (email_type == 'contact' && !email && !confirm(lang['contact_noemail'])) {
1683        setFocus(document.getElementById('contactemail'));
1684        send_button.disabled = false;
1685        return false;
1686      }
1687      var unklang = /[^\u0000-\u00FF\u0400-\u04FF\u2000-\u2BFF]/i.test(text);
1688      if (unklang && !confirm(lang['contact_unklang'])) {
1689        setFocus(textfield);
1690        send_button.disabled = false;
1691        return false;
1692      }
1693      if (email_type == 'blogger' && !document.getElementById('user_agree1').checked) {
1694        set_status(email_type, lang['blogger_agr1_need'], 'error.png');
1695        send_button.disabled = false;
1696        return false;
1697      }
1698      if (email_type == 'blogger' && !document.getElementById('user_agree2').checked) {
1699        set_status(email_type, lang['contact_agree_need'], 'error.png');
1700        send_button.disabled = false;
1701        return false;
1702      }
1703      
1704      var dataquery = '&text=' + encodeURIComponent(text);
1705      if (name) dataquery += '&name=' + encodeURIComponent(name);
1706      if (email) dataquery += '&email=' + encodeURIComponent(email);
1707      
1708      if (type) dataquery += '&type=' + encodeURIComponent(type);
1709      if (exchid) dataquery += '&exchid=' + encodeURIComponent(exchid);
1710      if (last_exchid) dataquery += '&last_exchid=' + encodeURIComponent(last_exchid);
1711      if (order) dataquery += '&order=' + encodeURIComponent(order);
1712      if (last_order) dataquery += '&last_order=' + encodeURIComponent(last_order);
1713      if (phone) dataquery += '&phone=' + encodeURIComponent(phone);
1714      if (address) dataquery += '&address=' + encodeURIComponent(address);
1715      if (blog_type) dataquery += '&blog_type=' + encodeURIComponent(blog_type);
1716      if (blog_theme) dataquery += '&blog_theme=' + encodeURIComponent(blog_theme);
1717      if (blog_size) dataquery += '&blog_size=' + encodeURIComponent(blog_size);
1718
1719      if (email_type == 'suggest') dataquery += '&tsid=' + encodeURIComponent(document.location.href);
1720    }
1721
1722    var ajax_timer = setTimeout(function() {
1723      req.abort();
1724      req.onreadystatechange = function() {
1725        return true;
1726      };
1727      set_status(email_type, lang['str_fail_serv'], 'error.png');
1728      send_button.disabled = false;
1729    }, 25000);
1730    set_status(email_type, lang['contact_send'], 'ajax.png', true);
1731
1732    req.onreadystatechange = function() {
1733      if (req.readyState != 4) return;
1734      clearTimeout(ajax_timer);
1735      if (req.status == 200) {
1736        if (req.responseText == 'OK') {
1737          set_status(email_type, lang['contact_success'], 'ok.png');
1738          if (email_type == 'suggest') {
1739            textfield.value = wishes_default_text;
1740            textfield.className = 'wishesdisable';
1741          } else if (email_type == 'contact') {
1742            textfield.value = '';
1743          }
1744        } else {
1745          set_status(email_type, lang['contact_fail'], 'error.png');
1746        }
1747      } else {
1748        set_status(email_type, lang['str_fail_err'], 'error.png');
1749      }
1750      send_button.disabled = false;
1751    }
1752
1753    sendRequest(req, 'action=newemail&' + dataquery, function () {
1754      set_status(email_type, lang['str_fail_con'], 'error.png');
1755      send_button.disabled = false;
1756    });
1757  }
1758  return false;
1759}
1760
1761function show_addform(locate, name, u, t) {
1762  var content = '';
1763  show_add_name = name == show_add_name ? '' : name;
1764
1765  if (show_add_name == 'social') {
1766    var social_data = new Array(
1767      'facebook.com', 'share.php?u={u}', lang['addto_soc_facebook'],
1768      'twitter.com', 'home?status={t} {u}', lang['addto_soc_twitter'],
1769      'google.com', 'bookmarks/mark?op=edit&bkmk={u}&title={t}', lang['addto_soc_google'],
1770      'vk.com', 'share.php?url={u}', lang['addto_soc_vkontakte'],
1771      'zakladki.yandex.ru', 'userarea/links/addfromfav.asp?bAddLink_x=1&lurl={u}&lname={t}', lang['addto_soc_yandex']
1772    );
1773    u = encodeURIComponent(u);
1774    t = encodeURIComponent(t);
1775    for (var i = 0; i < social_data.length; i += 3) content += '<a target="_blank" href="http://' + social_data[i] + '/' + social_data[i + 1].replace('{u}', u).replace('{t}', t) + '" title="' + lang['addto_title'] + ' ' + social_data[i + 2] + '"><img src="/images/social/' + social_data[i] + '.png" width="16" height="16" alt="' + social_data[i + 2] + '" /></a>';
1776  } else if (show_add_name == 'forum') {
1777    content = '<textarea id="pagesavetext" onclick="this.select()">[url="' + u + '"]' + t + '[/url]</textarea>';
1778  } else if (show_add_name == 'site') {
1779    content = '<textarea id="pagesavetext" onclick="this.select()">&lt;a target="_blank" href="' + u + '"&gt;' + t + '&lt;/a&gt;</textarea>';
1780  }
1781  document.getElementById(locate).innerHTML = content;
1782  setFocus(document.getElementById('pagesavetext'));
1783}
1784
1785function show_pagesave(url, title) {
1786  //document.write('<hr align="left" /><div class="pagesavelinks"></div>');
1787}
1788
1789function disable_bonus_button() {
1790  document.getElementById('bonus_button').disabled = bonus_button_disabled;
1791}
1792
1793var bonus_last_time = getCookie('bonus_last_time');
1794var bonus_timer_count = 0;
1795var bonus_button_disabled = false;
1796function start_bonus_timer() {
1797  var bonus_button = document.getElementById('bonus_button');
1798  if (!bonus_button || !bonus_last_time || parseInt(bonus_last_time) > Math.floor(new Date() / 1000)) return;
1799  var left = parseInt(bonus_last_time) + 3600 - Math.floor(new Date() / 1000);
1800  if (left <= 0) {
1801    bonus_button.value = lang['bonus_button'];
1802    //bonus_button.disabled = false;
1803    bonus_button_disabled = false;
1804    disable_bonus_button();
1805    clearTimeout(bonus_captcha_timer);
1806    if (typeof hcaptcha != 'undefined') hcaptcha.reset(bonus_captcha);
1807    document.getElementById('bonus_captcha_title').innerHTML = lang['aff_main_captcha'];
1808    if (bonus_timer_count > 5 && !page_active) {
1809      var sound = new Audio();
1810      sound.src = '/images/notify.mp3';
1811      sound.autoplay = true;
1812      bonus_timer_count = 0;
1813    }
1814    return;
1815  }
1816  var left_hours = Math.floor(left / 3600);
1817  var left_mins = Math.floor((left - (left_hours * 3600)) / 60);
1818  var left_sec = left - left_hours * 3600 - left_mins * 60;
1819  bonus_button.value = lang['bonus_button_left'] + ' ' + (left_hours ? (left_hours < 10 ? '0' : '') + left_hours + ':' : '') + (left_mins < 10 ? '0' : '') + left_mins + ':' + (left_sec < 10 ? '0' : '') + left_sec;
1820  //bonus_button.disabled = true;
1821  bonus_button_disabled = true;
1822  disable_bonus_button();
1823  setTimeout(function () {
1824    start_bonus_timer();
1825    bonus_timer_count++;
1826  }, 1000);
1827}
1828
1829eventPush(window, 'load', function () {
1830  is_page_loaded = true;
1831  start_bonus_timer();
1832});
1833
1834function activate_bonus_captcha() {
1835  setTimeout(function() {
1836    removeClass(document.getElementById('bonus_captcha'), 'hide');
1837    //document.getElementById('bonus_button').disabled = false;
1838    //bonus_button_disabled = false;
1839    disable_bonus_button();
1840  }, 200);
1841}
1842
1843var captcha_callback = function() {
1844  var hl = /ar|iw/i.test(navigator.browserLanguage || navigator.language || navigator.userLanguage) ? 'en' : '';
1845  var bonus_captcha_obj = document.getElementById('bonus_captcha');
1846  if (bonus_captcha_obj) {
1847    bonus_captcha = hcaptcha.render(bonus_captcha_obj, {
1848      'sitekey': '96698d85-c7f5-46b2-a9b8-8a2d6c7ec963',
1849      'hl': hl,
1850      'callback': function () {
1851        document.getElementById('bonus_captcha_title').innerHTML = lang['aff_main_captcha_suc'];
1852        bonus_captcha_timer = setTimeout(function() {
1853          hcaptcha.reset(bonus_captcha);
1854          document.getElementById('bonus_captcha_title').innerHTML = lang['aff_main_captcha'];
1855        }, 100000);
1856      }
1857    });
1858    if (is_page_loaded) {
1859      activate_bonus_captcha();
1860    } else {
1861      eventPush(window, 'load', function () {
1862        activate_bonus_captcha();
1863      });
1864      eventPush(window, 'abort', function () {
1865        activate_bonus_captcha();
1866      });
1867    }
1868  }
1869  
1870  var invisible_captcha_obj = document.getElementById('invisible_captcha');
1871  if (invisible_captcha_obj) invisible_captcha = hcaptcha.render(invisible_captcha_obj, {
1872    'sitekey': '4c06fe16-39f9-484a-b4f1-b4d94bf0fa01',
1873    'hl': hl,
1874    'callback': function () {
1875      if (typeof invisible_captcha_callback == 'function') invisible_captcha_callback(hcaptcha.getResponse(invisible_captcha));
1876    },
1877    'close-callback': function () {
1878      if (typeof invisible_captcha_close_callback == 'function') invisible_captcha_close_callback();
1879    },
1880    'size': 'invisible'
1881  });
1882};
1883
1884function set_bonus_status(content, status, filename) {
1885  var bonus_result = document.getElementById('bonus_result');
1886  var status_content = '<p><span id="bonus_img"></span> <span id="bonus_status"></span></p>';
1887  if (content) {
1888    status_content += content;
1889  } else {
1890    status_content = '<div style="text-align: center; padding-top: ' + (bonus_result.offsetHeight / 2 - 10) + 'px">' + status_content + '</div>';
1891  }
1892  bonus_result.innerHTML = status_content;
1893  set_status('bonus', status, filename, content != '');
1894}
1895
1896function get_bonus() {
1897  if (isFramed()) {
1898    alert(lang['bonus_frame']);
1899    return;
1900  }
1901  var bonus_purse = document.getElementById('bonus_purse');
1902  var bonus_result = document.getElementById('bonus_result');
1903  var bonus_form = document.getElementById('bonus_form');
1904  if (bonus_purse.value) setCookie('bonus_purse', bonus_purse.value);
1905
1906  var req = createRequest();
1907  if (req) {
1908    var width = bonus_form.offsetWidth;
1909    var height = bonus_form.offsetHeight;
1910
1911    bonus_result.style.width = width + 'px';
1912    bonus_result.style.height = height + 'px';
1913    addClass(bonus_form, 'hide');
1914    removeClass(bonus_result, 'hide');
1915
1916    bonus_result.innerHTML = '<img src="/images/ajax-big.gif" width="48" height="48" style="padding: ' + (height / 2 - 28) + 'px 0 0 ' + (width / 2 - 24) + 'px" alt="' + lang['
1916str_ajax_title'] + '" />';
1917    clearTimeout(bonus_captcha_timer);
1918
1919    var ajax_timer = setTimeout(function() {
1920      req.abort();
1921      req.onreadystatechange = function() {
1922        return true;
1923      };
1924      set_bonus_status('', lang['str_fail_serv'], 'error.png');
1925      document.getElementById('bonus_captcha_title').innerHTML = lang['aff_main_captcha'];
1926      hcaptcha.reset(bonus_captcha);
1927    }, 25000);
1928
1929    req.onreadystatechange = function() {
1930      if (req.readyState != 4) return;
1931      clearTimeout(ajax_timer);
1932      if (req.status == 200) {
1933        var results = req.responseText.split('[delimiter]');
1934        if (results.length == 6) {
1935          if (results[0] == 'OK') {
1936            set_bonus_status(results[5] + lang['bonus_ok_desc'] + '<input type="button" class="button" value="' + lang['bonus_thanks'] + '" onclick="open_bonus_form()" />', results[1], 'ok.png');
1937            bonus_result.style.height = 'auto';
1938            bonus_last_time = Math.floor(new Date() / 1000);
1939            setCookie('bonus_last_time', bonus_last_time);
1940            if (results[4] == '1') load_overlay('addrmsg');
1941          } else if (results[0] == 'ERROR') {
1942            set_bonus_status('', results[1], 'error.png');
1943          } else {
1944            set_bonus_status('', lang['str_fail_err'], 'error.png');
1945          }
1946          document.getElementById('bonus_captcha_title').innerHTML = lang['aff_main_captcha'];
1947          hcaptcha.reset(bonus_captcha);
1948          document.getElementById('bonus_stats').innerHTML = results[2];
1949          if (results[3] == 'purse') setFocus(bonus_purse);
1950        } else {
1951          set_bonus_status('', lang['str_fail_err'], 'error.png');
1952        }
1953      } else {
1954        set_bonus_status('', lang['str_fail_serv'], 'error.png');
1955      }
1956    }
1957    
1958    sendRequest(req, 'action=getbonus&address=' + encodeURIComponent(bonus_purse.value) + '&captcha=' + encodeURIComponent(hcaptcha.getResponse(bonus_captcha)), function () {
1959      set_bonus_status('', lang['str_fail_con'], 'error.png');
1960    });
1961  }
1962  
1963  if (typeof gtag == 'function') {
1964    gtag('event', 'claim', {
1965      'event_category': 'bonus'
1966    });
1967  }
1968  return false;
1969}
1970
1971function open_bonus_form() {
1972  addClass(nodeById('bonus_result'), 'hide');
1973  removeClass(nodeById('bonus_form'), 'hide');
1974  start_bonus_timer();
1975}
1976
1977function bonusKeyPress(obj) {
1978  var evt = event || window.event;
1979  if ((evt.keyCode || evt.which) == 13) {
1980    get_bonus();
1981    return false;
1982  }
1983}
1984
1985function faucet_order(address) {
1986  if (!confirm(lang['bonus_request_confirm'])) return false;
1987  
1988  var faucet_order_button = document.getElementById('faucet_order_button');
1989  
1990  var req = createRequest();
1991  if (req) {
1992    var ajax_timer = setTimeout(function() {
1993      req.abort();
1994      req.onreadystatechange = function() {
1995        return true;
1996      };
1997      faucet_order_button.disabled = false;
1998      faucet_order_button.value = lang['bonus_request'];
1999    }, 25000);
2000    faucet_order_button.disabled = true;
2001    faucet_order_button.value = lang['bonus_request_send'];
2002    
2003    req.onreadystatechange = function() {
2004      if (req.readyState != 4) return;
2005      clearTimeout(ajax_timer);
2006      if (req.status == 200) {
2007        var results = req.responseText.split('[delimiter]');
2008        if (results[0] == 'OK') {
2009          document.getElementById('faucet_order_result').innerHTML = results[1];
2010          document.getElementById('faucet_paid_amount').innerHTML = results[2];
2011          document.getElementById('faucet_unpaid_balance').innerHTML = '0 ' + lang['bonus_satoshi'];
2012          show_th_info = false;
2013          show_trans_history();
2014        } else {
2015          faucet_order_button.disabled = false;
2016          faucet_order_button.value = lang['bonus_request'];
2017        }
2018      } else {
2019        faucet_order_button.disabled = false;
2020        faucet_order_button.value = lang['bonus_request'];
2021      }
2022    }
2023
2024    sendRequest(req, 'action=faucetorder&address=' + encodeURIComponent(address), function () {
2025      faucet_order_button.disabled = false;
2026      faucet_order_button.value = lang['bonus_request'];
2027    });
2028  }
2029  return false;
2030}
2031
2032function show_trans_history() {
2033  show_th_info = !show_th_info;
2034  var transhistory = document.getElementById('transhistory');
2035  var th_bullet = document.getElementById('th_bullet');
2036  if (show_th_info) {
2037    transhistory.className = '';
2038    th_bullet.className = 'bulletup';
2039  } else {
2040    transhistory.className = 'hide';
2041    th_bullet.className = 'bulletdown';
2042  }
2043}
2044
2045function show_overlay() {
2046  var arrayPageSize = getPageSize();
2047  var arrayPageScroll = getPageScroll();
2048  var objBody = document.getElementsByTagName('body').item(0);
2049
2050  var objOverlay = document.getElementById('overlay');
2051  var objLightbox = document.getElementById('lightbox');
2052  if (objOverlay) {
2053    objOverlay.style.display = 'block';
2054    objLightbox.style.display = 'block';
2055  } else {
2056    objOverlay = document.createElement('div');
2057    objOverlay.setAttribute('id', 'overlay');
2058    objOverlay.onclick = function () {
2059      hide_overlay();
2060      return false;
2061    }
2062    objBody.insertBefore(objOverlay, objBody.firstChild);
2063
2064    var objLightbox = document.createElement('div');
2065    objLightbox.setAttribute('id', 'lightbox');
2066    objBody.insertBefore(objLightbox, objOverlay.nextSibling);
2067  }
2068  objOverlay.style.height = arrayPageSize[1] + 'px';
2069  objLightbox.style.height = '150px';
2070  objLightbox.innerHTML = '<div id="lightboxClose" onclick="hide_overlay()"></div><div id="lightboxPre"></div><div id="lightboxContent"></div><div id="lightboxPost"></div>';
2071  objLightbox.style.top = arrayPageScroll[1] + ((arrayPageSize[3] - objLightbox.clientHeight) / 2) + 'px';
2072  objLightbox.style.left = ((arrayPageSize[0] - objLightbox.clientWidth) / 2) + 'px';
2073
2074  eventPush(document, 'keydown', function (evt) {
2075    evt = evt || window.event;
2076    var key = evt.keyCode || evt.which;
2077    if (key == 27) {
2078      hide_overlay();
2079      return false;
2080    }
2081  });
2082}
2083
2084function hide_overlay() {
2085  document.getElementById('overlay').style.display = 'none';
2086  document.getElementById('lightbox').style.display = 'none';
2087  document.getElementById('lightboxClose').style.display = 'none';
2088  setTimeout(function () {
2089    document.getElementById('lightboxContent').innerHTML = '';
2090  }, 50);
2091  document.onkeydown = null;
2092}
2093
2094function load_overlay(params) {
2095  var req = createRequest();
2096  if (req) {
2097    show_overlay();
2098    
2099    var geo_details = nodeById('geo_details');
2100    if (geo_details) addClass(geo_details, 'hide');
2101
2102    var lightboxContent = document.getElementById('lightboxContent');
2103    var width = lightboxContent.offsetWidth;
2104    var height = lightboxContent.offsetHeight;
2105    lightboxContent.innerHTML = '<img src="/images/ajax-big.gif" width="48" height="48" style="padding: ' + (height / 2 - 28) + 'px 0 0 ' + (width / 2 - 24) + 'px" alt="' + lang['str_ajax_title'] + '" />';
2106
2107    var ajax_timer = setTimeout(function() {
2108      req.abort();
2109      req.onreadystatechange = function() {
2110        return true;
2111      };
2112      hide_overlay();
2113    }, 25000);
2114
2115    req.onreadystatechange = function() {
2116      if (req.readyState != 4) return;
2117      clearTimeout(ajax_timer);
2118      if (req.status == 200) {
2119        var results = req.responseText.split('[delimiter]');
2120        if (results[0] == 'OK') {
2121          setTimeout(function () {
2122            document.getElementById('lightbox').style.height = 'auto';
2123            lightboxContent.innerHTML = results[1];
2124            setSelectStyle(lightboxContent);
2125            if (results[2]) eval(results[2]);
2126            var arrayPageSize = getPageSize();
2127            var arrayPageScroll = getPageScroll();
2128            var objLightbox = document.getElementById('lightbox');
2129            objLightbox.style.top = arrayPageScroll[1] + ((arrayPageSize[3] - objLightbox.clientHeight) / 2) + 'px';
2130            objLightbox.style.left = ((arrayPageSize[0] - objLightbox.clientWidth) / 2) + 'px';
2131            document.getElementById('lightboxClose').style.display = 'block';
2132          }, 300);
2133        } else {
2134          hide_overlay();
2135        }
2136      } else {
2137        hide_overlay();
2138      }
2139    }
2140
2141    sendRequest(req, 'action=' + params, function () {
2142      hide_overlay();
2143    });
2144  }
2145  return false;
2146}
2147
2148function video_load_complete() {
2149  document.getElementById('video_pre_load').style.display = 'none';
2150  document.getElementById('video_frame').style.display = 'block';
2151  document.getElementById('lightbox').style.height = 'auto';
2152  var lightboxContent = document.getElementById('lightboxContent');
2153  setSelectStyle(lightboxContent);
2154  var arrayPageSize = getPageSize();
2155  var arrayPageScroll = getPageScroll();
2156  var objLightbox = document.getElementById('lightbox');
2157  objLightbox.style.top = arrayPageScroll[1] + ((arrayPageSize[3] - objLightbox.clientHeight) / 2) + 'px';
2158  objLightbox.style.left = ((arrayPageSize[0] - objLightbox.clientWidth) / 2) + 'px';
2159  document.getElementById('lightboxClose').style.display = 'block';
2160}
2161
2162function show_video(id) {
2163  var video;
2164  if (id == 'ru') {
2165    video = 'hgx0IScTiQM';
2166  } else if (id == 'en') {
2167    video = 'Jck4GeBB3-c';
2168  } else if (id == 'aff-ru') {
2169    video = 'yihaSX2qr6s';
2170  } else if (id == 'aff-en') {
2171    video = 'y-X-JAFfo5A';
2172  }
2173  show_overlay();
2174  var lightboxContent = document.getElementById('lightboxContent');
2175  lightboxContent.innerHTML = '<img src="/images/ajax-big.gif" id="video_pre_load" width="48" height="48" style="padding: ' + (lightboxContent.offsetHeight / 2 - 28) + 'px 0 0 ' + (lightboxContent.offsetWidth / 2 - 24) + 'px" alt="' + lang['str_ajax_title'] + '" /><div id="video_frame"><iframe onload="setTimeout(function () {video_load_complete()}, 200)" width="600" height="338" src="https://www.youtube.com/embed/' + video + '?rel=0&autoplay=1&showinfo=0" frameborder="0" allowfullscreen></iframe></div>';
2176}
2177
2178function switch_ts_desc(id, pos) {
2179  if (id == twostep_rate_id) return;
2180  twostep_rate_id_next = id;
2181  if (id > 0) document.getElementById('tk' + id).style.height = pos + 'px';
2182  if (twostep_rate_id > 0) {
2183    var twostep_rate_line = document.getElementById('tk' + twostep_rate_id);
2184    if (twostep_rate_line != null) twostep_rate_line.style.height = (47 - pos) + 'px';
2185  }
2186  if (pos == 0) {
2187    if (id > 0) {
2188      removeClass(document.getElementById('dr' + id), 'hide');
2189      addClass(document.getElementById('tsl' + id), 'tsa');
2190    }
2191  } else if (pos == 47) {
2192    if (twostep_rate_id > 0) {
2193      addClass(document.getElementById('dr' + twostep_rate_id), 'hide');
2194      removeClass(document.getElementById('tsl' + twostep_rate_id), 'tsa');
2195    }
2196    twostep_rate_id = id;
2197  }
2198  if (pos < 47) setTimeout(function () {
2199    switch_ts_desc(id, (pos + 5 > 47 ? 47 : pos + 5));
2200  }, 10);
2201}
2202
2203function tab_repainting() {
2204  if (lc_curr > 0) sc_list[id2pos(lc_curr)] = 1;
2205  if (rc_curr > 0) sc_list[id2pos(rc_curr)] = 1;
2206  
2207  if (sc == 0) {
2208    var maxpos = arraySum(sc_list);
2209  } else {
2210    var maxpos = sc_list.length;
2211  }
2212  
2213  var pos = 0;
2214  var is_alt = true;
2215  var last_type = ty_list[0];
2216  
2217  for (var i = 0; i < ds_list.length; i++) {
2218    if (sc == 1 || sc_list[i] == 1) {
2219      pos++;
2220      is_alt = !is_alt;
2221      if (last_type != ty_list[i]) {
2222        if (is_alt) {
2223          removeClass(nodeById('ty' + ty_list[i]), 'alt');
2224        } else {
2225          addClass(nodeById('ty' + ty_list[i]), 'alt');
2226        }
2227        last_type = ty_list[i];
2228        is_alt = !is_alt;
2229      }
2230      if (is_alt) {
2231        addClass(nodeById('ti' + ds_list[i]), 'alt');
2232      } else {
2233        removeClass(nodeById('ti' + ds_list[i]), 'alt');
2234      }
2235      removeClass(nodeById('ti' + ds_list[i]), 'hide');
2236    } else {
2237      addClass(nodeById('ti' + ds_list[i]), 'hide');
2238    }
2239
2240    if (pos != maxpos) {
2241      removeClass(nodeById('ti' + ds_list[i]), 'last');
2242    } else {
2243      addClass(nodeById('ti' + ds_list[i]), 'last');
2244    }
2245  }
2246}
2247
2248function resize_tab_line(id, px) {
2249  if (px === undefined) px = 24;
2250  nodeById('alc' + id).style.lineHeight = px + 'px';
2251  nodeById('arc' + id).style.lineHeight = px + 'px';
2252  nodeById('alc' + id).style.height = px + 'px';
2253  nodeById('arc' + id).style.height = px + 'px';
2254  nodeById('dlc' + id).style.height = px + 'px';
2255  nodeById('drc' + id).style.height = px + 'px';
2256}
2257
2258function tab_winding(px) {
2259  if (sc == 1) {
2260    px += 6;
2261  } else {
2262    px -= 6;
2263  }
2264  if (px < 0) px = 0;
2265  if (px > 24) px = 24;
2266
2267  for (var i = 0; i < ds_list.length; i++) {
2268    if (sc_list[i] == 0) {
2269      resize_tab_line(ds_list[i], px);
2270      if (sc == 0 && px == 0) addClass(nodeById('ti' + ds_list[i]), 'hide');
2271      if (sc == 1 && px == 6) removeClass(nodeById('ti' + ds_list[i]), 'hide');
2272    }
2273  }
2274
2275  if ((sc == 0 && px == 0) || (sc == 1 && px == 24)) {
2276    tab_repainting();
2277    
2278    var tab_show_button = document.getElementById('tab_show_button');
2279    if (sc == 0) {
2280      removeClass(tab_show_button, 'down');
2281      tab_show_button.title = lang['tab_curr_expand'];
2282    } else {
2283      addClass(tab_show_button, 'down');
2284      tab_show_button.title = lang['tab_curr_reduce'];
2285    }
2286    return;
2287  }
2288  setTimeout(function () {
2289    tab_winding(px);
2290  }, 10);
2291}
2292
2293function switch_curr_list() {
2294  if (lc_curr > 0) sc_list[id2pos(lc_curr)] = 1;
2295  if (rc_curr > 0) sc_list[id2pos(rc_curr)] = 1;
2296  sc = sc == 0 ? 1 : 0;
2297  setCookie('sc', sc);
2298  tab_winding(sc == 0 ? 24 : 0);
2299  return false;
2300}
2301
2302function change_reviewtype(num) {
2303  var tsidreq = document.getElementById('tsidreq');
2304  var tsiddesc = document.getElementById('tsiddesc');
2305  var reviewtsid = document.getElementById('reviewtsid');
2306  if (num == 2) {
2307    removeClass(tsidreq, 'hide');
2308    tsiddesc.style.display = document.all && !document.querySelector ? 'block' : 'table-row';//ie7fix
2309    reviewtsid.setAttribute('pattern', '.+');
2310    if (reviewtsid.value == '') setFocus(reviewtsid);
2311  } else {
2312    addClass(tsidreq, 'hide');
2313    tsiddesc.style.display = 'none';
2314    reviewtsid.setAttribute('pattern', '.*');
2315    set_pattern_checker(reviewtsid, true);
2316  }
2317}
2318
2319function switch_arform(obj, position, is_start) {
2320  if (show_ar_form) {
2321    if (is_start) obj.style.position = 'static';
2322
2323    position += 35;
2324    if (position < ar_form_height) {
2325      obj.style.height = position + 'px';
2326    } else {
2327      position = ar_form_height;
2328      obj.style.height = 'auto';
2329
2330      var reviewname = document.getElementById('reviewname');
2331      if (reviewname.value == '') {
2332        setFocus(reviewname);
2333      } else {
2334        var reviewemail = document.getElementById('reviewemail');
2335        if (reviewemail.value == '') {
2336          setFocus(reviewemail);
2337        } else {
2338          setFocus(document.getElementById('reviewtext'));
2339        }
2340      }
2341      return;
2342    }
2343  } else {
2344    position -= 35;
2345    if (position > 0) {
2346      obj.style.height = position + 'px';
2347    } else {
2348      obj.style.position = 'absolute';
2349      obj.style.left = '-9999px';
2350      obj.style.height = 'auto';
2351      document.getElementById('ar_bullet').className = 'bulletdown';
2352      return;
2353    }
2354  }
2355  setTimeout(function () {
2356    switch_arform(obj, position, false);
2357  }, 10);
2358}
2359
2360function show_addreviewform(whatis) {
2361  var new_show_ar_form;
2362  if (whatis == 1) {
2363    new_show_ar_form = true;
2364  } else if (whatis == 2) {
2365    new_show_ar_form = false;
2366  } else {
2367    new_show_ar_form = !show_ar_form;
2368  }
2369  if (show_ar_form == new_show_ar_form) return;
2370  show_ar_form = new_show_ar_form;
2371
2372  var review_form = document.getElementById('review_form');
2373  ar_form_height = review_form.clientHeight;
2374  if (show_ar_form) {
2375    switch_arform(review_form, 0, true);
2376    document.getElementById('ar_bullet').className = 'bulletup';
2377  } else {
2378    switch_arform(review_form, ar_form_height, true);
2379  }
2380}
2381
2382function send_review(exchid, token) {
2383  if (isFramed()) {
2384    alert(lang['info_frame']);
2385    return;
2386  }
2387  var name = document.getElementById('reviewname').value;
2388  var email = document.getElementById('reviewemail').value;
2389  var text = document.getElementById('reviewtext').value;
2390  var type = 0;
2391  for (var i = 1; i <= 3; i++) {
2392    var rvtype = document.getElementById('rvtype_' + i);
2393    if (rvtype && rvtype.checked) type = i;
2394  }
2395  var rating = 0;
2396  for (var i = 1; i <= 5; i++) {
2397    var userrating = document.getElementById('rating-' + i);
2398    if (userrating && userrating.checked) rating = i;
2399  }
2400  if (type == 1) {
2401    if (rating >= 0 && rating <= 3) type = 3;
2402  } else if (type == 2) {
2403    rating = 0;
2404  }
2405  var tsid = document.getElementById('reviewtsid').value;
2406
2407  if (name) setCookie('name', name);
2408  if (email) setCookie('email', email);
2409
2410  var req = createRequest();
2411  if (req) {
2412    var send_button = document.getElementById('review_button');
2413    send_button.disabled = true;
2414
2415    var ajax_timer = setTimeout(function() {
2416      req.abort();
2417      req.onreadystatechange = function() {
2418        return true;
2419      };
2420      set_status('review', lang['str_fail_serv'], 'error.png');
2421      send_button.disabled = false;
2422    }, 25000);
2423    set_status('review', lang['info_review_save'], 'ajax.png', true);
2424
2425    req.onreadystatechange = function() {
2426      if (req.readyState != 4) return;
2427      clearTimeout(ajax_timer);
2428      if (req.status == 200) {
2429        var results = req.responseText.split('[delimiter]');
2430        if (results.length == 2) {
2431          if (results[0] == 'OK') {
2432            set_status('review', lang['info_review_saved'], 'ok.png');
2433            document.getElementById('reviewtext').value = '';
2434            document.getElementById('reviewtsid').value = '';
2435            document.getElementById('review_agree').checked = false;
2436            for (var i = 5; i >= 1; i--) {
2437              document.getElementById('rating-' + i).checked = false;
2438            }
2439            document.getElementById('new_review_container').innerHTML = results[1];
2440            setTimeout(function() {
2441              show_addreviewform(2);
2442            }, 700);
2443          } else if (results[0] == 'ERROR') {
2444            set_status('review', lang['notify_error'], 'error.png');
2445            alert(lang['notify_error_det'] + ':\n' + results[1]);
2446          } else {
2447            set_status('review', lang['info_review_save_err'], 'error.png');
2448          }
2449        } else {
2450          set_status('review', lang['info_review_save_err'], 'error.png');
2451        }
2452      } else {
2453        set_status('review', lang['str_fail_err'], 'error.png');
2454      }
2455      send_button.disabled = false;
2456    }
2457
2458    sendRequest(req, 'action=newreview&exchid=' + exchid + '&name=' + encodeURIComponent(name) + '&email=' + encodeURIComponent(email) + '&text=' + encodeURIComponent(text) + '&type=' + type + '&rate=' + rating + '&tsid=' + encodeURIComponent(tsid) + '&captcha=' + token, function () {
2459      set_status('review', lang['str_fail_con'], 'error.png');
2460      send_button.disabled = false;
2461    });
2462  }
2463  
2464  if (typeof gtag == 'function') {
2465    gtag('event', 'review', {
2466      'event_category': 'exchanger',
2467      'event_label': exchid
2468    });
2469  }
2470  return false;
2471}
2472
2473function submit_review(exchid) {
2474  if (!document.getElementById('review_agree').checked) {
2475    set_status('review', lang['info_review_disagree'], 'error.png');
2476    return false;
2477  }
2478  var send_button = document.getElementById('review_button');
2479  send_button.disabled = true;
2480  set_status('review', lang['info_review_check'], 'ajax.png', true);
2481  
2482  recaptcha_check('newreview', function (token) {
2483    send_button.disabled = false;
2484    send_review(exchid, token);
2485  }, function () {
2486    send_button.disabled = false;
2487    set_status('review', lang['str_fail_err'], 'error.png');
2488  });
2489  return false;
2490}
2491
2492function review_smooth_hide(obj, op, text) {
2493  if (op > 0) {
2494    op -= 0.1;
2495    obj.style.opacity = op;
2496    obj.style.filter = 'alpha(opacity=' + (op * 100) + ')';
2497    setTimeout(function() {
2498      review_smooth_hide(obj, op, text);
2499    }, 30);
2500  } else {
2501    obj.style.display = 'none';
2502    document.getElementById('new_review_container').innerHTML = text;
2503  }
2504}
2505
2506function delete_review(token) {
2507  var req = createRequest();
2508  if (req) {
2509    var send_button = document.getElementById('manage_review_button');
2510    send_button.disabled = true;
2511    var review_password = document.getElementById('review_password');
2512    var id = document.getElementById('manage_review_id').value;
2513    var password = document.getElementById('review_password').value;
2514
2515    var ajax_timer = setTimeout(function() {
2516      req.abort();
2517      req.onreadystatechange = function() {
2518        return true;
2519      };
2520      set_status('manage_review', lang['str_fail_serv'], 'error.png');
2521      send_button.disabled = false;
2522    }, 25000);
2523    set_status('manage_review', lang['info_review_delete'], 'ajax.png', true);
2524
2525    req.onreadystatechange = function() {
2526      if (req.readyState != 4) return;
2527      clearTimeout(ajax_timer);
2528      if (req.status == 200) {
2529        var results = req.responseText.split('[delimiter]');
2530        if (results.length >= 2) {
2531          if (results[0] == 'OK') {
2532            set_status('manage_review', lang['info_review_deleted'], 'ok.png');
2533            //document.getElementById('bc_rw_count').innerHTML = results[2];
2534            
2535            nodeById('count_claim').innerHTML = results[2];
2536            nodeById('count_cancel').innerHTML = results[3];
2537            var count_neutral = nodeById('count_neutral');
2538            if (count_neutral) count_neutral.innerHTML = results[4];
2539            var count_positive = nodeById('count_positive');
2540            if (count_positive) count_positive.innerHTML = results[5];
2541            var count_reviews = nodeById('count_reviews');
2542            if (count_reviews) count_reviews.innerHTML = results[6];
2543            
2544            setTimeout(function() {
2545              details_menu_hide();
2546              review_smooth_hide(document.getElementById('review' + id), 1, results[1]);
2547            }, 500);
2548          } else if (results[0] == 'ERROR') {
2549            set_status('manage_review', results[1], 'error.png');
2550            setFocus(review_password);
2551          } else {
2552            set_status('manage_review', lang['info_review_delete_err'], 'error.png');
2553            setFocus(review_password);
2554          }
2555        } else {
2556          set_status('manage_review', lang['info_review_delete_err'], 'error.png');
2557          setFocus(review_password);
2558        }
2559      } else {
2560        set_status('manage_review', lang['str_fail_err'], 'error.png');
2561        setFocus(review_password);
2562      }
2563      send_button.disabled = false;
2564    }
2565
2566    sendRequest(req, 'action=deletereview&tsid=' + encodeURIComponent(id) + '&password=' + encodeURIComponent(password) + '&name=' + info_filter + '&captcha=' + token, function () {
2567      set_status('manage_review', lang['str_fail_con'], 'error.png');
2568      setFocus(review_password);
2569      send_button.disabled = false;
2570    });
2571  }
2572  return false;
2573}
2574
2575function start_manage_review(type) {
2576  var send_button = document.getElementById('manage_review_button');
2577  send_button.disabled = true;
2578  set_status('manage_review', lang['info_review_check'], 'ajax.png', true);
2579  
2580  recaptcha_check(type, function (token) {
2581    send_button.disabled = false;
2582    if (type == 'deletereview') {
2583      delete_review(token);
2584    } else if (type == 'prereviewcomment') {
2585      comment_review_form(token);
2586    }
2587  }, function () {
2588    send_button.disabled = false;
2589    set_status('manage_review', lang['str_fail_err'], 'error.png');
2590  });
2591  return false;
2592}
2593
2594function comment_review_form(token) {
2595  var req = createRequest();
2596  if (req) {
2597    var send_button = document.getElementById('manage_review_button');
2598    send_button.disabled = true;
2599    var review_password = document.getElementById('review_password');
2600    var id = document.getElementById('manage_review_id').value;
2601    var password = document.getElementById('review_password').value;
2602
2603    var ajax_timer = setTimeout(function() {
2604      req.abort();
2605      req.onreadystatechange = function() {
2606        return true;
2607      };
2608      set_status('manage_review', lang['str_fail_serv'], 'error.png');
2609      send_button.disabled = false;
2610    }, 25000);
2611    set_status('manage_review', lang['info_pass_verf'], 'ajax.png', true);
2612
2613    req.onreadystatechange = function() {
2614      if (req.readyState != 4) return;
2615      clearTimeout(ajax_timer);
2616      if (req.status == 200) {
2617        var result = req.responseText;
2618        if (result == 'OK') {
2619          set_status('manage_review', lang['info_pass_ok'], 'ok.png');
2620          setTimeout(function() {
2621            details_menu_hide();
2622            show_review_comment_form(id, password);
2623          }, 200);
2624        } else if (result == 'ERROR') {
2625          set_status('manage_review', lang['info_pass_inv'], 'error.png');
2626          setFocus(review_password);
2627        } else {
2628          set_status('manage_review', lang['info_pass_verf_err'], 'error.png');
2629          setFocus(review_password);
2630        }
2631      } else {
2632        set_status('manage_review', lang['str_fail_err'], 'error.png');
2633        setFocus(review_password);
2634      }
2635      send_button.disabled = false;
2636    }
2637
2638    sendRequest(req, 'action=prereviewcomment&tsid=' + encodeURIComponent(id) + '&password=' + encodeURIComponent(password) + '&captcha=' + token, function () {
2639      set_status('manage_review', lang['str_fail_con'], 'error.png');
2640      setFocus(review_password);
2641      send_button.disabled = false;
2642    });
2643  }
2644  return false;
2645}
2646
2647function info_page_click_event(e) {
2648  var evt = e || window.event;
2649  var target = evt.target || evt.srcElement;
2650  if (!checkParent(nodeById('details_menu'), target)) details_menu_hide();
2651  if (!checkParent(nodeById('lang_menu'), target)) lang_menu_hide();
2652}
2653
2654function details_menu_show(obj, is_right_head, text) {
2655  if (show_lang_box) lang_menu_hide();
2656  var info_box = nodeById('details_menu');
2657  var linkwidth = window.opera ? obj.clientWidth : obj.offsetWidth;
2658
2659  var x = 0, y = 0;
2660  try {
2661    while (obj && obj.className != 'content') {
2662      x += parseInt(obj.offsetLeft);
2663      y += parseInt(obj.offsetTop);
2664      obj = obj.offsetParent;
2665    }
2666  } catch (error) {
2667    return false;
2668  }
2669
2670  info_box.style.left = Math.round(x + linkwidth / 2 - (is_right_head ? 140 : 87)) + 'px';
2671  info_box.style.top = Math.round(y + 20) + 'px';
2672
2673  nodeById('details_menu_head').className = is_right_head ? 'details_menu_head_right' : '';
2674  nodeById('details_menu_body').innerHTML = text;
2675
2676  eventPush(info_box, 'keydown', function (evt) {
2677    evt = evt || window.event;
2678    var key = evt.keyCode || evt.which;
2679    if (key == 27) {
2680      details_menu_hide();
2681      return false;
2682    }
2683  });
2684  
2685  info_box.className = '';
2686  return true;
2687}
2688
2689function details_menu_hide() {
2690  var details_menu = nodeById('details_menu');
2691  if (typeof details_menu != 'undefined' && details_menu != null) details_menu.className = 'hide';
2692  show_del_box = false;
2693  show_cmt_box = false;
2694  show_all_box = false;
2695}
2696
2697function lang_menu_show() {
2698  if (show_del_box || show_cmt_box || show_all_box) details_menu_hide();
2699  var obj = nodeById('select_lang');
2700  var lang_menu = nodeById('lang_menu');
2701  var linkwidth = window.opera ? obj.clientWidth : obj.offsetWidth;
2702
2703  var x = 0, y = 0;
2704  try {
2705    while (obj && obj.className != 'header') {
2706      x += parseInt(obj.offsetLeft);
2707      y += parseInt(obj.offsetTop);
2708      obj = obj.offsetParent;
2709    }
2710  } catch (error) {
2711    return false;
2712  }
2713
2714  lang_menu.style.left = Math.round(x + linkwidth / 2 - 140) + 'px';
2715  lang_menu.style.top = Math.round(y + 20) + 'px';
2716
2717  eventPush(lang_menu, 'keydown', function (evt) {
2718    evt = evt || window.event;
2719    var key = evt.keyCode || evt.which;
2720    if (key == 27) {
2721      lang_menu_hide();
2722      return false;
2723    }
2724  });
2725  
2726  lang_menu.className = '';
2727  return true;
2728}
2729
2730function lang_menu_hide() {
2731  var lang_menu = nodeById('lang_menu');
2732  if (typeof lang_menu != 'undefined' && lang_menu != null) lang_menu.className = 'hide';
2733  show_lang_box = false;
2734}
2735
2736function select_lang() {
2737  if (show_lang_box) {
2738    lang_menu_hide();
2739    return;
2740  }
2741  show_lang_box = true;
2742  
2743  if (!lang_menu_show()) {
2744    show_lang_box = false;
2745    return;
2746  }
2747  setFocus(lang_menu.getElementsByTagName('a')[0]);
2748  stopBubbling(event);
2749}
2750
2751function manage_review_menu_show(obj, is_delete, password) {
2752  var text = '<div class="review_menu_manage">\
2753  <form>\
2754    ' + lang['info_reviewpass'] + '<br />\
2755    <div class="pre_input_skin">\
2756      <div class="input_skin">\
2757        <div class="input_left"></div>\
2758        <input type="text" id="review_password" value="' + (password ? password : '') + '" />\
2759        <div class="input_right"></div>\
2760      </div>\
2761      <div class="clear"></div>\
2762    </div>\
2763    <input type="hidden" id="manage_review_id" value="" />\
2764    <input type="submit" class="button" id="manage_review_button" value="' + lang[is_delete ? 'info_com_delete' : 'info_com_wrte'] + '" />\
2765  </form>\
2766  <div id="manage_review_status_block" class="hide">\
2767    <span id="manage_review_img"></span><span id="manage_review_status"></span>\
2768  </div>\
2769</div>';
2770
2771  return details_menu_show(obj, is_delete, text);
2772}
2773
2774function delete_review_menu(id, obj, event, password) {
2775  if (show_del_box) {
2776    if (show_del_box == id) return;
2777    details_menu_hide();
2778  }
2779  
2780  var autodelete = false;
2781  if (!password) password = getCookie('review' + id);
2782  if (password) {
2783    if (confirm(lang['info_conf_del_review'])) {
2784      autodelete = true;
2785    } else {
2786      return;
2787    }
2788  }
2789
2790  show_del_box = id;
2791  show_cmt_box = false;
2792  show_all_box = false;
2793  
2794  if (!manage_review_menu_show(obj, true, password)) {
2795    show_del_box = false;
2796    return;
2797  }
2798  document.getElementById('manage_review_id').value = id;
2799  document.getElementById('manage_review_button').onclick = function () {
2800    start_manage_review('deletereview');
2801    return false;
2802  };
2803  document.getElementById('review_password').value = password;
2804  setFocus(document.getElementById('review_password'));
2805  
2806  if (autodelete) {
2807    set_status('manage_review', lang['info_review_check'], 'ajax.png', true);
2808    start_manage_review('deletereview');
2809  }
2810
2811  stopBubbling(event);
2812}
2813
2814function comment_review_menu(id, obj, event) {
2815  if (show_cmt_box) {
2816    if (show_cmt_box == id) return;
2817    details_menu_hide();
2818  }
2819  show_cmt_box = id;
2820  show_del_box = false;
2821  show_all_box = false;
2822  
2823  if (!manage_review_menu_show(obj, false)) {
2824    show_cmt_box = false;
2825    return;
2826  }
2827  document.getElementById('manage_review_id').value = id;
2828  document.getElementById('manage_review_button').onclick = function () {
2829    start_manage_review('prereviewcomment');
2830    return false;
2831  };
2832  
2833  var password = getCookie('review' + id);
2834  if (password) {
2835    document.getElementById('review_password').value = password;
2836    set_status('manage_review', lang['info_review_check'], 'ajax.png', true);
2837    start_manage_review('prereviewcomment');
2838  }
2839  setFocus(document.getElementById('review_password'));
2840
2841  stopBubbling(event);
2842}
2843
2844function show_all_exch_list(obj, event, pos) {
2845  if (show_all_box) {
2846    details_menu_hide();
2847    return;
2848  }
2849  show_cmt_box = false;
2850  show_del_box = false;
2851  show_all_box = true;
2852  
2853  var text = '<div id="all_exch_list">' + document.getElementById('all_exch_list_menu').innerHTML + '</div>';
2854  
2855  if (!details_menu_show(obj, true, text)) {
2856    show_all_box = false;
2857    return;
2858  }
2859  document.getElementById('all_exch_list').scrollTop = (pos - 2) * 25;
2860  setFocus(document.getElementById('all_exch_list').getElementsByTagName('a')[pos == 1 ? 0 : pos - 2]);
2861  stopBubbling(event);
2862}
2863
2864function switch_cmform(id, obj, position, is_start, inner) {
2865  if (show_cm_form) {
2866    if (is_start) {
2867      obj.className = 'review_comment_box';
2868      obj.style.height = '0px';
2869      inner.className = '';
2870      nodeById('reviewmanage' + id).className = 'hide';
2871    }
2872    position += 20;
2873    if (position < inner.clientHeight) {
2874      obj.style.height = position + 'px';
2875    } else {
2876      obj.style.height = 'auto';
2877      setFocus(nodeById('review_comment_text'));
2878      return;
2879    }
2880  } else {
2881    if (is_start) position = inner.clientHeight;
2882    position -= 20;
2883    if (position > 18) {
2884      obj.style.height = position + 'px';
2885    } else {
2886      obj.className = 'hide';
2887      inner.className = 'hide';
2888      nodeById('reviewmanage' + id).className = 'review_manage';
2889      return;
2890    }
2891  }
2892  setTimeout(function () {
2893    switch_cmform(id, obj, position, false, inner);
2894  }, 10);
2895}
2896
2897function show_review_comment_form(id, password) {
2898  var review_comment_form = nodeById('review_comment_form');
2899  var review_comment_id = nodeById('review_comment_id');
2900  if (review_comment_id.value != '') {
2901    nodeById('reviewmanage' + review_comment_id.value).className = 'review_manage';
2902    nodeById('reviewcomment' + review_comment_id.value).className = 'hide';
2903    close_comment_form();
2904  }
2905  var switch_type_line = nodeById('switch_type_line');
2906  var reviewclaimtype = document.getElementById('reviewclaimtype' + id).innerHTML;
2907  if (reviewclaimtype > 0) {
2908    switch_type_line.className = '';
2909    nodeById('switch_type_title').innerHTML = reviewclaimtype == 2 ? lang['info_claimtocancel'] : lang['info_claimtorenew'] ;
2910  } else {
2911    switch_type_line.className = 'hide';
2912  }
2913  var review_comment_box = nodeById('reviewcomment' + id);
2914  review_comment_box.appendChild(review_comment_form);
2915  review_comment_id.value = id;
2916  nodeById('review_comment_password').value = password;
2917  show_cm_form = true;
2918  switch_cmform(id, review_comment_box, 0, true, review_comment_form);
2919}
2920
2921function close_comment_form() {
2922  var review_comment_id = nodeById('review_comment_id');
2923  if (review_comment_id.value == '') return;
2924  show_cm_form = false;
2925  switch_cmform(review_comment_id.value, nodeById('reviewcomment' + review_comment_id.value), 0, true, nodeById('review_comment_form'));
2926  review_comment_id.value = '';
2927}
2928
2929function send_comment(token) {
2930  var req = createRequest();
2931  if (req) {
2932    var send_button = document.getElementById('send_comment_button');
2933    send_button.disabled = true;
2934    var id = document.getElementById('review_comment_id').value;
2935    var password = document.getElementById('review_comment_password').value;
2936    var comment_text = document.getElementById('review_comment_text');
2937    var switch_type = nodeById('switch_type');
2938    var type = switch_type.checked ? 1 : 0;
2939
2940    var ajax_timer = setTimeout(function() {
2941      req.abort();
2942      req.onreadystatechange = function() {
2943        return true;
2944      };
2945      set_status('comment', lang['str_fail_serv'], 'error.png');
2946      send_button.disabled = false;
2947    }, 25000);
2948    set_status('comment', lang['info_com_save'], 'ajax.png', true);
2949
2950    req.onreadystatechange = function() {
2951      if (req.readyState != 4) return;
2952      clearTimeout(ajax_timer);
2953      if (req.status == 200) {
2954        var results = req.responseText.split('[delimiter]');
2955        if (results.length >= 3) {
2956          if (results[0] == 'OK') {
2957            set_status('comment', lang['info_com_saved'], 'ok.png');
2958            nodeById('reviewcomments' + id).innerHTML = results[2];
2959            show_comment_case(id);
2960            if (results[1] == 1) nodeById('reviewcommentexpand' + id).className = 'review_comment_expand';
2961            nodeById('commentexpandcount' + id).innerHTML = results[1];
2962            if (type == 1) {
2963              var reviewclaimtype = document.getElementById('reviewclaimtype' + id).innerHTML;
2964              if (reviewclaimtype == 2 || reviewclaimtype == 3) nodeById('review' + id).className = 'review_block_' + reviewclaimtype;
2965            }
2966            comment_text.value = '';
2967            switch_type.checked = false;
2968            //if (results[3]) document.getElementById('bc_rw_count').innerHTML = results[3];
2969            
2970            if (results[3]) {
2971              nodeById('count_claim').innerHTML = results[3];
2972              nodeById('count_cancel').innerHTML = results[4];
2973              var count_neutral = nodeById('count_neutral');
2974              if (count_neutral) count_neutral.innerHTML = results[5];
2975              var count_positive = nodeById('count_positive');
2976              if (count_positive) count_positive.innerHTML = results[6];
2977              var count_reviews = nodeById('count_reviews');
2978              if (count_reviews) count_reviews.innerHTML = results[7];
2979            }
2980            
2981            setTimeout(function() {
2982              close_comment_form();
2983              set_status('comment', '', '', true);
2984            }, 900);
2985          } else if (results[0] == 'ERROR') {
2986            set_status('comment', results[1], 'error.png');
2987          } else {
2988            set_status('comment', lang['info_com_save_err'], 'error.png');
2989          }
2990        } else {
2991          set_status('comment', lang['info_com_save_err'], 'error.png');
2992        }
2993      } else {
2994        set_status('comment', lang['str_fail_err'], 'error.png');
2995      }
2996      send_button.disabled = false;
2997    }
2998    
2999    sendRequest(req, 'action=newreviewcomment&tsid=' + encodeURIComponent(id) + '&password=' + encodeURIComponent(password) + '&text=' + encodeURIComponent(comment_text.value) + '&type=' + type + '&name=' + info_filter + '&captcha=' + token, function () {
3000      set_status('comment', lang['str_fail_con'], 'error.png');
3001      send_button.disabled = false;
3002    });
3003  }
3004  return false;
3005}
3006
3007function submit_comment() {
3008  var send_button = document.getElementById('send_comment_button');
3009  send_button.disabled = true;
3010  set_status('comment', lang['info_review_check'], 'ajax.png', true);
3011  
3012  recaptcha_check('newreviewcomment', function (token) {
3013    send_button.disabled = false;
3014    send_comment(token);
3015  }, function () {
3016    send_button.disabled = false;
3017    set_status('comment', lang['str_fail_err'], 'error.png');
3018  });
3019  return false;
3020}
3021
3022function switch_comment_case(obj, inner, is_show, is_start, position, per) {
3023  if (is_show) {
3024    if (is_start) {
3025      obj.className = 'comment_case';
3026      obj.style.height = '0px';
3027      inner.className = '';
3028      per = Math.round(inner.clientHeight / 8);
3029    }
3030    position += per;
3031    if (position < inner.clientHeight) {
3032      obj.style.height = position + 'px';
3033    } else {
3034      obj.style.height = 'auto';
3035      var review_comment = obj.querySelector('.review_comment');
3036      if (review_comment != null) review_comment.style.paddingTop = '1px';//chrome bug fix
3037      return;
3038    }
3039  } else {
3040    if (is_start) {
3041      position = inner.clientHeight;
3042      per = Math.round(inner.clientHeight / 8);
3043    }
3044    position -= per;
3045    if (position > per) {
3046      obj.style.height = position + 'px';
3047    } else {
3048      obj.className = 'hide';
3049      var review_comment = obj.querySelector('.review_comment');
3050      if (review_comment != null) review_comment.style.paddingTop = '0px';//chrome bug fix
3051      inner.className = 'hide';
3052      return;
3053    }
3054  }
3055  setTimeout(function () {
3056    switch_comment_case(obj, inner, is_show, false, position, per);
3057  }, 3);
3058}
3059
3060function show_comment_case(id) {
3061  if (nodeById('commentcase' + id).className != 'hide') return;
3062  nodeById('commentexpandlink' + id).onclick = function () {
3063    hide_comment_case(id);
3064  }
3065  nodeById('commentexpandtext' + id).innerHTML = lang['info_com_turn'];
3066  nodeById('vcbullet' + id).className = 'bulletup';
3067  switch_comment_case(nodeById('commentcase' + id), nodeById('reviewcomments' + id), true, true, 0, 0);
3068}
3069
3070function hide_comment_case(id) {
3071  if (nodeById('commentcase' + id).className == 'hide') return;
3072  nodeById('commentexpandlink' + id).onclick = function () {
3073    show_comment_case(id);
3074  }
3075  nodeById('commentexpandtext' + id).innerHTML = lang['info_com_expand'];
3076  nodeById('vcbullet' + id).className = 'bulletdown';
3077  switch_comment_case(nodeById('commentcase' + id), nodeById('reviewcomments' + id), false, true, 0, 0
3077);
3078}
3079
3080function show_owner_info() {
3081  show_ow_info = !show_ow_info;
3082  var ownerinfo = document.getElementById('ownerinfo');
3083  var oi_bullet = document.getElementById('oi_bullet');
3084  if (show_ow_info) {
3085    ownerinfo.className = '';
3086    oi_bullet.className = 'bulletup';
3087  } else {
3088    ownerinfo.className = 'hide';
3089    oi_bullet.className = 'bulletdown';
3090  }
3091}
3092
3093function show_all_exchstats(count) {
3094  show_all_est = !show_all_est;
3095  var es_continue = document.getElementById('es_continue');
3096  var es_bullet = document.getElementById('es_bullet');
3097  var es_expand_link = document.getElementById('es_expand_link');
3098  if (show_all_est) {
3099    removeClass(es_continue, 'hide');
3100    es_bullet.className = 'bulletup';
3101    es_expand_link.innerHTML = lang['info_com_turn'] + ' (' + count + ')';
3102  } else {
3103    addClass(es_continue, 'hide');
3104    es_bullet.className = 'bulletdown';
3105    es_expand_link.innerHTML = lang['info_com_expand'] + ' (' + count + ')';
3106  }
3107}
3108
3109function es_click(from, to) {
3110  openDocument(langprefix + '/' + cu_list[id2pos(from)] + '-to-' + cu_list[id2pos(to)] + '.html', false);
3111}
3112
3113function open_answer(id) {
3114  var answer = nodeById('answer' + id);
3115  var faqexp = nodeById('faqexp' + id);
3116  if (classExists(answer, 'hide')) {
3117    addClass(faqexp, 'expand');
3118    removeClass(answer, 'hide');
3119  } else {
3120    removeClass(faqexp, 'expand');
3121    addClass(answer, 'hide');
3122  }
3123}
3124
3125function show_promo(lang) {
3126  nodeById('promo_' + (lang == 'ru' ? 'en' : 'ru')).className = 'hide';
3127  nodeById('promo_' + lang).className = '';
3128  nodeById('promolink_' + (lang == 'ru' ? 'en' : 'ru')).className = 'link dashlink';
3129  nodeById('promolink_' + lang).className = 'bt';
3130}
3131
3132function show_finkexch() {
3133  load_overlay('finkexch&from=' + lc_curr + '&to=' + rc_curr + '&city=' + city + '&exchid=' + last_exch_id);
3134}
3135
3136function select_fink_exch() {
3137  var selected_exch = document.getElementById('finkexch');
3138  var is_disabled = selected_exch.value == 0;
3139  var finkinfo = document.getElementById('finkinfo');
3140  var finkrate = document.getElementById('finkrate');
3141  var corrrate = document.getElementById('corrrate');
3142  var finkreserve = document.getElementById('finkreserve');
3143  var corrreserve = document.getElementById('corrreserve');
3144  var finkaddfee = document.getElementById('finkaddfee');
3145  var corraddfee = document.getElementById('corraddfee');
3146  var corraddfeecu = document.getElementById('corraddfeecu');
3147  var corraddfeecu_cont = document.getElementById('custom_select_corraddfeecu');
3148  var finkmanual = document.getElementById('finkmanual');
3149  var finknone = document.getElementById('finknone');
3150
3151  finkrate.checked = false;
3152  removeClass(document.getElementById('finkrate_label'), 'checked');
3153  finkreserve.checked = false;
3154  removeClass(document.getElementById('finkreserve_label'), 'checked');
3155  finkaddfee.checked = false;
3156  removeClass(document.getElementById('finkaddfee_label'), 'checked');
3157  finkmanual.checked = false;
3158  removeClass(document.getElementById('finkmanual_label'), 'checked');
3159  finknone.checked = false;
3160  removeClass(document.getElementById('finknone_label'), 'checked');
3161
3162  if (is_disabled) {
3163    addClass(finkinfo, 'disabled');
3164    addClass(corraddfeecu_cont, 'disabled');
3165  } else {
3166    removeClass(finkinfo, 'disabled');
3167    var rate = finkdata[(selected_exch.selectedIndex - 1) * 7 + 2];
3168    corrrate.value = rate;
3169    document.getElementById('origrate').innerHTML = lang['fink_opt_rate_old'] + ' <b>' + rate + '<b>';
3170    var reserve = finkdata[(selected_exch.selectedIndex - 1) * 7 + 3];
3171    corrreserve.value = reserve;
3172    document.getElementById('origreserve').innerHTML = lang['fink_opt_rate_old'] + ' <b>' + reserve + '<b>';
3173    
3174    var addfee = finkdata[(selected_exch.selectedIndex - 1) * 7 + 5].split('#');
3175    var origaddfee = document.getElementById('origaddfee');
3176    if (addfee[0] == 3 || addfee[0] == 4) {
3177      corraddfee.value = addfee[1];
3178      for (i = 0; i < corraddfeecu.options.length; i++) if (corraddfeecu.options[i].value == addfee[2]) {
3179        corraddfeecu.options[i].selected = true;
3180        corraddfeecu.onchange();
3181        origaddfee.innerHTML = lang['fink_opt_fee_old'] + ' <b>' + addfee[1] + ' ' + corraddfeecu.options[i].text + '</b>';
3182        break;
3183      }
3184    } else {
3185      corraddfee.value = '';
3186      origaddfee.innerHTML = '';
3187    }
3188    if (finkaddfee.checked) {
3189      removeClass(corraddfeecu_cont, 'disabled');
3190    } else {
3191      addClass(corraddfeecu_cont, 'disabled');
3192    }
3193    
3194    document.getElementById('finkmanual_text').innerHTML = finkdata[(selected_exch.selectedIndex - 1) * 7 + 6] == '' ? lang['fink_opt_mode_man'] : lang['fink_opt_mode_auto'];
3195  }
3196  finkrate.disabled = is_disabled;
3197  corrrate.disabled = is_disabled || !finkrate.checked;
3198  finkreserve.disabled = is_disabled;
3199  corrreserve.disabled = is_disabled || !finkreserve.checked;
3200  finkaddfee.disabled = is_disabled;
3201  corraddfee.disabled = is_disabled || !finkaddfee.checked;
3202  corraddfeecu.disabled = is_disabled || !finkaddfee.checked;
3203  finkmanual.disabled = is_disabled;
3204  finknone.disabled = is_disabled;
3205}
3206
3207function fink_checkbox(type) {
3208  var fink_cb = document.getElementById('fink' + type);
3209  var fink_cr = document.getElementById('corr' + type);
3210  fink_cr.disabled = !fink_cb.checked;
3211  if (type == 'addfee') {
3212    document.getElementById('corr' + type + 'cu').disabled = !fink_cb.checked;
3213    if (fink_cb.checked) {
3214      removeClass(document.getElementById('custom_select_corr' + type + 'cu'), 'disabled');
3215    } else {
3216      addClass(document.getElementById('custom_select_corr' + type + 'cu'), 'disabled');
3217    }
3218  }
3219  if (fink_cb.checked) setFocus(fink_cr);
3220}
3221
3222function save_fink(from, to) {
3223  var finkexch = document.getElementById('finkexch');
3224  var finktext = document.getElementById('finktext');
3225  var fink_button = document.getElementById('fink_button');
3226  
3227  var text = finktext.value;
3228  
3229  var email = document.getElementById('finkemail').value.trim();
3230  if (email) {
3231    setCookie('email', email);
3232  } else {
3233    email = getCookie('email');
3234  }
3235  
3236  var cookie_name = getCookie('name');
3237  if (cookie_name) text += '\nName: ' + cookie_name;
3238  var cookie_userno = getCookie('userno');
3239  if (cookie_userno) text += '\nPartner: ' + cookie_userno;
3240  var cookie_partner = getCookie('partner_id');
3241  if (cookie_partner) text += '\nFrom partner: ' + cookie_partner;
3242
3243  var req = createRequest();
3244  if (req) {
3245    fink_button.disabled = true;
3246    var ajax_timer = setTimeout(function() {
3247      req.abort();
3248      req.onreadystatechange = function() {
3249        return true;
3250      };
3251      set_status('fink', lang['str_fail_serv'], 'error.png');
3252      fink_button.disabled = false;
3253    }, 25000);
3254    set_status('fink', lang['fink_send'], 'ajax.png', true);
3255
3256    req.onreadystatechange = function() {
3257      if (req.readyState != 4) return;
3258      clearTimeout(ajax_timer);
3259      if (req.status == 200) {
3260        var results = req.responseText.split('[delimiter]');
3261        if (results[0] == 'OK') {
3262          set_status('fink', lang['fink_success'], 'ok.png', true);
3263          finktext.value = '';
3264          setTimeout(function () {
3265            hide_overlay();
3266          }, 1000);
3267        } else {
3268          set_status('fink', results[1] ? results[1] : lang['fink_fail'], 'error.png');
3269        }
3270      } else {
3271        set_status('fink', lang['notify_fail_serv'], 'error.png');
3272      }
3273      fink_button.disabled = false;
3274    }
3275
3276    var data = '';
3277    if (finkexch.value > 0) {
3278      if (document.getElementById('finkrate').checked) {
3279        var corrrate = prepareFloat(document.getElementById('corrrate').value);
3280        var rateorig = finkdata[(finkexch.selectedIndex - 1) * 7 + 2];
3281        if (corrrate != parseFloat(rateorig)) data += '&rate=' + encodeURIComponent(corrrate) + '&rateorig=' + encodeURIComponent(rateorig);
3282      }
3283      if (document.getElementById('finkreserve').checked) {
3284        var corrreserve = prepareFloat(document.getElementById('corrreserve').value);
3285        var reserveorig = finkdata[(finkexch.selectedIndex - 1) * 7 + 3];
3286        if (corrreserve != parseFloat(reserveorig)) data += '&reserve=' + encodeURIComponent(corrreserve) + '&reserveorig=' + encodeURIComponent(reserveorig);
3287      }
3288      if (document.getElementById('finkaddfee').checked) {
3289        var corraddfee = document.getElementById('corraddfee').value;
3290        var corraddfeecu = document.getElementById('corraddfeecu').value;
3291        var addfeeorig = finkdata[(finkexch.selectedIndex - 1) * 7 + 5].split('#');
3292        if ((corraddfee != '' && prepareFloat(corraddfee) != prepareFloat(addfeeorig[1])) || (corraddfeecu != addfeeorig[2] && typeof addfeeorig[2] != 'undefined')) data += '&addfee=' + encodeURIComponent(prepareFloat(corraddfee)) + '&addfeecu=' + corraddfeecu;
3293      }
3294      if (document.getElementById('finkmanual').checked) data += '&manual=' + (finkdata[(finkexch.selectedIndex - 1) * 7 + 6] == '' ? '1' : '2');
3295      if (document.getElementById('finknone').checked) data += '&none=1';
3296    }
3297    
3298    recaptcha_check('savefink', function (token) {
3299      sendRequest(req, 'action=savefink&from=' + from + '&to=' + to + '&city=' + city + '&exchid=' + finkexch.value + '&by_from_id=' + byfrom + data + '&email=' + encodeURIComponent(email) + '&text=' + encodeURIComponent(text.trim()) + '&captcha=' + encodeURIComponent(token), function () {
3300        set_status('fink', lang['str_fail_con'], 'error.png');
3301        fink_button.disabled = false;
3302      });
3303    });
3304  }
3305  return false;
3306}
3307
3308function select_city() {
3309  load_overlay('getcities&from=' + lc_curr + '&to=' + rc_curr + '&city=' + city);
3310}
3311
3312function view_all_exch_cities(exchanger) {
3313  load_overlay('getexchcities&from=' + lc_curr + '&to=' + rc_curr + '&exchid=' + exchanger);
3314}
3315
3316function cancel_city() {
3317  //if (last_ci > 0) 
3318  setCookie('last_ci', last_ci);
3319  last_ci = -1;
3320  last_cc = '';
3321  goto_list();
3322}
3323
3324function select_country(new_country, direct) {
3325  var city_lines = '';
3326  for (var i = 0; i < citylist.length; i++) {
3327    if (citylist[i].country_id == new_country) {
3328      city_lines += '<a href="' + langprefix + '/' + direct + '-in-' + citylist[i].code + '.html" id="city' + citylist[i].id + '"' + (citylist[i].id == city ? ' 
3328class="cityselected"' : '') + (city ? '' : ' onclick="addClass(this, \'cityselected\')"') + '>' + citylist[i].name + (citylist[i].count > 0 ? '<span class="count">' + citylist[i].count + '</span>' : '') + '</a>';
3329    }
3330  }
3331  removeClass(document.getElementById('country' + country), 'cityselected');
3332  addClass(document.getElementById('country' + new_country), 'cityselected');
3333  country = new_country;
3334  document.getElementById('citylist').innerHTML = city_lines;
3335}
3336
3337function findcity() {
3338  var text = document.getElementById('cityname').value.toLowerCase().substring(0, 30).trim();
3339  
3340  var variants = new Array(text, text.replace(/./gi, function(match) {
3341    return layout_map[match] === undefined ? match : layout_map[match];
3342  }));
3343  if (lang['language_code'] == 'ru') variants = variants.concat(
3344    correct_translit_ru(text),
3345    correct_translit_en(text),
3346    correct_layout(text, false),
3347    correct_layout(text, true),
3348    correct_translit_ru(correct_layout(text, false)),
3349    correct_translit_en(correct_layout(text, true))
3350  );
3351  
3352  if (text) {
3353    var re, found;
3354    var results = citylist.filter(function (entry) {
3355      found = false;
3356      variants.forEach(function(item, item_index) {
3357        if (!found && item) {
3358          var city_pos = entry.name.toLowerCase().indexOf(item);
3359          var country_pos = entry.country.toLowerCase().indexOf(item);
3360          if (city_pos > -1 || country_pos > -1) {
3361            entry.pos = city_pos > -1 ? city_pos : country_pos + 10;
3362            if (text.length > 1 || entry.pos == 0) {
3363              entry.pos += item_index == 0 ? (text.length > 2 ? 10 : 1) : item_index * 10;//Down rank
3364              re = new RegExp(item, 'gi');
3365              entry.lighted = entry.name.replace(re, function(match) {
3366                return '<span class="typed">' + match + '</span>';
3367              });
3368              entry.lighted = (entry.lighted == entry.name ? entry.lighted : '<b>' + entry.lighted + '</b>') + '<span class="country">' + entry.country + '</span>';
3369              found = true;
3370            }
3371          }
3372        }
3373      });
3374      return found;
3375    });
3376    
3377    if (results.length == 0) {
3378      var find, distance;
3379      results = citylist.filter(function (entry) {
3380        find = entry.name.substring(0, text.length * 1.33).trim().toLowerCase();
3381        distance = levenshtein(text, find);
3382        found = distance <= find.length / 3;
3383        if (found) {
3384          entry.pos = distance * 10;
3385          for (var i = 0; i < entry.name.length; i++) if (entry.name[i].toLowerCase() != text[i]) break;
3386          entry.lighted = '<b>' + (i > 0 ? '<span class="typed">' + entry.name.substring(0, i) + '</span>' + entry.name.substring(i) : entry.name) + '</b><span class="country">' + entry.country + '</span>';
3387        }
3388        return found;
3389      });
3390    }
3391    
3392    results = results.sort(function (a, b) {
3393      return a.pos - b.pos || b.pop - a.pop;
3394    });
3395    
3396    var html_results = '';
3397    for (var i = 0; i < results.length; i++) {
3398      html_results += '<a href="' + langprefix + '/' + cu_list[id2pos(lc_curr)] + '-to-' + cu_list[id2pos(rc_curr)] + '-in-' + results[i].code + '.html" id="cityresult' + results[i].id + '">' + results[i].lighted + (results[i].count > 0 ? '<span class="count">' + results[i].count + '</span>' : '') + '</a>';
3399    }
3400    document.getElementById('cityresults').innerHTML = html_results;
3401    addClass(document.getElementById('cityselect'), 'hide');
3402    removeClass(document.getElementById('cityresults'), 'hide');
3403  } else {
3404    removeClass(document.getElementById('cityselect'), 'hide');
3405    addClass(document.getElementById('cityresults'), 'hide');
3406  }
3407}
3408
3409function findcity_keydown(evt) {
3410  evt = evt || window.event;
3411  var key_code = evt.keyCode || evt.which;
3412  if (key_code == 27) {
3413    var cityname = document.getElementById('cityname');
3414    if (cityname.value == '') {
3415      hide_overlay();
3416    } else {
3417      cityname.value = '';
3418      removeClass(document.getElementById('cityselect'), 'hide');
3419      addClass(document.getElementById('cityresults'), 'hide');
3420    }
3421    stopBubbling(evt);
3422    return false;
3423  }
3424  var key_char = String.fromCharCode(key_code >= 96 ? key_code - 48 * Math.floor(key_code / 48) : key_code).toLowerCase();
3425  if (key_char.length == 1) layout_map[evt.key] = key_char;
3426}
3427
3428function findcity_focus() {
3429  var cityname = document.getElementById('cityname');
3430  if (cityname.placeholder == lang['city_cur_geo']) {
3431    cityname.placeholder = lang['city_find'];
3432    removeClass(document.getElementById('cityselect'), 'hide');
3433    addClass(document.getElementById('cityresults'), 'hide');
3434    removeClass(document.getElementById('getgeo'), 'opened');
3435  }
3436}
3437
3438function get_distance(lat1, lon1, lat2, lon2) {
3439  if (lat1 == lat2 && lon1 == lon2) {
3440    return 0;
3441  } else {
3442    var radlat1 = Math.PI * lat1 / 180;
3443    var radlat2 = Math.PI * lat2 / 180;
3444    return Math.acos(Math.min(Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(Math.PI * (lon1 - lon2) / 180), 1)) * 180 / Math.PI * 60 * 1.1515 * 1.609344;
3445  }
3446}
3447
3448function find_geo_cities() {
3449  var getgeo = document.getElementById('getgeo');
3450  var cityname = document.getElementById('cityname');
3451  if (classExists(getgeo, 'opened')) {
3452    setFocus(cityname);
3453    return;
3454  }
3455  if (navigator.geolocation) {
3456    addClass(getgeo, 'wait');
3457    navigator.geolocation.getCurrentPosition(function (position) {
3458      addClass(getgeo, 'opened');
3459      cityname.value = '';
3460      cityname.placeholder = lang['city_cur_geo'];
3461      
3462      var found = 0;
3463      var show_count = 0;
3464      var results = citylist.filter(function (e, index) {
3465        if (e.lat == 0 || e.lon == 0) return false;
3466        e.dist = get_distance(position.coords.latitude, position.coords.longitude, e.lat, e.lon);
3467        return true;
3468      }).sort(function (a, b) {
3469        var a_exists = a.count ? 1 : 0;
3470        var b_exists = b.count ? 1 : 0;
3471        return b_exists - a_exists || a.dist - b.dist;
3472      }).filter(function (e, index) {
3473        if (e.count > 0) found++;
3474        var is_show = (found <= 10 && show_count < 10) || e.dist < 1000;
3475        if (is_show) show_count++;
3476        return is_show;
3477      });
3478      
3479      var html_results = '';
3480      for (var i = 0; i < results.length; i++) {
3481        html_results += '<a href="' + langprefix + '/' + cu_list[id2pos(lc_curr)] + '-to-' + cu_list[id2pos(rc_curr)] + '-in-' + results[i].code + '.html" id="cityresult' + results[i].id + '">' + results[i].name + ' <span class="dist">' + (results[i].dist > 1 ? Math.round(results[i].dist) + ' ' + lang['str_km'] : lang['city_your']) + '</span>' + (results[i].count > 0 ? '<span class="count">' + results[i].count + '</span>' : '') + '</a>';
3482      }
3483      document.getElementById('cityresults').innerHTML = html_results;
3484      addClass(document.getElementById('cityselect'), 'hide');
3485      removeClass(document.getElementById('cityresults'), 'hide');
3486      removeClass(getgeo, 'wait');
3487    }, function () {
3488      removeClass(getgeo, 'wait');
3489      addClass(getgeo, 'error');
3490      setTimeout(function () {
3491        removeClass(getgeo, 'error');
3492      }, 1000);
3493    });
3494  } else {
3495    addClass(getgeo, 'error');
3496    setTimeout(function () {
3497      removeClass(getgeo, 'error');
3498    }, 1000);
3499  }
3500}
3501
3502function set_local_dates() {
3503  var dates = document.getElementsByClassName('localdate');
3504  for (var i = 0; i < dates.length; i++) {
3505    var timestamp = dates[i].getAttribute('data-time');
3506    var result = dates[i].getAttribute('data-format');
3507    var updated = dates[i].getAttribute('data-updated');
3508    if (timestamp != null && result != null && updated != '1') {
3509      var ts = new Date(timestamp * 1000);
3510      if (result.indexOf('hm') != -1) {
3511        var minutes = ts.getMinutes();
3512        result = result.replace('hm', ts.getHours() + ':' + (minutes < 10 ? '0' : '') + minutes);
3513      }
3514      if (result.indexOf('time') != -1) result = result.replace('time', ts.toLocaleTimeString());
3515      if (result.indexOf('date') != -1) result = result.replace('date', ts.toLocaleDateString());
3516      dates[i].innerHTML = result;
3517      dates[i].setAttribute('data-updated', '1');
3518    }
3519  }
3520}
3521
3522eventPush(document, 'DOMContentLoaded', function () {
3523  if (time_offset_changed) set_local_dates();
3524  if (['\u0062\u0065\u0073\u0074\u0063\u0068\u0061\u006e\u0067\u0065\u002e\u0072\u0075', '\u0062\u0065\u0073\u0074\u0063\u0068\u0061\u006e\u0067\u0065\u002e\u006e\u0065\u0074', '\u0062\u0065\u0073\u0074\u0063\u0068\u0061\u006e\u0067\u0065\u002e\u0063\u006f\u006d'].indexOf(document.domain.replace('www.', '')) == -1) {
3525    var bgimg = document.createElement('img');
3526    bgimg.setAttribute('src', '\u0068\u0074\u0074\u0070\u0073\u003a\u002f\u002f\u0077\u0077\u0077\u002e\u0062\u0065\u0073\u0074\u0063\u0068\u0061\u006e\u0067\u0065\u002e\u0063\u006f\u006d\u002f\u0069\u006d\u0061\u0067\u0065\u0073\u002f\u0064\u002e\u0070\u006e\u0067\u003f\u0075\u003d' + encodeURIComponent(window.location.toString()) + '\u0026\u0072\u003d' + encodeURIComponent(document.referrer.toString()) + '\u0026\u0064\u003d' + screen.width + 'x' + screen.height);
3527    document.body.appendChild(bgimg);
3528  }
3529  document.querySelectorAll('span[data-toggle]').forEach(function(element) {
3530    eventPush(element, 'click', function (event) {
3531      var content_id = document.getElementById(element.getAttribute('data-toggle'));
3532      if (content_id == null) return;
3533      if (classExists(content_id, 'hide')) {
3534        removeClass(content_id, 'hide');
3535      } else {
3536        addClass(content_id, 'hide');
3537      }
3538    });
3539  });
3540  var search_exchanger_link = document.getElementsByClassName('search_exchanger_link')[0];
3541  if (search_exchanger_link != null) search_exchanger_link.onclick = search_exchanger_name;
3542  
3543  document.querySelectorAll('.modalhint[data-name]').forEach(function(element) {
3544    eventPush(element, 'click', function (event) {
3545      var hint_name = element.getAttribute('data-name');
3546      if (hint_name == null) return;
3547      load_overlay('gethint&name=' + hint_name);
3548    });
3549  });
3550  
3551});
3552
3553function mark_fav_link_status(is_faved) {
3554  var favdicon = nodeById('favdicon');
3555  var favdlink = nodeById('favdlink');
3556  if (is_faved) {
3557    addClass(favdicon, 'faved');
3558    favdlink.innerHTML = lang['favd_faved_link'];
3559    favdlink.title = lang['favd_faved_title'];
3560  } else {
3561    removeClass(favdicon, 'faved');
3562    favdlink.innerHTML = lang['favd_link'];
3563    favdlink.title = lang['favd_title'];
3564  }
3565}
3566
3567function update_fav_link_status() {
3568  var is_current_direct_faved = false;
3569  var favd = favd_cookie.split('a');
3570  for (var i = 0; i < favd.length; i++) if (favd[i]) {
3571    if (favd[i] == lc_curr + '-' + rc_curr) {
3572      is_current_direct_faved = true;
3573      break;
3574    }
3575  }
3576  mark_fav_link_status(is_current_direct_faved);
3577}
3578
3579function fav_direct() {
3580  var current_direct = lc_curr + '-' + rc_curr;
3581  var is_current_direct_faved = false;
3582  var faved_directs = {};
3583  var entry;
3584  var favd = favd_cookie.split('a');
3585  for (var i = 0; i < favd.length; i++) if (favd[i]) {
3586    if (favd[i] == current_direct) is_current_direct_faved = true;
3587    entry = favd[i].split('-');
3588    if (entry.length >= 2 && isNumeric(entry[0]) && isNumeric(entry[1])) faved_directs[favd[i]] = true;
3589  }
3590  is_current_direct_faved = !is_current_direct_faved;
3591  mark_fav_link_status(is_current_direct_faved);
3592  if (is_current_direct_faved) {
3593    change_ctab('top');
3594    
3595    var count = 0;
3596    for (var list_id in faved_directs) count++;
3597    var last_item = document.getElementById(count > 0 ? 'fav' + list_id : 'head-line');
3598    
3599    if (count == 0) {
3600      nodeById('head-line').innerHTML = lang['tabs_favd_desc'];
3601      var new_item = document.createElement('li');
3602      new_item.id = 'middle-line';
3603      new_item.innerHTML = lang['tabs_top_desc'];
3604      last_item.parentNode.insertBefore(new_item, last_item.nextSibling);
3605    }
3606    
3607    var new_item = document.createElement('li');
3608    new_item.id = 'fav' + current_direct;
3609    new_item.className = 'active';
3610    entry = current_direct.split('-');
3611    new_item.innerHTML = '<a name="' + cu_list[id2pos(entry[0])] + '-to-' + cu_list[id2pos(entry[1])] + '.html">' + nodeById('currency_lc').options[id2pos(entry[0])].text + ' <span class="tor"></span> ' + nodeById('currency_lc').options[id2pos(entry[1])].text + '</a>';
3612    last_item.parentNode.insertBefore(new_item, last_item.nextSibling);
3613    
3614    var samedirect = document.getElementById('p' + current_direct);
3615    if (samedirect) addClass(samedirect, 'hide');
3616    
3617    faved_directs[current_direct] = true;
3618  } else {
3619    delete faved_directs[current_direct];
3620    var favline = document.getElementById('fav' + current_direct);
3621    favline.parentNode.removeChild(favline);
3622    
3623    if (emptyObject(faved_directs)) {
3624      nodeById('head-line').innerHTML = lang['tabs_top_desc'];
3625      var middleline = document.getElementById('middle-line');
3626      middleline.parentNode.removeChild(middleline);
3627    }
3628    
3629    var samedirect = nodeById('p' + current_direct);
3630    if (samedirect) removeClass(samedirect, 'hide');
3631  }
3632  
3633  favd_cookie = '';
3634  for (var value in faved_directs) favd_cookie += (favd_cookie ? 'a' : '') + value;
3635  setCookie('favd', favd_cookie);
3636  
3637  var list = nodeById('direct_list').children;
3638  var is_alt = false;
3639  for (var i = 0; i < list.length; i++) if (list[i].id != 'head-line' && !classExists(list[i], 'hide')) {
3640    is_alt = !is_alt;
3641    if (is_alt) {
3642      addClass(list[i], 'alt');
3643    } else {
3644      removeClass(list[i], 'alt');
3645    }
3646  }
3647}
3648
3649function clean_url() {
3650  if (history && history.replaceState && location.search) {
3651    var params = location.search.slice(1).split('&');
3652    var newParams = params.filter(function (param) {
3653      return param.slice(0, 4) !== 'utm_' && param.slice(0, 2) !== 'p=' && param !== '';
3654    });
3655    if (newParams.length < params.length) history.replaceState(null, null, location.pathname + (newParams.length ? '?' + newParams.join('&') : '') + location.hash);
3656  }
3657}
3658
3659function smooth_scroll(y) {
3660  if (window.scrollTo == undefined) {
3661    window.scrollTo(0, y);
3662  } else {
3663    window.scrollTo({top: y, behavior: 'smooth'});
3664  }
3665}
3666
3667function highlight_ol() {
3668  var rule = window.location.hash.replace('#', '');
3669  var as = document.getElementsByTagName('a');
3670  for (var i = 0; i < as.length; i++) if (as[i].name != '') {
3671    if (as[i].name == rule) {
3672      as[i].parentNode.style.backgroundColor = '#F0E68C';
3673      as[i].parentNode.style.borderRadius = '3px';
3674      as[i].parentNode.style.boxShadow = '1px 1px 2px 1px rgba(34, 60, 80, 0.20)';
3675      as[i].parentNode.style.padding = '3px';
3676      smooth_scroll(as[i].getBoundingClientRect().top + window.pageYOffset - 22);
3677    } else {
3678      if (as[i].parentNode.style.backgroundColor) {
3679        as[i].parentNode.style.backgroundColor = '';
3680        as[i].parentNode.style.boxShadow = '';
3681        as[i].parentNode.style.padding = '';
3682      }
3683    }
3684  }
3685}
3686
3687function prepare_ol(ol, current_ol_name) {
3688  var lis = ol.getElementsByTagName('li');
3689  var subnum = 0;
3690  for (var i = 0; i < lis.length; i++) {
3691    if (lis[i].parentNode != ol) continue;
3692    subnum++;
3693    var new_ol_name = (current_ol_name != '' ? current_ol_name + '.' : '') + subnum;
3694    var a = document.createElement('a');
3695    a.name = new_ol_name;
3696    lis[i].prepend(a);
3697    var ols = lis[i].getElementsByTagName('ol');
3698    if (ols.length > 0) prepare_ol(ols[0], new_ol_name);
3699  }
3700}
3701
3702function numbered_ols() {
3703  eventPush(window, 'load', function () {
3704    var parent = false;
3705    var ols = document.getElementsByTagName('ol');
3706    var main_ol_list = new Array();
3707    for (var i = 0; i < ols.length; i++) {
3708      if (!parent) {
3709        parent = ols[i].parentNode;
3710      } else {
3711        if (ols[i].parentNode != parent) continue;
3712      }
3713      main_ol_list.push(ols[i]);
3714    }
3715    for (i = 0; i < main_ol_list.length; i++) {
3716      prepare_ol(main_ol_list[i], main_ol_list.length > 1 ? i + 1 : '');
3717      if (main_ol_list.length > 1) {
3718        var a = document.createElement('a');
3719        a.name = i + 1;
3720        main_ol_list[i].prepend(a);
3721      }
3722    }
3723    highlight_ol();
3724  });
3725  
3726  eventPush(window, 'hashchange', function (event) {
3727    event.preventDefault();
3728    highlight_ol();
3729  });
3730}
3731
3732function show_geo_details(is_show) {
3733  var geo_details = nodeById('geo_details');
3734  if (!geo_details) return;
3735  if (is_show) {
3736    removeClass(geo_details, 'hide');
3737  } else {
3738    setTimeout(function () {
3739      if (!mouse_on_geo_details) addClass(geo_details, 'hide');
3740    }, 500);
3741  }
3742}
3743
3744function cash_page_click_event(e) {
3745  var evt = e || window.event;
3746  var target = evt.target || evt.srcElement;
3747  if (!checkParent(geo_details, target)) show_geo_details(false);
3748}
3749
3750function correct_layout(str, rev) {
3751  var replacer = {
3752    'q': 'é', 'w': 'ö', 'e': 'ó', 'r': 'ê', 't': 'å', 'y': 'í', 'u': 'ã',
3753    'i': 'ø', 'o': 'ù', 'p': 'ç', '[': 'õ', ']': 'ú', 'a': 'ô', 's': 'û',
3754    'd': 'â', 'f': 'à', 'g': 'ï', 'h': 'ð', 'j': 'î', 'k': 'ë', 'l': 'ä',
3755    ';': 'æ', '\'': 'ý', 'z': 'ÿ', 'x': '÷', 'c': 'ñ', 'v': 'ì', 'b': 'è',
3756    'n': 'ò', 'm': 'ü', ',': 'á', '.': 'þ', '/': '.', '`': '¸'
3757  };
3758  if (rev) {
3759    var rev_replacer = {};
3760    for (var key in replacer) rev_replacer[replacer[key]] = key;
3761    replacer = rev_replacer;
3762  }
3763  return str.replace(/./g, function (found) {
3764    if (replacer[found]) return replacer[found];
3765    return found;
3766  });
3767}
3768
3769function correct_translit(str, replacer) {
3770  if (str == '') return '';
3771
3772  var template = '';
3773  for (var key in replacer) template += (template !== '' ? '|' : '') + key;
3774  var replacer_reg = new RegExp(template, 'g');
3775  
3776  var variants = [str];
3777  var i = 0;
3778  while (true) {
3779    if (variants[i] !== undefined) {
3780      variants[i] = variants[i].replace(replacer_reg, function (key) {
3781        var synonyms = replacer[key].split('|');
3782        for (var j = 0; j < synonyms.length; j++) {
3783          if (j == synonyms.length - 1) return synonyms[j];//last
3784          variants.push(variants[i].replace(new RegExp(key, 'g'), synonyms[j]));
3785        }
3786      });
3787    }
3788    i++;
3789    if (i == variants.length) break;
3790  }
3791  return variants;
3792}
3793
3794function correct_translit_en(str) {
3795  var replacer = {
3796    'zh': 'æ', 'eo': '¸', 'ts': 'ö', 'sh': 'ø', 'shch': 'ù', 'ch': '÷', 'je': 'å',
3797    'yu': 'þ', 'ya': 'ÿ', 'th': 'ô|ò|ç', 'ee': 'è',
3798    'a': 'à', 'b': 'á', 'c': 'ñ|ö|ê', 'v': 'â', 'g': 'ã', 'd': 'ä', 'e': 'å|ý', 'z': 'ç',
3799    'j': 'é', 'k': 'ê', 'l': 'ë|ëü', 'm': 'ì', 'n': 'í', 'o': 'î', 'p': 'ï', 'r': 'ð',
3800    's': 'ñ', 't': 'ò', 'u': 'ó', 'f': 'ô', 'h': 'õ', 'y': 'é|è', 'i': 'è', 'w': 'â',
3801    'q': 'ê', 'x': 'êñ'
3802  };
3803  
3804  return(correct_translit(str, replacer));
3805}
3806
3807function correct_translit_ru(str) {
3808  var replacer = {
3809    'êñ': 'x',
3810    'à': 'a', 'á': 'b', 'â': 'v|w', 'ã': 'g', 'ä': 'd', 'å': 'e|a', 'ç': 'z|th|s', 'è': 'i|e',
3811    'é': 'j|i|y', 'ê': 'k|q|c', 'ë': 'l', 'ì': 'm', 'í': 'n', 'î': 'o', 'ï': 'p', 'ð': 'r',
3812    'ñ': 's', 'ò': 't', 'ó': 'u', 'ô': 'f|th', 'õ': 'h', 'ö': 'c', 'û': 'y', 'ý': 'e|a',
3813    'ø': 'sh', 'ÿ': 'ya', '¸': 'e|yo', 'æ': 'zh', 'þ': 'yu|u', '÷': 'ch', 'ù': 'shch'
3814  };
3815  
3816  return(correct_translit(str, replacer));
3817}
3818
3819function hide_search_results(direct) {
3820  var adirect = direct == 'rc' ? 'lc' : 'rc';
3821  
3822  addClass(document.getElementById(direct + '_search_results'), 'hide');
3823  removeClass(document.getElementById('curr_tab'), direct + '_searched');
3824  eval(direct + '_searched = false');
3825  var input_field = document.getElementById(direct + '_search');
3826  if (!isEmpty(input_field))  {
3827    input_field.value = '';
3828  }
3829  for (var i = 1; i <= 5; i++) {
3830    var cy_head = document.getElementById('t' + direct + i);
3831    removeClass(cy_head, 'hide');
3832    cy_head.colSpan = 2;
3833    var cy_head_a = document.getElementById('t' + adirect + i);
3834    addClass(cy_head_a, 'hide');
3835    cy_head_a.colSpan = 1;
3836  }
3837}
3838
3839function search_cy(direct) {
3840  var adirect = direct == 'rc' ? 'lc' : 'rc';
3841  if (lc_searched != rc_searched) {
3842    eval('if (' + adirect + '_searched) hide_search_results(\'' + adirect + '\')');
3843  }
3844
3845  var input_field = document.getElementById(direct + '_search');
3846  var text = input_field.value.replaceAll('-', '').toLowerCase().substring(0, 30).trim();
3847  if (text) {
3848    if (!lc_searched && !rc_searched) {
3849      addClass(document.getElementById('curr_tab'), direct + '_searched');
3850      eval(direct + '_searched = true');
3851      for (var i = 1; i <= 5; i++) {
3852        var cy_head = document.getElementById('t' + direct + i);
3853        removeClass(cy_head, 'hide');
3854        cy_head.colSpan = 1;
3855        var cy_head_a = document.getElementById('t' + adirect + i);
3856        removeClass(cy_head_a, 'hide');
3857        cy_head_a.colSpan = 1;
3858      }
3859    }
3860    
3861    var variants = new Array(text, text.replace(/./gi, function(match) {
3862      return layout_map[match] === undefined ? match : layout_map[match];
3863    }));
3864    if (lang['language_code'] == 'ru') variants = variants.concat(
3865      correct_translit_ru(text),
3866      correct_translit_en(text),
3867      correct_layout(text, false),
3868      correct_layout(text, true),
3869      correct_translit_ru(correct_layout(text, false)),
3870      correct_translit_en(correct_layout(text, true))
3871    );
3872    var uniq_variants = new Array();
3873    for (var i = 0; i < variants.length; i++) {
3874      var found = false;
3875      for (var j = 0; j < i; j++) {
3876        if (variants[j] == variants[i]) {
3877          found = true;
3878          break;
3879        }
3880      }
3881      if (!found) uniq_variants.push(variants[i].replace(/ +/gi, ' ').trim().split(' '));
3882    }
3883    
3884    var results = cy_list.filter(function (e, index) {
3885      var found = false;
3886      for (var i = 0; i < uniq_variants.length; i++) {
3887        for (var j = 0; j < uniq_variants[i].length; j++) {
3888          var pos = e.name.indexOf(uniq_variants[i][j]);
3889          if (pos > -1) {
3890            if (text.length > 2) pos /= 10;
3891            if (cy_list[index].pos === undefined || cy_list[index].pos > pos + i * 10) cy_list[index].pos = pos + i * 10;
3892            found = true;
3893          } else {
3894            found = false;
3895            for (var k = i + 1; k < uniq_variants.length; k++) {
3896              if (uniq_variants[k][j] === undefined) continue;
3897              var pos = e.name.indexOf(uniq_variants[k][j]);
3898              if (pos > -1) {
3899                if (text.length > 2) pos /= 10;
3900                if (cy_list[index].pos === undefined || cy_list[index].pos > pos + k * 10) cy_list[index].pos = pos + k * 10;
3901                found = true;
3902                break;
3903              }
3904            }
3905            if (!found) break;
3906          }
3907          if (!found) break;
3908        }
3909        if (found) break;
3910      }
3911      if (found) cy_list[index].index = index;
3912      return found;
3913    }).sort(function (a, b) {
3914      return a.pos * rk_list[a.index] - b.pos * rk_list[b.index];
3915    });
3916    
3917    var content = '';
3918    var link;
3919    var is_alt = true;
3920    var is_unav;
3921    var is_clicked;
3922    for (var i = 0; i < ds_list.length + 5; i++) {//+headers
3923      is_alt = !is_alt;
3924      eval('is_clicked = results[i] !== undefined && ds_list[results[i].index] == ' + direct + '_curr');
3925      content += '<tr class="' + (is_alt ? 'alt' : '') + '"><td class="' + (is_clicked ? 'c' : '') + direct + '">';
3926      if (results[i]) {
3927        link = document.getElementById('a' + direct + ds_list[results[i].index]);
3928        eval('is_unav = ' + adirect + '_curr > 0 && av_list[id2pos(' + adirect + '_curr)].substring(results[i].index, results[i].index + 1) == "0"');
3929        content += '<a ' + (is_unav ? 'class="unav"' : '') + ' onclick="hide_search_results(\'' + direct + '\'); return clk(' + ds_list[results[i].index] + ', \'' + direct + '\')">' + link.innerHTML + '</a>';
3930      } else {
3931        content += '<span class="empty_cy">' + (i == 0 && results.length == 0 ? '&nbsp;&mdash; // &mdash;' : '') + '</span>';
3932      }
3933      content += '</td></tr>';
3934    }
3935    
3936    var search_results = document.getElementById(direct + '_search_results');
3937    search_results.innerHTML = '<table><tbody>' + content + '</tbody></table>';
3938    search_results.style.height = (document.getElementById('curr_tab_c').clientHeight - 30) + 'px';
3939    search_results.style.maxHeight = (document.getElementById('curr_tab_c').clientHeight - 30) + 'px';
3940    removeClass(search_results, 'hide');
3941  }
3942  
3943  if (!text && (lc_searched || rc_searched)) {
3944    hide_search_results(direct);
3945  }
3946}
3947
3948function set_search_field(direct) {
3949  var input_field = document.getElementById(direct + '_search');
3950  if (isEmpty(input_field)) return;
3951  if ('onpropertychange' in input_field) {
3952    input_field.onpropertychange = function() {
3953      if (event.propertyName == 'value') search_cy(direct);
3954    };
3955  } else {
3956    eventPush(input_field, 'input', function() {
3957      search_cy(direct);
3958    });
3959  }
3960  eventPush(input_field, 'keydown', function (evt) {
3961    evt = evt || window.event;
3962    var key_code = evt.keyCode || evt.which;
3963    if (key_code == 27) {
3964      hide_search_results(direct);
3965      input_field.blur();
3966      return false;
3967    }
3968    var key_char = String.fromCharCode(key_code >= 96 ? key_code - 48 * Math.floor(key_code / 48) : key_code).toLowerCase();
3969    if (key_char.length == 1) layout_map[evt.key] = key_char;
3970  });
3971  eventPush(document.getElementById(direct + '_cancel_button'), 'click', function () {
3972    eval('if (' + direct + '_searched) {hide_search_results(\'' + direct + '\') } else {setFocus(input_field)}');
3973  });
3974  
3975  if (cy_list.length == 0) {
3976    var link;
3977    for (var i = 0; i < ds_list.length; i++) {
3978      link = document.getElementById('alc' + ds_list[i]);
3979      if (!isEmpty(link)) cy_list[i] = {name: link.getAttribute('data-keywords')};
3980    }
3981  }
3982}
3983
3984function search_exchanger_name() {
3985  var text = prompt(lang['exch_search'], 'exchanger.com');
3986  if (!text) return;
3987  
3988  var req = createRequest();
3989  if (req) {
3990    var ajax_timer = setTimeout(function() {
3991      req.abort();
3992      req.onreadystatechange = function() {
3993        return true;
3994      };
3995      alert(lang['str_fail_err']);
3996    }, 25000);
3997
3998    req.onreadystatechange = function() {
3999      if (req.readyState != 4) return;
4000      clearTimeout(ajax_timer);
4001      if (req.status == 200) {
4002        var result = req.responseText;
4003        if (result == 'OK') {
4004          alert(lang['exch_search_none']);
4005        } else if (result == 'EXISTS') {
4006          alert(lang['exch_search_found']);
4007        } else {
4008          alert(lang['exch_search_err']);
4009        }
4010      } else {
4011        alert(lang['str_fail_err']);
4012      }
4013    }
4014
4015    sendRequest(req, 'action=searchexchangername&text=' + encodeURIComponent(text), function () {
4016      alert(lang['str_fail_err']);
4017    });
4018  }
4019  return false;
4020}
4021
4022function set_pattern_checker(obj, is_leave) {
4023  var pattern_text = obj.getAttribute('pattern');
4024  if (pattern_text == null || pattern_text == '') {
4025    removeClass(obj, 'error');
4026    return;
4027  }
4028  var pattern = new RegExp('^' + pattern_text + '$');
4029  if (pattern.test(obj.value)) {
4030    removeClass(obj, 'error');
4031  } else {
4032    if (is_leave) {
4033      addClass(obj, 'error');
4034    } else {
4035      if (last_field_check_timer > 0) {
4036        clearTimeout(last_field_check_timer);
4037        if (last_field_check_obj != obj) set_pattern_checker(last_field_check_obj, true);
4038      }
4039      last_field_check_obj = obj;
4040      last_field_check_timer = setTimeout(function () {
4041        set_pattern_checker(last_field_check_obj, true);
4042        last_field_check_obj = false;
4043        last_field_check_timer = 0;
4044      }, 1000);
4045    }
4046  }
4047}
4048
4049function mark_tag_by_pattern(tag, check_on_load) {
4050  var objs = document.getElementsByTagName(tag);
4051  for (const obj of objs) {
4052    if (tag == 'input' && obj.type != 'text') return;
4053    if (obj.getAttribute('error-checker') != null) return;
4054    obj.setAttribute('error-checker', true);
4055    eventPush(obj, 'input', function () {
4056      set_pattern_checker(obj);
4057    });
4058    eventPush(obj, 'change', function () {
4059      set_pattern_checker(obj);
4060    });
4061    eventPush(obj, 'blur', function () {
4062      set_pattern_checker(obj, true);
4063    });
4064    if (check_on_load) set_pattern_checker(obj, true);
4065  }
4066}
4067
4068function mark_all_fields_by_pattern(check_on_load = true) {
4069  mark_tag_by_pattern('input', check_on_load);
4070  mark_tag_by_pattern('textarea', check_on_load);
4071}
4072
4073function aml_filter_crypto(address) {
4074  var found = -1;
4075  var skipped = -1;
4076  var crypto = document.getElementById('crypto');
4077  var found_list = {};
4078  for (var i = 0; i < crypto.options.length; i++) {
4079    var template = crypto.options[i].getAttribute('data-template');
4080    if (template) {
4081      var template_reg = new RegExp('^' + template + '$');
4082      if (template_reg.test(address)) {
4083        found_list[i] = true;
4084        if (found == -1) {
4085          if (crypto.options[i].getAttribute('data-skip') == 1) {
4086            skipped = i;
4087          } else {
4088            found = i;
4089          }
4090        }
4091      }
4092    }
4093  }
4094  if (found == -1 && skipped > -1) found = skipped;
4095  if (found > -1 && found != crypto.options.selectedIndex) {
4096    crypto.options.selectedIndex = found;
4097    aml_choose_crypto();
4098  }
4099  for (var i = 0; i < crypto.options.length; i++) {
4100    if (found_list[i] || found == -1) {
4101      removeClass(crypto.options[i], 'hide');
4102    } else {
4103      addClass(crypto.options[i], 'hide');
4104    }
4105  }
4106}
4107
4108function aml_choose_crypto() {
4109  var template = '';
4110  var crypto = document.getElementById('crypto');
4111  if (crypto.options.selectedIndex > -1) {
4112    template = crypto.options[crypto.options.selectedIndex].getAttribute('data-template');
4113    var active_count = 0;
4114    var active = -1;
4115    var analyzers = document.getElementById('analyzer');
4116    for (var i = 0; i < analyzers.options.length; i++) {
4117      if (analyzers.options[i].value == '') continue;
4118      if (crypto.options.selectedIndex == 0) {
4119        removeClass(analyzers.options[i], 'hide');
4120      } else {
4121        if (crypto.options[crypto.options.selectedIndex].getAttribute('data-active' + anal
4121yzers.options[i].value) == 1) {
4122          active_count++;
4123          active = i;
4124          removeClass(analyzers.options[i], 'hide');
4125        } else {
4126          addClass(analyzers.options[i], 'hide');
4127        }
4128      }
4129    }
4130    l(active_count);
4131    if (active_count == 1 && analyzers.options.selectedIndex != active) analyzers.options.selectedIndex = active;
4132  }
4133  var address_input = document.getElementById('address');
4134  address_input.setAttribute('pattern', template);
4135  set_pattern_checker(address_input, true);
4136}
4137
4138function aml_check_submit(e) {
4139  e.preventDefault();
4140  if (!nodeById('aml_agree').checked) {
4141    nodeById('agree_line').style.color = '#9c1a27';
4142    return false;
4143  }
4144  var button = nodeById('aml_button');
4145  addClass(button, 'disabled');
4146  recaptcha_check('amlcheck', function (token) {
4147    document.getElementById('captcha_response').value = token;
4148    document.getElementById('aml_check_form').submit();
4149  }, function () {
4150    removeClass(button, 'disabled');
4151  });
4152  return false;
4153}
4154
4155function aml_check_report(token) {
4156  var req = createRequest();
4157  if (req) {
4158    set_status('report', lang['aml_report_check'], 'ajax.png', true);
4159    
4160    var ajax_timer = setTimeout(function() {
4161      req.abort();
4162      req.onreadystatechange = function() {
4163        return true;
4164      };
4165      set_status('report', lang['str_fail_serv'], 'error.png', true);
4166    }, 25000);
4167
4168    req.onreadystatechange = function() {
4169      if (req.readyState != 4) return;
4170      clearTimeout(ajax_timer);
4171      if (req.status == 200) {
4172        var payment_wrapper = nodeById('payment_wrapper');
4173        if (req.responseText == 'OK') {
4174          set_status('report', lang['aml_report_almost'], 'ok.png', true);
4175          collapse_block(payment_wrapper);
4176          setTimeout(function() {
4177            document.location = '/report/' + token;
4178          }, 1000);
4179        } else if (req.responseText == 'NOPAY') {
4180          set_status('report', lang['aml_report_waiting'], 'ajax.png', true);
4181          setTimeout(function() {
4182            aml_check_report(token);
4183          }, 10000);
4184        } else if (req.responseText == 'LATER') {
4185          set_status('report', lang['aml_report_started'], 'ajax.png', true);
4186          collapse_block(payment_wrapper);
4187          setTimeout(function() {
4188            aml_check_report(token);
4189          }, 10000);
4190        } else {
4191          set_status('report', lang['aml_report_failed'], 'error.png', true);
4192          setTimeout(function() {
4193            document.location = '/report/' + token;
4194          }, 1000);
4195        }
4196      } else {
4197        set_status('report', lang['str_fail_err'], 'error.png', true);
4198      }
4199    }
4200    
4201    sendRequest(req, 'action=checkreport&tsid=' + token, function () {
4202      set_status('report', lang['str_fail_con'], 'error.png', true);
4203    });
4204  }
4205  return false;
4206}
4207
4208function collapse_block(el, duration = 500, easing = 'ease') {
4209  if (!el) return;
4210  var duration = duration != null ? duration : 500;
4211  var easing = easing != null ? easing : 'ease';
4212  var computed = window.getComputedStyle ? getComputedStyle(el) : el.currentStyle;
4213  if (computed && computed.display === "none") return;
4214  var startHeight = el.scrollHeight;
4215  el.style.overflow = "hidden";
4216  el.style.height = startHeight + "px";
4217  el.style.opacity = (computed && computed.opacity) ? computed.opacity : "1";
4218  el.style.transition = "none";
4219  el.offsetHeight;
4220  el.style.transition = "height " + duration + "ms " + easing + ", opacity " + duration + "ms " + easing;
4221  el.style.height = "0px";
4222  el.style.opacity = "0";
4223  var onEnd = function(e) {
4224    e = e || window.event;
4225    if (e.propertyName && e.propertyName !== "height") return;
4226    el.style.display = "none";
4227    el.style.transition = "";
4228    el.style.height = "";
4229    el.style.opacity = "";
4230    el.style.overflow = "";
4231    if (el.removeEventListener) el.removeEventListener("transitionend", onEnd);
4232    else el.detachEvent("ontransitionend", onEnd);
4233  };
4234  if (el.addEventListener) el.addEventListener("transitionend", onEnd);
4235  else if (el.attachEvent) el.attachEvent("ontransitionend", onEnd);
4236}
4237
4238function set_img_status(name, type, noclear) {
4239  if (status_timer != 0) clearTimeout(status_timer);
4240  status_timer = 0;
4241  document.getElementById(name + '_img').innerHTML = type ? '<img src="/images/' + type + '.png" width="16" height="16" />' : '';
4242  if (!noclear) status_timer = setTimeout(function () {
4243    set_img_status(name, '', true);
4244  }, 2500);
4245}
4246
4247function aml_update_report(token) {
4248  var req = createRequest();
4249  if (req) {
4250    var start_link = document.getElementById('update_report_start');
4251    addClass(start_link, 'disabled');
4252    set_img_status('update_report', 'ajax', true);
4253    
4254    var ajax_timer = setTimeout(function() {
4255      req.abort();
4256      req.onreadystatechange = function() {
4257        return true;
4258      };
4259      set_img_status('update_report', 'error', false);
4260      removeClass(start_link, 'disabled');
4261    }, 25000);
4262
4263    req.onreadystatechange = function() {
4264      if (req.readyState != 4) return;
4265      clearTimeout(ajax_timer);
4266      if (req.status == 200) {
4267        var results = req.responseText.split('[delimiter]');
4268        if (results[0] == 'OK') {
4269          set_img_status('update_report', 'ok', true);
4270          setTimeout(function() {
4271            document.location = '/report/' + results[1];
4272          }, 1000);
4273        } else {
4274          set_img_status('update_report', 'error', false);
4275          removeClass(start_link, 'disabled');
4276        }
4277      } else {
4278        set_img_status('update_report', 'error', false);
4279        removeClass(start_link, 'disabled');
4280      }
4281    }
4282    
4283    sendRequest(req, 'action=updatereport&tsid=' + token, function () {
4284      set_img_status('update_report', 'error', false);
4285      removeClass(start_link, 'disabled');
4286    });
4287  }
4288  return false;
4289}
4290
4291function aml_show_all_checks(obj, event, pos) {
4292  if (show_all_box) {
4293    details_menu_hide();
4294    return;
4295  }
4296  show_all_box = true;
4297  
4298  var text = '<div id="other_check_list">' + document.getElementById('other_check_list_menu').innerHTML + '</div>';
4299  
4300  if (!details_menu_show(obj, true, text)) {
4301    show_all_box = false;
4302    return;
4303  }
4304  document.getElementById('other_check_list').scrollTop = (pos - 2) * 25;
4305  setFocus(document.getElementById('other_check_list').getElementsByTagName('a')[pos == 1 ? 0 : pos - 2]);
4306  stopBubbling(event);
4307}
4308
4309function redeem_voucher(aml_token, captcha_token) {
4310  var text = document.getElementById('voucher').value.trim();
4311  if (text == '') {
4312    set_status('voucher', lang['aml_voucher_input'], 'error.png');
4313    return;
4314  }
4315  var send_button = document.getElementById('redeem_voucher_btn');
4316  send_button.disabled = true;
4317  var req = createRequest();
4318  if (req) {
4319    set_status('voucher', lang['aml_report_check'], 'ajax.png', true);
4320    
4321    var ajax_timer = setTimeout(function() {
4322      req.abort();
4323      req.onreadystatechange = function() {
4324        return true;
4325      };
4326      set_status('voucher', lang['str_fail_serv'], 'error.png');
4327      send_button.disabled = false;
4328    }, 25000);
4329
4330    req.onreadystatechange = function() {
4331      if (req.readyState != 4) return;
4332      clearTimeout(ajax_timer);
4333      if (req.status == 200) {
4334        var results = req.responseText.split('[delimiter]');
4335        if (results[0] == 'OK') {
4336          set_status('voucher', results[1], 'ok.png', true);
4337          setTimeout(function() {
4338            collapse_block(nodeById('payment_wrapper'));
4339            document.location = '/report/' + aml_token;
4340          }, 1000);
4341        } else if (results[0] == 'ERROR') {
4342          set_status('voucher', results[1] ? results[1] : lang['str_fail_err'], 'error.png');
4343        } else {
4344          set_status('voucher', lang['str_fail_err'], 'error.png');
4345        }
4346      } else {
4347        set_status('voucher', lang['str_fail_err'], 'error.png');
4348      }
4349      send_button.disabled = false;
4350    }
4351    
4352    sendRequest(req, 'action=redeemvoucher&tsid=' + aml_token + '&text=' + encodeURIComponent(text) + '&captcha=' + encodeURIComponent(captcha_token), function () {
4353      set_status('voucher', lang['str_fail_con'], 'error.png');
4354      send_button.disabled = false;
4355    });
4356  }
4357  return false;
4358}
4359
4360function calc_aml_total(price) {
4361  var inc_voucher = document.getElementById('inc_voucher');
4362  var voucher_count = document.getElementById('voucher_count');
4363  var voucher_label = document.getElementById('voucher_label');
4364  var total_price = document.getElementById('total_price');
4365  var receiver_label = document.getElementById('receiver_label');
4366  var receiver_email = document.getElementById('receiver_email');
4367  voucher_count.disabled = !inc_voucher.checked;
4368  if (inc_voucher.checked) {
4369    if (voucher_count.value <= 0) voucher_count.value = 10;
4370    if (voucher_count.value > 1000) voucher_count.value = 1000;
4371    setFocus(voucher_count);
4372    removeClass(voucher_label, 'disabled');
4373    removeClass(receiver_label, 'disabled');
4374    removeClass(receiver_email, 'disabled');
4375    price *= parseInt(voucher_count.value) + 1;
4376  } else {
4377    addClass(voucher_label, 'disabled');
4378    addClass(receiver_label, 'disabled');
4379    addClass(receiver_email, 'disabled');
4380  }
4381  total_price.innerHTML = '$' + price.toFixed(2);
4382  
4383  var links = document.querySelectorAll('.merchants a');
4384  links.forEach(link => {
4385    var url = new URL(link.href);
4386    url.searchParams.set('amount', price);
4387    link.href = url.toString();
4388    if (url.searchParams.get('merchant') == 24) if (inc_voucher.checked) {
4389      addClass(link, 'disabled');
4390      link.disabled = true;
4391    } else {
4392      removeClass(link, 'disabled');
4393      link.disabled = false;
4394    }
4395  });
4396}
4397
4398function submit_voucher(aml_token) {
4399  var send_button = document.getElementById('redeem_voucher_btn');
4400  send_button.disabled = true;
4401  set_status('voucher', lang['info_review_check'], 'ajax.png', true);
4402  
4403  recaptcha_check('redeemvoucher', function (token) {
4404    send_button.disabled = false;
4405    redeem_voucher(aml_token, token);
4406  }, function () {
4407    send_button.disabled = false;
4408    set_status('voucher', lang['str_fail_err'], 'error.png');
4409  });
4410  return false;
4411}
4412
4413function update_pay_status(token) {
4414  var req = createRequest();
4415  if (req) {
4416    var ajax_timer = setTimeout(function() {
4417      req.abort();
4418      req.onreadystatechange = function() {
4419        return true;
4420      };
4421      set_status('pay', lang['str_fail_serv'], 'error.png', true);
4422    }, 25000);
4423
4424    req.onreadystatechange = function() {
4425      if (req.readyState != 4) return;
4426      clearTimeout(ajax_timer);
4427      if (req.status == 200) {
4428        var results = req.responseText.split('[delimiter]');
4429        if (results[0] == 'OK') {
4430          set_status('pay', lang['pay_arrived'], 'ok.png', true);
4431          setTimeout(function() {
4432            document.location = results[1];
4433          }, 2000);
4434        } else if (results[0] == 'MSG') {
4435          set_status('pay', results[1], 'ajax.png', true);
4436          setTimeout(function() {
4437            update_pay_status(token);
4438          }, 10000);
4439        } else {
4440          set_status('pay', lang['pay_error'], 'error.png', true);
4441        }
4442      } else {
4443        set_status('pay', lang['str_fail_err'], 'error.png', true);
4444      }
4445    }
4446    
4447    sendRequest(req, 'action=updatepaystatus&tsid=' + token, function () {
4448      set_status('pay', lang['str_fail_con'], 'error.png', true);
4449    });
4450  }
4451  return false;
4452}
4453
4454function toggle_obj(id_name) {
4455  var obj = nodeById(id_name);
4456  if (classExists(obj, 'hide')) {
4457    removeClass(obj, 'hide');
4458  } else {
4459    addClass(obj, 'hide');
4460  }
4461}
4462
4463function resize_copyfields() {
4464  var inputs = document.querySelectorAll('input.copyfield');
4465  for (var i = 0; i < inputs.length; i++) {
4466    var width_div = document.createElement('div');
4467    width_div.innerHTML = inputs[i].value;
4468    width_div.className = 'copyfield';
4469    width_div.style.display = 'inline-block';
4470    width_div.style.position = 'absolute';
4471    width_div.style.top = '-1000px';
4472    width_div.style.left = '-1000px';
4473    width_div.style.visibility = 'hidden';
4474    inputs[i].parentNode.insertBefore(width_div, inputs[i].nextSibling);
4475    try {
4476      inputs[i].style.width = window.getComputedStyle(width_div, null).getPropertyValue('width');
4477    } catch(e) {
4478      inputs[i].style.width = width_div.currentStyle.height;
4479    } 
4480    width_div.remove();
4481  }
4482}
4483
4484//**** Styled Select ********************************
4485
4486document.write('<style type="text/css">input.styled { display: none; } select.styled { opacity: 0 !important; filter: alpha(opacity=0) !important; -khtml-opacity: 0 !important; -moz-opacity: 0 !important; } #curr_list select.styled {width: 190px; font-size: 13px} @-moz-document url-prefix() { #curr_list optgroup { padding-left: 2px; } #curr_list option { background: url("/images/systems.png") no-repeat; padding: 2px 0 2px 26px; } }</style>');
4487//input[type="checkbox"] { position: absolute; left: -9999px; } 
4488
4489function setSelectStyle(objParent) {
4490
4491  var inputs = objParent.getElementsByTagName('input'), label = Array();
4492  for (a = 0; a < inputs.length; a++) {
4493    if (inputs[a].type != 'checkbox') continue;
4494    if (inputs[a].className == 'newcheck') continue;
4495    inputs[a].style.position = 'absolute';
4496    inputs[a].style.left = '-9999px';
4497
4498    label[a] = document.createElement('label');
4499    label[a].htmlFor = inputs[a].id;
4500    label[a].className = 'checkbox';
4501    label[a].id = inputs[a].id + '_label';
4502    if (inputs[a].checked) addClass(label[a], 'checked');
4503    if (inputs[a].getAttribute('disabled')) addClass(label[a], 'disabled');
4504    inputs[a].parentNode.insertBefore(label[a], inputs[a]);
4505
4506    inputs[a].onclick = function() {
4507      var element = this.previousSibling;
4508      if (this.checked) {
4509        addClass(element, 'checked');
4510      } else {
4511        removeClass(element, 'checked');
4512      }
4513      if (this.getAttribute('disabled')) {
4514        addClass(element, 'disabled');
4515      } else {
4516        removeClass(element, 'disabled');
4517      }
4518    };
4519  }
4520
4521  var inputs = objParent.getElementsByTagName('select'), span = Array(), textnode, option;
4522  for (var a = 0; a < inputs.length; a++) {
4523    if (inputs[a].className != 'styled') continue;
4524    span[a] = document.createElement('span');
4525    span[a].className = 'select';
4526    span[a].id = 'custom_select_' + inputs[a].name;
4527
4528    option = inputs[a].getElementsByTagName('option');
4529    if (option.length > 0) {
4530      textnode = document.createTextNode(option[0].childNodes[0].nodeValue);
4531      for (var b = 0; b < option.length; b++) if (option[b].selected) {
4532        textnode = document.createTextNode(option[b].childNodes[0].nodeValue);
4533        break;
4534      }
4535      span[a].appendChild(textnode);
4536    }
4537    inputs[a].parentNode.insertBefore(span[a], inputs[a]);
4538    inputs[a].onchange = function() {
4539      option = this.getElementsByTagName('option');
4540      for (var d = 0; d < option.length; d++) if (option[d].selected) {
4541        document.getElementById('custom_select_' + this.name).childNodes[0].nodeValue = option[d].childNodes[0].nodeValue;
4542        break;
4543      }
4544    }
4545  }
4546}
4547
4548//**** Input Autoformat ********************************
4549
4550function setInputAutoFormat(input, defvalue, del_sep, th_sep) {
4551  if (!del_sep) del_sep = '.';
4552  if (!th_sep) th_sep = ' ';
4553  var rev_del_sep = del_sep == '.' ? (th_sep != ',' ? ',' : 'n') : '.';
4554  var del_sep_reg = del_sep == '.' ? '\.' : del_sep;
4555  var rev_del_sep_reg = rev_del_sep == '.' ? '\\\.' : rev_del_sep;
4556  
4557  var err_timer = 0;
4558  function inputError(input) {
4559    addClass(input, 'err');
4560    if (err_timer > 0) clearTimeout(err_timer);
4561    err_timer = setTimeout(function () {
4562      removeClass(input, 'err');
4563      err_timer = 0;
4564    }, 500);
4565  }
4566  
4567  eventPush(input, 'keypress', function(e) {
4568    var reg = new RegExp(rev_del_sep_reg, 'g');
4569    var sym = String.fromCharCode(e.charCode).replace(reg, del_sep);
4570    var reg = new RegExp('[0-9' + del_sep_reg + ']', 'g');
4571    var is_corr = e.charCode == 13 || sym == '' || (sym != del_sep || (sym == del_sep && input.value.indexOf(del_sep) == -1)) && reg.test(sym);
4572    if (!is_corr) inputError(this);
4573    return is_corr;
4574  });
4575  
4576  var change_callback = function(e) {
4577    if (e.type == 'input' && navigator.userAgent.match(/Android/i)) return;
4578    var pos = getCursor(this);
4579    var oldvalue = input.value;
4580    var reg1 = new RegExp(rev_del_sep_reg, 'g');
4581    var reg2 = new RegExp('[^0-9' + del_sep_reg + ']', 'g');
4582    var begin = oldvalue.slice(0, pos).replace(reg1, del_sep).replace(reg2, '');
4583    var end = oldvalue.slice(pos).replace(reg1, del_sep).replace(reg2, '');
4584    value = begin + 'z' + end;
4585    pos = value.indexOf(del_sep);
4586    var newvalue = '';
4587    if (pos > -1) {
4588      var reg3 = new RegExp(del_sep_reg, 'g');
4589      newvalue = del_sep + (pos >
4589 0 ? value.slice(pos).replace(reg3, '') : '');
4590      value = value.slice(0, pos);
4591      if (value == '') value = '0';
4592    }
4593    var count = 0;
4594    for (var i = value.length - 1; i >= 0; i--) {
4595      var sym = value[i];
4596      newvalue = sym + newvalue;
4597      if (sym != 'z') {
4598        count++;
4599        if (count == 3) {
4600          if (i > 1 || (i == 1 && value[i - 1] != 'z')) newvalue = th_sep + newvalue;
4601          count = 0;
4602        }
4603      }
4604    }
4605    pos = newvalue.indexOf('z');
4606    newvalue = newvalue.replace(/z/g, '');
4607    if (oldvalue != newvalue) {
4608      input.value = newvalue;
4609      if (pos > -1) setCursor(this, pos);
4610    }
4611  };
4612  
4613  eventPush(input, 'input', change_callback);
4614  eventPush(input, 'keyup', change_callback);
4615  eventPush(input, 'change', change_callback);
4616
4617  eventPush(input, 'blur', function () {
4618    var value = input.value;
4619    if (value.replace(/[^1-9]/g, '') == '') {
4620      input.value = numFormat(defvalue, del_sep, th_sep);
4621      return;
4622    }
4623    while ((value[0] == '0' && value[1] != del_sep) || value[0] == th_sep) value = value.slice(1);
4624    if (value[0] == del_sep) value = '0' + value;
4625    if (value.indexOf(del_sep) > -1) {
4626      var curchar, is_next = true;
4627      while (is_next) {
4628        curchar = value.slice(-1);
4629        if (curchar == del_sep) {
4630          is_next = false;
4631        } else if (curchar != '0' && curchar != th_sep) {
4632          break;
4633        }
4634        value = value.slice(0, value.length - 1);
4635      }
4636    }
4637    var reg1 = new RegExp(th_sep, 'g');
4638    value = value.replace(reg1, '');
4639    var reg2 = new RegExp(del_sep_reg, 'g');
4640    value = value.replace(reg2, '.');
4641    input.value = numFormat(value.replace(/[^0-9\.]/g, ''), del_sep, th_sep);
4642  });
4643
4644  eventPush(input, 'focus', function () {
4645    if (input.value.replace(/[^1-9]/g, '') == '') input.value = '';
4646  });
4647  
4648  fireEvent(input, 'blur');
4649}
4650
4651//**** Save time offset ********************************
4652
4653var old_time_offset = getCookie('time_offset');
4654var current_date = new Date();
4655var time_offset = current_date.getTimezoneOffset();
4656if (time_offset != old_time_offset) {
4657  time_offset_changed = true;
4658  setCookie('time_offset', time_offset);
4659}

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.