Hormold

VK Change (#1379344505)

Sep 16th, 2013
217
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 59.38 KB | None | 0 0
  1. Файл - profile.js (Старый размер - 34811 | Новый - 0):
  2. 0.  - var Profile = {
  3. 1.  -   showFull: function(uid, geolang, newMap) {
  4. 2.  -     if (!cur.vkLngCode) {
  5. 3.  -       cur.vkLngCode = geolang;
  6. 4.  -     }
  7. 5.  -
  8. 6.  -     var lnk = ge('profile_full_link');
  9. 7.  -     if (lnk) {
  10. 8.  -       lnk.innerHTML = getLang('hide_full');
  11. 9.  -       lnk.onclick = Profile.hideFull;
  12. 10.  -     }
  13. 11.  -     ge('profile_short').innerHTML = cur.options.info[1];
  14. 12.  -     show('profile_full_info');
  15. 13.  -     if (ge('profile_map')) {
  16. 14.  -       if (!newMap && !window.google) {
  17. 15.  -         headNode.appendChild(ce('script', {
  18. 16.  -           type: 'text/javascript',
  19. 17.  -           src: (window.locProtocol || 'http:') + '//maps.google.com/maps/api/js?sensor=false&callback=gMapsInit&language='+(cur.vkLngCode || 'en')
  20. 18.  -         }));
  21. 19.  -         window.gMapsInit = function() {}
  22. 20.  -       }
  23. 21.  -       var params = {act: 'profile_map', uid: uid};
  24. 22.  -       if (nav.objLoc.as) {
  25. 23.  -         params.as = nav.objLoc.as;
  26. 24.  -       }
  27. 25.  -       ajax.post('al_places.php', params, {
  28. 26.  -         onDone: function(html, js) {
  29. 27.  -           if (html) {
  30. 28.  -             ge('profile_map').innerHTML = html;
  31. 29.  -             eval('(function () {' + js + '})();');
  32. 30.  -           } else {
  33. 31.  -             re('profile_map');
  34. 32.  -           }
  35. 33.  -         },
  36. 34.  -         stat: newMap ? ['places.js', 'mapbox.js', 'mapbox.css'] : ['places.js']
  37. 35.  -       });
  38. 36.  -     }
  39. 37.  -   },
  40. 38.  -   hideFull: function() {
  41. 39.  -     var lnk = ge('profile_full_link');
  42. 40.  -     if (lnk) {
  43. 41.  -       lnk.innerHTML = getLang('show_full');
  44. 42.  -       lnk.onclick = Profile.showFull;
  45. 43.  -     }
  46. 44.  -     ge('profile_short').innerHTML = cur.options.info[0];
  47. 45.  -     hide('profile_full_info', 'profile_class_hint');
  48. 46.  -   },
  49. 47.  -   showGroups: function(e) {
  50. 48.  -     if (checkEvent(e) !== false) return;
  51. 49.  -     var lnk = ge('profile_groups_link');
  52. 50.  -     lnk.oldText = val(lnk);
  53. 51.  -     ajax.post('al_profile.php', {act: 'groups', id: cur.oid}, {onDone: function(label, text) {
  54. 52.  -       if (text) {
  55. 53.  -         val(lnk, label);
  56. 54.  -         lnk.onclick = Profile.hideGroups;
  57. 55.  -         var pag = ge('profile_all_groups');
  58. 56.  -         val(pag, text);
  59. 57.  -         show(pag.parentNode);
  60. 58.  -       } else {
  61. 59.  -         hide(lnk);
  62. 60.  -       }
  63. 61.  -     }, showProgress: function() {
  64. 62.  -       val(lnk, '<div class="progress" id="profile_groups_prg"></div>');
  65. 63.  -     }, hideProgress: function() {
  66. 64.  -       val(lnk, lnk.oldText);
  67. 65.  -     }, cache: 1});
  68. 66.  -     return cancelEvent(e);
  69. 67.  -   },
  70. 68.  -   hideGroups: function(e) {
  71. 69.  -     if (checkEvent(e) !== false) return;
  72. 70.  -     var lnk = ge('profile_groups_link');
  73. 71.  -     val(lnk, lnk.oldText);
  74. 72.  -     lnk.onclick = Profile.showGroups;
  75. 73.  -     hide(ge('profile_all_groups').parentNode);
  76. 74.  -     return cancelEvent(e);
  77. 75.  -   },
  78. 76.  -   photoRemoveTip: function(lnk) {
  79. 77.  -     if (!((cur || {}).lang || {}).profile_photo_hide) return;
  80. 78.  -     showTooltip(lnk, {
  81. 79.  -       text: getLang('profile_photo_hide'),
  82. 80.  -       shift: [13, 1, 1],
  83. 81.  -       black: 1
  84. 82.  -     });
  85. 83.  -   },
  86. 84.  -   photoRemove: function(lnk, photo_id, ev) {
  87. 85.  -     if (cur.viewAsBox) {
  88. 86.  -       cur.viewAsBox();
  89. 87.  -       return cancelEvent(ev);
  90. 88.  -     }
  91. 89.  -     if (!cur.hidingPh) cur.hidingPh = {};
  92. 90.  -     if (cur.hidingPh[photo_id]) return cancelEvent(ev);
  93. 91.  -
  94. 92.  -     ajax.post('al_profile.php', {act: 'remove_photo', photo_id: photo_id, hash: cur.options.profph_hash}, {
  95. 93.  -       onDone: function(about, photos) {
  96. 94.  -         val(ge('profile_photos_about') || ge('profile_photos_module').appendChild(ce('div', {className: 'msg', id: 'profile_photos_about'})), about);
  97. 95.  -         each(geByClass('profile_photo_hide_wrap', ge('profile_photos')), function() {
  98. 96.  -           if (this.tt && this.tt.destroy) {
  99. 97.  -             this.tt.destroy();
  100. 98.  -           }
  101. 99.  -         });
  102. 100.  -         val('profile_photos', photos);
  103. 101.  -         if (!photos) {
  104. 102.  -           hide('profile_photos_module');
  105. 103.  -         }
  106. 104.  -       },
  107. 105.  -       showProgress: function() {
  108. 106.  -         cur.hidingPh[photo_id] = 1;
  109. 107.  -       },
  110. 108.  -       hideProgress: function() {
  111. 109.  -         cur.hidingPh[photo_id] = 0;
  112. 110.  -       }
  113. 111.  -     });
  114. 112.  -     return cancelEvent(ev);
  115. 113.  -   },
  116. 114.  -   photoReturn: function(lnk, photo_id) {
  117. 115.  -     if (cur.viewAsBox) return cur.viewAsBox();
  118. 116.  -
  119. 117.  -     ajax.post('al_profile.php', {act: 'return_photo', photo_id: photo_id, hash: cur.options.profph_hash}, {
  120. 118.  -       onDone: function(photos) {
  121. 119.  -         each(geByClass('profile_photo_hide_wrap', ge('profile_photos')), function() {
  122. 120.  -           if (this.tt && this.tt.destroy) {
  123. 121.  -             this.tt.destroy();
  124. 122.  -           }
  125. 123.  -         });
  126. 124.  -         val('profile_photos', photos);
  127. 125.  -         re('profile_photos_about');
  128. 126.  -       },
  129. 127.  -       showProgress: function() {
  130. 128.  -         hide(lnk);
  131. 129.  -         lnk.nextSibling.style.display = 'inline';
  132. 130.  -       },
  133. 131.  -       hideProgress: function() {
  134. 132.  -         hide(lnk.nextSibling);
  135. 133.  -         show(lnk);
  136. 134.  -       }
  137. 135.  -     });
  138. 136.  -   },
  139. 137.  -
  140. 138.  -   otherActs: function(el) {
  141. 139.  -     clearTimeout(cur.hideOtherTimer);
  142. 140.  -     if (!el) return false;
  143. 141.  -     el.blur();
  144. 142.  -     var acts = ge('profile_other_acts');
  145. 143.  -     if (isVisible(acts)) {
  146. 144.  -       fadeIn(acts, 0);
  147. 145.  -       return false;
  148. 146.  -     }
  149. 147.  -     setTimeout(addEvent.pbind(document, 'click', Profile.hideOther), 1);
  150. 148.  -     acts.style.marginLeft = '-1px';
  151. 149.  -     acts.style.marginTop = '-21px';
  152. 150.  -     show(acts);
  153. 151.  -     return false;
  154. 152.  -   },
  155. 153.  -   hideOther: function(timeout) {
  156. 154.  -     if (timeout > 0) {
  157. 155.  -       cur.hideOtherTimer = setTimeout(Profile.hideOther.pbind(0), timeout);
  158. 156.  -       return;
  159. 157.  -     }
  160. 158.  -     var acts = ge('profile_other_acts');
  161. 159.  -     if (!acts) return;
  162. 160.  -     if (timeout == -1) {
  163. 161.  -       hide(acts);
  164. 162.  -     } else {
  165. 163.  -       fadeOut(acts, 200);
  166. 164.  -     }
  167. 165.  -     removeEvent(document, 'click', Profile.hideOther);
  168. 166.  -   },
  169. 167.  -
  170. 168.  -   editPhoto: function(newph) {
  171. 169.  -     Profile.hideOther(-1);
  172. 170.  -     if (cur.viewAsBox) return cur.viewAsBox();
  173. 171.  -
  174. 172.  -     showBox('/al_profile.php', extend(newph || {}, {act: 'edit_photo'}), {
  175. 173.  -       params: {bodyStyle: 'padding: 16px 7px'},
  176. 174.  -       stat: ['tagger.js', 'tagger.css']
  177. 175.  -     });
  178. 176.  -   },
  179. 177.  -   deletePhoto: function() {
  180. 178.  -     Profile.hideOther(-1);
  181. 179.  -     if (cur.viewAsBox) return cur.viewAsBox();
  182. 180.  -
  183. 181.  -     showBox('al_profile.php', {act: 'delete_photo_box'});
  184. 182.  -   },
  185. 183.  -
  186. 184.  -   setupSMS: function(hash) {
  187. 185.  -     Profile.hideOther(-1);
  188. 186.  -     if (cur.viewAsBox) return cur.viewAsBox();
  189. 187.  -
  190. 188.  -     showBox('al_mobile.php', {act: 'configure_sms_notifications', mid: cur.oid, hash: hash});
  191. 189.  -   },
  192. 190.  -   toggleFan: function(btn, hash, act, ev) {
  193. 191.  -     if (cur.viewAsBox) {
  194. 192.  -       Profile.hideOther(-1);
  195. 193.  -       return cur.viewAsBox();
  196. 194.  -     }
  197. 195.  -
  198. 196.  -     if (cur.toggleFanAct != undefined) {
  199. 197.  -       act = cur.toggleFanAct;
  200. 198.  -     }
  201. 199.  -     ajax.post('al_fans.php', {act: act ? 'be_fan' : 'not_fan', mid: cur.oid, hash: hash}, {onDone: function(text) {
  202. 200.  -       btn.firstChild.nextSibling.innerHTML = text;
  203. 201.  -       cur.toggleFanAct = !act;
  204. 202.  -     }, progress: btn.firstChild});
  205. 203.  -     cancelEvent(ev);
  206. 204.  -   },
  207. 205.  -   toggleFave: function(btn, hash, act, ev) {
  208. 206.  -     if (cur.viewAsBox) {
  209. 207.  -       Profile.hideOther(-1);
  210. 208.  -       return cur.viewAsBox();
  211. 209.  -     }
  212. 210.  -
  213. 211.  -     if (cur.toggleFaveAct != undefined) {
  214. 212.  -       act = cur.toggleFaveAct;
  215. 213.  -     }
  216. 214.  -     ajax.post('fave.php', {act: act ? 'addPerson' : 'deletePerson', mid: cur.oid, hash: hash}, {onDone: function(text) {
  217. 215.  -       btn.firstChild.nextSibling.innerHTML = text;
  218. 216.  -       cur.toggleFaveAct = !act;
  219. 217.  -     }, progress: btn.firstChild});
  220. 218.  -     cancelEvent(ev);
  221. 219.  -   },
  222. 220.  -   toggleFriend: function(btn, hash, act, ev, sure) {
  223. 221.  -     if (cur.viewAsBox) {
  224. 222.  -       Profile.hideOther(-1);
  225. 223.  -       return cur.viewAsBox();
  226. 224.  -     }
  227. 225.  -
  228. 226.  -     if (act) {
  229. 227.  -       if (sure !== true && cur.options.bannedhim) {
  230. 228.  -         showBox('al_profile.php', {act: 'banned_him', action: 'friend', mid: cur.oid}).onContinue = Profile.toggleFriend.pbind(btn, hash, act, false, true);
  231. 229.  -         return cancelEvent(ev);
  232. 230.  -       }
  233. 231.  -       stManager.add(['tooltips.css', 'tooltips.js']);
  234. 232.  -     }
  235. 233.  -
  236. 234.  -     ajax.post('al_friends.php', {act: act ? 'add' : 'remove', mid: cur.oid, hash: hash, from: 'profile'}, {
  237. 235.  -       onDone: function(text, vis, ttText, ttScript, doReload) {
  238. 236.  -         if (act && cur.onFreindAdd) {
  239. 237.  -           cur.onFreindAdd();
  240. 238.  -         }
  241. 239.  -         if (!text) return nav.reload();
  242. 240.  -         var tt = (ge('profile_am_subscribed') || {}).tt;
  243. 241.  -         if (tt) {
  244. 242.  -           tt.hide({fasthide: 1});
  245. 243.  -           tt.destroy();
  246. 244.  -         }
  247. 245.  -         Profile.hideOther(-1);
  248. 246.  -         var fs = ge('friend_status');
  249. 247.  -         cleanElems(fs.firstChild);
  250. 248.  -         if (text) {
  251. 249.  -           show(fs);
  252. 250.  -           val(fs, text);
  253. 251.  -         } else {
  254. 252.  -           hide(fs);
  255. 253.  -         }
  256. 254.  -         (vis ? show : hide)('friend_remove');
  257. 255.  -         if (doReload || cur.options.bannedhim) {
  258. 256.  -           nav.reload();
  259. 257.  -         } else if (ttText) {
  260. 258.  -           ajax.preload('al_friends.php', {act: 'friend_tt', mid: cur.oid}, [ttText, ttScript])
  261. 259.  -           setTimeout(Profile.friendTooltip, 0);
  262. 260.  -         }
  263. 261.  -       },
  264. 262.  -       showProgress: btn.tagName == 'BUTTON' ? lockButton.pbind(btn) : show.pbind(btn.firstChild),
  265. 263.  -       hideProgress: btn.tagName == 'BUTTON' ? unlockButton.pbind(btn) : hide.pbind(btn.firstChild),
  266. 264.  -       onFail: function(text) {
  267. 265.  -         if (!text) return;
  268. 266.  -
  269. 267.  -         showFastBox(getLang('global_error'), text);
  270. 268.  -         return true;
  271. 269.  -       }
  272. 270.  -     });
  273. 271.  -     cancelEvent(ev);
  274. 272.  -   },
  275. 273.  -   friendTTHide: function(e) {
  276. 274.  -     var tt = (ge('profile_am_subscribed') || {}).tt;
  277. 275.  -     if (e) {
  278. 276.  -       for (var el = e.target; el; el = domPN(el)) {
  279. 277.  -         if (el.tagName && hasClass(el, 'preq_tt')) {
  280. 278.  -           return;
  281. 279.  -         }
  282. 280.  -       }
  283. 281.  -     }
  284. 282.  -     if (tt && tt.hide) tt.hide({fasthide: 1});
  285. 283.  -     removeEvent(document, 'click', Profile.friendTTHide);
  286. 284.  -   },
  287. 285.  -   friendTooltip: function() {
  288. 286.  -     if (cur.viewAsBox) {
  289. 287.  -       return;
  290. 288.  -     }
  291. 289.  -
  292. 290.  -     setTimeout(function() {
  293. 291.  -       removeEvent(document, 'click', Profile.friendTTHide);
  294. 292.  -       addEvent(document, 'click', Profile.friendTTHide);
  295. 293.  -     }, 0);
  296. 294.  -     return showTooltip(ge('profile_am_subscribed'), {
  297. 295.  -       url: 'al_friends.php',
  298. 296.  -       params: {act: 'friend_tt', mid: cur.oid},
  299. 297.  -       slide: 15,
  300. 298.  -       hidedt: 500,
  301. 299.  -       shift: [23, -1, -10],
  302. 300.  -       className: 'preq_tt',
  303. 301.  -       forcetodown: true
  304. 302.  -     });
  305. 303.  -   },
  306. 304.  -   submitReqText: function() {
  307. 305.  -     var msg = trim(val('preq_input'));
  308. 306.  -     if (!msg) return elfocus('preq_input');
  309. 307.  -
  310. 308.  -     var oid = cur.mfid ? cur.mfid : cur.oid;
  311. 309.  -     ajax.post('al_friends.php', {act: 'request_text', mid: oid, message: msg, hash: cur.reqHash}, {onDone: function(text) {
  312. 310.  -       if (!text) return;
  313. 311.  -
  314. 312.  -       var t = ge('preq_text');
  315. 313.  -       val(t, text);
  316. 314.  -       show(t.parentNode);
  317. 315.  -       hide(ge('preq_input').parentNode);
  318. 316.  -     }, showProgress: lockButton.pbind('preq_submit'), hideProgress: unlockButton.pbind('preq_submit')});
  319. 317.  -   },
  320. 318.  -   reqTextChanged: function(ev) {
  321. 319.  -     onCtrlEnter(ev, Profile.submitReqText);
  322. 320.  -     var field = ge('preq_input');
  323. 321.  -     var v = trim(val(field)).replace(/\n\n\n+/g, '\n\n');
  324. 322.  -     if (field.lastLen === v.length) return;
  325. 323.  -     field.lastLen = v.length;
  326. 324.  -     var countRealLen = function(text, max, maxbr) {
  327. 325.  -       var spec = {'&': 5, '<': 4, '>': 4, '"': 6, "\n": 4, "\r": 0, '!': 5, "'": 5};
  328. 326.  -       var res = 0, brs = 0, good = false;
  329. 327.  -       for (var i = 0, l = text.length; i < l; i++) {
  330. 328.  -         var k = spec[text.charAt(i)], c = text.charCodeAt(i);
  331. 329.  -         if (c == 10) ++brs;
  332. 330.  -         if (k !== undefined) res += k;
  333. 331.  -         else if ((c > 0x80 && c < 0xC0) || c > 0x500) res += ('&#' + c + ';').length;
  334. 332.  -         else res += 1;
  335. 333.  -         if (good === false && (max && res > max || maxbr && brs > maxbr)) good = i ? text.substr(0, i) : '';
  336. 334.  -       }
  337. 335.  -       return [res, brs, (good === false) ? text : good];
  338. 336.  -     }
  339. 337.  -     var maxLen = 240, maxBrs = 4, r = countRealLen(v, maxLen, maxBrs), realLen = r[0], brCount = r[1];
  340. 338.  -     var warn = ge('preq_warn');
  341. 339.  -     if (r[2] !== v) {
  342. 340.  -       if (realLen > maxLen) {
  343. 341.  -         realLen = maxLen;
  344. 342.  -       } else if (brCount > 4) {
  345. 343.  -         brCount = 4;
  346. 344.  -       }
  347. 345.  -       val(field, r[2]);
  348. 346.  -       field.lastLen = trim(r[2]).length;
  349. 347.  -     }
  350. 348.  -     if (realLen > maxLen - 40 || brCount > maxBrs) {
  351. 349.  -       if (realLen > maxLen) {
  352. 350.  -         warn.innerHTML = getLang('friends_exceeds_symbol_limit', realLen - maxLen);
  353. 351.  -       } else if (brCount > 4) {
  354. 352.  -         warn.innerHTML = getLang('friends_exceeds_lines_limit', brCount - 4);
  355. 353.  -       } else {
  356. 354.  -         warn.innerHTML = getLang('text_N_symbols_remain', maxLen - realLen);
  357. 355.  -       }
  358. 356.  -       show(warn);
  359. 357.  -     } else {
  360. 358.  -       hide(warn);
  361. 359.  -     }
  362. 360.  -   },
  363. 361.  -   toggleBlacklist: function(btn, hash, ev) {
  364. 362.  -     if (cur.viewAsBox) {
  365. 363.  -       Profile.hideOther(-1);
  366. 364.  -       return cur.viewAsBox();
  367. 365.  -     }
  368. 366.  -
  369. 367.  -     ajax.post('al_settings.php', {act: cur.options.bannedhim ? 'a_del_from_bl' : 'a_add_to_bl', id: cur.oid, hash: hash, from: 'profile'}, {onDone: function(text) {
  370. 368.  -       domNS(domFC(btn)).innerHTML = text;
  371. 369.  -       cur.options.bannedhim = !cur.options.bannedhim;
  372. 370.  -     }, progress: domFC(btn)});
  373. 371.  -     cancelEvent(ev);
  374. 372.  -   },
  375. 373.  -   toggleFeedIgnored: function(btn, hash, ev) {
  376. 374.  -     if (cur.viewAsBox) {
  377. 375.  -       Profile.hideOther(-1);
  378. 376.  -       return cur.viewAsBox();
  379. 377.  -     }
  380. 378.  -
  381. 379.  -     ajax.post('al_feed.php', {act: cur.options.ignoredhim ? 'a_unignore_owner' : 'a_ignore_owner', owner_id: cur.oid, hash: hash, from: 'profile'}, {onDone: function(text) {
  382. 380.  -       domNS(domFC(btn)).innerHTML = text;
  383. 381.  -       cur.options.ignoredhim = !cur.options.ignoredhim;
  384. 382.  -     }, progress: domFC(btn)});
  385. 383.  -     cancelEvent(ev);
  386. 384.  -   },
  387. 385.  -   showGiftBox: function(mid, ev) {
  388. 386.  -     Profile.hideOther(-1);
  389. 387.  -     cur.gftbxWasScroll = boxLayerWrap.scrollTop;
  390. 388.  -     boxLayerWrap.scrollTop = 0;
  391. 389.  -     if (cur.viewAsBox) return cur.viewAsBox();
  392. 390.  -
  393. 391.  -     var cache = cur.ignoreBoxCache ? 0 : 1;
  394. 392.  -     cur.ignoreBoxCache = false;
  395. 393.  -     return !showBox('al_gifts.php', {act: 'get_gift_box', mid: mid, fr: (mid == vk.id ? 1 : 0)}, {stat: ['gifts.css', 'wide_dd.js', 'wide_dd.css'], cache: cache}, ev);
  396. 394.  -   },
  397. 395.  -   showHideGiftsBox: function(ev) {
  398. 396.  -     Profile.hideOther(-1);
  399. 397.  -     if (cur.viewAsBox) return cur.viewAsBox();
  400. 398.  -     var msg = getLang('profile_sure_hide_gifts').replace('{link}', '<a href="/settings">').replace('{/link}', '</a>').replace('{link1}', '<a href="/settings?act=privacy">').replace('{/link1}', '</a>');
  401. 399.  -
  402. 400.  -     var box = showFastBox({title: getLang('global_warning'), bodyStyle: 'line-height: 140%;', width: 350}, msg, getLang('profile_gifts_hide_button'), function() {
  403. 401.  -       ajax.post('al_profile.php', {
  404. 402.  -         act: 'hide_gifts',
  405. 403.  -         hash: cur.options.gifts_hash
  406. 404.  -       }, {
  407. 405.  -         onDone: function() {
  408. 406.  -           slideUp('profile_gifts', 200);
  409. 407.  -           box.hide();
  410. 408.  -         },
  411. 409.  -         progress: box.progress
  412. 410.  -       });
  413. 411.  -     }, getLang('global_cancel'));
  414. 412.  -     cancelEvent(ev);
  415. 413.  -     return false;
  416. 414.  -   },
  417. 415.  -   showNewGift: function(giftId) {
  418. 416.  -     var gifts = ge('profile_gifts');
  419. 417.  -     if (!gifts || !giftId) return;
  420. 418.  -     var images = geByTag('img', geByClass1('module_body', gifts)), pic = vkImage();
  421. 419.  -     pic.src = '/images/gifts/'+(window.devicePixelRatio >= 2 ?'96':'48')+'/'+giftId+'.png';
  422. 420.  -     var onload = function() {
  423. 421.  -       var firstPic = images[0], a = firstPic.parentNode, imgCount = images.length;
  424. 422.  -       if (firstPic) {
  425. 423.  -         addClass(pic, 'giftImg');
  426. 424.  -         setStyle(a, {marginLeft: -pic.width+'px'});
  427. 425.  -         firstPic.parentNode.insertBefore(pic, firstPic);
  428. 426.  -         animate(a, {marginLeft: '0px'}, 200, function() {
  429. 427.  -           if (imgCount >= 4) re(images[images.length - 1]);
  430. 428.  -         })
  431. 429.  -       }
  432. 430.  -     };
  433. 431.  -     if (!pic.width) {
  434. 432.  -       addEvent(pic, 'load', onload);
  435. 433.  -     } else {
  436. 434.  -       onload();
  437. 435.  -     }
  438. 436.  -   },
  439. 437.  -   declineFriend: function(hash) {
  440. 438.  -     if (cur.viewAsBox) return cur.viewAsBox();
  441. 439.  -     ajax.post('al_friends.php', {act: 'remove', mid: cur.oid, hash: hash}, {onDone: function(text) {
  442. 440.  -       hide('friend_request_actions');
  443. 441.  -     }});
  444. 442.  -   },
  445. 443.  -   showWishesBox: function(ev) {
  446. 444.  -     return true;
  447. 445.  -     //return !showTabbedBox('al_gifts.php', {act: 'wishlist_box', mid: cur.oid}, {stat: ['gifts.css'], cache: 1}, ev);
  448. 446.  -   },
  449. 447.  -   processRelation: function(el, mid, hash, accept) {
  450. 448.  -     if (cur.viewAsBox) return cur.viewAsBox();
  451. 449.  -
  452. 450.  -     var pos = getXY(el), parpos = getXY(el.parentNode);
  453. 451.  -     var pr = ge('relation_progress' + mid), lnk = ge('profile_full_link');
  454. 452.  -     ajax.post('al_profile.php', {
  455. 453.  -       act: 'process_relation',
  456. 454.  -       mid: mid,
  457. 455.  -       accept: accept ? 1 : '',
  458. 456.  -       full_shown: lnk ? 1 : '',
  459. 457.  -       hash: hash
  460. 458.  -     }, {
  461. 459.  -       onDone: function(short_info, long_info) {
  462. 460.  -         cur.options.info = [short_info, long_info];
  463. 461.  -         if (isVisible('profile_full_info')) {
  464. 462.  -           Profile.showFull();
  465. 463.  -         } else {
  466. 464.  -           Profile.hideFull();
  467. 465.  -         }
  468. 466.  -       },
  469. 467.  -       showProgress: function() {
  470. 468.  -         pr.style.left = (el.offsetLeft + Math.floor((el.offsetWidth - 32) / 2)) + 'px';
  471. 469.  -         show(pr);
  472. 470.  -         el.style.visibility = 'hidden';
  473. 471.  -       },
  474. 472.  -       hideProgress: function() {
  475. 473.  -         el.style.visibility = 'visible';
  476. 474.  -         hide(pr);
  477. 475.  -       }
  478. 476.  -     });
  479. 477.  -   },
  480. 478.  -   showFans: function(ev) {
  481. 479.  -     if (cur.viewAsBox) return cur.viewAsBox();
  482. 480.  -
  483. 481.  -     return !showTabbedBox('al_fans.php', {act: 'show_fans_box', oid: cur.oid}, {cache: 1}, ev);
  484. 482.  -   },
  485. 483.  -   showIdols: function(ev) {
  486. 484.  -     if (cur.viewAsBox) return cur.viewAsBox();
  487. 485.  -
  488. 486.  -     return !showTabbedBox('al_fans.php', {act: 'show_idols_box', oid: cur.oid}, {cache: 1}, ev);
  489. 487.  -   },
  490. 488.  -   showPublics: function(ev) {
  491. 489.  -     if (cur.viewAsBox) return cur.viewAsBox();
  492. 490.  -
  493. 491.  -     return !showTabbedBox('al_fans.php', {act: 'show_publics_box', oid: cur.oid}, {cache: 1}, ev);
  494. 492.  -   },
  495. 493.  -   fansBox: function(oid, ev, tab) {
  496. 494.  -     if (cur.viewAsBox) return cur.viewAsBox();
  497. 495.  -     return !showBox('al_fans.php', {act: 'box', tab: tab || 'fans', oid: oid}, {cache: 1, stat: ['page_help.css', 'fansbox.js']}, ev);
  498. 496.  -   },
  499. 497.  -   giftsBox: function(mid, ev, tab) {
  500. 498.  -     if (cur.viewAsBox) return cur.viewAsBox();
  501. 499.  -     return !showBox('al_gifts.php', {act: 'box', tab: tab || 'received', mid: mid}, {cache: 1, stat: ['gifts.css', 'gifts.js']}, ev);
  502. 500.  -   },
  503. 501.  -   idolsBox: function(oid, ev) {
  504. 502.  -     return Profile.fansBox(oid, ev, 'idols');
  505. 503.  -   },
  506. 504.  -   showClassHint: function(text) {
  507. 505.  -     var cl = ge('profile_class');
  508. 506.  -     if (!cl) return;
  509. 507.  -
  510. 508.  -     var hint = cur.classhint = bodyNode.appendChild(ce('div', {id: 'profile_class_hint', innerHTML: '\
  511. 509.  - <table cellspacing="0" cellpadding="0">\
  512. 510.  -   <tr>\
  513. 511.  -     <td rowspan="2"><div class="pointer"></div></td>\
  514. 512.  -     <td><div class="content">' + text + '</div></td>\
  515. 513.  -   </tr>\
  516. 514.  -   <tr><td><div class="bottom"></div></td></tr>\
  517. 515.  - </table>'}, {display: 'none'}));
  518. 516.  -
  519. 517.  -     var xy = getXY(cl), elsize = getSize(cl);
  520. 518.  -
  521. 519.  -     hint.style.opacity = 0;
  522. 520.  -     show(hint);
  523. 521.  -     var size = getSize(hint);
  524. 522.  -
  525. 523.  -     var top = xy[1] - Math.floor((size[1] - elsize[1]) / 2);
  526. 524.  -     var newleft = xy[0] + (vk.rtl ? -(size[0] + 10) : (elsize[0] + 10));
  527. 525.  -     hint.style.left = (newleft + (vk.rtl ? -10 : 10)) + 'px';
  528. 526.  -     hint.style.top = top + 'px';
  529. 527.  -
  530. 528.  -     var showhint = animate.pbind(hint, {left: newleft, opacity: 1}, 500, false), img = vkImage();
  531. 529.  -     img.onload = showhint;
  532. 530.  -     img.src = '/images/classhint.gif';
  533. 531.  -
  534. 532.  -     cur.destroy.push(function(c) {
  535. 533.  -       if (c.classhint && c.classhint.parentNode) {
  536. 534.  -         c.classhint.parentNode.removeChild(c.classhint);
  537. 535.  -         c.classhint = false;
  538. 536.  -       }
  539. 537.  -     });
  540. 538.  -     if (cur._back) {
  541. 539.  -       cur._back.hide.push(function() {
  542. 540.  -         if (cur.classhint && cur.classhint.parentNode) {
  543. 541.  -           cur.classhint.parentNode.removeChild(cur.classhint);
  544. 542.  -           cur.classhint = false;
  545. 543.  -         }
  546. 544.  -       });
  547. 545.  -     }
  548. 546.  -   },
  549. 547.  -   init: function(opts) {
  550. 548.  -     extend(cur, {
  551. 549.  -       module: 'profile',
  552. 550.  -       hideOther: Profile.hideOther,
  553. 551.  -       options: opts,
  554. 552.  -       oid: opts.user_id,
  555. 553.  -       postTo: opts.user_id,
  556. 554.  -       editing: false,
  557. 555.  -       viewAsWarn: opts.view_as_warn,
  558. 556.  -       viewAsBox: opts.view_as ? function() {
  559. 557.  -         setTimeout(showFastBox(getLang('global_warning'), cur.options.view_as).hide, 2000);
  560. 558.  -         return false;
  561. 559.  -       } : false,
  562. 560.  -       _back: opts.view_as ? false : {loc: opts.loc, show: [], hide: [], text: opts.back}
  563. 561.  -     });
  564. 562.  -     if (opts.view_as) {
  565. 563.  -       cur.nav.push(function(changed, old, n, opts) {
  566. 564.  -         if (cur._leave) {
  567. 565.  -           cur._leave = false;
  568. 566.  -           return;
  569. 567.  -         }
  570. 568.  -         showFastBox(getLang('global_warning'), cur.viewAsWarn, getLang('global_continue'), function() {
  571. 569.  -           cur._leave = true;
  572. 570.  -           nav.go(n);
  573. 571.  -         }, getLang('global_cancel'));
  574. 572.  -         return false;
  575. 573.  -       });
  576. 574.  -     }
  577. 575.  -     if (opts.mail_cache) {
  578. 576.  -       ajax.preload('al_mail.php', {act: 'write_box', to: cur.oid}, opts.mail_cache)
  579. 577.  -     }
  580. 578.  -     if (ge('profile_wall')) {
  581. 579.  -       wall.init(extend(opts, {automore: 1}));
  582. 580.  -     }
  583. 581.  -     if (opts.class_hint) {
  584. 582.  -       cur.clHintTimer = setTimeout(Profile.showClassHint.pbind(opts.class_hint), 1000);
  585. 583.  -     }
  586. 584.  -     if (opts.invite_hint) {
  587. 585.  -       cur.invHintTimer = setTimeout(function() {
  588. 586.  -         var hint = ge('top_invite_hint');
  589. 587.  -         showTooltip(hint, {
  590. 588.  -           text: opts.invite_hint,
  591. 589.  -           slide: 30,
  592. 590.  -           shift: [vk.rtl ? -220 : 0, 0, 0],
  593. 591.  -           showdt: 0,
  594. 592.  -           showsp: 500,
  595. 593.  -           forcetodown: true,
  596. 594.  -           className: 'invite_tt'
  597. 595.  -         });
  598. 596.  -         cur.tsUpdated = Profile.inviteHintUpdate;
  599. 597.  -         stManager.add(['tooltips.css', 'tooltips.js'], cur.tsUpdated);
  600. 598.  -       }, 1000);
  601. 599.  -     }
  602. 600.  -     (cur._back ? cur._back.hide : cur.destroy).push(function(c) {
  603. 601.  -       clearTimeout((c || cur).clHintTimer);
  604. 602.  -       clearTimeout((c || cur).invHintTimer);
  605. 603.  -       Profile.hideOther(-1);
  606. 604.  -       Profile.friendTTHide(true);
  607. 605.  -     });
  608. 606.  -     if (nav.objLoc.suggest) {
  609. 607.  -       delete nav.objLoc.suggest;
  610. 608.  -       Profile.suggestFriends();
  611. 609.  -     }
  612. 610.  -
  613. 611.  -     setTimeout(function () {
  614. 612.  -       if (window.FastChat && (window.curFastChat && curFastChat.inited || window.curNotifier && curNotifier.fc !== undefined)) {
  615. 613.  -         show('profile_fast_chat');
  616. 614.  -       }
  617. 615.  -     }, 100);
  618. 616.  -     var _a = window.audioPlayer, aid = currentAudioId();
  619. 617.  -     if (_a && aid && _a.showCurrentTrack) _a.showCurrentTrack();
  620. 618.  -
  621. 619.  -     if (opts.photos_upload) {
  622. 620.  -       stManager.add(['upload.js'], Profile.initPhotosUpload);
  623. 621.  -     }
  624. 622.  -
  625. 623.  -     cur.onPeerStatusChanged = function(peer, evType, evData) {
  626. 624.  -       if (peer == cur.oid) {
  627. 625.  -         var lv = ge('profile_online_lv');
  628. 626.  -         if (evType == 'online') {
  629. 627.  -           evData = intval(evData);
  630. 628.  -           setStyle('profile_mobile_online', {display: (evData && evData != 1) ? 'inline' : 'none'});
  631. 629.  -           if (!isVisible(lv)) {
  632. 630.  -             hide('profile_time_lv');
  633. 631.  -             setStyle(lv, {overflow: 'hidden', display: 'block', height: 0, paddingTop: 12, opacity: 0});
  634. 632.  -             show(lv);
  635. 633.  -             animate(lv, {paddingTop: 0, height: 12, opacity: 1}, 200, function() {
  636. 634.  -               setStyle(lv, {overflow: 'auto', height: 'auto'});
  637. 635.  -             });
  638. 636.  -             ajax.post('al_profile.php', {act: 'a_get_online_info', uid: cur.oid}, {
  639. 637.  -               onDone: function(cl) {
  640. 638.  -                 var btn = ge('profile_message_send');
  641. 639.  -                 if (hasClass(btn, cl)) return;
  642. 640.  -                 animate(btn, {opacity: 0}, 200, function() {
  643. 641.  -                   btn.className = 'profile_action_btn ' + cl;
  644. 642.  -                   animate(btn, {opacity: 1}, 200)
  645. 643.  -                 })
  646. 644.  -               }
  647. 645.  -             });
  648. 646.  -           }
  649. 647.  -         } else if (evType == 'offline') {
  650. 648.  -           setStyle(lv, {overflow: 'hidden', display: 'block', height: 12, paddingTop: 0, opacity: 1});
  651. 649.  -           animate(lv, {paddingTop: 12, height: 0, opacity: 0}, 200, function() {
  652. 650.  -             hide(lv);
  653. 651.  -           });
  654. 652.  -           var btn = ge('profile_message_send');
  655. 653.  -           if (hasClass(btn, 'profile_msg_call')) {
  656. 654.  -             var cl = 'profile_msg_none';
  657. 655.  -           } else if (hasClass(btn, 'profile_msg_split')) {
  658. 656.  -             var cl = 'profile_msg_msg';
  659. 657.  -           }
  660. 658.  -           if (cl) {
  661. 659.  -             animate(btn, {opacity: 0}, 200, function() {
  662. 660.  -               btn.className = 'profile_action_btn ' + cl;
  663. 661.  -               animate(btn, {opacity: 1}, 200)
  664. 662.  -             })
  665. 663.  -           }
  666. 664.  -         }
  667. 665.  -       }
  668. 666.  -     }
  669. 667.  -   },
  670. 668.  -   inviteHintUpdate: function() {
  671. 669.  -     var hint = ge('top_invite_hint');
  672. 670.  -     if (!hint || !hint.tt || !hint.tt.container) return;
  673. 671.  -     var lnk = isVisible('ts_wrap') ? ge('ts_settings') : ge('top_invite_link'), l = 0, r = 0;
  674. 672.  -     if (vk.rtl) {
  675. 673.  -       r = (413 - lnk.parentNode.parentNode.offsetLeft - (lnk.offsetWidth / 2)) + 'px';
  676. 674.  -     } else {
  677. 675.  -       l = (lnk.parentNode.parentNode.offsetLeft + (lnk.offsetWidth / 2) - 370) + 'px';
  678. 676.  -     }
  679. 677.  -     geByClass1('top_pointer', hint.tt.container).style.margin = '0px ' + r + ' 0px ' + l;
  680. 678.  -   },
  681. 679.  -   appStatusUpdate: function(hash) {
  682. 680.  -     if (!cur.ciApp) return;
  683. 681.  -
  684. 682.  -     var exp = isChecked('currinfo_app');
  685. 683.  -     ajax.post('al_apps.php', {act: 'toggle_currinfo', hash: hash, exp: exp, id: cur.ciApp}, {onDone: function(text) {
  686. 684.  -       if (vk.id != cur.oid || !text) return;
  687. 685.  -       val('current_info', text);
  688. 686.  -     }})
  689. 687.  -   },
  690. 688.  -   suggestFriends: function() {
  691. 689.  -     if (cur.viewAsBox) return cur.viewAsBox();
  692. 690.  -
  693. 691.  -     var box = showBox('al_friends.php', {
  694. 692.  -       act: 'select_friends_box',
  695. 693.  -       from: 'suggest_friends',
  696. 694.  -       friend_id: cur.oid
  697. 695.  -     }, {stat: ['privacy.js', 'privacy.css', 'indexer.js']});
  698. 696.  -     box.leaveOnSave = true;
  699. 697.  -     cur.onFlistSave = function(ids, list, hash) {
  700. 698.  -       //if (!ids || !ids.length) return;
  701. 699.  -       ajax.post('al_friends.php', {
  702. 700.  -         act: 'a_suggest_friends',
  703. 701.  -         mid: cur.oid,
  704. 702.  -         ids: ids.join(','),
  705. 703.  -         hash: hash
  706. 704.  -       }, {
  707. 705.  -         onDone: function(text) {
  708. 706.  -           box.hide();
  709. 707.  -           showDoneBox(text);
  710. 708.  -         },
  711. 709.  -         showProgress: box.showProgress,
  712. 710.  -         hideProgress: box.hideProgress
  713. 711.  -       });
  714. 712.  -     }
  715. 713.  -   },
  716. 714.  -   giftTooltip: function(obj, event, mid) {
  717. 715.  -     if (checkEvent(event)) return true;
  718. 716.  -     if (cur.hideGifts && !cur.giftsHidden) {
  719. 717.  -       return cur.hideGifts(event);
  720. 718.  -     }
  721. 719.  -     var is_module = hasClass(obj, 'module_header');
  722. 720.  -     addClass(obj, is_module ? 'module_inverted' : 'gifts_inverted');
  723. 721.  -     if (cur.giftsPrepare || !cur.votesBox) {
  724. 722.  -       if (!cur.giftsPrepare) {
  725. 723.  -         Profile.prepareGiftTooltip();
  726. 724.  -       }
  727. 725.  -       addClass(obj, is_module ? 'module_inverted_loading' : 'gifts_inverted_loading');
  728. 726.  -       cur.onGiftsLoad = Profile.giftTooltip.pbind(obj, event, mid);
  729. 727.  -       return cancelEvent(event);
  730. 728.  -     }
  731. 729.  -     removeClass(obj, is_module ? 'module_inverted_loading' : 'gifts_inverted_loading');
  732. 730.  -     if (!cur.votesBox) {
  733. 731.  -       return false;
  734. 732.  -     }
  735. 733.  -     if (Pads && Pads.hide) {
  736. 734.  -       Pads.hide();
  737. 735.  -     }
  738. 736.  -     var html = cur.votesBox[0];
  739. 737.  -     var js = cur.votesBox[1];
  740. 738.  -
  741. 739.  -     eval('(function(){' + js + ';})()');
  742. 740.  -     if (obj.tt && obj.tt.container && !cur.giftsTooltipEl) {
  743. 741.  -       cur.giftsTooltipEl = re(geByClass1('gifts_profile_block', obj.tt.container));
  744. 742.  -     }
  745. 743.  -     cur.giftsHidden = false;
  746. 744.  -     addEvent(document, 'click', cur.hideGifts);
  747. 745.  -     addEvent(document, 'keydown', cur.hideGiftsOnEsc);
  748. 746.  -     return cancelEvent(event);
  749. 747.  -   },
  750. 748.  -   prepareGiftTooltip: function(event, mid) {
  751. 749.  -     if (!cur.votesBox && !cur.giftsPrepare) {
  752. 750.  -       cur.giftsPrepare = true;
  753. 751.  -       ajax.post('/al_gifts.php', {act: 'new_gift_box', mid: mid}, {
  754. 752.  -         onDone: function() {
  755. 753.  -           var args = Array.prototype.slice.call(arguments),
  756. 754.  -               div = ce('div', {innerHTML: args[0]}); // preload imgs
  757. 755.  -           cur.votesBox = args;
  758. 756.  -           cur.giftsPrepare = false;
  759. 757.  -           if (cur.onGiftsLoad) {
  760. 758.  -             cur.onGiftsLoad();
  761. 759.  -           }
  762. 760.  -         },
  763. 761.  -         stat: ['gifts.css', 'tooltips.js', 'tooltips.css', 'notifier.js']
  764. 762.  -       })
  765. 763.  -     }
  766. 764.  -   },
  767. 765.  -   giftSend: function() {
  768. 766.  -     var uid = cur.oid, num = ge('gifts_selected_num').value;
  769. 767.  -     lockButton('gifts_submit');
  770. 768.  -     ajax.post('al_gifts.php', {
  771. 769.  -       act: 'do_send',
  772. 770.  -       mids: uid,
  773. 771.  -       type: isChecked('receiver_only') ? 1 : 0,
  774. 772.  -       number: num,
  775. 773.  -       text: ge('gifts_message').value,
  776. 774.  -       hash: ge('gifts_hash').value,
  777. 775.  -       from: 'profile',
  778. 776.  -       need_module: ge('profile_gifts') ? 0 : 1,
  779. 777.  -       old: 1
  780. 778.  -     }, {
  781. 779.  -       onDone: function(data, text, giftsCnt, giftsModule) {
  782. 780.  -         updateMoney(data);
  783. 781.  -         ge('gifts_message').value = '';
  784. 782.  -         checkbox('receiver_only', false);
  785. 783.  -         unlockButton('gifts_submit');
  786. 784.  -         cur.hideGifts && cur.hideGifts();
  787. 785.  -         if (cur.clearGiftTt) {
  788. 786.  -           if (cur.clearGiftTt.tt) cur.clearGiftTt.tt.destroy();
  789. 787.  -           cur.votesBox = cur.giftsPrepare = cur.onGiftsLoad = cur.clearGiftTt = false;
  790. 788.  -         }
  791. 789.  -         text = text.replace('<b>', '<div class="top_result_header">').replace('</b><br>', '</div>');
  792. 790.  -         showDoneBox(text, {out: 1500});
  793. 791.  -         cur.ignoreBoxCache = true;
  794. 792.  -         if (cur.module == 'profile' && cur.oid == uid && window.Profile) {
  795. 793.  -           if (ge('gifts_module_count') && giftsCnt) {
  796. 794.  -             ge('gifts_module_count').innerHTML = giftsCnt;
  797. 795.  -             Profile.showNewGift(num);
  798. 796.  -           } else if (!ge('profile_gifts') && giftsModule) {
  799. 797.  -             hide('gifts_count_module');
  800. 798.  -             var firstModule = geByClass1('module', ge('profile_narrow'));
  801. 799.  -             if (firstModule) {
  802. 800.  -               firstModule.parentNode.insertBefore(se(giftsModule), firstModule);
  803. 801.  -             }
  804. 802.  -           }
  805. 803.  -         }
  806. 804.  -       },
  807. 805.  -       onFail: function(text) {
  808. 806.  -         unlockButton('gifts_submit');
  809. 807.  -         cur.hideGifts && cur.hideGifts();
  810. 808.  -         text && topError(text);
  811. 809.  -         return true;
  812. 810.  -       }
  813. 811.  -     });
  814. 812.  -   },
  815. 813.  -   publishPhotos: function(photos) {
  816. 814.  -     var query = {
  817. 815.  -       act: 'post',
  818. 816.  -       type: 'photos_upload',
  819. 817.  -       to_id: vk.id,
  820. 818.  -       attach1_type: 'photos_list',
  821. 819.  -       attach1: photos,
  822. 820.  -       hash: cur.options.photos_post_hash || ''
  823. 821.  -     }
  824. 822.  -     if (!window.Notifier || !window.curFastChat || !curFastChat.ready) {
  825. 823.  -       query.need_wall = 1;
  826. 824.  -     }
  827. 825.  -     ajax.post('/al_wall.php', query, {
  828. 826.  -       onDone: function(wall) {
  829. 827.  -         cur.photoUploadBox.hide();
  830. 828.  -         delete cur.photoUploadBox;
  831. 829.  -         delete cur.savedPhotos;
  832. 830.  -         showDoneBox('<div style="font-weight: bold">' + getLang('profile_photos_published') + '</div>', {w: 320});
  833. 831.  -         if (query.need_wall && wall && ge('page_wall_posts')) {
  834. 832.  -           ge('page_wall_posts').innerHTML = wall;
  835. 833.  -         }
  836. 834.  -       },
  837. 835.  -       onFail: function() {
  838. 836.  -         cur.photoUploadBox.hide();
  839. 837.  -         delete cur.photoUploadBox;
  840. 838.  -         delete cur.savedPhotos;
  841. 839.  -       }
  842. 840.  -     });
  843. 841.  -     return false;
  844. 842.  -   },
  845. 843.  -   initPhotosUploadBox: function() {
  846. 844.  -     if (cur.photoUploadBox) return;
  847. 845.  -     cur.photoUploadBox = showFastBox({title: getLang('profile_photo_upload_title'), width: 410, onHide: function() {
  848. 846.  -         Upload.embed(cur.phUplInd || 0);
  849. 847.  -         delete cur.photoUploadBox;
  850. 848.  -         delete cur.savedPhotos;
  851. 849.  -       }}, '<div class="profile_photo_upload_box"><div>' + getLang('profile_photos_uploading') + '</div><div id="profile_photo_upload_label"></div><div class="profile_progress_wrap"><div id="profile_photo_progress" class="profile_progress" style="width: 0%;"></div></div></div>', getLang('global_cancel'), function() {
  852. 850.  -       cur.photoUploadBox.hide();
  853. 851.  -       delete cur.photoUploadBox;
  854. 852.  -       delete cur.savedPhotos;
  855. 853.  -     });
  856. 854.  -     cur.photoUploadBox.changed = 1;
  857. 855.  -   },
  858. 856.  -   initPhotosUpload: function() {
  859. 857.  -     if (browser.flash <= 9) return false;
  860. 858.  -     var photos_data = (cur.options || {}).photos_upload,
  861. 859.  -         area = ge('profile_photos_upload') || ge('profile_photos_extra_link'), el = se('<div id="profile_photo_uploader" onclick="cancelEvent(event); return false;" style="position: absolute; height: 100%; width: 100%; cursor: pointer;"></div>');
  862. 860.  -     if (!photos_data || !area) return false;
  863. 861.  -
  864. 862.  -     area.parentNode.insertBefore(el, area);
  865. 863.  -     cur.lang = extend(cur.lang || {}, photos_data.opts.lang);
  866. 864.  -     cur.phUplInd = Upload.init('profile_photo_uploader', photos_data.url, photos_data.params, {
  867. 865.  -       file_name: 'photo',
  868. 866.  -       file_size_limit: 1024 * 1024 * 5, // 5Mb
  869. 867.  -       file_types_description: 'Image files (*.jpg, *.jpeg, *.png, *.gif)',
  870. 868.  -       file_types: '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF',
  871. 869.  -       accept: 'image/jpeg,image/png,image/gif',
  872. 870.  -       file_match:  photos_data.opts.ext_re,
  873. 871.  -       lang: {},
  874. 872.  -
  875. 873.  -       onUploadStart: function(info, res) {
  876. 874.  -         Profile.initPhotosUploadBox();
  877. 875.  -         var txt;
  878. 876.  -         if (info.num == undefined) {
  879. 877.  -           info = res;
  880. 878.  -         }
  881. 879.  -         if (info.num === 0) {
  882. 880.  -           txt = (info.totalCount > 1) ? getLang('profile_photos_uploading_x').replace('%s', info.totalCount) : getLang('profile_photo_uploading');
  883. 881.  -         } else {
  884. 882.  -           txt = getLang('profile_photos_uploaded_x', info.num).replace('{count}', info.totalCount);
  885. 883.  -         }
  886. 884.  -         ge('profile_photo_upload_label').innerHTML = txt;
  887. 885.  -       },
  888. 886.  -       onUploadComplete: function(info, res) {
  889. 887.  -         if (info.totalCount > 1 && info.totalCount == info.num + 1) {
  890. 888.  -           ge('profile_photo_upload_label').innerHTML = getLang('profile_photos_uploaded_x', info.totalCount).replace('{count}', info.totalCount);
  891. 889.  -         }
  892. 890.  -         var params, i = info.ind !== undefined ? info.ind : info;
  893. 891.  -         try {
  894. 892.  -           params = eval('(' + res + ')');
  895. 893.  -         } catch(e) {
  896. 894.  -           params = q2ajx(res);
  897. 895.  -         }
  898. 896.  -         if (params.photos) {
  899. 897.  -           cur.savedPhotos = cur.savedPhotos || {mid: params.mid, gid: params.gid, aid: params.aid, server: params.server};
  900. 898.  -           cur.savedPhotos.photos = cur.savedPhotos.photos || [];
  901. 899.  -           cur.savedPhotos.photos.push({photo: params.photos, hash: params.hash});
  902. 900.  -           return;
  903. 901.  -         }
  904. 902.  -       },
  905. 903.  -       onUploadProgress: function(info, bytesLoaded, bytesTotal) {
  906. 904.  -         Profile.initPhotosUploadBox();
  907. 905.  -         var newWidth = intval(bytesLoaded / bytesTotal * 250);
  908. 906.  -         animate(ge('profile_photo_progress'), {width: newWidth + 'px'}, 200);
  909. 907.  -       },
  910. 908.  -       onUploadCompleteAll: function (i) {
  911. 909.  -         if (cur.photoUploadBox) {
  912. 910.  -           if (cur.savedPhotos) {
  913. 911.  -             var query = {act: 'done_add', context: 1, from: 'profile_block'}, k = 1;
  914. 912.  -             for (var j in (cur.savedPhotos.photos || [])) {
  915. 913.  -               query['photo'+k] = cur.savedPhotos.photos[j].photo;
  916. 914.  -               query['hash'+k] = cur.savedPhotos.photos[j].hash;
  917. 915.  -               k++;
  918. 916.  -             }
  919. 917.  -             delete cur.savedPhotos.photos;
  920. 918.  -             query = extend(query, cur.savedPhotos);
  921. 919.  -             ajax.post('/al_photos.php', query, {
  922. 920.  -               onDone: function(saved_photos, html, script) {
  923. 921.  -                 if (ge('profile_photos_module')) {
  924. 922.  -                   ge('profile_photos_module').innerHTML = se(html).innerHTML;
  925. 923.  -                   if (script) eval(script);
  926. 924.  -                 }
  927. 925.  -                 if (saved_photos) Profile.publishPhotos(saved_photos);
  928. 926.  -               },
  929. 927.  -               onFail: function() {
  930. 928.  -                 cur.photoUploadBox.hide();
  931. 929.  -                 delete cur.photoUploadBox;
  932. 930.  -                 delete cur.savedPhotos;
  933. 931.  -                 Upload.embed(cur.phUplInd || 0);
  934. 932.  -               }
  935. 933.  -             })
  936. 934.  -           } else {
  937. 935.  -             cur.photoUploadBox.hide();
  938. 936.  -             delete cur.photoUploadBox;
  939. 937.  -             delete cur.savedPhotos;
  940. 938.  -           }
  941. 939.  -           show(cur.photoUploadBox.progress);
  942. 940.  -         }
  943. 941.  -       },
  944. 942.  -       onUploadError: function(i) {
  945. 943.  -         debugLog('error', arguments); return;
  946. 944.  -       },
  947. 945.  -       onSelectClick: function(i) {
  948. 946.  -         if (!Upload.checked || !Upload.checked[i]) {
  949. 947.  -           Upload.check(i);
  950. 948.  -         }
  951. 949.  -       },
  952. 950.  -       onCheckComplete: function(i) {
  953. 951.  -         try {
  954. 952.  -           var postData = [], vars = Upload.vars[i];
  955. 953.  -           for (var k in vars) {
  956. 954.  -             postData.push(k+'='+vars[k]);
  957. 955.  -           }
  958. 956.  -           if (!vars['ajx']) {
  959. 957.  -             postData.push('ajx=1');
  960. 958.  -           }
  961. 959.  -           ge('uploader_lite'+i).configureServer(Upload.uploadUrls[i], escape(postData.join('&')));
  962. 960.  -         } catch (e) {debugLog(e);}
  963. 961.  -       },
  964. 962.  -       onDebug: debugLog,
  965. 963.  -
  966. 964.  -       flashPath: '/swf/photo_uploader_lite.swf',
  967. 965.  -       hoverEl: ge('profile_photos_upload') || ge('profile_photos_extra_link'),
  968. 966.  -       flash_lite: 1,
  969. 967.  -       noCheck: 1,
  970. 968.  -       noForm: 1,
  971. 969.  -       flashHeight: getSize(area)[1],
  972. 970.  -       forceFlash: 1,
  973. 971.  -       multiple: 1,
  974. 972.  -       multi_progress: 1,
  975. 973.  -       max_files: 50,
  976. 974.  -       clear: 1,
  977. 975.  -       type: 'photo',
  978. 976.  -       max_attempts: 3,
  979. 977.  -       server: photos_data.opts.server,
  980. 978.  -       error: photos_data.opts.default_error,
  981. 979.  -       error_hash: photos_data.opts.error_hash,
  982. 980.  -       label: photos_data.opts.label,
  983. 981.  -       dragEl: bodyNode
  984. 982.  -     });
  985. 983.  -   }
  986. 984.  - }, profile = Profile;
  987. 985.  -
  988. 986.  - try{stManager.done('profile.js');}catch(e){}
  989. ------
  990. Файл - writebox.js (Старый размер - 14788 | Новый - 0):
  991. 0.  - var WriteBox = {
  992. 1.  -   mrg: function(v) {
  993. 2.  -     return vk.rtl ? {marginRight: v} : {marginLeft: v};
  994. 3.  -   },
  995. 4.  -   show: function(box, opts) {
  996. 5.  -     addClass(boxLayerBG, 'bg_dark');
  997. 6.  -     box.setOptions({hideButtons: true, width: 502, bodyStyle: 'padding: 0px; border: 0px;'});
  998. 7.  -     box.removeButtons();
  999. 8.  -
  1000. 9.  -     cur.lang = extend(cur.lang || {}, opts.lang);
  1001. 10.  -     extend(cur, {
  1002. 11.  -       mbTxtInp: {},
  1003. 12.  -       mbEditable: opts.editable,
  1004. 13.  -       mbSmile: ge('mbe_smile'),
  1005. 14.  -       mbEmoji: opts.emoji,
  1006. 15.  -       mbMedia: null,
  1007. 16.  -       mbField: ge(opts.editable ? 'mail_box_editable' : 'mail_box_text'),
  1008. 17.  -       mbAva: ge('mail_box_ava'),
  1009. 18.  -       mbMediaTypes: opts.mediaTypes,
  1010. 19.  -       mbTo: opts.toData,
  1011. 20.  -       mbHash: opts.hash,
  1012. 21.  -       mbBannedHim: opts.bannedhim
  1013. 22.  -     });
  1014. 23.  -
  1015. 24.  -     if (opts.emojiRcnt && !cur.mbRcntEmoji) {
  1016. 25.  -       var html = [];
  1017. 26.  -       for (var a = opts.emojiRcnt, i = 0, l = a.length; i < l; ++i) {
  1018. 27.  -         var code = a[i];
  1019. 28.  -         if (!code) continue;
  1020. 29.  -         html.push('<a id="mbe_rc_em_' + code + '" class="mbe_rc_emojibtn" onmousedown="Emoji.addEmoji(cur.emojiWId, \'' + code + '\', this); return cancelEvent(event);">' + Emoji.getEmojiHTML(code, false, true) + '</a>');
  1021. 30.  -       }
  1022. 31.  -       cur.mbRcntEmoji = html.join('');
  1023. 32.  -     }
  1024. 33.  -     val('mbe_rcemoji', cur.mbRcntEmoji || '');
  1025. 34.  -
  1026. 35.  -
  1027. 36.  -     cur.sharedImWrite = {};
  1028. 37.  -     cur.emojiWId = Emoji.init(cur.mbField, {
  1029. 38.  -       ttDiff: -97,
  1030. 39.  -       controlsCont: ge('mbe_emoji_wrap'),
  1031. 40.  -       shouldFocus: true,
  1032. 41.  -       onSend: WriteBox.send,
  1033. 42.  -       noEnterSend: 1,
  1034. 43.  -       forceTxt: !opts.editable,
  1035. 44.  -       sharedTT: cur.sharedImWrite,
  1036. 45.  -       txt: ge('mail_box_editable'),
  1037. 46.  -       checkEditable: WriteBox.checkEditable,
  1038. 47.  -       saveDraft: WriteBox.saveDraft,
  1039. 48.  -       rceCont: ge('mbe_rcemoji_cont'),
  1040. 49.  -       addMediaBtn: ge('mail_box_add_row'),
  1041. 50.  -       sendWrap: ge('mail_box_controls'),
  1042. 51.  -       onKeyAction: function(e) {
  1043. 52.  -         clearTimeout(cur.saveWriteBoxDraft);
  1044. 53.  -         cur.saveWriteBoxDraft = setTimeout(WriteBox.saveDraft, e.type == 'paste' ? 0 : 300);
  1045. 54.  -       }
  1046. 55.  -     });
  1047. 56.  -
  1048. 57.  -     if (!cur.mbTo[0]) {
  1049. 58.  -       setStyle(ge('mail_box_topic'), WriteBox.mrg(0));
  1050. 59.  -       cur.mbHidden = true;
  1051. 60.  -     } else {
  1052. 61.  -       cur.mbHidden = false;
  1053. 62.  -     }
  1054. 63.  -
  1055. 64.  -     /*if (!cur.mbEditable) {
  1056. 65.  -       autosizeSetup(cur.mbField, {minHeight: 120})
  1057. 66.  -       setTimeout(elfocus.pbind(cur.mbField), 0);
  1058. 67.  -     }*/
  1059. 68.  -
  1060. 69.  -     cur.imwEmoji = -1;
  1061. 70.  -
  1062. 71.  -     var tmp = cur.postTo;
  1063. 72.  -     cur.postTo = false;
  1064. 73.  -     box.setOptions({onHide: function() {
  1065. 74.  -       removeClass(boxLayerBG, 'bg_dark');
  1066. 75.  -       removeEvent(document, 'keydown', WriteBox.onKey);
  1067. 76.  -       if (cur.mbEmojiShown) Emoji.ttClick(cur.emojiWId, cur.mbSmile, true);
  1068. 77.  -       if (cur.mbOnMouseClick) {
  1069. 78.  -         cur.onMouseClick = cur.mbOnMouseClick;
  1070. 79.  -         cur.mbOnMouseClick = false;
  1071. 80.  -       }
  1072. 81.  -       if (browser.mozilla) {
  1073. 82.  - //        document.execCommand("enableObjectResizing", false, true);
  1074. 83.  -       }
  1075. 84.  -     }, onShow: function() {
  1076. 85.  -       addClass(boxLayerBG, 'bg_dark');
  1077. 86.  -       addEvent(document, 'keydown', WriteBox.onKey);
  1078. 87.  -       if (!cur.mbOnMouseClick) {
  1079. 88.  -         cur.mbOnMouseClick = cur.onMouseClick;
  1080. 89.  -       }
  1081. 90.  -       if (browser.mozilla) {
  1082. 91.  - //        document.execCommand("enableObjectResizing", false, false);
  1083. 92.  -       }
  1084. 93.  -       if (cur.sorterClbk) {
  1085. 94.  -         cur.sorterClbk();
  1086. 95.  -         delete cur.sorterClbk;
  1087. 96.  -       }
  1088. 97.  -     }, onClean: function() {
  1089. 98.  -       clearTimeout(cur.mbSaveDraftTO);
  1090. 99.  -       delete cur.mbSaveDraftTO;
  1091. 100.  -       delete cur.mbField;
  1092. 101.  -       cur.postTo = tmp;
  1093. 102.  -       cur.mbEmojiScroll = cur.mbEmojiExpanded = false;
  1094. 103.  -       if (window.WideDropdown) WideDropdown.deinit('mail_box_dd');
  1095. 104.  -     }});
  1096. 105.  -     addEvent(document, 'keydown', WriteBox.onKey);
  1097. 106.  -     if (!cur.mbOnMouseClick) {
  1098. 107.  -       cur.mbOnMouseClick = cur.onMouseClick;
  1099. 108.  -     }
  1100. 109.  -     if (browser.mozilla) {
  1101. 110.  - //      document.execCommand("enableObjectResizing", false, false);
  1102. 111.  -     }
  1103. 112.  -
  1104. 113.  -     if (!window._mbFriends) { // is used in sharebox.js too!
  1105. 114.  -       ajax.post('hints.php', {act: 'a_json_friends', from: 'imwrite', str: ''}, {onDone: function(arr) {
  1106. 115.  -         window._mbFriends = arr;
  1107. 116.  -         var dd = (cur.wdd && cur.wdd['mail_box_dd']);
  1108. 117.  -         if (dd) {
  1109. 118.  -           WideDropdown.items('mail_box_dd', arr);
  1110. 119.  -         }
  1111. 120.  -       }});
  1112. 121.  -     }
  1113. 122.  -     stManager.add(['wide_dd.js', 'wide_dd.css'], function() {
  1114. 123.  -       if (WideDropdown.init('mail_box_dd', {
  1115. 124.  -         defaultItems: window._mbFriends,
  1116. 125.  -         url: 'hints.php',
  1117. 126.  -         params: {act: 'a_json_friends', from: 'imwrite'},
  1118. 127.  -         noResult: getLang('mail_not_found'),
  1119. 128.  -         img: cur.mbAva,
  1120. 129.  -         introText: getLang('mail_choose_recipient'),
  1121. 130.  -         custom: function(q) {
  1122. 131.  -           return (q.indexOf('@') != -1) ? [[clean(q), clean(q), getLang('mail_enter_email_address'), '/images/pics/contact50.gif', 0, '']] : false;
  1123. 132.  -         },
  1124. 133.  -         chooseOnBlur: function(id) {
  1125. 134.  -           id = trim(id + '');
  1126. 135.  -           return id.length < 64 && id.match(/^[a-z0-9_\-\.]+@[a-z0-9_\-\.]+\.[a-z]{2,6}$/i);
  1127. 136.  -         },
  1128. 137.  -         onChange: function(act) {
  1129. 138.  -           var dd = cur.wdd['mail_box_dd'], sel = dd.selCount, peer = false, draft, ret = true;
  1130. 139.  -           if (sel == 1 && !WriteBox.editableHasVal(cur.mbField)) {
  1131. 140.  -             for (peer in dd.selected) break;
  1132. 141.  -             WriteBox.restoreDraft(peer);
  1133. 142.  -           }
  1134. 143.  -           if (act == 1) { // added
  1135. 144.  -             setTimeout(cur.mbEditable ? Emoji.editableFocus.pbind(cur.mbField, domLC(cur.mbField)) : elfocus.pbind(cur.mbField), 0);
  1136. 145.  -           }
  1137. 146.  -           var t = Fx.Transitions.easeOutCubic, d = 150, f = 'ease-out';
  1138. 147.  -           if (sel < 1 && !cur.mbHidden) {
  1139. 148.  -             cssAnim(cur.mbAva, extend({opacity: 0}, WriteBox.mrg(-26)), {duration: d, transition: t, func: f}, hide.pbind(cur.mbAva));
  1140. 149.  -             cssAnim(ge('mail_box_topic'), WriteBox.mrg(0), {duration: d, transition: t, func: f});
  1141. 150.  -             cur.mbHidden = true;
  1142. 151.  -             ret = 0;
  1143. 152.  -           } else if (sel > 0 && cur.mbHidden) {
  1144. 153.  -             show(cur.mbAva);
  1145. 154.  -             cssAnim(cur.mbAva, extend({opacity: 1}, WriteBox.mrg(0)), {duration: d, transition: t, func: f});
  1146. 155.  -             cssAnim(ge('mail_box_topic'), WriteBox.mrg(26), {duration: d, transition: t, func: f});
  1147. 156.  -             cur.mbHidden = false;
  1148. 157.  -             ret = 1;
  1149. 158.  -           }
  1150. 159.  -           WriteBox.checkLen(cur.mbField);
  1151. 160.  -           WriteBox.showToFull();
  1152. 161.  -           val('mail_box_to_header', getLang((sel > 1) ? 'mail_rcpnts' : 'mail_rcpnt'));
  1153. 162.  -           return ret;
  1154. 163.  -         },
  1155. 164.  -         itemMark: function(item) {
  1156. 165.  -           return intval(item[5]) ? 1 : 0;
  1157. 166.  -         }
  1158. 167.  -       })) {
  1159. 168.  -         WideDropdown.select('mail_box_dd', false, cur.mbTo);
  1160. 169.  -       }
  1161. 170.  -     });
  1162. 171.  -     stManager.add(['page.js', 'page.css'], function() {
  1163. 172.  -       cur.mbMedia = initAddMedia('mail_box_add_link', 'mail_box_added_row', cur.mbMediaTypes, {mail: 1, nocl: 1, editable: 1, sortable: 1, teWidth: 350, teHeight: 300, toggleLnk: true});
  1164. 173.  -       cur.mbMedia.onChange = function() {
  1165. 174.  -         box.changed = true;
  1166. 175.  -       }
  1167. 176.  -       if (ls.checkVersion() && cur.mbTo[0]) {
  1168. 177.  -         WriteBox.restoreDraft(cur.mbTo[0]);
  1169. 178.  -       }
  1170. 179.  -     });
  1171. 180.  -   },
  1172. 181.  -   getPeer: function () {
  1173. 182.  -     var dd = cur.wdd['mail_box_dd'],
  1174. 183.  -         sel = (dd) ? dd.selCount : false,
  1175. 184.  -         peer = false;
  1176. 185.  -     if (sel != 1) {
  1177. 186.  -       return false;
  1178. 187.  -     }
  1179. 188.  -     for (peer in dd.selected)
  1180. 189.  -       break;
  1181. 190.  -     return intval(peer);
  1182. 191.  -   },
  1183. 192.  -   restoreDraft: function(needPeer) {
  1184. 193.  -     var peer = WriteBox.getPeer();
  1185. 194.  -     if (!peer || needPeer && peer != intval(needPeer) || browser.mobile || !cur.mbMedia) return;
  1186. 195.  -
  1187. 196.  -     var draft = ls.get('im_draft' + vk.id + '_' + peer);
  1188. 197.  -     if (draft) {
  1189. 198.  -       if (!WriteBox.editableHasVal(cur.mbField)) {
  1190. 199.  -         if (cur.mbEditable) {
  1191. 200.  -           val(cur.mbField, Emoji.emojiToHTML(clean(draft.txt || ''), true).replace(/\n/g, '<br/>'));
  1192. 201.  -         } else {
  1193. 202.  -           val(cur.mbField, draft.txt || '');
  1194. 203.  -         }
  1195. 204.  -       }
  1196. 205.  -       if ((draft.medias || []).length && !(cur.mbMedia.chosenMedias || []).length) {
  1197. 206.  -         var m = [];
  1198. 207.  -         for (var i in draft.medias) {
  1199. 208.  -           if (!draft.medias[i]) continue;
  1200. 209.  -           m.push(draft.medias[i].slice(0, 2).join(','));
  1201. 210.  -         }
  1202. 211.  -         ajax.post('al_im.php', {act: 'draft_medias', media: m.join('*')}, {onDone: function(resp) {
  1203. 212.  -           if (!cur.mbField || WriteBox.getPeer() != peer || !(resp || []).length) return;
  1204. 213.  -           each(resp, function() {
  1205. 214.  -             var args = [this[0], this[1], this[2], this[3], true];
  1206. 215.  -             cur.mbMedia.chooseMedia.apply(cur.mbMedia, args);
  1207. 216.  -           });
  1208. 217.  -         }});
  1209. 218.  -       }
  1210. 219.  -     }
  1211. 220.  -     WriteBox.checkEditable(cur.emojiWId, cur.mbField);
  1212. 221.  -     WriteBox.checkLen(cur.mbField);
  1213. 222.  -   },
  1214. 223.  -   saveDraft: function() {
  1215. 224.  -     var peer = WriteBox.getPeer();
  1216. 225.  -     if (!peer) return;
  1217. 226.  -
  1218. 227.  -     var data = {
  1219. 228.  -       txt: trim(Emoji.editableVal(cur.mbField)),
  1220. 229.  -       medias: []
  1221. 230.  -     }, m = cur.mbMedia.getMedias();
  1222. 231.  -     for (var i = 0, l = m.length; i < l; ++i) {
  1223. 232.  -       if (m[i]) data.medias.push([m[i][0], m[i][1]]);
  1224. 233.  -     }
  1225. 234.  -     if (!data.medias.length && !data.txt.length) {
  1226. 235.  -       data = false;
  1227. 236.  -     };
  1228. 237.  -     ls.set('im_draft' + vk.id + '_' + intval(peer), data);
  1229. 238.  -   },
  1230. 239.  -   toFull: function(ev, peer) {
  1231. 240.  -     if (checkEvent(ev)) return;
  1232. 241.  -
  1233. 242.  -     val('mail_box_to_full', '<div class="progress" style="display: block"></div>');
  1234. 243.  -     var query = {'0': 'im', sel: peer};
  1235. 244.  -     var msg = trim(Emoji.editableVal(cur.mbField));
  1236. 245.  -     if (msg) {
  1237. 246.  -       query.message = msg;
  1238. 247.  -     }
  1239. 248.  -     if (cur.mbMedia.chosenMedias) {
  1240. 249.  -       var meds = cur.mbMedia.getMedias(), media = [];
  1241. 250.  -       for (var i = 0, l = meds.length; i < l; ++i) {
  1242. 251.  -         var el = meds[i], row = [];
  1243. 252.  -         for (var k in el) {
  1244. 253.  -           if (typeof(el[k]) != 'object') {
  1245. 254.  -             row.push(el[k]);
  1246. 255.  -           }
  1247. 256.  -         }
  1248. 257.  -         media.push(row.join(','))
  1249. 258.  -       }
  1250. 259.  -       query.media = media.join('*');
  1251. 260.  -     }
  1252. 261.  -     nav.go(query, null, {noframe: 1});
  1253. 262.  -     return false;
  1254. 263.  -   },
  1255. 264.  -
  1256. 265.  -   showToFull: function() {
  1257. 266.  -     hide('mail_box_to_full');
  1258. 267.  -     var mid = false, dd = cur.wdd && cur.wdd['mail_box_dd'], sex = 0, text = '', sel;
  1259. 268.  -     for (var i in dd.selected) {
  1260. 269.  -       sel = dd.selected[i];
  1261. 270.  -       if (mid) return;
  1262. 271.  -       mid = sel[0];
  1263. 272.  -       if (mid != intval(mid)) return;
  1264. 273.  -       sex = sel[6];
  1265. 274.  -       text = sel[7];
  1266. 275.  -     }
  1267. 276.  -     if (mid > 2e9) {
  1268. 277.  -       val('mail_box_to_full', '<a href="/im?sel=c' + (mid - 2e9) + '" onclick="return WriteBox.toFull(event, ' + mid + ')">' + getLang('mail_im_to_multidialog') + '</a>');
  1269. 278.  -       show('mail_box_to_full');
  1270. 279.  -     } else {
  1271. 280.  -       if (!mid || !sex || !text) return;
  1272. 281.  -       val('mail_box_to_full', ('<a href="/im?sel=' + mid + '" onclick="return WriteBox.toFull(event, ' + mid + ')">' + getLang('mail_go_to_dialog') + '</a>').replace('%s', text));
  1273. 282.  -       show('mail_box_to_full');
  1274. 283.  -     }
  1275. 284.  -   },
  1276. 285.  -   send: function(sure) {
  1277. 286.  -     if (buttonLocked('mail_box_send')) return;
  1278. 287.  -
  1279. 288.  -     var text = trim(Emoji.editableVal(cur.mbField)), media = cur.mbMedia.getMedias(), dd = cur.wdd && cur.wdd['mail_box_dd'];
  1280. 289.  -     if (!dd || !dd.selCount) return elfocus('mail_box_inp');
  1281. 290.  -
  1282. 291.  -     if (cur.mbEditable) {
  1283. 292.  -       WriteBox.extractEmoji();
  1284. 293.  -     }
  1285. 294.  -
  1286. 295.  -     var params = {
  1287. 296.  -       act: 'a_send',
  1288. 297.  -       chas: cur.mbHash,
  1289. 298.  -       message: text,
  1290. 299.  -       title: (isVisible('mail_box_title_wrap') && val('mail_box_title') || ''),
  1291. 300.  -       from: 'box',
  1292. 301.  -       media: [],
  1293. 302.  -       to_ids: []
  1294. 303.  -     };
  1295. 304.  -     for (var i = 0, l = media.length, v; i < l; ++i) {
  1296. 305.  -       if (v = media[i]) {
  1297. 306.  -         params.media.push(v[0] + ':' + v[1]);
  1298. 307.  -       }
  1299. 308.  -     }
  1300. 309.  -     params.media = params.media.join(',');
  1301. 310.  -
  1302. 311.  -     if (!text && !params.media) {
  1303. 312.  -       return cur.mbEditable ? Emoji.editableFocus(cur.mbField) : elfocus(cur.mbField);
  1304. 313.  -     }
  1305. 314.  -
  1306. 315.  -     for (var i in dd.selected) {
  1307. 316.  -       params.to_ids.push(i.replace(/_$/, ''));
  1308. 317.  -     }
  1309. 318.  -     params.to_ids = params.to_ids.join(',');
  1310. 319.  -
  1311. 320.  -     if (cur.mbBannedHim == params.to_ids && sure !== true) {
  1312. 321.  -       showBox('al_profile.php', {act: 'banned_him', action: 'mail', mid: cur.mbBannedHim}).onContinue = WriteBox.send.pbind(true);
  1313. 322.  -       return;
  1314. 323.  -     }
  1315. 324.  -
  1316. 325.  -     ajax.post('al_mail.php', params, {onDone: function(text, peer) {
  1317. 326.  -       if (peer) {
  1318. 327.  -         ls.set('im_draft' + vk.id + '_' + peer, false);
  1319. 328.  -       }
  1320. 329.  -       curBox().hide();
  1321. 330.  -       showDoneBox(text);
  1322. 331.  -     }, showProgress: lockButton.pbind('mail_box_send'), hideProgress: unlockButton.pbind('mail_box_send')});
  1323. 332.  -   },
  1324. 333.  -   checkLen: function(inp) {
  1325. 334.  -     cur.mbTxtInp.value = Emoji.editableVal(inp);
  1326. 335.  -     checkTextLength(4096, cur.mbTxtInp, 'mail_box_warn');
  1327. 336.  -     var dd = cur.wdd && cur.wdd['mail_box_dd'], mchat = dd.full && (dd.selCount == 1);
  1328. 337.  -     if (!dd) return;
  1329. 338.  -     toggle('mail_box_title_wrap', (cur.mbTxtInp.lastLen > 200 && !mchat || dd.selCount > 1 || val('mail_box_title')));
  1330. 339.  -   },
  1331. 340.  -
  1332. 341.  -   codeToChr: function(code) {
  1333. 342.  -     var len = code.length / 4;
  1334. 343.  -     var chr = '';
  1335. 344.  -     var i = 0;
  1336. 345.  -     while(len--) {
  1337. 346.  -       chr += String.fromCharCode(parseInt(code.substr(i, 4), 16))
  1338. 347.  -       i += 4;
  1339. 348.  -     }
  1340. 349.  -     return chr;
  1341. 350.  -   },
  1342. 351.  -   editableHasVal: function(cont) {
  1343. 352.  -     if (!cont) return false;
  1344. 353.  -     if (cont.tagName == 'TEXTAREA') return !!val(cont);
  1345. 354.  -     return !!(geByTag1('IMG', cont) || stripHTML(val(cont)).replace(/[\s\xa0]/g, '').length);
  1346. 355.  -   },
  1347. 356.  -
  1348. 357.  -   checkEditable: function(optId, obj) {
  1349. 358.  -     if (!cur.mbEditable) return;
  1350. 359.  -
  1351. 360.  -     /*var diff = (cur.mbField.scrollHeight > cur.mbField.offsetHeight) ? sbWidth() : 0;
  1352. 361.  -     var bl = ge('mbe_emoji_block');
  1353. 362.  -     setStyle(ge('mbe_smile'), vk.rtl ? {marginRight: 425 - diff} : {marginLeft: 425 - diff});
  1354. 363.  -     if (bl) setStyle(bl, vk.rtl ? {marginRight: 335 - diff} : {marginLeft: 335 - diff});*/
  1355. 364.  -
  1356. 365.  -     Emoji.checkEditable(optId, obj, {height: 180});
  1357. 366.  -   },
  1358. 367.  -
  1359. 368.  -   cssAnimation: function() {
  1360. 369.  -     var v = intval(browser.version);
  1361. 370.  -     if ((browser.chrome && v > 14) || (browser.mozilla && v > 13) || (browser.opera && v > 2)) {
  1362. 371.  -       return true;
  1363. 372.  -     }
  1364. 373.  -     return false;
  1365. 374.  -   },
  1366. 375.  -
  1367. 376.  -
  1368. 377.  -   onKey: function (e) {
  1369. 378.  -     var inputActive = (e.target.tagName == 'INPUT' || e.target.tagName == 'TEXTAREA' || e.target.id == 'mail_box_editable');
  1370. 379.  -
  1371. 380.  -     if (e.keyCode > 40 && !e.ctrlKey && !e.metaKey && !inputActive) {
  1372. 381.  -       if (cur.mbEditable) {
  1373. 382.  -         Emoji.editableFocus(cur.mbField, false, true);
  1374. 383.  -       } else {
  1375. 384.  -         var el = cur.mbField;
  1376. 385.  -         !el.active && elfocus(el);
  1377. 386.  -       }
  1378. 387.  -     }
  1379. 388.  -     return true;
  1380. 389.  -   },
  1381. 390.  -
  1382. 391.  -   extractEmoji: function() {
  1383. 392.  -     var emjs = geByClass('emoji', cur.mbField);
  1384. 393.  -     var newRc = {};
  1385. 394.  -     for(var i in emjs) {
  1386. 395.  -       newRc[Emoji.getCode(emjs[i])] = 1;
  1387. 396.  -     }
  1388. 397.  -     var rcCont = ge('mbe_rcemoji');
  1389. 398.  -     var rchtml = '';
  1390. 399.  -     var ml = 0;
  1391. 400.  -     for (var code in newRc) {
  1392. 401.  -       if (ge('mbe_rc_em_'+code)) continue;
  1393. 402.  -       rchtml += '<a id="mbe_rc_em_'+code+'" class="mbe_rc_emojibtn" onmousedown="Emoji.addEmoji(cur.emojiWId, \''+code+'\', this); return cancelEvent(event);">'+Emoji.getEmojiHTML(code, false, true)+'</a>';
  1394. 403.  -       ml -= 22;
  1395. 404.  -     }
  1396. 405.  -     cur.mbRcntEmoji = (rchtml + val(rcCont)).split('a><a').slice(0, 7).join('a><a');
  1397. 406.  -     if (cur.mbRcntEmoji.match(/<\/$/)) cur.mbRcntEmoji += 'a>';
  1398. 407.  -     rcCont.insertBefore(cf(rchtml), rcCont.firstChild);
  1399. 408.  -     setStyle(rcCont, {marginLeft: ml});
  1400. 409.  -     animate(rcCont, {marginLeft: 0}, {duration: 150, transition: Fx.Transitions.easeOutCubic, onComplete: function() {
  1401. 410.  -       var emjs = geByClass('mbe_rc_emojibtn', rcCont).slice(7);
  1402. 411.  -       for(var i in emjs) {
  1403. 412.  -         re(emjs[i]);
  1404. 413.  -       }
  1405. 414.  -     }});
  1406. 415.  -   }
  1407. 416.  -
  1408. 417.  - }
  1409. 418.  -
  1410. 419.  - try{stManager.done('writebox.js');}catch(e){}
  1411. ------
Advertisement
Add Comment
Please, Sign In to add comment