Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

vkontakte.ru

By: a guest on Mar 28th, 2011  |  syntax: HTML  |  size: 300.77 KB  |  views: 5,017  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. ONLINE WEB SERVICES - SvcOS http://svcos.net  |   http://vkontakte.ru/blog3
  2.  
  3. try{stManager.done('lang0_0.js');}catch(e){}
  4. Aboutme='О себе:';
  5. Acad_status='Статус:';
  6. Acad_status_bach='Студент (бакалавр)';
  7. Acad_status_bach_fm='Студентка (бакалавр)';
  8. Acad_status_ent='Абитуриент';
  9. Acad_status_ent_fm='Абитуриентка';
  10. Acad_status_gradbach='Выпускник (бакалавр)';
  11. Acad_status_gradbach_fm='Выпускница (бакалавр)';
  12. Acad_status_gradDr='Доктор наук';
  13. Acad_status_gradDr_fm='Доктор наук';
  14. Acad_status_gradmas='Выпускник (магистр)';
  15. Acad_status_gradmas_fm='Выпускница (магистр)';
  16. Acad_status_gradPhD='Кандидат наук';
  17. Acad_status_gradPhD_fm='Кандидат наук';
  18. Acad_status_gradpost='Аспирант';
  19. Acad_status_gradpost_fm='Аспирантка';
  20. Acad_status_gradspec='Выпускник (специалист)';
  21. Acad_status_gradspec_fm='Выпускница (специалист)';
  22. Acad_status_mas='Студент (магистр)';
  23. Acad_status_mas_fm='Студентка (магистр)';
  24. Acad_status_spec='Студент (специалист)';
  25. Acad_status_spec_fm='Студентка (специалист)';
  26. Activities='Деятельность:';
  27. Add_to_friends='Добавить в друзья';
  28. All='Все';
  29. add_box_title='Добавление в друзья';
  30. admin2_art='Школа искусств';
  31. admin2_artistic='Худ. школа';
  32. admin2_colledge='Колледж:';
  33. admin2_driving_sch='Автошкола';
  34. admin2_evening='Вечерняя школа';
  35. admin2_garten='Детский сад';
  36. admin2_gymnasium='Гимназия:';
  37. admin2_internat='Школа-интернат';
  38. admin2_liceum='Лицей:';
  39. admin2_music='Музыкальная школа';
  40. admin2_prof='Проф. училище';
  41. admin2_prof_liceum='Проф. лицей';
  42. admin2_prof_tech='ПТУ';
  43. admin2_school='Школа:';
  44. admin2_spec_school='Училище';
  45. admin2_sports='Спортивная школа';
  46. admin2_tech='Техникум';
  47. ajax_no_page_access='Страница защищена настройками приватности.';
  48. all='все';
  49. audio_do_you_want_flash='Хотите перейти на страницу установки проигрывателя?';
  50. audio_you_need_flash='Для того, чтобы воспользоваться аудиосервисом, Вам необходимо установить Flash-проигрыватель.';
  51. Begin_educ_year='Год начала обучения';
  52. Begin_mil_year='Год начала службы';
  53. Begin_work_year='Год начала работы';
  54. Birth_date=['','День рождения:','День рождения:'];
  55. blog_header='Блог';
  56. blog_lastnews='Последние новости';
  57. blog_message='Сообщение';
  58. blog_news='Новости сайта';
  59. bottom_about='о сайте';
  60. bottom_ad='реклама';
  61. bottom_author='Павел Дуров';
  62. bottom_blog='блог';
  63. bottom_support='техподдержка';
  64. bottom_terms='правила';
  65. box_cancel='Отмена';
  66. box_close='Закрыть';
  67. box_loading='Загрузка...';
  68. box_no='Нет';
  69. box_save='Сохранить';
  70. box_send='Отправить';
  71. box_yes='Да';
  72. Cancel='Отмена';
  73. Chair='Кафедра:';
  74. Class='Класс';
  75. Coincid_activity='Деятельность';
  76. Coincid_books='Книги';
  77. Coincid_class='Класс';
  78. Coincid_company='Компания';
  79. Coincid_games='Игры';
  80. Coincid_gradyear='Выпуск';
  81. Coincid_hometown='Родной город';
  82. Coincid_interests='Интересы';
  83. Coincid_movies='Фильмы';
  84. Coincid_music='Музыка';
  85. Coincid_name='Имя';
  86. Coincid_nickname='Никнейм';
  87. Coincid_position='Должность';
  88. Coincid_prevsurname='Девичья фамилия';
  89. Coincid_religion='Религия';
  90. Coincid_school='Школа';
  91. Coincid_specializ='Специализация';
  92. Coincid_surname='Фамилия';
  93. Coincid_tvshow='Телешоу';
  94. Contact_home_tel_abbr='Дом. телефон:';
  95. Contact_icq='ICQ:';
  96. Contact_mob_tel_abbr='Моб. телефон:';
  97. Contact_nick='Никнейм:';
  98. Contact_site='Веб-сайт:';
  99. Country='Страна';
  100. captcha_cancel='Отмена';
  101. captcha_enter_code='Введите код с картинки:';
  102. captcha_send='Отправить';
  103. clear_delete_all=['','Удалить все его %s за последнюю неделю','Удалить все её %s за последнюю неделю'];
  104. clear_delete_all_cancel='Отмена';
  105. clear_delete_all_delete='Удалить';
  106. clear_delete_all_my='Удалить все мои %s за последнюю неделю';
  107. Delete='Удалить';
  108. datepicker_date_format='{day} {month} {year}';
  109. datepicker_month_format='{month} {year}';
  110. Edit='Редактировать';
  111. End_educ_year='Год окончания обучения';
  112. End_mil_year='Год окончания службы';
  113. End_work_year='Год окончания работы';
  114. ebrowse_event_types='Типы событий';
  115. ed='ред.';
  116. edit='редактировать';
  117. error='ошибка';
  118. Faculty='Факультет:';
  119. Family='Семейное положение:';
  120. Family_complicated='Всё сложно';
  121. Family_fm_engaged='Помолвлена';
  122. Family_fm_has_friend='Есть друг';
  123. Family_fm_married='Замужем';
  124. Family_fm_not_married='Не замужем';
  125. Family_in_search='В активном поиске';
  126. Family_m_engaged='Помолвлен';
  127. Family_m_has_friend='Есть подруга';
  128. Family_m_married='Женат';
  129. Family_m_not_married='Не женат';
  130. Fast_find='Быстрый поиск';
  131. Fave_books='Любимые книги:';
  132. Fave_games='Любимые игры:';
  133. Fave_movies='Любимые фильмы:';
  134. Fave_music='Любимая музыка:';
  135. Fave_quotes='Любимые цитаты:';
  136. Fave_tvshows='Любимые телешоу:';
  137. Form='Форма обучения:';
  138. Form_corr='Заочная';
  139. Form_day='Дневная';
  140. Form_even='Вечерняя';
  141. fill_balance='Пополнить баланс';
  142. friendcat_catarmy='Армия';
  143. friendcat_catfamily='Семья';
  144. friendcat_cathome='Дом';
  145. friendcat_catinternet='Интернет';
  146. friendcat_catjob='Работа';
  147. friendcat_catrest='Отдых';
  148. friendcat_catschool='Школа';
  149. friendcat_catuni='Вуз';
  150. functions_sure_delete='Вы действительно хотите удалить эту запись?';
  151. Graduation='Выпуск';
  152. Grad_year='Год выпуска';
  153. Gymnasium='Гимназия';
  154. global_add='Добавить';
  155. global_add_to_my_videos='Добавить в мои видеозаписи';
  156. global_Complain_video='Пожаловаться';
  157. global_cancel='Отмена';
  158. global_changes_saved='Изменения сохранены';
  159. global_charged_zone_continue='Продолжить';
  160. global_charged_zone_title='Предупреждение';
  161. global_close='Закрыть';
  162. global_continue='Продолжить';
  163. global_day_label='День:';
  164. global_delete='Удалить';
  165. global_done='Готово';
  166. global_dont_delete='Не удалять';
  167. global_edit='Редактировать';
  168. global_error='Ошибка';
  169. global_error_occured='Произошла ошибка';
  170. global_min='Свернуть';
  171. global_money_amount_rub=['','%s рубль','%s рубля','%s рублей'];
  172. global_money_amount_rub_text=['','рубль','рубля','рублей'];
  173. global_money_amount_votes_text=['','голос','голоса','голосов'];
  174. global_month_label='Месяц:';
  175. global_num_date_year_time=['','{num_day}.{month}.{short_year} {num_hour}:{minute}','вчера, {num_hour}:{minute}','сегодня, {num_hour}:{minute}','завтра, {num_hour}:{minute}'];
  176. global_online=['','Онлайн','Онлайн'];
  177. global_online_sm=['','онлайн','онлайн'];
  178. global_privacy_except='кроме:';
  179. global_rating_box_header='Рейтинг';
  180. global_save='Сохранить';
  181. global_search_not_found='По запросу {search} ничего не найдено.';
  182. global_tags_me='Я';
  183. global_to_top='Наверх';
  184. global_try_to_activate='Устали вводить коды? Пройдите бесплатную<br>{link}валидацию через мобильный телефон &#187;{/link}';
  185. global_unknown_error='Неизвестная ошибка';
  186. global_vkontakte='В Контакте';
  187. global_warning='Предупреждениe';
  188. global_write_msg='Написать сообщение';
  189. global_year_label='Год:';
  190. guest_password='Пароль:';
  191. Higher_education='Высшее образование';
  192. head_applications='приложения';
  193. head_events='события';
  194. head_faq='помощь';
  195. head_groups='группы';
  196. head_invite='пригласить';
  197. head_login='вход';
  198. head_logout=['','выйти','выйти'];
  199. head_main='главная';
  200. head_market='объявления';
  201. head_people='люди';
  202. head_reg='регистрация';
  203. head_search='поиск';
  204. help_congratulations='Поздравляем&#33;';
  205. help_reg_almost_fin='Регистрация практически завершена.';
  206. help_reg_check_email='Пожалуйста, проверьте Ваш почтовый ящик <b>%s</b> и пройдите по ссылке, которая указана в письме. В большинстве случаев письма приходят в течение одной минуты, но иногда для этого требуется до 10 минут.';
  207. help_thanks_for_reg='Спасибо за регистрацию';
  208. Inp_choose='Выберите';
  209. Inp_choose_first='Сначала выберите';
  210. Inp_country='Выберите страну';
  211. Inp_dep='Выберите кафедру';
  212. Inp_dep_beg='Сначала выберите кафедру';
  213. Inp_fac='Выберите факультет';
  214. Inp_fac_beg='Сначала выберите факультет';
  215. Inp_form='Выберите форму обучения';
  216. Inp_gradyear='Выберите год выпуска';
  217. Inp_status='Выберите статус';
  218. Inp_town='Выберите город';
  219. Inp_town_beg='Сначала выберите город';
  220. Inp_uni='Выберите Вуз';
  221. Inp_uni_beg='Сначала выберите Вуз';
  222. Inp_year='Выберите год';
  223. Interests='Интересы:';
  224. im_already_shown='Окно Мгновенных сообщений уже открыто в Вашем браузере, Вам достаточно просто перейти на него.';
  225. im_already_shown_title='Мгновенные сообщения';
  226. its_spam='Это спам';
  227. its_spam_sm='это спам';
  228. Job_title='Должность';
  229. Liceum='Лицей';
  230. leftAd_birthday=['','День рождения','День рождения'];
  231. leftAd_birthdays_of='%s:<br>%s';
  232. leftAd_birthday_of='{link}День рождения{/link} %s';
  233. leftAd_Details='Подробнее';
  234. leftAd_details='подробнее';
  235. leftAd_news='Новости';
  236. leftAd_reminder='Напоминание';
  237. leftAd_title_birthdays_of='Дни рождения';
  238. leftAd_title_birthday_of=['','День рождения','День рождения'];
  239. left_admin='Предупреждения';
  240. left_ads='Реклама';
  241. left_another_comp='Чужой компьютер';
  242. left_applications='Приложения';
  243. left_bugs='Задачи';
  244. left_edit='Страны';
  245. left_login='Вход';
  246. left_main='Главная';
  247. left_market='Объявления';
  248. left_matches='Предложения';
  249. left_members='Пользователи';
  250. left_myaudios='Мои Аудиозаписи';
  251. left_myevents='Мои Встречи';
  252. left_myfav='Мои Закладки';
  253. left_myfriends='Мои Друзья';
  254. left_mygroups='Мои Группы';
  255. left_mymessages='Мои Сообщения';
  256. left_mynews='Мои Новости';
  257. left_mynotes='Мои Заметки';
  258. left_mypage='Моя Страница';
  259. left_mypage_edit='ред.';
  260. left_myphotos='Мои Фотографии';
  261. left_mysettings='Мои Настройки';
  262. left_myvideos='Мои Видеозаписи';
  263. left_news='Новости';
  264. left_opinions='Мнения';
  265. left_questions='Вопросы';
  266. left_reg='Регистрация';
  267. left_stat='Статистика';
  268. left_translate='Переводы';
  269. Military_place='Войсковая часть:';
  270. Month1='Январь';
  271. Month10='Октябрь';
  272. Month10_of='Октября';
  273. Month11='Ноябрь';
  274. Month11_of='Ноября';
  275. Month12='Декабрь';
  276. Month12_of='Декабря';
  277. Month1_of='Января';
  278. Month2='Февраль';
  279. Month2_of='Февраля';
  280. Month3='Март';
  281. Month3_of='Марта';
  282. Month4='Апрель';
  283. Month4_of='Апреля';
  284. Month5='Май';
  285. Month5_of='Мая';
  286. Month6='Июнь';
  287. Month6_of='Июня';
  288. Month7='Июль';
  289. Month7_of='Июля';
  290. Month8='Август';
  291. Month8_of='Августа';
  292. Month9='Сентябрь';
  293. Month9_of='Сентября';
  294. month10sm_of='окт';
  295. month10_of='октября';
  296. month11sm_of='ноя';
  297. month11_of='ноября';
  298. month12sm_of='дек';
  299. month12_of='декабря';
  300. month1sm_of='янв';
  301. month1_of='января';
  302. month2sm_of='фев';
  303. month2_of='февраля';
  304. month3sm_of='мар';
  305. month3_of='марта';
  306. month4sm_of='апр';
  307. month4_of='апреля';
  308. month5sm_of='мая';
  309. month5_of='мая';
  310. month6sm_of='июн';
  311. month6_of='июня';
  312. month7sm_of='июл';
  313. month7_of='июля';
  314. month8sm_of='авг';
  315. month8_of='августа';
  316. month9sm_of='сен';
  317. month9_of='сентября';
  318. Nat_town='Родной город:';
  319. notes_continue_text='продолжить';
  320. not_stated_chair='не указана';
  321. not_stated_city='не указан';
  322. not_stated_fac='не указан';
  323. not_stated_groupsubtype='не указан';
  324. not_stated_grouptype='не указан';
  325. not_stated_uni='не указан';
  326. Politics='Политические взгляды:';
  327. Politics_comm='Коммунистические';
  328. Politics_cons='Консервативные';
  329. Politics_indiff='Индифферентные';
  330. Politics_liber='Либеральные';
  331. Politics_moder='Умеренные';
  332. Politics_mon='Монархические';
  333. Politics_soc='Социалистичеcкие';
  334. Politics_ucons='Ультраконсервативные';
  335. pagination_allpages='Все';
  336. picture_null='null.gif';
  337. politics_comm='коммунистические';
  338. politics_cons='консервативные';
  339. politics_indiff='индифферентные';
  340. politics_liber='либеральные';
  341. politics_moder='умеренные';
  342. politics_mon='монархические';
  343. politics_soc='социалистичеcкие';
  344. politics_ucons='ультраконсервативные';
  345. privacy_access='Доступ:';
  346. privacy_cancel='Отмена';
  347. privacy_custom_title='Настройки приватности';
  348. privacy_friendsoffriends='Друзья и друзья друзей';
  349. privacy_friendsonly='Только друзья';
  350. privacy_N_friends_more=['','и ещё %s друг','и ещё %s друга','и ещё %s друзей'];
  351. privacy_options_advanced_settings='Все, кроме...';
  352. privacy_options_advanced_settings_dat='всем, кроме...';
  353. privacy_options_all_users='Все пользователи';
  354. privacy_options_all_users_dat='всем пользователям';
  355. privacy_options_friends_and_friends='Друзья и друзья друзей';
  356. privacy_options_friends_and_friends_dat='друзьям и друзьям друзей';
  357. privacy_options_friends_only='Только друзья';
  358. privacy_options_friends_only_dat='только друзьям';
  359. privacy_options_nobody='Никто';
  360. privacy_options_nobody_dat='никому';
  361. privacy_options_only_me='Только я';
  362. privacy_options_only_me_dat='только мне';
  363. privacy_options_some_friends='Некоторые друзья';
  364. privacy_options_some_friends_dat='некоторым друзьям';
  365. privacy_options_some_friend_lists='Некоторые списки друзей';
  366. privacy_options_some_friend_lists_dat='некоторым спискам друзей';
  367. privacy_save='Сохранить';
  368. privacy_somefriends='Некоторые категории друзей';
  369. profile_newmsg_box_title='Новое сообщение';
  370. profile_places_any='Любая';
  371. profile_places_cult='Культура';
  372. profile_places_educ='Досуг и образование';
  373. profile_places_ent='Развлечения';
  374. profile_places_health='Здоровье';
  375. profile_places_h_addr='Домашний адрес';
  376. profile_places_rest='Места отдыха';
  377. profile_places_shopping='Покупки';
  378. profile_places_sport='Спорт и красота';
  379. profile_places_w_addr='Рабочий адрес';
  380. Religion='Религиозные взгляды:';
  381. Remove_from_friends='Убрать из друзей';
  382. rate_from='от {user}';
  383. rate_you_have_N_unused=['','У Вас <b>%s</b> неиспользованный голос.','У Вас <b>%s</b> неиспользованных голоса.','У Вас <b>%s</b> неиспользованных голосов.'];
  384. Save='Сохранить';
  385. School='Школа';
  386. Sc_major='Специализация';
  387. Secondary_education='Среднее образование';
  388. Sendmsg='Отправить сообщение';
  389. Sex='Пол:';
  390. Sex_fm='Женский';
  391. Sex_m='Мужской';
  392. Surname='Фамилия';
  393. search_by_ad='по объявлениям';
  394. search_by_app='по приложениям';
  395. search_by_audio='по аудиозаписям';
  396. search_by_event='по событиям';
  397. search_by_goods='по товарам';
  398. search_by_group='по группам';
  399. search_by_note='по заметкам';
  400. search_by_person='по людям';
  401. search_by_question='по вопросам';
  402. search_by_status='по новостям';
  403. search_by_topic='по темам';
  404. search_by_video='по видеозаписям';
  405. select_chair_any='Любая';
  406. select_chair_name='кафедру';
  407. select_chair_not_selected='- Не выбрана -';
  408. select_chair_other='Другая';
  409. select_chair_select='Введите название';
  410. select_choose_name='Выберите %s';
  411. select_city='Город:';
  412. select_city_any='Любой';
  413. select_city_name='город';
  414. select_city_not_found='Город не найден';
  415. select_city_not_selected='- Не выбран -';
  416. select_city_other='Другой';
  417. select_city_other_city='- Другой -';
  418. select_city_select='Введите название';
  419. select_class_not_selected='- Не выбран -';
  420. select_close='Закрыть';
  421. select_country='Страна:';
  422. select_country_any='Любая';
  423. select_country_full_list='- Полный список -';
  424. select_country_name='страну';
  425. select_country_not_found='Страна не найдена';
  426. select_country_not_selected='- Не выбрана -';
  427. select_country_other='Другая';
  428. select_country_select='Введите страну';
  429. select_district='Район:';
  430. select_district_any='Любой';
  431. select_district_name='район';
  432. select_district_not_selected='- Не выбран -';
  433. select_district_other='Другой';
  434. select_eduform1='Дневная';
  435. select_eduform2='Вечерняя';
  436. select_eduform3='Заочная';
  437. select_eduform_any='Любая';
  438. select_eduform_name='форму обучения';
  439. select_eduform_not_selected='- Не выбрана -';
  440. select_eduform_other='Другая';
  441. select_edustatus_any='Любой';
  442. select_edustatus_name='статус';
  443. select_edustatus_not_selected='- Не выбран -';
  444. select_edustatus_other='Другой';
  445. select_enter='Введите';
  446. select_enter_name='Введите %s';
  447. select_error='Ошибка';
  448. select_faculty_any='Любой';
  449. select_faculty_name='факультет';
  450. select_faculty_other='Другой';
  451. select_fac_not_selected='- Не выбран -';
  452. select_fac_select='Введите название';
  453. select_first_select='Сначала выберите';
  454. select_full_list='- Полный список -';
  455. select_graduation_any='Любой';
  456. select_graduation_name='год выпуска';
  457. select_graduation_other='Другой';
  458. select_groupsubtype_any='Любой';
  459. select_groupsubtype_name='подраздел';
  460. select_groupsubtype_other='Другой';
  461. select_grouptype_any='Любой';
  462. select_grouptype_name='раздел';
  463. select_grouptype_other='Другой';
  464. select_house='Номер дома:';
  465. select_house_any='Любой';
  466. select_house_name='номер дома';
  467. select_house_not_found='Дом не найден';
  468. select_house_not_selected='- Не выбран -';
  469. select_house_other='Другой';
  470. select_house_select='Введите номер';
  471. select_language='Выберите Ваш язык';
  472. select_military_any='Любой';
  473. select_military_name='войсковую часть';
  474. select_military_other='Другой';
  475. select_military_unit_not_selected='- Не выбрана -';
  476. select_military_unit_select='Введите войсковую часть';
  477. select_must_sel_var='Необходимо выбрать вариант из списка.';
  478. select_place='Название:';
  479. select_placetype1='Дом';
  480. select_placetype10='Кинотеатр';
  481. select_placetype11='Боулинг';
  482. select_placetype12='Бильярд';
  483. select_placetype13='Гостиница';
  484. select_placetype14='Летний лагерь';
  485. select_placetype15='Путешествие';
  486. select_placetype16='Санаторий';
  487. select_placetype17='Пансионат';
  488. select_placetype18='Дом отдыха';
  489. select_placetype19='Хостел';
  490. select_placetype2='Работа';
  491. select_placetype20='Мотель';
  492. select_placetype21='Автошкола';
  493. select_placetype22='Курсы';
  494. select_placetype23='Клуб по интересам';
  495. select_placetype24='Кружок';
  496. select_placetype25='Студия';
  497. select_placetype26='Фитнес-центр';
  498. select_placetype27='Спортивный клуб';
  499. select_placetype28='Стадион';
  500. select_placetype29='Спортзал';
  501. select_placetype3='Ресторан';
  502. select_placetype30='Бассейн';
  503. select_placetype31='Салон красоты';
  504. select_placetype32='Парикмахерская';
  505. select_placetype33='Театр';
  506. select_placetype34='Концертный зал';
  507. select_placetype35='Библиотека';
  508. select_placetype36='Музей';
  509. select_placetype37='Галерея';
  510. select_placetype38='Филармония';
  511. select_placetype39='Выставочный центр';
  512. select_placetype4='Клуб';
  513. select_placetype40='Храм';
  514. select_placetype41='Больница';
  515. select_placetype42='Поликлиника';
  516. select_placetype43='Госпиталь';
  517. select_placetype44='Роддом';
  518. select_placetype45='Магазин';
  519. select_placetype46='Бутик';
  520. select_placetype47='ТРК';
  521. select_placetype48='Салон';
  522. select_placetype49='Супермаркет';
  523. select_placetype5='Бар';
  524. select_placetype50='Гипермаркет';
  525. select_placetype51='Дача';
  526. select_placetype6='Паб';
  527. select_placetype7='Кафе';
  528. select_placetype8='Интернет-кафе';
  529. select_placetype9='Компьютерный клуб';
  530. select_placetype_addr='Адрес';
  531. select_placetype_any='Любой';
  532. select_placetype_name='тип';
  533. select_placetype_other='Другой';
  534. select_place_not_found='Название не найдено';
  535. select_place_not_selected='- Не выбрано -';
  536. select_place_select='Введите название';
  537. select_place_time_not_selected='- Не выбрано -';
  538. select_place_type_not_found='Неверный тип';
  539. select_place_type_not_selected='- Не выбран -';
  540. select_place_type_select='Выберите тип';
  541. select_region_not_selected='- Не выбран -';
  542. select_schoolclass_any='Любой';
  543. select_schoolclass_name='класс';
  544. select_schoolclass_other='Другой';
  545. select_schoolfinishyear_any='Любой';
  546. select_schoolfinishyear_name='год';
  547. select_schoolfinishyear_other='Другой';
  548. select_schoolstartyear_any='Любой';
  549. select_schoolstartyear_name='год';
  550. select_schoolstartyear_other='Другой';
  551. select_school_any='Любая';
  552. select_school_name='школу';
  553. select_school_not_found='Школа не найдена';
  554. select_school_not_selected='- Не выбрана -';
  555. select_school_other='Другая';
  556. select_school_select='Введите название';
  557. select_school_type_0='шк.';
  558. select_school_type_1='гимн.';
  559. select_school_type_10='техн.';
  560. select_school_type_11='ПТУ';
  561. select_school_type_12='учил.';
  562. select_school_type_13='шк. иск.';
  563. select_school_type_14='дет. сад';
  564. select_school_type_15='ПУ';
  565. select_school_type_16='автошк.';
  566. select_school_type_2='лиц.';
  567. select_school_type_3='шк.-инт.';
  568. select_school_type_4='шк. веч.';
  569. select_school_type_5='шк. муз.';
  570. select_school_type_6='шк. спорт.';
  571. select_school_type_7='шк. худ.';
  572. select_school_type_8='колл.';
  573. select_school_type_9='проф. лиц.';
  574. select_search_list='Поиск по списку';
  575. select_select='Выберите';
  576. select_station='Станция метро:';
  577. select_station_any='Любая';
  578. select_station_name='станцию метро';
  579. select_station_not_selected='- Не выбрана -';
  580. select_station_other='Другая';
  581. select_street='Улица:';
  582. select_street_any='Любая';
  583. select_street_name='улицу';
  584. select_street_not_found='Улица не найдена';
  585. select_street_not_selected='- Не выбрана -';
  586. select_street_other='Другая';
  587. select_street_select='Введите название';
  588. select_university_any='Любой';
  589. select_university_name='ВУЗ';
  590. select_university_other='Другой';
  591. select_uni_not_found='ВУЗ не найден';
  592. select_uni_not_selected='- Не выбран -';
  593. select_uni_select='Введите название';
  594. select_uploading='Идет загрузка...';
  595. select_workfinishyear_any='Любой';
  596. select_workfinishyear_name='год';
  597. select_workfinishyear_other='Другой';
  598. select_workstartyear_any='Любой';
  599. select_workstartyear_name='год';
  600. select_workstartyear_other='Другой';
  601. select_year_not_found='Неверный год';
  602. select_year_not_selected='- Не выбран -';
  603. select_year_since_now='настоящего времени';
  604. select_year_until_now='настоящее время';
  605. sex_fm='женский';
  606. sex_m='мужской';
  607. share_go='Перейти';
  608. share_go_warning='<b>Внимание&#33;</b> Вы покидаете сайт <b>ВКонтакте</b> по внешней ссылке {link}, предоставленной одним из участников.<br><br>Администрация <b>ВКонтакте</b> не несет ответственности за содержимое сайта и настоятельно рекомендует <b>не указывать</b> никаких своих данных, имеющих отношение к <b>ВКонтакте</b> (особенно <b>E-Mail</b>, <b>пароль</b> и <b>cookies</b>), на сторонних сайтах.';
  609. Tab_audios='Аудиозаписи';
  610. Tab_groups='Группы';
  611. Tab_people='Люди';
  612. Tab_videos='Видеозаписи';
  613. Today='Сегодня';
  614. Town='Город:';
  615. text_exceeds_symbol_limit=['','Допустимый объем превышен на %s знак.','Допустимый объем превышен на %s знака.','Допустимый объем превышен на %s знаков.'];
  616. text_N_symbols_remain=['','Остался %s знак.','Осталось %s знака.','Осталось %s знаков.'];
  617. today='сегодня';
  618. top_search_apps_tip='Здесь Вы можете ввести название приложения';
  619. top_search_audio_tip='Здесь Вы можете ввести название аудиозаписи';
  620. top_search_groups_tip='Здесь Вы можете ввести название группы';
  621. top_search_tip='Здесь Вы можете ввести имя и фамилию';
  622. top_search_video_tip='Здесь Вы можете ввести название видеозаписи';
  623. Univ='Вуз:';
  624. Updates='Обновления';
  625. updates='обновления';
  626. videofile_num=['','видеозапись','видеозаписи','видеозаписей'];
  627. votes_flex=['','голос','голоса','голосов'];
  628. Wall='Стена';
  629. Work_place='Место работы:';
  630. wrote_female='написала';
  631. wrote_male='написал';
  632. Yesterday='Вчера';
  633. yesterday='вчера';
  634. // section = 0; version = 166;
  635.  
  636. friends_all='Все';
  637. friends_cancel='Отмена';
  638. friends_change_name='изменить название';
  639. friends_continue='Продолжить';
  640. friends_create_list='Создать список';
  641. friends_create_list_title='Создание списка друзей';
  642. friends_edit_list_title='Редактирование списка друзей';
  643. friends_enter_friend_name='Начните вводить имя друга';
  644. friends_enter_list_name='Введите название списка';
  645. friends_list_name='Название списка';
  646. friends_new_friends_list='Новый список друзей';
  647. friends_nothing_found_by_query='По запросу {query} ничего не найдено.';
  648. friends_no_user_selected='Вы не выбрали ни одного пользователя.';
  649. friends_privacy_title='Настройки приватности';
  650. friends_remove_from_list_title='Удаление из списка друзей';
  651. friends_remove_selection='Снять выделение';
  652. friends_save='Сохранить';
  653. friends_selected='Выбранные';
  654. friends_select_all='Выделить всех';
  655. friends_show_more_friends='Показать больше друзей';
  656. friends_X_registered_friends_found=['','Найден %s зарегистрированный друг.','Найдено %s зарегистрированных друга.','Найдено %s зарегистрированных друзей.'];
  657. friends_X_users_in_list=['','В списке %s друг','В списке %s друга','В списке %s друзей'];
  658. friends_you_can_save_this_list='Вы можете сохранить этот список друзей.<br />В дальнейшем Вы сможете использовать его снова.';
  659. friend_friend_remove='Удалить';
  660. friend_you_have_N_friends=['','У Вас %s друг','У Вас %s друга','У Вас %s друзей'];
  661. // section = 2; version = 59;
  662.  
  663. audio_add_to_album='добавить в альбом';
  664. audio_add_to_group='Добавить в аудиозаписи группы';
  665. audio_album_no_recs='В альбоме ещё нет аудиозаписей.';
  666. audio_back_to_group='Перейти к группе';
  667. audio_back_to_groups='вернуться к аудиозаписям группы';
  668. audio_back_to_my='вернуться к моим аудиозаписям';
  669. audio_back_to_profile='Перейти к странице {user}';
  670. audio_back_to_users='вернуться к аудиозаписям %s';
  671. audio_change_album='{link}изменить альбом{/link}: {title}';
  672. audio_change_album_name='Изменить название';
  673. audio_common_list='общий список';
  674. audio_delete='удалить';
  675. audio_delete_album='Удалить альбом';
  676. audio_delete_album_are_you_sure='Вы уверены, что хотите удалить этот альбом?';
  677. audio_delete_album_button='Удалить';
  678. audio_delete_album_title='Удаление альбома';
  679. audio_delete_all_title='Удаление аудиозаписей';
  680. audio_edit='редактировать';
  681. audio_edit_additionally='Дополнительно';
  682. audio_edit_album='Редактировать альбом';
  683. audio_edit_album_title='Редактирование альбома';
  684. audio_edit_cancel='Отмена';
  685. audio_edit_deleting='Удаление аудиозаписи';
  686. audio_edit_deleting_error='При удалении файла произошла ошибка:';
  687. audio_edit_dont_show_search='Не выводить при поиске';
  688. audio_edit_edit='Редактировать';
  689. audio_edit_editing='Редактирование аудиозаписи';
  690. audio_edit_name='Название:';
  691. audio_edit_no='Нет';
  692. audio_edit_noname='Без названия';
  693. audio_edit_singer='Исполнитель:';
  694. audio_edit_sure_delete='Вы действительно хотите удалить эту аудиозапись?';
  695. audio_edit_text='Слова песни:';
  696. audio_edit_unknown='Неизвестный исполнитель';
  697. audio_edit_yes='Да';
  698. audio_enter_album_name='Введите название альбома';
  699. audio_flash_needed='Для того, чтобы воспользоваться аудиосервисом, Вам необходимо установить Flash-проигрыватель.';
  700. audio_global_search_found=['','В поиске найдена %s аудиозапись','В поиске найдено %s аудиозаписи','В поиске найдено %s аудиозаписей'];
  701. audio_group_no_recs='В группе ещё нет аудиозаписей.';
  702. audio_group_no_your_recs='В группе еще нет аудиозаписей, загруженных Вами.';
  703. audio_header='Мои аудиозаписи';
  704. audio_header_edit='Редактирование';
  705. audio_loading_error='Возникла ошибка, код ошибки: {code}';
  706. audio_lyrics_not_found='Текст песни не найден';
  707. audio_need_flash_title='Необходим Flash-проигрыватель';
  708. audio_new_album_title='Новый альбом';
  709. audio_not_found='Аудиозапись не найдена';
  710. audio_no_audios_found='По запросу {query} не найдено ни одной аудиозаписи';
  711. audio_no_rec_load_msg='Здесь Вы можете хранить Ваши аудиозаписи.<br>Для того, чтобы загрузить Вашу первую аудиозапись, {link}нажмите здесь{/link}.';
  712. audio_no_rec_msg='Здесь Вы можете хранить Ваши аудиозаписи.';
  713. audio_no_your_recs='У Вас еще нет аудиозаписей';
  714. audio_Recs='Аудиозаписи';
  715. audio_return_to_album='Вернуться к альбому';
  716. audio_return_to_all='Вернуться к аудиозаписям';
  717. audio_search_enter_audio_name='Введите название или исполнителя';
  718. audio_search_not_found='По запросу {search} ничего не найдено.';
  719. audio_search_no_found='Аудиозаписей не найдено.';
  720. audio_search_results='Результаты поиска';
  721. audio_show_more_audios='Показать больше аудиозаписей';
  722. audio_success_msg='Аудиозапись успешно загружена.';
  723. audio_success_msg_multiple='Все аудиозаписи успешно загружены.';
  724. audio_track_search='Поиск по композициям и исполнителям';
  725. audio_uploading_over='Загрузка завершена';
  726. audio_upl_not_enabled_ingroup='В данной группе отключены аудиозаписи, поэтому загрузка аудиофайлов недоступна.';
  727. audio_user_no_recs='У пользователя ещё нет аудиозаписей.';
  728. // section = 3; version = 45;
  729.  
  730. apps_addapp='Добавить приложение';
  731. apps_addedtogroup='Приложение добавлено в группу';
  732. apps_added_to_group='{app} появится в блоке приложений. {link}Отменить{/link}.';
  733. apps_add_to_group_button='Добавить в группу';
  734. apps_app_settings='Настройки приложения';
  735. apps_balance_minus_X_done=['','Вы уменьшили баланс приложения на <b>%s</b> голос.','Вы уменьшили баланс приложения на <b>%s</b> голоса.','Вы уменьшили баланс приложения на <b>%s</b> голосов.'];
  736. apps_balance_plus_X_done=['','Вы пополнили баланс приложения на <b>%s</b> голос.','Вы пополнили баланс приложения на <b>%s</b> голоса.','Вы пополнили баланс приложения на <b>%s</b> голосов.'];
  737. apps_cancel='Отмена';
  738. apps_catalogue='Каталог приложений';
  739. apps_change_settings='Настроить';
  740. apps_delete='Удалить';
  741. apps_delete_admin_title='Удаление администратора';
  742. apps_delete_all_invites_title='Удаление приглашений';
  743. apps_done='Готово';
  744. apps_dont_show='Больше не показывать';
  745. apps_edit='редактировать';
  746. apps_edit_settings='настроить приложение';
  747. apps_friends_apps='Приложения друзей';
  748. apps_global_search_found=['','В поиске найдено %s приложение','В поиске найдено %s приложения','В поиске найдено %s приложений'];
  749. apps_last_notifications='Последние оповещения';
  750. apps_merchant_payment_title='Оплата покупки';
  751. apps_my_apps='Мои приложения';
  752. apps_N_people_like_it=['','Нравится %s человеку','Нравится %s людям','Нравится %s людям'];
  753. apps_need_X_votes=['','Приложение просит Вас внести <b>%s</b> голос.','Приложение просит Вас внести <b>%s</b> голоса.','Приложение просит Вас внести <b>%s</b> голосов.'];
  754. apps_noappsingroup2='В группе не подключено ни одного приложения.';
  755. apps_noparticipants='нет участников';
  756. apps_notifies_sure_delete_all='Вы уверены, что хотите удалить все приглашения?<br>Это действие нельзя будет отменить.';
  757. apps_no_apps_found='По запросу {query} не найдено ни одного приложения.';
  758. apps_no_notifications='Нет оповещений';
  759. apps_of_group='Приложения группы';
  760. apps_remove='Убрать';
  761. apps_removefromgroup='убрать из группы';
  762. apps_removefrompage='убрать приложение';
  763. apps_search_in_apps='Поиск по приложениям';
  764. apps_show_full_app_description='показать полностью..';
  765. apps_show_more_apps='Показать больше приложений';
  766. apps_viewallapps='Просмотр всех доступных приложений';
  767. apps_X_apps_found=['','Найдено %s приложение','Найдено %s приложения','Найдено %s приложений'];
  768. apps_X_participants=['','%s участник','%s участника','%s участников'];
  769. apps_youaddednoapps='Вы еще не подключили ни одного приложения.';
  770. apps_youhavenoapps='У Вас еще нет приложений';
  771. apps_you_have_no_notifies='У Вас нет ни одного оповещения';
  772. app_comments_hidecomms='Скрыть комментарии';
  773. app_comments_showcomms='Показать комментарии';
  774. // section = 4; version = 109;
  775.  
  776. video_add_to_public='Вернуть в публичный доступ';
  777. video_cancel='Отмена';
  778. video_delete_from_public='Изъять из доступа';
  779. video_done='Готово';
  780. video_flash_needed='Для просмотра необходим {flash_player} последней версии.';
  781. // section = 5; version = 90;
  782.  
  783. blog_comment_not_sent='не отправлен';
  784. blog_comment_sending='отправляется';
  785. blog_comment_sent='отправлен';
  786. blog_comm_deleted='Комментарий удален.';
  787. blog_delete='Удалить';
  788. blog_renewpage='Произошла неизвестная ошибка. Попробуйте перезагрузить страницу.';
  789. blog_tryagain='Произошла неизвестная ошибка. Попробуйте снова.';
  790. blog_wrote_fm='написала';
  791. blog_wrote_m='написал';
  792. notes_cancel='Отмена';
  793. notes_done='Готово';
  794. notes_livejournal_delete='Удалить эту запись из <b>LiveJournal</b>.';
  795. // section = 7; version = 46;
  796.  
  797. admin2_cancel='отмена';
  798. admin2_edit='редактировать';
  799. admin2_full_univ_name='Полное название вуза';
  800. admin2_hide_list='скрыть список';
  801. admin2_list='список';
  802. admin2_ready='готово';
  803. admin2_search='поиск';
  804. admin2_server_error='Ошибка сервера.';
  805. admin_added_items_digit_search='поиск цифр';
  806. // section = 8; version = 1;
  807.  
  808. blank_note_not_found='Заметка не найдена';
  809. // section = 10; version = 8;
  810.  
  811. board_any_links_forbidden='Администратор группы запретил размещать любые ссылки.';
  812. board_cancel='Отмена';
  813. board_cannot_edit='Вы не можете редактировать это сообщение.';
  814. board_cannot_edit_title='Вы не можете редактировать название этой темы';
  815. board_create_topic='Создать тему';
  816. board_create_voting='Создать опрос';
  817. board_delete='Удалить';
  818. board_delete_voting='Удалить опрос';
  819. board_done='Готово';
  820. board_edit='редактировать';
  821. board_edit_topic='Редактировать тему';
  822. board_edit_voting='Изменить опрос';
  823. board_enter_text='Надо ввести текст сообщения.';
  824. board_error='Ошибка';
  825. board_error_occurred='К сожалению, произошла ошибка.';
  826. board_links_forbidden='Администратор группы запретил использование ссылок.';
  827. board_new_topic_title='Новое название темы:';
  828. board_no_text_stated='Вы не указали текст темы.';
  829. board_ok='OK';
  830. board_sure_delete_topic='Вы уверены, что хотите удалить эту тему?';
  831. board_sure_delete_voting='Вы уверены, что хотите удалить опрос?';
  832. board_sure_spam='Вы уверены, что хотите пометить эту тему как спам и удалить ее?';
  833. board_too_fast='Вы отправляете сообщения слишком быстро.';
  834. board_voting_deleted='Опрос удален.';
  835. board_voting_not_deleted='Не удалось удалить опрос.';
  836. board_warning='Предупреждение';
  837. board_wrong_topic_number='Неверный номер темы обсуждения.';
  838. // section = 11; version = 3;
  839.  
  840. edit_add='Добавить';
  841. edit_addingdistricts='Добавление районов';
  842. edit_addingstations='Добавление станций метро';
  843. edit_addingstreet='Добавление улиц';
  844. edit_autoreplacements='Автозамены';
  845. edit_autoreplacements_list='Список автозамен';
  846. edit_bold='Зажирнить';
  847. edit_case_word='Регистр';
  848. edit_chair_addingchair='Добавление кафедр';
  849. edit_chair_name='Название кафедры';
  850. edit_chair_suredelete='Вы уверены, что хотите удалить эту кафедру?';
  851. edit_chair_youselected='Вы выбрали основной вариант кафедры.<br>Теперь Вы можете приклеивать к ней другие кафедры, избавляясь от дублей.';
  852. edit_chair_youshould='Сначала Вам необходимо выбрать основной вариант кафедры с помощью кнопки <b>Клеить к ней</b>.<br>После этого Вы сможете приклеивать к ней клоны кнопкой <b>Склеить</b>.';
  853. edit_city_addingcity='Добавление города';
  854. edit_city_addingregion='Добавление региона';
  855. edit_city_ifsame='Если названия совпадают, не следует их дублировать.';
  856. edit_city_name='Название города';
  857. edit_city_natname='Национальное название';
  858. edit_city_suredelete='Вы уверены, что хотите удалить этот город?';
  859. edit_city_youselected='Вы выбрали основной вариант города.<br>Теперь Вы можете приклеивать к нему другие города, избавляясь от дублей.';
  860. edit_city_youshould='Сначала Вам необходимо выбрать основной вариант города с помощью кнопки <b>Клеить к нему</b>.<br>После этого Вы сможете приклеивать к нему клоны кнопкой <b>Склеить</b>.';
  861. edit_close='Закрыть';
  862. edit_closeschools='Закрыть шк.';
  863. edit_closeunis='Закрыть вузы';
  864. edit_close_streets='Закрыть ул.';
  865. edit_closing_facs='Закрытие факультетов';
  866. edit_converting_to_unis='Превращение в ВУЗы';
  867. edit_convertintouni='Сделать ВУЗом';
  868. edit_delete_chairs='Удалить кафедры';
  869. edit_delete_schools='Удалить школы';
  870. edit_delete_streets='Удалить улицы';
  871. edit_delete_unis='Удалить ВУЗы';
  872. edit_deleting_chairs='Удаление кафедр';
  873. edit_deleting_facs='Удаление факультетов';
  874. edit_deleting_unis='Удаление вузов';
  875. edit_deleting_void='Удаление пустых';
  876. edit_district_name='Название района';
  877. edit_district_suredelete='Вы уверены, что хотите удалить этот район?';
  878. edit_do_autoreplace='Автозаменить';
  879. edit_editing_chair_mul='Редактирование кафедр';
  880. edit_editing_fac_mul='Редактирование факультетов';
  881. edit_editing_school_mul='Редактирование школ';
  882. edit_editing_street_mul='Редактирование улиц';
  883. edit_editing_uni_mul='Редактирование ВУЗов';
  884. edit_editsave='Редактировать';
  885. edit_facs_close='Закрыть фак-ты';
  886. edit_facs_delete='Удалить фак-ты';
  887. edit_fac_addingfac='Добавление факультетов';
  888. edit_fac_name='Название факультета';
  889. edit_fac_suredelete='Вы уверены, что хотите удалить этот факультет?';
  890. edit_fac_youselected='Вы выбрали основной вариант факультета.<br>Теперь Вы можете приклеивать к нему другие факультеты, избавляясь от дублей.';
  891. edit_fac_youshould='Сначала Вам необходимо выбрать основной вариант факультета с помощью кнопки <b>Клеить к нему</b>.<br>После этого Вы сможете приклеивать к нему клоны кнопкой <b>Склеить</b>.';
  892. edit_merge='Склеить';
  893. edit_move='Перенести';
  894. edit_move_schools='Перенести школы';
  895. edit_move_unis='Перенести ВУЗы';
  896. edit_moving_city='Перенос городов';
  897. edit_nodelete_ifmorethan='Не удалять, если более {count} участников.';
  898. edit_open='Открыть';
  899. edit_openschools='Открыть шк.';
  900. edit_openunis='Открыть вузы';
  901. edit_open_streets='Открыть ул.';
  902. edit_region_name='Название региона';
  903. edit_region_youselected='Вы выбрали основной вариант региона.<br>Теперь Вы можете приклеивать к нему другие регионы, избавляясь от дублей.';
  904. edit_region_youshould='Сначала Вам необходимо выбрать основной вариант региона с помощью кнопки <b>Клеить к нему</b>.<br>После этого Вы сможете приклеивать к нему клоны кнопкой <b>Склеить</b>.';
  905. edit_replace='Заменить';
  906. edit_replacement='Замена';
  907. edit_replacement_by='чем:';
  908. edit_replacement_what='что:';
  909. edit_schools_deleting='Удаление школ';
  910. edit_school_addingschool='Добавление школ';
  911. edit_school_name='Название школы';
  912. edit_school_suredelete='Вы уверены, что хотите удалить эту школу?';
  913. edit_school_type='Тип учебного заведения';
  914. edit_school_youselected='Вы выбрали основной вариант школы.<br>Теперь Вы можете приклеивать к ней другие школы, избавляясь от дублей.';
  915. edit_school_youshould='Сначала Вам необходимо выбрать основной вариант школы с помощью кнопки <b>Клеить к ней</b>.<br>После этого Вы сможете приклеивать к ней клоны кнопкой <b>Склеить</b>.';
  916. edit_selected_objects=['','Выбран %s объект','Выбраны %s объекта','Выбраны %s объектов'];
  917. edit_some_words1='<b>Н</b>есколько слов';
  918. edit_some_words2='<b>Н</b>есколько <b>С</b>лов';
  919. edit_some_words3='<b>Н</b>есколько <b>с</b>лов';
  920. edit_station_name='Название станции метро';
  921. edit_station_suredelete='Вы уверены, что хотите удалить эту станцию?';
  922. edit_street_name='Название улицы';
  923. edit_street_suredelete='Вы уверены, что хотите удалить эту улицу?';
  924. edit_street_youselected='Вы выбрали основной вариант улицы.<br>Теперь вы можете приклеивать к ней другие улицы избавляясь от дублей.';
  925. edit_street_youshould='Сначала Вам необходимо выбрать основной вариант улицы с помощью кнопки <b>Клеить к ней</b>.<br>После этого Вы сможете приклеивать к ней клоны кнопкой <b>Склеить</b>.';
  926. edit_unbold='Разжирнить';
  927. edit_uniabbr='Сокращение университета:';
  928. edit_unifullname='Полное название университета:';
  929. edit_uni_abbrev='Сокращение';
  930. edit_uni_abbrevs='Сокращённые названия:';
  931. edit_uni_addinguni='Добавление ВУЗов';
  932. edit_uni_name='Название ВУЗа:';
  933. edit_uni_suredelete='Вы уверены, что хотите удалить этот ВУЗ?';
  934. edit_uni_youselected='Вы выбрали основной вариант ВУЗа.<br>Теперь Вы можете приклеивать к нему другие ВУЗы, избавляясь от дублей.';
  935. edit_uni_youshould='Сначала Вам необходимо выбрать основной вариант ВУЗа с помощью кнопки <b>Клеить к нему</b>.<br>После этого Вы сможете приклеивать к нему клоны кнопкой <b>Склеить</b>.';
  936. // section = 12; version = 2;
  937.  
  938. events_cancel='Отмена';
  939. events_fri='Пт';
  940. events_goto_search='Перейти к поиску';
  941. events_menus_error_xmlhttp='Ошибка при создании XMLHTTP';
  942. events_mon='Пн';
  943. events_sat='Сб';
  944. events_sun='Вс';
  945. events_thu='Чт';
  946. events_tue='Вт';
  947. events_wed='Ср';
  948. // section = 13; version = 52;
  949.  
  950. fave_return_to_fave='вернуться к Закладкам';
  951. // section = 14; version = 19;
  952.  
  953. gifts_cansend_X_gifts=['','Вы можете отправить<br>не более <b>%s</b> подарка.','Вы можете отправить<br>не более <b>%s</b> подарков.','Вы можете отправить<br>не более <b>%s</b> подарков.'];
  954. gifts_confirm_N_Votes=['','<b>%s</b> голос','<b>%s</b> голоса','<b>%s</b> голосов'];
  955. gifts_confirm_send_to_N_friends=['','Подарок будет отправлен %s другу ({votes}). Продолжить?','Подарок будет отправлен %s друзьям ({votes}). Продолжить?','Подарок будет отправлен %s друзьям ({votes}). Продолжить?'];
  956. gifts_rate_increase='При отправке этого подарка рейтинг получателя увеличится на <b>{gifts_count}</b>.';
  957. gifts_X_gifts=['','<b>%s</b> подарок','<b>%s</b> подарка','<b>%s</b> подарков'];
  958. gifts_X_votes=['','%s голос','%s голоса','%s голосов'];
  959. // section = 15; version = 10;
  960.  
  961. groups_admins='Администраторы';
  962. groups_admins_of_group='Администраторы группы';
  963. groups_appl_rejected='Заявка отклонена.';
  964. groups_assign='Назначить';
  965. groups_assigned='Участник назначен руководителем.';
  966. groups_assigning_manager='Назначение руководителя';
  967. groups_cancel='отмена';
  968. groups_cancel2='Отменить';
  969. groups_create_enter='Пожалуйста, введите название группы';
  970. groups_create_new='Создание новой группы';
  971. groups_delete_manager='Удаление руководителя';
  972. groups_deleting_link='Удаление ссылки';
  973. groups_edit='Редактировать';
  974. groups_editing_link='Редактирование ссылки';
  975. groups_enter_name='Введите название:';
  976. groups_enter_post='Введите должность:';
  977. groups_group_admin='Администратор группы';
  978. groups_group_create_button='Создать сообщество';
  979. groups_inv_cancelled='Приглашение отменено.';
  980. groups_limit_message='К сожалению, Вы не можете быть подписаны более, чем на 5000 групп или публичных страниц одновременно.';
  981. groups_limit_title='Достигнут предел';
  982. groups_no='Нет';
  983. groups_no_with_name='Нет групп с названием, похожим на %s.';
  984. groups_officers='Руководители';
  985. groups_officers_of_group='Руководители группы';
  986. groups_partic_accepted='Участник принят.';
  987. groups_partic_deleted='Участник удален.';
  988. groups_reject_invint='Отклонить приглашение';
  989. groups_sure_delete_link='Вы действительно хотите удалить ссылку на эту группу?';
  990. groups_sure_delete_manager='Вы действительно хотите удалить этого человека из руководителей?';
  991. groups_to_all_posts='ко всем записям';
  992. groups_unbanned='Пользователь удален из бан-листа';
  993. groups_users_added='Пользователи приняты в группу<br>';
  994. groups_user_added='Пользователь принят в группу';
  995. groups_yes='Да';
  996. // section = 17; version = 92;
  997.  
  998. login_enter='Войти';
  999. login_wrong_email_pwd='Такой почтовый адрес не зарегистрирован, либо пароль неверный.';
  1000. // section = 21; version = 23;
  1001.  
  1002. mail_add_1_address='Пожалуйста, добавьте хотя бы одного адресата.';
  1003. mail_cancel='Отмена';
  1004. mail_cant_add_more15='Вы можете добавить не более 15 адресатов.';
  1005. mail_close='Закрыть';
  1006. mail_delete='Удалить';
  1007. mail_deleteall1='Удалить все сообщения';
  1008. mail_delete_all_spam='Удалить все сообщения, содержащие спам?';
  1009. mail_delete_failed='Во время выполнения произошла ошибка';
  1010. mail_enter_text='Пожалуйста, введите текст сообщения.';
  1011. mail_error='Ошибка';
  1012. mail_markedspam='Сообщение помечено как спам.';
  1013. mail_marked_as_spam='Сообщение помечено как спам и удалено.';
  1014. mail_msg_deleted='Сообщение удалено.';
  1015. mail_restored='Сообщение восстановлено';
  1016. mail_restoremark='Восстановить отмеченные';
  1017. mail_restore_failed='Во время выполнения произошла ошибка';
  1018. mail_show_all_history='Показать всю историю сообщений';
  1019. // section = 22; version = 77;
  1020.  
  1021. market_about_paid_ads='О платных объявлениях';
  1022. market_available_after='Данная функция станет доступна после создания объявления.';
  1023. market_available_later='Функция будет доступна позже';
  1024. market_cancel='Отмена';
  1025. market_can_promote='Все пользователи могут продвигать свои объявления при поиске.';
  1026. market_clicks_now=['','При текущем балансе это обеспечит объявлению <b>%s</b> переход.','При текущем балансе это обеспечит объявлению <b>%s</b> перехода.','При текущем балансе это обеспечит объявлению <b>%s</b> переходов.'];
  1027. market_create_ad='Создать объявление';
  1028. market_currency_countEUR=['','евро','евро','евро'];
  1029. market_currency_countKZT=['','тенге','тенге','тенге'];
  1030. market_currency_countRUB=['','рубль','рубля','рублей'];
  1031. market_currency_countUAH=['','гривна','гривны','гривен'];
  1032. market_currency_countUSD=['','доллар','доллара','долларов'];
  1033. market_defave='Удалить из избранного';
  1034. market_determine_cost='Вы сами определяете, сколько готовы платить за каждый уникальный переход на Ваше объявление.';
  1035. market_enfave='Добавить в избранное';
  1036. market_features='Особенности:';
  1037. market_more_info='Более подробная информация - в настройках Вашего объявления.';
  1038. market_N_votes_per_ad=['','голос за уникальный переход на объявление','голоса за уникальный переход на объявление','голосов за уникальный переход на объявление'];
  1039. market_not_enough_X_votes=['','У Вас недостаточно голосов. Сейчас у Вас <b>%s</b> голос.','У Вас недостаточно голосов. Сейчас у Вас <b>%s</b> голоса.','У Вас недостаточно голосов. Сейчас у Вас <b>%s</b> голосов.'];
  1040. market_ok='OK';
  1041. market_photos_cancel='Отмена';
  1042. market_photos_choose_album='Выберите альбом с фотографиями для вашего объявления.';
  1043. market_photos_you_can='Вы можете выбрать до 5 фотографий для Вашего объявления.';
  1044. market_photo_delete='Удалить';
  1045. market_photo_no_delete='Не удалять';
  1046. market_photo_one_of_photo='Фотография {index} из {count}';
  1047. market_reason_cheat='Ложная информация / Мошенничество';
  1048. market_reason_duplicate='Многократное дублирование';
  1049. market_reason_extr='Экстремизм';
  1050. market_reason_nonsense='Бессмыслица';
  1051. market_reason_offtop='Несоответствие разделу';
  1052. market_reason_ortho='Орфографическая ошибка';
  1053. market_reason_porn='Порнография';
  1054. market_reason_spam='Спам / Сторонние ссылки';
  1055. market_report='Жалоба';
  1056. market_save='Сохранить';
  1057. market_select_ban_reason='Пожалуйста, выберите причину для блокировки объявления:';
  1058. market_send='Отправить';
  1059. market_X_cents_foruser='Данная сумма составляет приблизительно <b>&#036;%s</b> за каждого пользователя.';
  1060. market_X_votes=['','%s голос','%s голоса','%s голосов'];
  1061. market_your_ad_will_take_places=['','При текущей оплате (<b>%s</b> голос за клик) Ваше объявление будет занимать следующие места в разделах:','При текущей оплате (<b>%s</b> голоса за клик) Ваше объявление будет занимать следующие места в разделах:','При текущей оплате (<b>%s</b> голосов за клик) Ваше объявление будет занимать следующие места в разделах:'];
  1062. // section = 23; version = 1;
  1063.  
  1064. matches_close='закрыть';
  1065. matches_closed='закрыто';
  1066. matches_no_accepted='Отказ принят.';
  1067. matches_open='открыть';
  1068. matches_user_deleted='Пользователь удален из списка.';
  1069. matches_yes_accepted='Согласие принято.';
  1070. // section = 24; version = 1;
  1071.  
  1072. updates_all_news='Новости';
  1073. updates_loading_news='Загрузка новостей...';
  1074. // section = 25; version = 92;
  1075.  
  1076. pages_category='Категории и подкатегории';
  1077. pages_clear='Очистить';
  1078. pages_insert_sign='Вставить подпись';
  1079. // section = 27; version = 46;
  1080.  
  1081. payments_accept_msg='Принять';
  1082. payments_accept_offer_msg='Необходимо принять условия договора-оферты.';
  1083. payments_amount_rubles=['','рубль','рубля','рублей'];
  1084. payments_amount_votes=['','голос','голоса','голосов'];
  1085. payments_cancel='Отмена';
  1086. payments_card_verified_msg='Вы подтвердили, что являетесь владельцем карты.';
  1087. payments_close='Закрыть';
  1088. payments_currency_rub=['','%s руб.','%s руб.','%s руб.'];
  1089. payments_enter_sum_msg='Необходимо ввести количество голосов.';
  1090. payments_error='Ошибка';
  1091. payments_fee_full='Комиссия {amount} р. ({percent}%)';
  1092. payments_fee_rubles=['','%s рубль комиссии','%s рубля комиссии','%s рублей комиссии'];
  1093. payments_fee_votes=['','Сумма: %s рубль','Сумма: %s рубля','Сумма: %s рублей'];
  1094. payments_msg_deleted='Сообщение удалено.';
  1095. payments_N_tries_left_msg=['','У Вас осталась одна попытка.','У Вас осталось %s попытки.','У Вас осталось %s попыток.'];
  1096. payments_offer_header='Договор-оферта';
  1097. payments_please_enter_correct_inn='Пожалуйста, введите корректный ИНН.<br>Обратите внимание, что услуга поддерживается <b>только</b> для юридических лиц.';
  1098. payments_please_enter_correct_okpo='Пожалуйста, введите корректный ОКПО.<br>Обратите внимание, что услуга поддерживается <b>только</b> для юридических лиц.';
  1099. payments_please_enter_money='Необходимо ввести сумму платежа.';
  1100. payments_please_enter_okpo='Пожалуйста, введите ОКПО.';
  1101. payments_really_start_over_msg='Вы действительно хотите начать процедуру заново?';
  1102. payments_really_use_other_msg='Вы действительно хотите использовать другую карту для проведения платежей?';
  1103. payments_send='Отправить';
  1104. payments_thanks_for_comm='Спасибо за Ваш отзыв.';
  1105. payments_verify_start_over_header='Вы уверены?';
  1106. payments_verify_sum_currency='Валюта авторизационной транзакции:';
  1107. payments_verify_sum_dialog='Введите сумму авторизационной транзакции:';
  1108. payments_verify_sum_header='Введите сумму';
  1109. payments_verify_sum_howto_dialog='Сумму авторизационной транзакции Вы можете узнать:<br><ul class="listing"><li><span> обратившись в службу клиентской поддержки банка по телефону, указанному на обратной стороне вашей карты. Сообщите оператору, что Вы только что произвели оплату в интернет-магазине, и, для подтверждения права на использование карты, Вам необходима информация о сумме транзакции. Вас попросят идентифицировать себя, после чего предоставят информацию.</span></li><li><span> через систему удаленного банковского обслуживания интернет-банк/банк-клиент - в случае предоставления данной услуги банком-эмитентом;</span></li><li><span> c помощью услуги SMS-информирования - в случае предоставления данной услуги банком-эмитентом.</span></li></ul>';
  1110. payments_verify_sum_howto_header='Как узнать сумму авторизационной транзакции';
  1111. payments_wait_verifying_msg='Пожалуйста, подождите. Проверка может занять 5-10 минут.';
  1112. payments_wrong_sum_msg='Сумма авторизационной транзакции введена неверно, попробуйте снова.';
  1113. payments_your_comm='Ваш отзыв';
  1114. payment_no_more_tries_msg='Сумма авторизационной транзакции введена неверно. Вы исчерпали количество попыток для этой авторизационной транзакции. Вам необходимо запустить процесс подтверждения заново, нажав кнопку &quot;Авторизовать карту&quot;.';
  1115. votes_transfer_choose_recipients='Выберите получателя';
  1116. votes_transfer_close='Закрыть';
  1117. votes_transfer_please_enter_amount='Пожалуйста, укажите количество голосов для передачи.';
  1118. votes_transfer_please_select_recipient='Пожалуйста, выберите получателя.';
  1119. votes_transfer_recipient_selection='Выбор получателя';
  1120. votes_transfer_start_typing_recipient='Начните вводить имя друга';
  1121. // section = 28; version = 114;
  1122.  
  1123. photos_cancel='Отмена';
  1124. photos_crop_info='Укажите область, которая будет сохранена как фотография Вашей страницы.';
  1125. photos_done='Готово';
  1126. photos_tags_info='Нажмите на область, где изображен человек, и он будет подписан на фотографии. Вы можете добавлять любое количество друзей на фотографию.';
  1127. photos_tags_ok='Готово';
  1128. photos_viewer_exit='Выйти из режима просмотра';
  1129. photo_comment_marked_as_spam='Комментарий помечен как спам.';
  1130. photo_dont_close='Пожалуйста, не закрывайте это окно, пока фотографии не загрузятся.';
  1131. photo_rotating='Поворачиваем';
  1132. photo_uploading_photo='Идёт загрузка фотографий';
  1133. // section = 30; version = 43;
  1134.  
  1135. activity_cant_update='Не удалось обновить статус.';
  1136. activity_change_status='[ изменить статус ]';
  1137. activity_deleted='Сообщение удалено';
  1138. activity_update_just_now='Обновлено только что';
  1139. ads_image_too_small='Вы пытаетесь загрузить слишком маленькую фотографию.<br>Выберите фотографию большего размера и повторите попытку.';
  1140. profile_become_a_fan='Подписаться на обновления';
  1141. profile_fans='Подписчики';
  1142. profile_hide_full_info='скрыть подробную информацию';
  1143. profile_hide_full_info_short='скрыть';
  1144. profile_hide_this_notice='Скрыть эту подсказку';
  1145. profile_idols='Подписки';
  1146. profile_mention_not_found='Пользователь не найден';
  1147. profile_mention_start_typing='Начните вводить имя друга';
  1148. profile_not_a_fan='Отписаться от обновлений';
  1149. profile_show_full_info='показать подробную информацию';
  1150. profile_show_full_info_short='вся информация';
  1151. profile_status_header='Статусы';
  1152. profile_to_all_posts='ко всем записям';
  1153. profile_to_comments='к обзору комментариев';
  1154. profile_to_other_statuses='к остальным записям';
  1155. profile_to_statuses='к статусам';
  1156. profile_wall_header='Стена';
  1157. profile_wall_poll='Опрос';
  1158. // section = 31; version = 170;
  1159.  
  1160. profileEdit_photo_notsupported='Фотографии этого формата не поддерживаются. Поддерживаемые форматы: .jpg, .png, .gif';
  1161. profile_edit_close='Закрыть';
  1162. profile_edit_error='Ошибка';
  1163. profile_edit_sel_town_to_save='Пожалуйста, выберите хотя бы город, если Вы хотите сохранить название места.';
  1164. select_chair='Кафедра:';
  1165. select_class='Класс:';
  1166. select_eduform='Форма обучения:';
  1167. select_edustatus='Статус:';
  1168. select_faculty='Факультет:';
  1169. select_finish_year='Год окончания обучения:';
  1170. select_graduation='Дата выпуска:';
  1171. select_military_unit='Войсковая часть:';
  1172. select_school='Школа:';
  1173. select_spec='Специализация:';
  1174. select_start_year='Год начала обучения:';
  1175. select_university='ВУЗ:';
  1176. // section = 32; version = 3;
  1177.  
  1178. rate_header='Рейтинг';
  1179. rate_voting='Голосование';
  1180. // section = 34; version = 4;
  1181.  
  1182. search_nothing_found='Ничего не найдено';
  1183. // section = 36; version = 49;
  1184.  
  1185. forum_about_right_answer='У каждого вопроса один из ответов может быть с флажком "Правильный ответ". Ответ, который помечен таким образом, выводится вторым сообщением, сразу после вопроса, и особо отмечен. Не следует забывать, что у вопроса может быть помечен таким образом лишь один ответ, и если пометить второй ответ "Правильным", то первый станет обычным ответом и будет отображаться на своем родном месте.';
  1186. forum_add='Добавить';
  1187. forum_adding_subsection='Добавление подраздела';
  1188. forum_adding_topic='Добавление вопроса';
  1189. forum_add_leader='Добавить';
  1190. forum_add_link='Добавить';
  1191. forum_answer='Ответ';
  1192. forum_cancel='Отмена';
  1193. forum_change='Изменить';
  1194. forum_changing_image='Изменение изображения подраздела';
  1195. forum_changing_image_right_link='http://поддомен.vkontakte.ru/адрес_изображения';
  1196. forum_changing_image_text='Можно вводить ссылки только на изображения, хранящиеся на сайте vkontakte.ru. Правильный вид ссылки:';
  1197. forum_close_section='Закрыть раздел';
  1198. forum_close_section_title='Закрыть на добавление вопросов рядовыми пользователями';
  1199. forum_delete='Удалить';
  1200. forum_delete_not_unique_section='Удалить из этого раздела';
  1201. forum_delete_not_unique_section_confirm='Этот подраздел содержится не только в этом разделе. Если вы удалите его, он пропадет из всех разделов, в которых находился. Если вы хотите удалить его только из этого раздела, нажмите на ссылку ниже:';
  1202. forum_delete_not_unique_topic='Удалить из этого раздела';
  1203. forum_delete_not_unique_topic_confirm='Этот вопрос содержится не только в этом разделе. Если вы удалите его, он пропадет из всех разделов, в которых находился. Если вы хотите удалить его только из этого раздела, нажмите на ссылку ниже:';
  1204. forum_delete_section='Удалить раздел';
  1205. forum_delete_section_confirm='Вы действительно хотите удалить этот раздел?';
  1206. forum_delete_topic='Удаление вопроса';
  1207. forum_delete_topic_confirm='Вы действительно хотите удалить этот вопрос?';
  1208. forum_edit='Редактировать';
  1209. forum_editing_comment='Редактирование ответа';
  1210. forum_editing_leaders='Редактирование руководителей';
  1211. forum_editing_links='Редактирование ссылок';
  1212. forum_editing_topic='Редактирование вопроса';
  1213. forum_edit_subsections_finish='Готово';
  1214. forum_enter_header='Введите заголовок:';
  1215. forum_enter_link='Введите ссылку:';
  1216. forum_enter_name='Введите название:';
  1217. forum_enter_subsection_id='Введите ID подраздела:';
  1218. forum_enter_text='Текст:';
  1219. forum_enter_topic_id='Введите ID вопроса:';
  1220. forum_error_closing_section='Ошибка при закрытии раздела';
  1221. forum_error_closing_topic='Ошибка при закрытии вопроса';
  1222. forum_error_mark_read='Не удалось отметить тему как прочитанную';
  1223. forum_error_null_answer='Надо ввести ответ';
  1224. forum_error_opening_section='Ошибка при открытии раздела';
  1225. forum_error_opening_topic='Ошибка при открытии вопроса';
  1226. forum_error_sticking_topic='Ошибка при прилеплении вопроса';
  1227. forum_error_unsticking_topic='Ошибка при отлеплении вопроса';
  1228. forum_error_wrong_id='Надо ввести правильный ID';
  1229. forum_error_wrong_name_link='Надо указать название и ссылку';
  1230. forum_flood_control='Вы отправляете сообщения слишком быстро.';
  1231. forum_hidden_answer='Скрытый ответ';
  1232. forum_hidden_right_answer='Скрытый ответ';
  1233. forum_hidden_topic='Скрытый вопрос';
  1234. forum_is_hidden_answer='Скрытый ответ';
  1235. forum_is_right_answer='Правильный ответ';
  1236. forum_link_label='Подпись';
  1237. forum_link_link='Ссылка';
  1238. forum_link_name='Название';
  1239. forum_must_enter_text='Необходимо ввести текст вопроса.';
  1240. forum_must_enter_title='Необходимо ввести заголовок вопроса.';
  1241. forum_new_officer_id='ID нового руководителя';
  1242. forum_new_subsection_or='или вы можете добавить существующий подраздел';
  1243. forum_new_topic_text='Здесь вы можете добавить в данный раздел существующий вопрос. Чтобы добавить новый вопрос, воспользуйтесь ссылкой "Задать вопрос" в секции вопросов.';
  1244. forum_ok='Готово';
  1245. forum_open_section='Открыть раздел';
  1246. forum_open_section_title='Открыть на добавление вопросов рядовыми пользователями';
  1247. forum_rename_section='Переименовать раздел';
  1248. forum_right_answer='Правильный ответ';
  1249. forum_show_add_leader='Добавить руководителя';
  1250. forum_show_add_link='Добавить ссылку';
  1251. forum_subscribe='Подписаться на ответы';
  1252. forum_unsubscribe='Отписаться от ответов';
  1253. paysupp_error='Ошибка';
  1254. temp_messages_in_topic_function=['','В обсуждении %s сообщение.','В обсуждении %s сообщения.','В обсуждении %s сообщений.'];
  1255. temp_messages_shown_function='На странице сообщения #{from}-{to}.';
  1256. temp_post_too_long_function=['','Допустимая длина ответа превышена на %s знак.','Допустимая длина ответа превышена на %s знака.','Допустимая длина ответа превышена на %s знаков.'];
  1257. // section = 39; version = 68;
  1258.  
  1259. voting_cant_close='Увы, закрыть опрос не удалось. Перезагрузите страницу и попробуйте еще раз.';
  1260. voting_cant_open='Увы, открыть опрос не удалось. Перезагрузите страницу и попробуйте еще раз.';
  1261. voting_cant_place_main='Увы, поместить опрос на главную страницу группы не удалось. Перезагрузите страницу и попробуйте еще раз.';
  1262. voting_cant_remove_main='Увы, убрать опрос с главной страницы группы не удалось. Перезагрузите страницу и попробуйте еще раз.';
  1263. voting_cant_revote='Увы, переголосовать не удалось. Перезагрузите страницу и попробуйте еще раз.';
  1264. voting_cant_vote='Увы, проголосовать не удалось. Перезагрузите страницу и попробуйте еще раз.';
  1265. voting_empty_vars='Пустые варианты ответа недопустимы. Заполните или уберите их.';
  1266. // section = 40; version = 2;
  1267.  
  1268. wall_post_not_found='Запись не найдена';
  1269. // section = 41; version = 36;
  1270.  
  1271. vkontakte_ru='ВКонтакте.ру';
  1272. // section = 42; version = 59;
  1273.  
  1274.  
  1275. var langConfig = {"id":0,"numDel":"<span style=\"font-size:60%\"> <\/span>","numDelS":" ","numDec":",","prepTags":["{prep_with}","{prep_With}","{prep_about}","{prep_About}"],"prep":[["{prep_with},{prep_With}","С*,З*","со,Со"],["{prep_with},{prep_With}","*,Са*,Се*,Сё*,Си*,Со*,Су*,Сэ*,Сю*,Ся*,За*,Зе*,Зё*,Зи*,Зо*,Зу*,Зэ*,Зю*,Зя*","с,С"],["{prep_about},{prep_About}","А*,О*,У*,И*,Э*","об,Об"],["{prep_about},{prep_About}","*","о,О"]],"parent":0,"timeSys":["24hour"],"yearOffset":0,"flexLast":false,"revOrder":false,"RTL":false,"numRules":{"int":[[100,[11,12,13,14],3],[10,[1],1],[10,[2,3,4],2],["*",0,3]],"float":2},"sexRules":[[1,2],["*",1]],"larr":"&larr;","rarr":"&rarr;"};
  1276. var market_currency_count = ['RUB','UAH','KZT','USD','EUR'];
  1277.  
  1278. var qArr = [[0, getLang('search_by_person'), '', 'people', 0],
  1279. [1, getLang('search_by_group'), '', 'groups', 0x00800000],
  1280. [2, getLang('search_by_event'), '', 'events', 0x01000000],
  1281. [3, getLang('search_by_audio'), '', 'audio',  0x00000002],
  1282. [4, getLang('search_by_video'), '', 'video',  0x00400000],
  1283. [5, getLang('search_by_ad'), '', 'ads', 0x00000100],
  1284. [6, getLang('search_by_app'), '', 'apps', 0x00000020],
  1285. [7, getLang('search_by_question'), '', 'questions', 0x00000040],
  1286. [8, getLang('search_by_note'), '', 'notes', 0x02000000],
  1287. [9, getLang('search_by_topic'), '', 'topics', 0x00800000],
  1288. [11, getLang('search_by_status'), '', 'statuses', 0]];
  1289.  
  1290. var year_offset = langConfig.yearOffset;
  1291. var larr = langConfig.larr;
  1292. var rarr = langConfig.rarr;
  1293.  
  1294. #common_css {
  1295.   display: none;
  1296. }
  1297.  
  1298. body {
  1299.   background: #fff;
  1300.   margin: 0px;
  1301.   padding: 0px;
  1302.   direction: ltr;
  1303.   font-family: tahoma, arial, verdana, sans-serif, Lucida Sans;
  1304.   font-size: 11px;
  1305. }
  1306. body.nofixed {
  1307.   width: 100%;
  1308.   overflow: hidden;
  1309. }
  1310. body.nofixed #page_wrap {
  1311.   position: relative;
  1312.   height: 100%;
  1313.   width: 100%;
  1314.   overflow: auto;
  1315. }
  1316. .fixed {
  1317.   position: fixed;
  1318. }
  1319. body.nofixed .fixed {
  1320.   position: absolute;
  1321. }
  1322. body.firefox #page_wrap {
  1323.   position: relative;
  1324.   width: 100%;
  1325.   overflow: hidden;
  1326. }
  1327.  
  1328. /* in 'rtl' left and ltr too -- disabling content jumping when scrollbar changes */
  1329. .scroll_fix_wrap {
  1330.   text-align: left;
  1331.   direction: ltr;
  1332. }
  1333. a {
  1334.   color: #2B587A;
  1335.   text-decoration: none;
  1336.   cursor: pointer;
  1337. }
  1338. a:hover {
  1339.   text-decoration: underline;
  1340. }
  1341. img {
  1342.   border: 0px;
  1343. }
  1344. form {
  1345.   margin: 0px;
  1346.   padding: 0px;
  1347. }
  1348. small {
  1349.   font-size: 10px;
  1350. }
  1351. textarea.ashelper {
  1352.   overflow: hidden;
  1353. }
  1354.  
  1355. .captcha {
  1356.   text-align: center;
  1357.   height: 80px;
  1358. }
  1359. .captcha img {
  1360.   width: 130px;
  1361.   height: 50px;
  1362.   background: url(/images/vklogo.gif);
  1363.   cursor: pointer;
  1364. }
  1365. .captcha input.text {
  1366.   width: 120px;
  1367.   margin: 10px 0px 0px;
  1368. }
  1369. .captcha .progress {
  1370.   width: 120px;
  1371.   margin: 13px auto 0px;
  1372. }
  1373. .phone_validation_suggest {
  1374.   text-align: center;
  1375.   font-size: 10px;
  1376.   padding-top: 10px;
  1377.   line-height: 15px;
  1378. }
  1379.  
  1380. .summary_wrap {
  1381.   color: #45688E;
  1382.   padding: 11px 10px 0px;
  1383.   background: #FFF;
  1384.   border-bottom: 1px solid #DAE1E8;
  1385. }
  1386. .summary_wrap .summary {
  1387.   font-weight: bold;
  1388.   padding: 3px 0px 4px;
  1389. }
  1390. .summary_wrap .summary span {
  1391.   font-weight: normal;
  1392. }
  1393. .bottom_wrap {
  1394.   border-top: 1px solid #DAE1E8;
  1395.   background: #FFF;
  1396.   padding: 0px 10px;
  1397. }
  1398.  
  1399. .png {
  1400.   behavior: url(/js/iepngfix.htc);
  1401. }
  1402. .progress {
  1403.   display: none;
  1404.   width: 32px;
  1405.   height: 13px;
  1406.   background: url(/images/upload.gif) no-repeat 50% 50%;
  1407. }
  1408. .checkbox {
  1409.   cursor: pointer;
  1410.   line-height: 14px;
  1411. }
  1412. .checkbox.disabled {
  1413.   opacity: 0.5;
  1414.   filter: alpha(opacity=50);
  1415. }
  1416. .checkbox div {
  1417.   float: left;
  1418.   width: 15px;
  1419.   margin-right: 5px;
  1420.   height: 14px;
  1421.   background: url(/images/icons/check.gif) 0px 0px no-repeat;
  1422. }
  1423. .checkbox:hover div {
  1424.   background-position: 0px -28px;
  1425. }
  1426. .checkbox.disabled:hover div {
  1427.   background-position: 0px 0px;
  1428. }
  1429. .checkbox.on div {
  1430.   background-position: 0px -14px;
  1431. }
  1432. .checkbox.on:hover div {
  1433.   background-position: 0px -42px;
  1434. }
  1435. .checkbox.disabled.on:hover div {
  1436.   background-position: 0px -14px;
  1437. }
  1438. .radiobtn {
  1439.   cursor: pointer;
  1440.   line-height: 14px;
  1441. }
  1442. .radiobtn div {
  1443.   float: left;
  1444.   width: 15px;
  1445.   margin-right: 5px;
  1446.   height: 14px;
  1447.   background: url(/images/icons/radio.gif) 0px 0px no-repeat;
  1448. }
  1449. .radiobtn:hover div {
  1450.   background-position: 0px -28px;
  1451. }
  1452. .radiobtn.on div {
  1453.   background-position: 0px -14px;
  1454. }
  1455. .radiobtn.on:hover div {
  1456.   background-position: 0px -42px;
  1457. }
  1458. .fl_l { float: left; }
  1459. .fl_r { float: right; }
  1460. .ta_l { text-align: left; }
  1461. .ta_r { text-align: right; }
  1462.  
  1463. .upload_frame {
  1464.   position: absolute;
  1465.   visibility: hidden;
  1466.   width: 20px;
  1467.   height: 20px;
  1468. }
  1469.  
  1470. .noselect {
  1471.   -webkit-user-select: none;
  1472.   -moz-user-select: none;
  1473.   user-select: none;
  1474. }
  1475.  
  1476. /* Inputs */
  1477.  
  1478. input[type="text"],
  1479. input[type="submit"],
  1480. input[type="button"],
  1481. input[type="search"],
  1482. input[type="password"],
  1483. input[type~="text"],
  1484. input[type~="search"],
  1485. input[type~="password"],
  1486. input[type~="email"] {
  1487.   font-size: 11px;
  1488.   font-family: Tahoma, Verdana, Arial, Sans-Serif, Lucida Sans;
  1489. }
  1490.  
  1491. input.text, input.search, textarea {
  1492.   background: #FFF;
  1493.   border: 1px solid #C0CAD5;
  1494.   font-family: tahoma, tahoma, verdana, arial, sans-serif, Lucida Sans;
  1495.   font-size: 11px;
  1496.   padding: 3px;
  1497.   margin: 0px;
  1498. }
  1499. input.search {
  1500.   background: #FFF url(/images/magglass.png) no-repeat 3px 4px;
  1501.   padding-left: 17px;
  1502. }
  1503. input.file {
  1504.   font-size: 11px;
  1505.   margin: 0px;
  1506. }
  1507.  
  1508. /* Headers */
  1509.  
  1510. h2 {
  1511.   border-bottom: 1px solid #DAE1E8;
  1512.   color: #45668E;
  1513.   font-size: 13px;
  1514.   padding: 0px 0px 3px;
  1515.   margin: 0px 0px 10px;
  1516. }
  1517. h4 {
  1518.   border-bottom: 1px solid #E8EBEE;
  1519.   color: #45688E;
  1520.   font-size: 11px;
  1521.   font-weight: bold;
  1522.   margin: 0px;
  1523.   padding: 0px 0px 3px;
  1524. }
  1525. h4 .fl_r, h4 span {
  1526.   font-weight: normal;
  1527. }
  1528.  
  1529. /* Layout */
  1530.  
  1531. div#utils {
  1532.   top: -30px;
  1533.   position: absolute;
  1534.   height: 20px;
  1535.   overflow: hidden;
  1536. }
  1537. #page_layout {
  1538.   padding: 0px;
  1539.   margin: 0px auto;
  1540.   position: relative;
  1541.   width: 791px;
  1542. }
  1543. #page_header .back {
  1544.   position: absolute;
  1545.   width: 100%;
  1546.   height: 40px;
  1547.   background: #4E729A url(/images/hat.gif) 0px -43px repeat-x;
  1548. }
  1549. #page_header .left {
  1550.   position: absolute;
  1551.   left: 0px;
  1552.   width: 134px;
  1553.   height: 40px;
  1554.   background: #4E729A url(/images/hat.gif) 0px -1px;
  1555. }
  1556. #page_header .right {
  1557.   position: absolute;
  1558.   right: 0px;
  1559.   width: 10px;
  1560.   border-right: 1px solid #FFF;
  1561.   height: 40px;
  1562.   background: #4E729A url(/images/hat.gif) 100% -1px;
  1563. }
  1564. #page_header .content {
  1565.   position: absolute;
  1566.   width: 100%;
  1567.   z-index: 105;
  1568. }
  1569. #page_header.p_head_l777 .left, #page_header.p_head_l777 .right, #page_header.p_head_l777 .back {
  1570.   background-color: #4E729A;
  1571.   background-image: url(/images/hatsov.gif);
  1572. }
  1573. #page_header.p_head_l777 .left {
  1574.   width: 135px;
  1575. }
  1576. #page_header.p_head_l777 .right {
  1577.   width: 6px;
  1578. }
  1579. #page_header.p_head_l100 .left, #page_header.p_head_l100 .right, #page_header.p_head_l100 .back {
  1580.   background-color: #4E729A;
  1581.   background-image: url(/images/hatimp.gif);
  1582. }
  1583. #page_header.p_head_l100 .left {
  1584.   width: 135px;
  1585. }
  1586. #page_header.p_head_l100 .right {
  1587.   width: 10px;
  1588. }
  1589. #page_header.p_head1 .right {
  1590.   background: #4E729A url(/images/hatvk.gif) 100% -1px;
  1591. }
  1592. #page_header.p_head1 .left {
  1593.   width: 147px;
  1594.   background: #4E729A url(/images/hatvk.gif) 0px -1px;
  1595. }
  1596. #page_header.p_head1 .back {
  1597.   background: #4E729A url(/images/hatvk.gif) 0px -43px repeat-x;
  1598. }
  1599. #page_header.p_head1 .top_feed {
  1600.   margin-left: -104px;
  1601.   width: 85px;
  1602.   text-align: center;
  1603.   padding-top: 12px;
  1604. }
  1605. #page_header.p_head1.p_head_l777 .left {
  1606.   width: 6px;
  1607. }
  1608. #page_header.p_head1.p_head_l100 .left {
  1609.   width: 10px;
  1610. }
  1611. .p_head_l777 #search_cont, .p_head_l777 #gsearch {
  1612.   border-color: #851614;
  1613. }
  1614. .p_head_l100 #search_cont, .p_head_l100 #gsearch {
  1615.   border-color: #45372F;
  1616. }
  1617. .p_head_l777 .head_nav a, .p_head_l777 .head_nav div, .p_head_l777 .homelink, .p_head_l777 .unl,
  1618. .p_head_l100 .head_nav a, .p_head_l100 .head_nav div, .p_head_l100 .homelink, .p_head_l100 .unl {
  1619.   color: #E6E5B8;
  1620. }
  1621. #page_header {
  1622.   height: 40px;
  1623. }
  1624. #home {
  1625.   width: 153px;
  1626.   height: 40px;
  1627. }
  1628. #page_header1 #home {
  1629.   display: none;
  1630. }
  1631. .homelink, .shah, .unl {
  1632.   position: absolute;
  1633.   left: 0px;
  1634.   top: 0px;
  1635.   display: block;
  1636.   color: #FFF;
  1637.   font-weight: bold;
  1638.   padding: 7px 0px 0px 14px;
  1639.   font-size: 11px;
  1640.   display:block;
  1641.   width: 153px;
  1642.   z-index: 410;
  1643.   overflow: hidden;
  1644. }
  1645. .shah {
  1646.   padding-top: 8px;
  1647.   color: #000;
  1648.   opacity: 0.4;
  1649.   filter: alpha(opacity=40);
  1650.   z-index: 400;
  1651. }
  1652. .vklink {
  1653.   font-size: 15px;
  1654.   padding: 10px 17px 10px;
  1655. }
  1656. .shah.vklink {
  1657.   padding-top: 11px;
  1658. }
  1659. .unl {
  1660.   margin-top: 21px;
  1661.   padding-top: 0px;
  1662.   font-weight: normal;
  1663.   display: block;
  1664.   font-size: 10px;
  1665.   color: #dae1e8;
  1666. }
  1667. a.unl:hover, a.homelink:hover {
  1668.   text-decoration: underline;
  1669. }
  1670. .head_nav {
  1671.   margin: 0px;
  1672.   padding: 0px 8px 0px 0px;
  1673. }
  1674. .head_nav a.top_nav_link {
  1675.   display: block;
  1676.   padding: 12px 9px 15px;
  1677.   height: 11px;
  1678.   margin: 0px;
  1679.   font-weight: bold;
  1680.   font-size: 11px;
  1681.   color: #E8EFF7;
  1682.   text-shadow: 0px 1px 0px #416389;
  1683. }
  1684. .head_nav div#top_links {
  1685.   padding: 0px;
  1686.   height: 22px;
  1687.   background-image: none;
  1688. }
  1689. .head_nav.no_menu div#top_links {
  1690.   display: none;
  1691. }
  1692. .head_nav.no_menu a#logout_link {
  1693.   display: none;
  1694. }
  1695. .head_nav a:hover {
  1696.   color: #FFF;
  1697.   text-decoration: underline;
  1698. }
  1699.  
  1700. .head_nav a.top_nav_link b {
  1701.   font-weight: normal;
  1702.   color: #E8EFF7;
  1703. }
  1704.  
  1705. .head_nav a.top_nav_link span {
  1706.   color: #FFF;
  1707. }
  1708.  
  1709. #page_body {
  1710.   font-size: 11px;
  1711.   width: 631px;
  1712.   padding: 0px 15px 0px 0px;
  1713. }
  1714. #page_body.simple {
  1715.   padding: 0px;
  1716.   margin: 0px auto;
  1717. }
  1718. body.firefox #page_body {
  1719.   overflow: hidden;
  1720. }
  1721. body.firefox #page_body.no_overflow {
  1722.   overflow: visible;
  1723. }
  1724. #wrap2 {
  1725.   border: solid #F3F3F3;
  1726.   border-width: 0px 1px 1px;
  1727. }
  1728. #wrap1 {
  1729.   border: solid #D9E0E7;
  1730.   border-width: 0px 1px 1px;
  1731. }
  1732. #wrap_between {
  1733.   height: 0px;
  1734.   overflow: hidden;
  1735. }
  1736. * html #content {
  1737.   height: 1%;
  1738. }
  1739.  
  1740. #header_wrap1 {
  1741.   border: solid #F3F3F3;
  1742.   border-width: 0px 1px;
  1743. }
  1744. #header {
  1745.   position: relative;
  1746.   font-weight: bold;
  1747.   font-size: 11px;
  1748.   padding: 4px 10px;
  1749.   background: #F2EAB8 url(/images/headeryell.gif) top left repeat-x;
  1750.   color: #000;
  1751.   border: 1px solid #D1C992;
  1752. }
  1753. #title b {
  1754.   position: relative;
  1755. }
  1756. #header h1 {
  1757.   margin: 0px;
  1758.   font-size: 11px;
  1759.   overflow: hidden;
  1760. }
  1761. #header h1 a {
  1762.   color: #696029;
  1763. }
  1764. #header span {
  1765.   color: #8E8443;
  1766.   color: #C8BF85;
  1767. }
  1768. #header b {
  1769.   color: #C2BC82;
  1770. }
  1771.  
  1772. /* Left notifier */
  1773.  
  1774. .left_box {
  1775.   text-align: center;
  1776.   padding: 5px;
  1777.   background: #F7F7F7;
  1778.   margin: 0px 0px 10px;
  1779. }
  1780. .left_box h4 {
  1781.   font-size: 12px;
  1782.   border-bottom: solid 1px #DAE1E8;
  1783.   padding: 0px 0px 3px;
  1784.   margin: 0px 5px 3px;
  1785. }
  1786. .left_box.attention h4 {
  1787.   color: #45688E;
  1788. }
  1789.  
  1790. .left_hide {
  1791.   position: absolute;
  1792.   margin: 0px 118px;
  1793.   width: 18px;
  1794.   height: 18px;
  1795.   background: url(/images/hide_left.gif) no-repeat center center;
  1796.   opacity: 0;
  1797.   filter: alpha(opacity=0);
  1798.   cursor: pointer;
  1799. }
  1800.  
  1801. .left_gift_bonus, .left_rate_plus {
  1802.   color: #C4BB98;
  1803.   font-size: 10px;
  1804.   font-weight: bold;
  1805.   margin-top: -11px;
  1806. }
  1807. .left_gift {
  1808.   border-bottom: 1px solid #DCDCDC;
  1809.   margin-bottom: 10px;
  1810. }
  1811. .left_gift .body {
  1812.   background: #F7F7F7;
  1813.   border: 6px solid #EAEAEA;
  1814.   padding: 4px 4px 7px;
  1815.   text-align: center;
  1816. }
  1817. .left_gift .body div {
  1818.   border-bottom: 1px solid #DCDCDC;
  1819.   margin: 0px 3px 7px;
  1820.   padding-bottom: 2px;
  1821. }
  1822. .left_gift.gold {
  1823.   border-color: #C4BB98;
  1824. }
  1825. .left_gift.gold .body {
  1826.   background: #FEF9E1;
  1827.   border-color: #E9DEB4;
  1828. }
  1829. .left_gift.gold .body div {
  1830.   border-color: #C4BB98;
  1831. }
  1832.  
  1833. .left_rate_plus {
  1834.   color: #EEBD00;
  1835. }
  1836. .left_rate_plus.green {
  1837.   color: #8DB55F;
  1838. }
  1839. .left_rate_plus.red {
  1840.   color: #C5864F;
  1841. }
  1842. .left_rate_plus.blue {
  1843.   color: #99B3C9;
  1844. }
  1845. .left_rate .body {
  1846.   background: #FAF3D8 url(/images/golden.gif) repeat-x 50% 100%;
  1847.   border-bottom: 1px solid #FBE172;
  1848.   margin: 0px 0px 10px;
  1849.   padding: 5px;
  1850.   text-align: center;
  1851. }
  1852. .left_rate .body div {
  1853.   border-bottom: 1px solid #E6E0B6;
  1854.   margin: 0px 3px 7px;
  1855.   padding-bottom: 2px;
  1856. }
  1857. .left_rate .body div a {
  1858.   color: #908851;
  1859. }
  1860. .left_rate .body a {
  1861.   color: #000;
  1862. }
  1863. .left_rate .body a:hover {
  1864.   text-decoration: none;
  1865. }
  1866. .left_rate.green, .left_rate.red, .left_rate.blue {
  1867.   border-bottom: 1px solid #37702A;
  1868.   margin-bottom: 10px;
  1869. }
  1870. .left_rate.green .body, .left_rate.red .body, .left_rate.blue .body {
  1871.   background: #D5EABB url(/images/greenl.gif) repeat-x 50% 0%;
  1872.   border: 8px solid #8DBF56;
  1873.   margin-bottom: 0px;
  1874. }
  1875. .left_rate.green .body a div, .left_rate.red .body a div, .left_rate.blue .body a div {
  1876.   border: 0px;
  1877.   font-size: 36px;
  1878.   font-weight: bold;
  1879.   color: #8DBF56;
  1880.   margin: 5px 5px 5px 3px;
  1881. }
  1882. .left_rate.green .body div {
  1883.   border-color: #8DBF56;
  1884. }
  1885. .left_rate.green .body div a {
  1886.   color: #37702A;
  1887. }
  1888. .left_rate.red {
  1889.   border-color: #8B4C23;
  1890. }
  1891. .left_rate.red .body {
  1892.   background: #F0D6C7 url(/images/redl.gif) repeat-x 50% 0%;
  1893.   border-color: #C68D69;
  1894. }
  1895. .left_rate.red .body div {
  1896.   border-color: #C39679;
  1897. }
  1898. .left_rate.red .body div a {
  1899.   color: #8B4C23;
  1900. }
  1901. .left_rate.red .body a div {
  1902.   color: #C68D69;
  1903. }
  1904. .left_rate.blue {
  1905.   border-color: #2F6C95;
  1906. }
  1907. .left_rate.blue .body {
  1908.   background: #D9E6EE url(/images/bluel.gif) repeat-x 50% 0%;
  1909.   border-color: #99B3C9;
  1910. }
  1911. .left_rate.blue .body div {
  1912.   border-color: #99B3C9;
  1913. }
  1914. .left_rate.blue .body div a {
  1915.   color: #0B5588;
  1916. }
  1917. .left_rate.blue .body a div {
  1918.   color: #99B3C9;
  1919. }
  1920. .left_gift .body div.vote_transfer {
  1921.   padding: 5px 0px 12px;
  1922.   font-weight: bold;
  1923. }
  1924.  
  1925. #banner1 iframe, #banner2 iframe {
  1926.   padding: 0px;
  1927.   margin: 0px;
  1928.   overflow: hidden;
  1929. }
  1930. #banner1 iframe {
  1931.   border: 0px;
  1932.   width: 120px;
  1933.   height: 300px;
  1934.   padding: 0px;
  1935. }
  1936. #banner2, #banner2 iframe {
  1937.   border: 0px;
  1938.   background: #FFF;
  1939.   width: 600px;
  1940.   height: 90px;
  1941.   margin: 0px auto;
  1942.   padding: 0px;
  1943. }
  1944. #banner1, #banner2 {
  1945.   margin-top: 15px;
  1946.   display: none;
  1947. }
  1948. #banner2 {
  1949.   width: 660px;
  1950.   text-align: center;
  1951.   margin-top: 10px;
  1952. }
  1953.  
  1954. .ad_box {
  1955.   background: #F7F7F7;
  1956.   border: 1px solid #C0CAD5;
  1957.   border-width: 1px 0px;
  1958.   padding-bottom: 10px;
  1959.   width: 118px;
  1960.   overflow: hidden;
  1961.   text-align: center;
  1962.   display: block;
  1963. }
  1964. .ad_title {
  1965.   font-weight: bold;
  1966.   font-size: 11px;
  1967.   margin: 0px 3px;
  1968.   color: #36638E;
  1969.   padding-top: 8px;
  1970.   text-align: center;
  1971. }
  1972. .ad_box img {
  1973.   padding-top: 8px
  1974. }
  1975. .ad_desc {
  1976.   padding-top: 8px;
  1977.   margin: 0px 2px;
  1978. }
  1979. a.ad_box:hover {
  1980.   text-decoration: none;
  1981. }
  1982. a.ad_box .ad_desc {
  1983.   color: #000;
  1984. }
  1985. .ad_box.ad_friend {
  1986.   border-bottom-width: 0px;
  1987.   padding-bottom: 0px;
  1988. }
  1989. .ad_friend .ad_body {
  1990.   height: 75px;
  1991.   width: 118px;
  1992.   overflow: hidden;
  1993.   text-align: center;
  1994. }
  1995. .ad_friend .ad_body img {
  1996.   width: 63%;
  1997. }
  1998. .ad_box.ad_friends {
  1999.   border-top-width: 0px;
  2000.   padding-top: 12px;
  2001. }
  2002. .ad_help_link {
  2003.   margin-top: 3px;
  2004.   font-size: 10px;
  2005.   text-align: center;
  2006. }
  2007. .ad_complain {
  2008.   padding-top: 8px;
  2009.   font-size: 10px;
  2010.   text-align: center;
  2011. }
  2012. .ad_complain span {
  2013.   color: #2B587A;
  2014. }
  2015. .ad_complain span:hover {
  2016.   text-decoration: underline;
  2017. }
  2018.  
  2019. .ad_box_new {
  2020.  background: #FFFFFF;
  2021.  border: 1px solid #DCE3E9;
  2022.  border-width: 1px 0px;
  2023.  padding: 0px 0px 11px 0px;
  2024.  margin: 0px;
  2025.  width: 118px;
  2026.  overflow: hidden;
  2027.  text-align: center;
  2028.  display: block;
  2029. }
  2030.  
  2031. .ad_title_new {
  2032.   font-weight: bold;
  2033.   font-size: 11px;
  2034.   margin: 0px 3px;
  2035.   margin-top: 6px;
  2036.   color: #36638E;
  2037.   text-align: center
  2038. }
  2039. .ad_domain_new {
  2040.   margin-top: 3px;
  2041.   font-size: 10px;
  2042.   color: #909090;
  2043. }
  2044. .ad_box_new img {
  2045.   margin-top: 9px
  2046. }
  2047. .ad_desc_new {
  2048.   margin: 0px 2px;
  2049.   margin-top: 10px;
  2050.   color: #000000;
  2051. }
  2052.  
  2053. a.ad_box_new:hover {
  2054.   text-decoration: none;
  2055. }
  2056.  
  2057. .ad_box_new .left_hide_new {
  2058.   position: absolute;
  2059.   margin: 4px 0px 0px 117px;
  2060.   width: 18px;
  2061.   height: 18px;
  2062.   background: url(/images/hide_left.gif) no-repeat center center;
  2063.   opacity: 0;
  2064.   filter: alpha(opacity=0);
  2065.   cursor: pointer;
  2066. }
  2067.  
  2068. .ad_hide_mask_new {
  2069.   background-color: #F7F7F7;
  2070.   position: absolute;
  2071.   z-index: 5;
  2072.  
  2073.   display: none;
  2074.   opacity: 0;
  2075.   filter: alpha(opacity=0);
  2076.  
  2077.   border: 1px solid #DCE3E9;
  2078.   border-width: 1px 0px;
  2079.   padding: 0px;
  2080.   margin: 0px;
  2081.   width: 118px;
  2082.   overflow: hidden;
  2083.   text-align: center;
  2084. }
  2085.  
  2086. .ad_info_new {
  2087.   color: #808080;
  2088.   font-size: 10px;
  2089. }
  2090. .ad_complain_new {
  2091.   margin-top: 10px;
  2092.  
  2093.   color: #808080;
  2094.   font-size: 10px;
  2095. }
  2096. .ad_complain_info_new {
  2097.   color: #808080;
  2098.   font-size: 10px;
  2099. }
  2100. .ad_complain_link_new {
  2101.   color: #2B587A;
  2102.   font-size: 10px;
  2103.   text-decoration: none;
  2104. }
  2105. .ad_complain_link_new:hover {
  2106.   text-decoration: underline;
  2107.   cursor: pointer;
  2108. }
  2109.  
  2110.  
  2111. /* Footer */
  2112.  
  2113. #footer_wrap {
  2114.   clear: both;
  2115.   line-height: 15px;
  2116.   padding: 5px 0px 0px;
  2117.   text-align: center;
  2118.   width: 660px;
  2119. }
  2120. #footer_wrap.simple {
  2121.   margin: 0px;
  2122.   width: auto;
  2123. }
  2124. #footer_wrap.simple #bottom_nav {
  2125.   display: none;
  2126. }
  2127. #footer_wrap .copy_lang a {
  2128.   margin: 0px 2px;
  2129. }
  2130. #footer_wrap #footer {
  2131.   padding: 10px 0px 0px;
  2132.   text-align: center;
  2133.   margin: 0px;
  2134. }
  2135.  
  2136. #bottom_nav a {
  2137.   border-top: 1px solid #FFF;
  2138.   padding: 1px 5px 2px;
  2139. }
  2140. #bottom_nav a:hover {
  2141.   border-top: 1px solid #CAD1D9;
  2142.   background-color: #DAE1E8;
  2143.   text-decoration: none;
  2144. }
  2145.  
  2146. /* Left menu */
  2147.  
  2148. #side_bar {
  2149.   margin: 5px 0px 0px 4px;
  2150.   padding-bottom: 10px;
  2151.   width: 118px;
  2152. }
  2153. #side_bar .more_div {
  2154.   margin-top: 3px;
  2155.   padding-top: 3px;
  2156.   border-top: 1px solid #E7EAED;
  2157. }
  2158. #side_bar ol li a.more {
  2159.   padding-left: 29px;
  2160.   border-top: 0px;
  2161. }
  2162. #side_bar ol li a.more:hover {
  2163.   border-top: 0px;
  2164. }
  2165.  
  2166. #side_bar ol {
  2167.   list-style: none;
  2168.   margin: 0px 0px 10px;
  2169.   padding: 0px;
  2170. }
  2171. #side_bar ol li {
  2172.   font-size: 1.0em;
  2173. }
  2174. #side_bar ol li#myprofile {
  2175.   border-bottom: 0;
  2176.   *margin-bottom:-2px;
  2177. }
  2178. #side_bar ol li a {
  2179.   border: 0;
  2180.   background: #FFF;
  2181.   display: block;
  2182.   padding: 4px 3px 4px 6px;
  2183. }
  2184. #side_bar ol li a.more {
  2185.   padding-left: 6px;
  2186. }
  2187. #side_bar ol li#myprofile a {
  2188.   padding: 0;
  2189.   width: auto;
  2190. }
  2191. #side_bar ol li#myprofile a.hasedit {
  2192.   width: 76px;
  2193.   padding: 3px 3px 3px 6px;
  2194. }
  2195. #side_bar ol li#myprofile a.edit {
  2196.   color: gray;
  2197.   text-align: center;
  2198.   width: 28px;
  2199.   padding: 3px 0px 3px 1px;
  2200. }
  2201. #side_bar ol li a:hover {
  2202.   background: #E1E7ED;
  2203.   text-decoration: none;
  2204. }
  2205.  
  2206. /* Clear */
  2207.  
  2208. .clear_fix:after {
  2209.   content: '.';
  2210.   display: block;
  2211.   height: 0;
  2212.   clear: both;
  2213.   visibility: hidden;
  2214. }
  2215. * html .clear_fix {
  2216.   height: 1%;
  2217. }
  2218. .clear_fix {
  2219.   display: block;
  2220. }
  2221. .clear {
  2222.   float: none;
  2223.   clear: both;
  2224. }
  2225. .scroll_fix {
  2226.   position: relative;
  2227. }
  2228.  
  2229. /* Head */
  2230.  
  2231. .listing {
  2232.   list-style: square;
  2233.   padding-left: 40px;
  2234.   color: #758EAC;
  2235.   margin: 0px 0px 15px 0px
  2236. }
  2237. ul.listing li {
  2238.   padding: 1px 0px;
  2239. }
  2240. ul.listing li span {
  2241.   color: #000;
  2242. }
  2243.  
  2244. .divide  {
  2245.   color: gray;
  2246.   font-weight: normal;
  2247.   padding: 0px 4px;
  2248. }
  2249. small.divide {
  2250.   padding: 0px 2px;
  2251. }
  2252.  
  2253. .sdivide {
  2254.   color: #ADB8C3;
  2255.   padding: 0px 4px;
  2256.   font-size: 10px;
  2257. }
  2258.  
  2259. .wrapped {
  2260.   overflow: hidden;
  2261.   word-wrap: break-word;
  2262. }
  2263.  
  2264. wbr {
  2265.   width: 0px;
  2266.   display: inline-block;
  2267.   overflow: hidden;
  2268. }
  2269.  
  2270. .ad_box {
  2271.   background: #F7F7F7;
  2272.   border: 1px solid #C0CAD5;
  2273.   border-width: 1px 0px;
  2274.   padding: 0px 0px 10px 0px;
  2275.   margin: 0px;
  2276.   width: 118px;
  2277.   overflow: hidden;
  2278.   text-align: center;
  2279.   display: block;
  2280. }
  2281. .ad_title {
  2282.   font-weight: bold;
  2283.   font-size: 11px;
  2284.   margin: 0px 3px;
  2285.   color: #36638E;
  2286.   padding-top: 8px;
  2287.   text-align: center;
  2288. }
  2289. .ad_box img {
  2290.   padding-top: 8px
  2291. }
  2292. .ad_desc {
  2293.   padding-top: 8px;
  2294.   margin: 0px 2px;
  2295. }
  2296. a.ad_box .ad_desc {
  2297.   color: #000;
  2298. }
  2299.  
  2300. #side_back_link {
  2301.   padding: 8px 9px 8px 20px;
  2302.   background: #FFF url(/images/backlink.gif?3) no-repeat left top;
  2303.   display: none;
  2304.   opacity: 0;
  2305.   filter: alpha(opacity=0);
  2306.   z-index: 400;
  2307. }
  2308. #top_back_link {
  2309.   padding-left: 20px;
  2310.   background: url(/images/backlink.gif?3) no-repeat left -84px;
  2311.   font-weight: normal;
  2312.   width: 220px;
  2313.   overflow: hidden;
  2314.   display: none;
  2315. }
  2316. #side_back_link.back {
  2317.   background-position: left -30px;
  2318.   padding-left: 18px;
  2319. }
  2320. #side_back_link:hover {
  2321.   text-decoration: none;
  2322. }
  2323.  
  2324. /* Layers */
  2325.  
  2326. #layer_bg, #box_layer_bg, #layer_wrap, #box_layer_wrap {
  2327.   top: 0;
  2328.   left: 0;
  2329.   width: 100%;
  2330.   height: 100%;
  2331.   z-index: 500;
  2332.   overflow: hidden;
  2333.   display: none;
  2334. }
  2335. #box_layer_bg, #box_layer_wrap {
  2336.   z-index: 1000;
  2337. }
  2338. #layer_wrap, #box_layer_wrap {
  2339.   overflow: auto;
  2340. }
  2341.  
  2342. /* MessageBox */
  2343.  
  2344. .popup_box_container {
  2345.   margin: 0px auto;
  2346.   z-index: 1002;
  2347.   padding: 10px;
  2348.   background: transparent url(/images/transpx2.png) repeat scroll 0 0;
  2349.   *background-color: #C6D0D8;
  2350.   _background-color: #C6D0D8;
  2351. }
  2352. .box_title_wrap {
  2353.   background-color: #4B769F;
  2354.   border: 1px solid #324B67;
  2355.   border: 1px solid #45688E;
  2356.   aborder-bottom: 1px solid #45688E;
  2357.   padding: 0px;
  2358.   color: #fff;
  2359.   font-size: 13px;
  2360.   font-weight: bold;
  2361. }
  2362. .box_x_button {
  2363.   float: right;
  2364.   width: 17px;
  2365.   height: 17px;
  2366.   margin: 5px 5px 0px;
  2367.   cursor: pointer;
  2368.   padding: 0;
  2369.   background: #9CB8D4 url(/images/icons/boxicons.gif) -23px -2px;
  2370. }
  2371. .box_body {
  2372.   background-color: #fff;
  2373.   border-left: 1px solid #AAA;
  2374.   border-right: 1px solid #AAA;
  2375.   padding: 16px 14px;
  2376.   aline-height: 14px;
  2377. }
  2378. .box_no_title {
  2379.   border-top: 1px solid #AAA;
  2380. }
  2381. .box_controls_wrap {
  2382.   border: 1px solid #AAA;
  2383.   border-top: 0px;
  2384. }
  2385. .box_controls_text {
  2386.   padding: 8px 8px 0px;
  2387. }
  2388. .box_controls {
  2389.   padding: 5px;
  2390.   height: 30px;
  2391.   background-color:#f2f2f2;
  2392.   border-top: 1px solid #ccc;
  2393. }
  2394. .box_controls .progress {
  2395.   position: relative;
  2396.   margin: 7px 10px 0px;
  2397. }
  2398. .controls_wrap {
  2399.   padding: 7px 0px 0px 5px;
  2400. }
  2401.  
  2402. .button_yes, .button_no, .button_cancel {
  2403.   cursor: pointer;
  2404.   width: auto;
  2405.   height: auto;
  2406. }
  2407. .box_controls .button_wrap {
  2408.   padding: 2px 5px;
  2409.   float: right;
  2410. }
  2411. .button_yes div, .button_no div {
  2412.   padding: 4px 14px;
  2413.   text-align: center;
  2414. }
  2415.  
  2416. .button_cancel div {
  2417.   padding: 6px 15px;
  2418.   *padding: 7px 15px;
  2419.   text-align: center;
  2420. }
  2421.  
  2422. .button_yes {
  2423.   border: 1px solid #3B6798;
  2424.   text-shadow: 0px 1px 0px #45688E;
  2425. }
  2426. .button_yes_bottom {
  2427.   border-bottom: 1px solid #2B587A;
  2428. }
  2429. .button_yes div {
  2430.   border-style: solid;
  2431.   border-width: 1px;
  2432.   border-color: #7E9CBC #5C82AB #5C82AB;
  2433.   background-color:#6D8FB3;
  2434.   color: #FFF;
  2435. }
  2436. .button_yes div.button_hover {
  2437.   border-color: #92ACC7 #7293B7 #7293B7;
  2438.   background-color: #84A1BF;
  2439. }
  2440. .button_yes div.button_down {
  2441.   border-color: #4f749d #4f749d #5c82ab;
  2442.   background-color: #5e84a9;
  2443. }
  2444. .button_no {
  2445.   border: 1px solid #B8B8B8;
  2446.   border-top: 1px solid #9F9F9F;
  2447.   text-shadow: 0px 1px #FFF;
  2448. }
  2449.  
  2450. .button_cancel {
  2451.   color: #2B587A;
  2452. }
  2453.  
  2454. .button_cancel .button_hover {
  2455.   background: #E1E7ED;
  2456. }
  2457.  
  2458. .button_no div {
  2459.   border: 1px solid #F4F4F4;
  2460.   border-top: 1px solid #fff;
  2461.   border-bottom: 1px solid #DFDFDF;
  2462.   background-color: #eaeaea;
  2463.   color: #000;
  2464.   text-decoration: none;
  2465. }
  2466. .button_no div.button_hover {
  2467.   background-color: #f7f7f7;
  2468. }
  2469.  
  2470. .button_yes.locked .lock span, .button_no.locked .lock span {
  2471.   visibility: hidden;
  2472. }
  2473.  
  2474. .button_yes.locked .lock, .button_no.locked .lock {
  2475.   background: url(/images/upload.gif) no-repeat center 7px;
  2476. }
  2477.  
  2478. .box_title {
  2479.   border-top: 1px solid #6088B3;
  2480.   border-bottom: 1px solid #466E94;
  2481.   padding: 4px 10px 5px 10px;
  2482. }
  2483. .box_no_controls {
  2484.   background-color: #DAE2E8;
  2485.   border: 1px solid #ADBBCA;
  2486. }
  2487. .box_no_controls .box_title_wrap, .box_no_controls .box_layout .box_controls {
  2488.   display: none;
  2489. }
  2490. .box_no_controls .box_body {
  2491.   border: none;
  2492.   padding: 0;
  2493. }
  2494.  
  2495. .delete_all .clear_fix {
  2496.   margin-top: 10px;
  2497. }
  2498. .delete_all .button_gray {
  2499.   margin: 0px 10px;
  2500. }
  2501.  
  2502. /*
  2503.  New input buttons with gradient
  2504. */
  2505. .button_blue, .button_gray {
  2506.   text-align: center;
  2507.   -moz-border-radius: 2px;
  2508.   -webkit-border-radius: 2px;
  2509.   border-radius: 2px;
  2510.   display: inline-block;
  2511.   *display: inline;
  2512.   position:relative;
  2513.   zoom: 1;
  2514. }
  2515. .box_controls .button_blue, .box_controls .button_gray {
  2516.   margin: 2px 5px;
  2517. }
  2518. .button_blue button, .button_gray button {
  2519.  border:1px solid;
  2520.  background: none;
  2521.  font-size: 11px;
  2522.  margin: 0px;
  2523.  cursor: pointer;
  2524.  white-space: nowrap;
  2525.  outline: none;
  2526.  padding: 4px 14px 4px;
  2527.  *padding: 5px 15px 3px;
  2528.  font-family: tahoma, verdana, arial, sans-serif, Lucida Sans;
  2529.  overflow: visible;
  2530. }
  2531. .button_wide {
  2532.   display: block;
  2533. }
  2534. .button_wide button {
  2535.   width: 100%;
  2536. }
  2537.  
  2538. .button_blue button::-moz-focus-inner,
  2539. .button_gray button::-moz-focus-inner {
  2540.   border:0;
  2541. }
  2542.  
  2543. .button_blue {
  2544.   border: 1px solid #416796;
  2545.   background: #6485aa;
  2546. }
  2547. .button_blue button {
  2548.  border-top-color: #7c98ba;
  2549.  border-bottom-color: #5e80a9;
  2550.  border-left-color: #5e80a9;
  2551.  border-right-color: #5e80a9;
  2552.  color: #FFF;
  2553.  text-shadow:0 1px 0 #45688E;
  2554.  *border: 0;
  2555.  background: url('/images/button_bg.png') #6181a6 repeat-x top;
  2556.  background-position: 0px -16px;
  2557.  *background-position: 0px -16px;
  2558. }
  2559. .button_blue button:hover {
  2560.  background-position: 0px -8px;
  2561. }
  2562. .button_blue button:active {
  2563.   background: #5e80a5;
  2564.   border: 1px solid #5e80a5;
  2565.   position:relative;
  2566. }
  2567. .button_gray {
  2568.   border: 1px solid #b3b3b3;
  2569.   background: #e0e0e0;
  2570. }
  2571. .button_gray button {
  2572.  border-top-color: #ffffff;
  2573.  border-bottom-color: #e5e5e5;
  2574.  border-left-color: #e7e7e7;
  2575.  border-right-color: #e7e7e7;
  2576.  color: #444;
  2577.  text-shadow:0 1px 0 #ffffff;
  2578.  *border: 0;
  2579.  background: url('/images/button_bg.png') #dddddd repeat-x top;
  2580.  background-position: 0px -54px;
  2581. }
  2582. .button_gray button:hover {
  2583.  background-position: 0px -46px;
  2584. }
  2585. .button_gray button:active {
  2586.   background: #dcdcdc;
  2587.   border: 1px solid #dcdcdc;
  2588.   position:relative;
  2589. }
  2590. .button_lock {
  2591.   background: url('/images/upload_inv.gif') center no-repeat;
  2592.   position:absolute;
  2593.   width: 100%;
  2594.   height: 100%;
  2595. }
  2596.  
  2597. /* Pages */
  2598.  
  2599. .page_list {
  2600.   list-style: none;
  2601.   margin: 0;
  2602.   padding: 0;
  2603. }
  2604. .page_list li {
  2605.   float: left;
  2606.   display: inline;
  2607. }
  2608. .page_list a {
  2609.   border-bottom: 2px solid #FFF;
  2610.   display: block;
  2611.   padding: 3px 3px 2px;
  2612. }
  2613. .page_list a:hover {
  2614.   background: #45668E;
  2615.   border-color: #DAE2E8;
  2616.   border-bottom: 1px solid #45668E;
  2617.   color: #FFF;
  2618.   text-decoration: none;
  2619. }
  2620. .page_list .current {
  2621.   background: #FFF;
  2622.   border-color: #45668E;
  2623.   border-bottom: 2px solid #45668E;
  2624.   color: #45668E;
  2625.   font-weight: bold;
  2626.   padding: 3px 2px 2px;
  2627. }
  2628. .pages_bottom .page_list .current {
  2629.   padding-top: 1px;
  2630.   border-bottom-color: white;
  2631.   border-top: 2px solid #45668E;
  2632. }
  2633.  
  2634. .flat_tabs {
  2635.   border-bottom: 1px solid #DAE1E8;
  2636.   height: 24px;
  2637.   list-style-type: none;
  2638.   margin: 0pt;
  2639.   padding: 0px 7px;
  2640.   vertical-align: bottom;
  2641. }
  2642. .flat_tab_on {
  2643.   background-color: #FFF;
  2644.   border: 1px solid #C3CAD2;
  2645.   border-bottom: 0px;
  2646.   float: left;
  2647.   height: 24px;
  2648.   margin: 0px 3px -1px;
  2649.   text-align: center;
  2650.   position: relative;
  2651. }
  2652. .flat_tab_on a {
  2653.   float: left;
  2654.   padding: 5px 10px;
  2655.   text-decoration: none;
  2656. }
  2657. .flat_tab {
  2658.   background-color: #F5F7FA;
  2659.   border: 1px solid #C3CAD2;
  2660.   border-bottom: 0px;
  2661.   float: left;
  2662.   height: 23px;
  2663.   margin: 0px 3px;
  2664.   text-align: center;
  2665. }
  2666. .flat_tab a {
  2667.   border-bottom: 2px solid #EEF0F3;
  2668.   float: left;
  2669.   padding: 5px 10px 3px;
  2670.   text-decoration: none;
  2671. }
  2672. .flat_tab a:hover {
  2673.   background-color: #FFF;
  2674.   text-decoration: none;
  2675. }
  2676. .flat_tab a:hover{
  2677.   background-color: #FFF;
  2678.   border-bottom: 2px solid #F5F9FC;
  2679.   text-decoration: none;
  2680. }
  2681.  
  2682. .audio td {
  2683.   vertical-align: top;
  2684.   padding: 2px;
  2685. }
  2686. .audio .play {
  2687.   cursor: pointer;
  2688.   width: 20px;
  2689.   height: 17px;
  2690.   background: url(/images/play.gif) no-repeat 0px 0px;
  2691. }
  2692. .audio .info {
  2693.   width: 100%;
  2694. }
  2695. .audio .duration {
  2696.   color: #777;
  2697.   font-size: 10px;
  2698.   padding: 4px 0 0 4px;
  2699. }
  2700. .audio .player_wrap {
  2701.   height: 14px;
  2702.   margin-left: 28px;
  2703.   padding-top: 3px;
  2704. }
  2705. .audio .playline {
  2706.   padding-top: 5px;
  2707. }
  2708. .audio .playline div {
  2709.   border-top: 1px dashed #D8DFEA;
  2710.   height: 9px;
  2711. }
  2712. .audio .player {
  2713.   display: none;
  2714.   height: 14px;
  2715. }
  2716. .add_audio_plus {
  2717.   background: #C4D2E1 url(/images/icons/plus_icon3.gif) no-repeat;
  2718.   height: 17px;
  2719.   width: 16px;
  2720.   cursor: pointer;
  2721.   margin-top: -2px;
  2722. }
  2723. .add_audio_plus.done {
  2724.   background-position: 0 -17px;
  2725.   background-color: #6B8DB1;
  2726.   cursor: default;
  2727. }
  2728.  
  2729. #box_layer .video_box .wrap {
  2730.   position: relative;
  2731. }
  2732. #box_layer .video_box div {
  2733.   position: relative;
  2734.   z-index: 1011;
  2735. }
  2736. #box_layer .video_box .background {
  2737.   position: absolute;
  2738.   z-index: 1010;
  2739. }
  2740. #box_layer .video_box .description,
  2741. #box_layer .video .description {
  2742.   padding-top: 10px;
  2743.   position: relative;
  2744. }
  2745. #box_layer .video_box .no_flash_wrap {
  2746.   padding-top: 160px;
  2747. }
  2748. #box_layer .video_box .no_flash {
  2749.   margin: auto;
  2750.   width: 320px;
  2751.   padding: 10px;
  2752.   background: #FFF;
  2753.   border: 1px solid #CCC;
  2754.   position: relative;
  2755.   z-index: 1015;
  2756. }
  2757. #box_layer .flash_needed .button_blue {
  2758.   margin: 15px auto 0px;
  2759.   width: 150px;
  2760. }
  2761. #box_layer .flash_needed .button_blue button {
  2762.   width: 100%;
  2763. }
  2764.  
  2765. #quick_auth_frame {
  2766.   padding: 0px;
  2767.   margin: 0px;
  2768.   border: 0px;
  2769.   width: 123px;
  2770.   height: 300px;
  2771. }
  2772. #quick_login {
  2773.   width: 123px;
  2774. }
  2775. #quick_login .text {
  2776.   width: 115px;
  2777. }
  2778. #quick_login .submit {
  2779.   position: absolute;
  2780.   color: #FFF;
  2781.   border: 0;
  2782.   padding: 0;
  2783.   margin: 0;
  2784.   background: #FFF;
  2785.   left: -8000px;
  2786.   top: -8000px;
  2787. }
  2788. #quick_login .label {
  2789.   color: #666;
  2790.   padding-bottom: 4px;
  2791. }
  2792. #quick_login .labeled {
  2793.   padding-bottom: 7px;
  2794. }
  2795. #quick_login .checkbox {
  2796.   margin-bottom: 7px;
  2797.   display: none;
  2798. }
  2799. #quick_login .reg {
  2800.   margin-top: 7px;
  2801. }
  2802. #quick_login .forgot {
  2803.   padding-top: 5px;
  2804.   text-align: center;
  2805. }
  2806.  
  2807. .error, .info_msg {
  2808.   background: #FFEFE8;
  2809.   border: 1px solid #E89B88;
  2810.   padding: 8px 11px;
  2811.   text-align: justify;
  2812. }
  2813. .info_msg {
  2814.   background: #F6F7F9;
  2815.   border: 1px solid #DBE0EA;
  2816. }
  2817. .msg {
  2818.   padding: 8px 11px;
  2819.   background-color: #F9F6E7;
  2820.   border: 1px solid #D4BC4C;
  2821. }
  2822. .box_msg {
  2823.   padding: 8px 11px;
  2824.   margin: 0px;
  2825.   font-weight: bold;
  2826.   background-color: #F9F6E7;
  2827.   border: 1px solid #D4BC4C;
  2828. }
  2829.  
  2830.  
  2831. #system_msg {
  2832.   z-index: 5000;
  2833.   left: 0px;
  2834.   top: 0px;
  2835.   display: none;
  2836.   -moz-border-radius: 0px 0px 6px;
  2837.   border-radius: 0px 0px 6px;
  2838.   padding: 7px 10px;
  2839. }
  2840.  
  2841. #bad_browser {
  2842.   border-bottom: 1px solid #B8C7D3;
  2843.   background-color: #F2F4FF;
  2844. }
  2845. #bad_browser .info {
  2846.   padding: 8px;
  2847.   text-align: center;
  2848.   line-height: 150%;
  2849. }
  2850. #bad_browser #good_browsers {
  2851.   display: none;
  2852. }
  2853. #bad_browser #good_browsers div {
  2854.   width: 400px;
  2855.   height: 100px;
  2856.   margin: 10px auto 0px;
  2857. }
  2858. #bad_browser #good_browsers a {
  2859.   width: 100px;
  2860.   height: 20px;
  2861.   padding-top: 80px;
  2862. }
  2863.  
  2864. /* qsearch section */
  2865. #qsearch_link {
  2866.   margin-top: 9px;
  2867.   padding: 3px 15px 7px 15px;
  2868. }
  2869. #qsearch_link.active {
  2870.   background-color: #5B7DA4;
  2871.   border: 1px solid #3E5F84;
  2872.   text-decoration: none;
  2873.   padding: 2px 14px 6px 14px;
  2874. }
  2875. #qsearch_link.active:hover {
  2876.   text-decoration: none;
  2877. }
  2878. #quick_search {
  2879.   display: none;
  2880.   margin-top: 9px;
  2881.   width: 241px;
  2882.   overflow: hidden;
  2883.   overflow-y: visible;
  2884. }
  2885. #search_cont {
  2886.   background-color: #FFFFFF;
  2887.   width: 240px;
  2888.   border: 1px solid #3E5F84;
  2889.   border-left: 0;
  2890.   height: 19px;
  2891. }
  2892. #search_input {
  2893.   border: 0px none white;
  2894.   font-size: 11px;
  2895.   height: 13px;
  2896.   outline: none;
  2897.   overflow: hidden;
  2898.   padding: 3px 0px 3px 10px;
  2899. }
  2900. #search_input {
  2901.   width: 229px;
  2902. }
  2903. #quick_search .input_back {
  2904.   padding-top: 2px !important;
  2905.   line-height: 13px;
  2906. }
  2907.  
  2908. #search_sub_menu div.s_photo {
  2909.   width: 50px;
  2910.   height: 50px;
  2911.   overflow: hidden;
  2912.   margin: 0px 10px 0px 0px;
  2913.   line-height: 22px;
  2914. }
  2915. #search_sub_menu div.s_photo img {
  2916.   width: 50px;
  2917.   vertical-align: middle;
  2918. }
  2919. #search_sub_menu a.i_note div.s_photo,
  2920. #search_sub_menu a.i_group div.s_photo,
  2921. #search_sub_menu a.i_public div.s_photo,
  2922. #search_sub_menu a.i_event div.s_photo,
  2923. #search_sub_menu a.i_audio div.s_photo,
  2924. #search_sub_menu a.i_app div.s_photo,
  2925. #search_sub_menu a.i_ad div.s_photo {
  2926.   background-image: url(/images/icons/qsearch_hints.gif?1);
  2927. }
  2928. #search_sub_menu a.i_audio div.s_photo { background-position: 0 0; }
  2929. #search_sub_menu a.i_app div.s_photo { background-position: 0 -50px; }
  2930. #search_sub_menu a.i_event div.s_photo { background-position: 0 -100px; }
  2931. #search_sub_menu a.i_group div.s_photo { background-position: 0 -150px; }
  2932. #search_sub_menu a.i_ad div.s_photo { background-position: 0 -200px; }
  2933. #search_sub_menu a.i_note div.s_photo { background-position: 0 -300px; }
  2934.  
  2935. #search_sub_menu div.s_title {
  2936.   cursor: pointer;
  2937.   height: 42px;
  2938.   margin-top: 4px;
  2939.   width: 540px;
  2940.   overflow: hidden;
  2941. }
  2942. #search_sub_menu div.s_title span {
  2943.   background-color: #FFF8CC;
  2944.   border-bottom: 1px solid #FFE222;
  2945.   padding: 0 1px;
  2946. }
  2947. #search_sub_menu a.sub_item:hover, #search_sub_menu a.sub_item_over:hover, #search_sub_menu a.sub_item_next_over:hover {
  2948.   text-decoration: none;
  2949. }
  2950. #search_sub_menu .s_title {
  2951.   color: #2B587A;
  2952.   font-weight: bold;
  2953. }
  2954. #search_sub_menu .s_title div {
  2955.   color: #000;
  2956.   font-weight: normal;
  2957.   padding-top: 4px;
  2958. }
  2959.  
  2960. #search_sub_menu .sub_item {
  2961.   background-color: #FFFFFF;
  2962.   border-top: 1px solid #E1E9EF;
  2963.   color: #000000;
  2964.   display: block;
  2965.   padding: 4px 12px 4px 6px;
  2966. }
  2967. #search_sub_menu a.sub_item {
  2968.   border-bottom: 1px solid #FFFFFF;
  2969.   height: 50px;
  2970.   padding: 6px 12px;
  2971.   vertical-align: middle;
  2972. }
  2973. #search_sub_menu a.sub_item.over {
  2974.   background-color: #EDF1F5;
  2975.   border-bottom: 1px solid #EDF1F5;
  2976.   text-decoration: none;
  2977. }
  2978. #search_sub_menu a.s_search_by {
  2979.   font-weight: bold;
  2980.   border-bottom: 1px solid #F7F7F7;
  2981.   background-color:#F7F7F7;
  2982.   height: 27px;
  2983. }
  2984. #search_sub_menu .s_search_by .s_title {
  2985.   color: #2B587A;
  2986.   margin-top: 7px;
  2987. }
  2988.  
  2989. .tabs {
  2990.   background: #F7F7F7;
  2991.   padding: 8px;
  2992. }
  2993. .tabs .outer {
  2994.  
  2995. }
  2996. .tabs .tab a {
  2997.   display: inline-block;
  2998. }
  2999. .tabs .tab a:hover {
  3000.   text-decoration: none;
  3001. }
  3002. .tabs .tab {
  3003.   display: inline-block;
  3004.   margin-right: 12px;
  3005.   padding: 2px;
  3006. }
  3007. .tabs .tab.selected {
  3008.   border-bottom: 1px solid #FFFFFF;
  3009.   padding: 0px;
  3010. }
  3011. .tabs .tab b {
  3012.   padding: 2px 5px 2px 5px;
  3013.   display: inline-block;
  3014. }
  3015. .tabs .tab.selected a {
  3016.   border-top: 1px solid #395676;
  3017.   border-right: 1px solid #3b6798;
  3018.   border-bottom: 1px solid #4a73a0;
  3019.   border-left: 1px solid #3b6798;
  3020.   color: #FFFFFF;
  3021. }
  3022. .tabs .tab.selected b {
  3023.   border: 1px solid #5C82AB;
  3024.   background: #6D8FB3;
  3025. }
  3026.  
  3027. .no_select {
  3028.   user-select: none;
  3029.  -o-user-select: none;
  3030.  -moz-user-select: none;
  3031.  -khtml-user-select: none;
  3032. }
  3033. .select_fix {
  3034.   user-select: text;
  3035.  -o-user-select: text;
  3036.  -moz-user-select: text;
  3037.  -khtml-user-select: text;
  3038. }
  3039.  
  3040. .input_back_wrap {
  3041.   position: relative;
  3042.   z-index: 90;
  3043. }
  3044.  
  3045. .input_back {
  3046.   position:absolute;
  3047.   color:#777;
  3048.   background-color:#FFF;
  3049.   z-index: 90;
  3050. }
  3051. .choose_box .input_back {
  3052.   margin: 9px 4px 0px;
  3053. }
  3054.  
  3055. .input_back div {
  3056.   padding:0px 1px 0;
  3057.   white-space: nowrap;
  3058. }
  3059.  
  3060. .sort_blank {
  3061.   border: 1px dashed #D8DFEA;
  3062. }
  3063.  
  3064. .divider {
  3065.  color: #777;
  3066.  font-weight: normal;
  3067.  padding:0px 5px;
  3068. }
  3069.  
  3070. small.divider {
  3071.  padding:0px 2px;
  3072. }
  3073.  
  3074. .unshown {
  3075.   display: none;
  3076. }
  3077.  
  3078. .hidden {
  3079.   visibility: hidden;
  3080. }
  3081.  
  3082. #global_prg {
  3083.   position: absolute;
  3084.   z-index: 400;
  3085. }
  3086.  
  3087. /* Tabs */
  3088. .tabs.t_bar {
  3089.   background: #FFF;
  3090. }
  3091. .t_bar {
  3092.   padding: 11px 10px 0px;
  3093.   border-bottom: solid 1px #597DA3;
  3094. }
  3095. ul.t0 {
  3096.   width: 605px;
  3097. }
  3098. ul.t0, ul.t0 li {
  3099.   list-style-type: none;
  3100.   margin: 0;
  3101.   padding: 0;
  3102. }
  3103. ul.t0 li {
  3104.   float: left;
  3105.   text-align: center;
  3106. }
  3107. ul.t0 li.active_link a, ul.t0 li.active_link a:hover {
  3108.   background: #597DA3;
  3109.   color: #FFFFFF;
  3110. }
  3111. ul.t0 li a:hover {
  3112.   background: #E1E7ED;
  3113.   color: #2B587A;
  3114.   text-decoration: none;
  3115. }
  3116. ul.t0 a {
  3117.   float: left;
  3118.   padding: 0 0 5px 0;
  3119.   margin-right: 5px;
  3120.   text-decoration: none;
  3121.   background-color: #FFF;
  3122. }
  3123. ul.t0 .tab_word {
  3124.   margin: 5px 10px 0px 10px;
  3125.   font-weight: normal;
  3126. }
  3127. ul.t0 .t_r {
  3128.   float: right;
  3129.   padding: 5px 0 0;
  3130. }
  3131. ul.t0 .t_r a {
  3132.   margin:0;
  3133. }
  3134. ul.t0 .t_r a:hover {
  3135.   text-decoration: underline;
  3136.   background:#FFFFFF;
  3137. }
  3138. .tl1, .tl2 {
  3139.   display: block;
  3140.   height: 1px;
  3141.   background-color: #FFF;
  3142.   overflow: hidden;
  3143.   margin: 0px;
  3144.   border: 1px solid #FFF;
  3145.   border-width: 0px 2px;
  3146. }
  3147. .tl2 {
  3148.   margin-bottom: 3px;
  3149.   border-width: 0px 1px;
  3150. }
  3151. ul.t0 li a:hover b.tl1, ul.t0 li a:hover b.tl2 {
  3152.   background-color: #E1E7ED;
  3153. }
  3154. ul.t0 li.active_link a b.tl1, ul.t0 li.active_link a:hover b.tl1 {
  3155.   background-color: #597DA3;
  3156.   border-width: 0px 1px;
  3157. }
  3158. ul.t0 li.active_link a b.tl1 b, ul.t0 li.active_link a:hover b.tl1 b {
  3159.   display: block;
  3160.   height: 1px;
  3161.   background: #597DA3;
  3162.   overflow: hidden;
  3163.   margin: 0px;
  3164.   border: 1px solid #9AB1C6;
  3165.   border-width: 0px 1px;
  3166. }
  3167. ul.t0 li.active_link a b.tl2, ul.t0 li.active_link a:hover b.tl2 {
  3168.   background-color: #597DA3;
  3169.   border-color: #9AB1C6;
  3170. }
  3171.  
  3172. #flash_audio {
  3173.   height: 0px;
  3174.   top: 5px;
  3175. }
  3176. .audio .play_new {
  3177.   cursor: pointer;
  3178.   width: 20px;
  3179.   height: 16px;
  3180.   background: url(/images/playpause.gif) no-repeat 0px 0px;
  3181. }
  3182.  
  3183. .side_filter {
  3184.   border: 1px solid #F7F7F7;
  3185.   color: #2B587A;
  3186.   cursor: pointer;
  3187.   padding: 4px 5px 4px 9px;
  3188.   background-color: #F7F7F7;
  3189.   background-repeat: no-repeat;
  3190.   width: 120px;
  3191. }
  3192.  
  3193. .side_filter_over {
  3194.   border: 1px solid #DAE1E8;
  3195.   color: #2B587A;
  3196.   background-color: #DAE1E8;
  3197. }
  3198.  
  3199. .side_filter.cur_section {
  3200.   background-color: #6D8FB3;
  3201.   border: 1px solid #3B6798;
  3202.   color: #FFFFFF;
  3203. }
  3204.  
  3205. .side_filter.loading {
  3206.   background-image: url(/images/upload_inv_mini.gif);
  3207.   background-position: 110px center;
  3208.   background-repeat: no-repeat;
  3209. }
  3210.  
  3211.  
  3212. #gp {
  3213.   display: none;
  3214.   height: 36px;
  3215.   z-index: 500;
  3216.   cursor: default;
  3217. }
  3218. #gp div#gp_large {
  3219.   display: none;
  3220. }
  3221. #gp div#gp_back{
  3222.   position: absolute;
  3223.   top: 0px;
  3224.   left: 0px;
  3225.   height: 36px;
  3226.   border-top-left-radius: 3px; /* css3 */
  3227.   border-top-right-radius: 3px;
  3228.         -moz-border-radius-topleft: 3px; /* firefox */
  3229.         -moz-border-radius-topright: 3px;
  3230.   -webkit-border-radius-topleft: 3px; /* Safari, Chrome */
  3231.   -webkit-border-radius-topright: 3px;
  3232.   -khtml-border-radius-topleft: 3px; /* khtml */
  3233.   -khtml-border-radius-topright: 3px;
  3234.   overflow: hidden;
  3235.   background-color: #000;
  3236.   opacity: 0.7;
  3237.   filter: alpha(opacity=70);
  3238. }
  3239. #gp div.wrap {
  3240.   position: relative;
  3241.   width: 100%;
  3242.   height: 36px;
  3243. }
  3244. #gp div#gp_wrap {
  3245.   position: absolute;
  3246.   top: 0px;
  3247.   left: 0px;
  3248.   color: #FFF;
  3249.   height: 36px;
  3250.   z-index: 501;
  3251.   width: 100%;
  3252. }
  3253. #gp .audio .gp_play_wrap {
  3254.   padding: 3px;
  3255.   cursor: pointer;
  3256. }
  3257. #gp .audio .gp_play {
  3258.   background: url("/images/playback_icons.gif") no-repeat scroll 0 0 transparent;
  3259.   height: 10px;
  3260.   width: 10px;
  3261. }
  3262. #gp #gp_audio_info_large,
  3263. #gp #gp_audio_info_small {
  3264.   padding: 5px 0px 2px;
  3265. }
  3266. #gp #gp_play_btn_large,
  3267. #gp #gp_play_btn_small {
  3268.   padding: 10px 5px 10px 7px;
  3269.   width: 10px;
  3270. }
  3271. #gp div.title_wrap {
  3272.   width: 125px;
  3273.   overflow: hidden;
  3274.   white-space: nowrap;
  3275.   line-height: 13px;
  3276.   position: relative;
  3277. }
  3278. #gp #player_global {
  3279.   width: 100%;
  3280.   padding-top: 7px;
  3281. }
  3282. #gp #gp_audio_info_large {
  3283.   width: 330px;
  3284. }
  3285. #gp #gp_vol {
  3286.   padding: 23px 0px 0px 20px;
  3287. }
  3288. *:first-child+html #gp #gp_vol_line {
  3289.   position: relative;
  3290.   top: -13px;
  3291. }
  3292. #gp .duration {
  3293.   color: #FFF;
  3294.   padding: 1px 0px 0px 0px;
  3295.   position: absolute;
  3296. }
  3297. #gp #audio_white_line_global,
  3298. #gp #audio_vol_back_global {
  3299.   background-color: auto;
  3300. }
  3301. #gp .audio .player_wrap {
  3302.   margin: -1px 0px 0px;
  3303.   padding: 0px;
  3304.   float: left;
  3305.   width: 100%
  3306. }
  3307. #gp .gp_controls {
  3308.   padding: 13px 0px 13px 12px;
  3309. }
  3310. #gp .close {
  3311.   vertical-align: top;
  3312.   padding: 1px 1px 1px 0px;
  3313. }
  3314. #gp #gp_close {
  3315.   background: url("/images/playback_icons.gif") no-repeat scroll 0 -55px transparent;
  3316.   width: 5px;
  3317.   height: 5px;
  3318. }
  3319. #gp #gp_close_wrap {
  3320.   cursor: pointer;
  3321.   padding: 2px;
  3322. }
  3323. #gp .gp_controls div {
  3324.   background: url("/images/playback_icons.gif") no-repeat scroll 0 0 transparent;
  3325.   height: 11px;
  3326.   width: 13px;
  3327.   margin: 0px 4px;
  3328.   float: left;
  3329.   cursor: pointer;
  3330.   opacity: 0.7;
  3331.   filter: alpha(opacity=70);
  3332. }
  3333. #gp .gp_controls div.prev {
  3334.   background-position: 0 -22px;
  3335.   margin-right: 5px;
  3336. }
  3337. #gp .gp_controls div.next {
  3338.   background-position: 0 -33px;
  3339. }
  3340. #gp .gp_controls div.repeat{
  3341.   background-position: 0 -44px;
  3342. }
  3343. #gp .gp_controls div.repeat.on{
  3344.   background-position: 0 -44px;
  3345.   opacity: 1;
  3346.   filter: alpha(opacity=100);
  3347. }
  3348. #gp  .audio_load_line,
  3349. #gp  .audio_progress_line,
  3350. #gp  .audio_pr_slider,
  3351. #gp  .audio_volume_line,
  3352. #gp  .audio_vol_slider {
  3353.   background-color: #FFF;
  3354. }
  3355.  
  3356. var navMap = {'<void>':['al_index.php',['index.js']],'<other>':['al_profile.php',['profile.css','page.css','profile.js','page.js']],'public\\d+($|/)':['al_public.php',['public.css','page.css','public.js','page.js']],'event\\d+($|/)':['al_events.php',['events.css','page.css','events.js','page.js']],'club\\d+($|/)':['al_groups.php',['groups.css','page.css','groups.js','page.js']],'publics\\d+($|/)':['al_public.php',['public.css','page.css','public.js','page.js']],'changemail$':['register.php',['reg.css']],'mail($|/)':['al_mail.php',['mail.css','mail.js']],'im($|/)':['al_im.php',['im.css','im.js']],'audio($|/)':['al_audio.php',['audio.css','audio.js']],'apps($|/)':['al_apps.php',['apps.css','apps.js']],'regstep\\d$':['register.php',['reg.js','reg.css','ui_controls.js','ui_controls.css','selects.js']],'video(-?\\d+_\\d+)?$':['al_video.php',['video.js','video.css','videoview.js','videoview.css','indexer.js']],'videos(-?\\d+)?$':['al_video.php',['video.js','video.css','indexer.js']],'feed$':['al_feed.php',['page.css','page.js','feed.css','feed.js']],'friends$':['al_friends.php',['friends.js','friends.css','privacy.css']],'friendsphotos$':['al_photos.php',['friendsphotos.js','photoview.js','friendsphotos.css','photoview.css']],'wall-?\\d+(_\\d+)?$':['al_wall.php',['page.js','page.css','wall.js','wall.css']],'tag\\d+$':['al_photos.php',['photos.js','photoview.js','photos.css','photoview.css']],'albums-?\\d+$':['al_photos.php',['photos.js','photos.css']],'photos-?\\d+$':['al_photos.php',['photos.js','photos.css']],'album-?\\d+_\\d+$':['al_photos.php',['photos.js','photos.css']],'photo-?\\d+_\\d+$':['al_photos.php',['photos.js','photos.css','photoview.js','photoview.css']],'search$':['al_search.php',['search.css','search.js']],'invite$':['invite.php',['invite.css','invite.js','ui_controls.css','ui_controls.js']],'note\\d+_\\d+$':['al_notes.php',['notes.js','notes.css','player.js','wiki.css']],'notes(\\d+)?$':['al_notes.php',['notes.js','notes.css','player.js','wiki.css']],'settings$':['al_settings.php',['settings.js','settings.css']]}; var stVersions = { 'nav': 2438, 'common.js': 283, 'common.css': 120, 'uncommon.js': 6, 'uncommon.css': 7, 'ie6.css': 18, 'ie7.css': 12, 'rtl.css': 34, 'html5audio.js': 3, 'html5video.js': 3, 'new_player.js': 16, 'new_player.css': 10, 'audio_html5.js': 3, 'audio.js': 23, 'audio_edit.js': 5, 'audio.css': 15, 'indexer.js': 2, 'boxes.css': 10, 'rate.css': 2, 'tooltips.js': 20, 'tooltips.css': 10, 'player.js': 55, 'sorter.js': 8, 'qsorter.js': 6, 'photoview.css': 35, 'photoview.js': 64, 'friendsphotos.css': 13, 'friendsphotos.js': 8, 'friends.js': 59, 'friends.css': 62, 'photos.css': 16, 'photos.js': 17, 'video.js': 48, 'video.css': 45, 'videoview.js': 51, 'videoview.css': 46, 'video_edit.js': 16, 'video_edit.css': 9, 'translation.js': 5, 'reg.css': 23, 'reg.js': 43, 'invite.css': 7, 'invite.js': 5, 'prereg.js': 12, 'index.css': 4, 'index.js': 10, 'page.css': 79, 'page.js': 79, 'public.css': 21, 'public.js': 18, 'events.css': 16, 'events.js': 15, 'groups.css': 12, 'groups.js': 6, 'groups_edit.js': 6, 'profile.css': 59, 'profile.js': 61, 'wk.css': 5, 'wk.js': 5, 'pay.css': 2, 'pay.js': 3, 'tagger.js': 3, 'tagger.css': 3, 'qsearch.js': 9, 'wall.css': 8, 'wall.js': 8, 'mail.css': 30, 'mail.js': 33, 'im.css': 28, 'im.js': 32, 'feed.js': 61, 'feed.css': 35, 'privacy.js': 14, 'privacy.css': 10, 'apps.js': 27, 'apps.css': 18, 'apps_edit.js': 4, 'apps_edit.css': 4, 'settings.js': 7, 'settings.css': 7, 'search.js': 25, 'search.css': 14, 'datepicker.js': 2, 'datepicker.css': 1, 'oauth_popup.css': 1, 'notes.css': 7, 'notes.js': 6, 'wysiwyg.js': 5, 'wysiwyg.css': 2, 'wiki.css': 2, 'ui_controls.js': 98, 'ui_controls.css': 23, 'selects.js': 15, 'mentions.js': 29, 'apps_flash.js': 49, 'maps.js': 3, '/swf/api_wrapper.swf': 18, '/swf/api_external.swf': 18, '/swf/api_wrapper2_0.swf': 1, '/swf/VideoPlayer3_4.swf': 6, 'lang': 3067}; var stTypes = {fromLib:{'md5.js':1,'ui_controls.js':1,'selects.js':1,'sort.js':1,'maps.js':1},fromRoot:{'apps_flash.js':1,'mentions.js':1,'map2.js':1,'ui_controls.css':1,'map.css':1,'places.css':1}};
  3357.  
  3358.  
  3359. if (vk.al == 1) {
  3360.   if (location['search'] || location.pathname != '/') {
  3361.     location.replace('/');
  3362.   }
  3363. } else {
  3364.   if (!location['search'] && location.pathname == '/index.php') {
  3365.    location.replace('/');
  3366.   }
  3367.   vk.version = false;
  3368. }
  3369.  
  3370. window.__debugMode = true; // Don't turn it off
  3371.  
  3372. var cur = {destroy: [], nav: []}; // Current page variables and navigation map.
  3373. var _ua = navigator.userAgent.toLowerCase();
  3374. var browser = {
  3375.   version: (_ua.match( /.+(?:me|ox|on|rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
  3376.   opera: /opera/i.test(_ua),
  3377.   msie: (/msie/i.test(_ua) && !/opera/i.test(_ua)),
  3378.  msie6: (/msie 6/i.test(_ua) && !/opera/i.test(_ua)),
  3379.  msie7: (/msie 7/i.test(_ua) && !/opera/i.test(_ua)),
  3380.  msie8: (/msie 8/i.test(_ua) && !/opera/i.test(_ua)),
  3381.  msie9: (/msie 9/i.test(_ua) && !/opera/i.test(_ua)),
  3382.  mozilla: /firefox/i.test(_ua),
  3383.  chrome: /chrome/i.test(_ua),
  3384.  safari: (!(/chrome/i.test(_ua)) && /webkit|safari|khtml/i.test(_ua)),
  3385.  iphone: /iphone/i.test(_ua),
  3386.  ipod: /ipod/i.test(_ua),
  3387.  iphone4: /iphone.*OS 4/i.test(_ua),
  3388.  ipod4: /ipod.*OS 4/i.test(_ua),
  3389.  ipad: /ipad/i.test(_ua),
  3390.  safari_mobile: /iphone|ipod|ipad/i.test(_ua),
  3391.  opera_mobile: /opera mini|opera mobi/i.test(_ua),
  3392.  mobile: /iphone|ipod|ipad|opera mini|opera mobi/i.test(_ua)
  3393. };
  3394.  
  3395. (function() {
  3396.   var flash = [0, 0, 0], axon = 'ShockwaveFlash.ShockwaveFlash';
  3397.   var wrapType = 'embed', wrapParam = 'type="application/x-shockwave-flash" ';
  3398.   var escapeAttr = function(v) {
  3399.     return v.toString().replace('&', '&amp;').replace('"', '&quot;');
  3400.   }
  3401.   if (navigator.plugins && navigator.mimeTypes.length) {
  3402.    var x = navigator.plugins['Shockwave Flash'];
  3403.     if (x && x.description) {
  3404.      var ver = x.description.replace(/([a-zA-Z]|\s)+/, '').replace(/(\s+r|\s+b[0-9]+)/, '.').split('.');
  3405.       for (var i = 0; i < 3; ++i) flash[i] = ver[i] || 0;
  3406.    }
  3407.  } else {
  3408.    if (_ua.indexOf('Windows CE') >= 0) {
  3409.       var axo = true, ver = 6;
  3410.       while (axo) {
  3411.         try {
  3412.           ++ver;
  3413.           axo = new ActiveXObject(axon + '.' + ver);
  3414.           flash[0] = ver;
  3415.         } catch(e) {}
  3416.       }
  3417.     } else {
  3418.       try {
  3419.         var axo = new ActiveXObject(axon + '.7');
  3420.         flash = axo.GetVariable('$version').split(' ')[1].split(',');
  3421.       } catch (e) {}
  3422.     }
  3423.     wrapType = 'object';
  3424.     wrapParam = 'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
  3425.   }
  3426.   browser.flashwrap = (wrapType == 'embed') ? function(opts, params) {
  3427.     params = extend({
  3428.       id: opts.id,
  3429.       name: opts.id,
  3430.       width: opts.width,
  3431.       height: opts.height,
  3432.       style: opts.style,
  3433.       preventhide: opts.preventhide
  3434.     }, params);
  3435.     if (browser.flash >= opts.version) {
  3436.       params.src = opts.url;
  3437.     } else {
  3438.       params.src = opts.express;
  3439.     }
  3440.     var paramsStr = [];
  3441.     for (var i in params) {
  3442.       var p = params[i];
  3443.       if (p !== undefined && p !== null) {
  3444.        paramsStr.push(i + '="' + escapeAttr(p) + '" ');
  3445.       }
  3446.     }
  3447.     return '<embed ' + wrapParam + paramsStr.join('') + '/>';
  3448.   } : function(opts, params) {
  3449.     if (browser.flash >= opts.version) {
  3450.       params.movie = opts.url;
  3451.     } else {
  3452.       params.movie = opts.express;
  3453.     }
  3454.     var attr = {
  3455.       id: opts.id,
  3456.       width: opts.width,
  3457.       height: opts.height,
  3458.       style: opts.style,
  3459.       preventhide: opts.preventhide
  3460.     }
  3461.     var attrStr = [];
  3462.     for (var i in attr) {
  3463.       var p = attr[i];
  3464.       if (p !== undefined && p !== null) {
  3465.        attrStr.push(i + '="' + escapeAttr(p) + '" ');
  3466.       }
  3467.     }
  3468.     var paramsStr = [];
  3469.     for (var i in params) {
  3470.       var p = params[i];
  3471.       if (p !== undefined && p !== null) {
  3472.        paramsStr.push('<param name="' + i + '" value="' + escapeAttr(p) + '" />');
  3473.       }
  3474.     }
  3475.     return '<object ' + wrapParam + attrStr.join('') +'>' + paramsStr.join('') + '</object>';
  3476.   }
  3477.   if (flash[0] < 7) flash = [0, 0, 0];
  3478.  browser.flash = intval(flash[0]);
  3479.  browser.flashfull = {
  3480.    major: browser.flash,
  3481.    minor: intval(flash[1]),
  3482.    rev: intval(flash[2])
  3483.  }
  3484. })();
  3485.  
  3486. if (!browser.msie6) {
  3487.  delete StaticFiles['ie6.css'];
  3488. }
  3489. if (!browser.msie7) {
  3490.  delete StaticFiles['ie7.css'];
  3491. }
  3492. for (var i in StaticFiles) {
  3493.  var f = StaticFiles[i];
  3494.  f.t = (i.indexOf('.css') != -1) ? 'css' : 'js';
  3495.  f.n = i.replace(/[\\/\\.]/g, '_');
  3496.  f.l = 0;
  3497.  f.c = 0;
  3498. }
  3499.  
  3500. window.locHost = location.host;
  3501. window.__dev = /[a-z0-9_\-]+\.[a-z0-9_\-]+\.[a-z0-9_\-]+\.[a-z0-9_\-]+/i.test(locHost);
  3502. if (!__dev) __debugMode = false;
  3503. window.locHash = location.hash.replace('#/', '').replace('#!', '');
  3504. window.locDomain = locHost.toString().match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
  3505. window.locBase = location.toString().replace(/#.+$/, '');
  3506. if (!browser.msie6 || document.domain != locDomain) document.domain = locDomain;
  3507.  
  3508. function topMsg(text, seconds, color) {
  3509.  if (!color) color = '#D6E5F7';
  3510.  if (!text) {
  3511.    hide('system_msg');
  3512.  } else {
  3513.    clearTimeout(window.topMsgTimer);
  3514.    var el = ge('system_msg');
  3515.    el.style.backgroundColor = color;
  3516.    el.innerHTML = text;
  3517.    show(el);
  3518.    if (seconds) {
  3519.      window.topMsgTimer = setTimeout(topMsg.pbind(false), seconds * 1000);
  3520.    }
  3521.  }
  3522. }
  3523.  
  3524. function topError(text, seconds) {
  3525.  if (text.message) {
  3526.    var e = text;
  3527.    text = '<b>JavaScript error:</b> ' + e.message;
  3528.     if (e.stack && __debugMode) text += '<br/>' + e.stack.replace(/\n/g, '<br/>');
  3529.   }
  3530.   topMsg(text, seconds, '#FFB4A3');
  3531. }
  3532.  
  3533. function langNumeric(count, vars, formatNum) {
  3534.   if (!vars || !window.langConfig) { return count; }
  3535.   var res;
  3536.   if (!isArray(vars)) {
  3537.     result = vars;
  3538.   } else {
  3539.     res = vars[1];
  3540.     if(count != Math.floor(count)) {
  3541.       res = vars[langConfig.numRules['float']];
  3542.     } else {
  3543.       each(langConfig.numRules['int'], function(i,v){
  3544.         if (v[0] == '*') { res = vars[v[2]]; return false; }
  3545.         var c = v[0] ? count % v[0] : count;
  3546.         if(indexOf(v[1], c) != -1) { res = vars[v[2]]; return false; }
  3547.       });
  3548.     }
  3549.   }
  3550.   if (formatNum) {
  3551.     var n = count.toString().split('.'), c = [];
  3552.     for(var i = n[0].length - 3; i > -3; i -= 3) {
  3553.       c.unshift(n[0].slice(i > 0 ? i : 0, i + 3));
  3554.     }
  3555.     n[0] = c.join(langConfig.numDel);
  3556.     count = n.join(langConfig.numDec);
  3557.   }
  3558.   res = (res || '%s').replace('%s', count);
  3559.   return res;
  3560. }
  3561.  
  3562. function langSex(sex, vars) {
  3563.   if (!isArray(vars)) return vars;
  3564.   var res = vars[1];
  3565.   if (!window.langConfig) return res;
  3566.   each(langConfig.sexRules, function(i,v){
  3567.     if (v[0] == '*') { res = vars[v[1]]; return false; }
  3568.     if (sex == v[0] && vars[v[1]]) { res = vars[v[1]]; return false; }
  3569.   });
  3570.   return res;
  3571. }
  3572.  
  3573. function getLang() {
  3574.   try {
  3575.     var args = Array.prototype.slice.call(arguments);
  3576.     var key = args.shift();
  3577.     if (!key) return '...';
  3578.     var val = (window.cur.lang && window.cur.lang[key]) || (window.lang && window.lang[key]) || (window.langpack && window.langpack[key]) || window[key];
  3579.     if (!val) {
  3580.       var res = key.split('_');
  3581.       res.shift();
  3582.       return res.join(' ');
  3583.     }
  3584.     if (isFunction(val)) {
  3585.       return val.apply(null, args);
  3586.     } else if (isArray(val)) {
  3587.       return langNumeric(args[0], val);
  3588.     } else {
  3589.       return val;
  3590.     }
  3591.   } catch(e) {
  3592.     debugLog('lang error:' + e.message + '(' + Array.prototype.slice.call(arguments).join(', ') + ')');
  3593.   }
  3594. }
  3595.  
  3596. // Debug Log
  3597.  
  3598. var _logTimer = (new Date()).getTime();
  3599. function debugLog(msg){
  3600.   try {
  3601.     var t = '[' + (((new Date()).getTime() - _logTimer) / 1000) + '] ';
  3602.     if (ge('debuglog')) {
  3603.       if (msg === null) {
  3604.         msg = '[NULL]';
  3605.       } else if (msg === undefined) {
  3606.         msg = '[UNDEFINED]';
  3607.       }
  3608.       ge('debuglog').innerHTML += t + msg.toString().replace('<', '&lt;').replace('>', '&gt;')+'<br/>';
  3609.     }
  3610.     if (window.console && console.log) {
  3611.      Array.prototype.unshift.call(arguments, t);
  3612.       console.log.apply(console, arguments);
  3613.     }
  3614.   } catch (e) {
  3615.   }
  3616. }
  3617.  
  3618. // DOM
  3619.  
  3620. function ge(el) {
  3621.   return (typeof el == 'string' || typeof el == 'number') ? document.getElementById(el) : el;
  3622. }
  3623. function geByTag(searchTag, node) {
  3624.   return (node || document).getElementsByTagName(searchTag);
  3625. }
  3626. function geByTag1(searchTag, node) {
  3627.   return geByTag(searchTag, node)[0];
  3628. }
  3629. function geByClass(searchClass, node, tag) {
  3630.   var classElements = new Array();
  3631.   if (node == null) {
  3632.     node = document;
  3633.   }
  3634.   if (tag == null) {
  3635.     tag = '*';
  3636.   }
  3637.   if (node.getElementsByClassName) {
  3638.     classElements = node.getElementsByClassName(searchClass);
  3639.     if (tag != '*') {
  3640.       for (i = 0; i < classElements.length; ++i) {
  3641.        if (classElements.nodeName == tag) {
  3642.          classElements.splice(i, 1);
  3643.        }
  3644.      }
  3645.    }
  3646.    return classElements;
  3647.  }
  3648.  var els = geByTag(tag, node);
  3649.  var elsLen = els.length;
  3650.  var pattern = new RegExp('(^|\\s)' + searchClass + '(\\s|$)');
  3651.  for (i = 0, j = 0; i < elsLen; ++i) {
  3652.    if (pattern.test(els[i].className)) {
  3653.      classElements[j] = els[i];
  3654.      ++j;
  3655.    }
  3656.  }
  3657.  return classElements;
  3658. }
  3659. function geByClass1(searchClass, node, tag) {
  3660.  return geByClass(searchClass, node, tag)[0];
  3661. }
  3662.  
  3663. function ce(tagName, attr, style) {
  3664.  var el = document.createElement(tagName);
  3665.  if (attr) extend(el, attr);
  3666.  if (style) setStyle(el, style);
  3667.  return el;
  3668. }
  3669.  
  3670. function show(elem) {
  3671.  if (arguments.length > 1) {
  3672.     for (var i = 0; i < arguments.length; ++i) {
  3673.      show(arguments[i]);
  3674.    }
  3675.    return;
  3676.  }
  3677.  elem = ge(elem);
  3678.  if (!elem || !elem.style) return;
  3679.  var old = elem.olddisplay, newStyle = 'block', tag = elem.tagName.toLowerCase();
  3680.  elem.style.display = old || '';
  3681.  
  3682.  
  3683.  if (getStyle(elem, 'display') == 'none') {
  3684.    if (hasClass(elem, 'inline')) {
  3685.      newStyle = 'inline';
  3686.    } else if (tag == 'tr' && !browser.msie) {
  3687.      newStyle = 'table-row';
  3688.    } else if (tag == 'table' && !browser.msie) {
  3689.      newStyle = 'table';
  3690.    } else {
  3691.      newStyle = 'block';
  3692.    }
  3693.    elem.style.display = elem.olddisplay = newStyle;
  3694.  }
  3695. }
  3696.  
  3697. function hide(elem) {
  3698.  if (arguments.length > 1) {
  3699.     for (var i = 0; i < arguments.length; i++) {
  3700.      hide(arguments[i]);
  3701.    }
  3702.    return;
  3703.  }
  3704.  elem = ge(elem);
  3705.  if (!elem || !elem.style) return;
  3706.  var d = getStyle(elem, 'display');
  3707.  elem.olddisplay = (d != 'none') ? d : '';
  3708.  elem.style.display = 'none';
  3709. }
  3710.  
  3711. function isVisible(elem) {
  3712.  elem = ge(elem);
  3713.  if (!elem || !elem.style) return false;
  3714.  return getStyle(elem, 'display') != 'none';
  3715. }
  3716.  
  3717. function toggle(elem, val) {
  3718.  if (val === undefined) {
  3719.    val = !isVisible(elem);
  3720.  }
  3721.  if (val) {
  3722.    show(elem);
  3723.  } else {
  3724.    hide(elem);
  3725.  }
  3726. }
  3727.  
  3728. var hfTimeout = 0;
  3729. function toggleFlash(show, timeout) {
  3730.  //if (/mac/i.test(navigator.userAgent)) return;
  3731.  clearTimeout(hfTimeout);
  3732.  if (timeout > 0) {
  3733.     hfTimeout = setTimeout(function() {toggleFlash(show, 0)}, timeout);
  3734.     return;
  3735.   }
  3736.  
  3737.   var vis = show ? 'visible' : 'hidden';
  3738.   var f = function() {
  3739.     if (this.getAttribute('preventhide')) {
  3740.       return;
  3741.     } else if (this.id == 'app_container' && browser.msie) {
  3742.      show ? setStyle(this, {position: 'static', top: 0}) : setStyle(this, {position: 'absolute', top: '-5000px'});
  3743.     } else {
  3744.       this.style.visibility = vis;
  3745.     }
  3746.   };
  3747.   each(geByTag('embed'), f);
  3748.   each(geByTag('object'), f);
  3749.   if (window.bnr1 && bnr1.el && bnr1.el.style) {
  3750.    bnr1.el.style.visibility = bnr2.el.style.visibility = vis;
  3751.   }
  3752. }
  3753.  
  3754. function getXY(obj) {
  3755.   if (!obj || obj == undefined) return;
  3756.   var left = 0, top = 0;
  3757.   if (obj.offsetParent) {
  3758.     do {
  3759.       left += obj.offsetLeft;
  3760.       top += obj.offsetTop;
  3761.       var pos = getStyle(obj, 'position');
  3762.       if (pos == 'fixed' || pos == 'absolute' || (pos == 'relative' && obj.id == 'page_wrap')) {
  3763.        left -= obj.scrollLeft;
  3764.         top -= obj.scrollTop;
  3765.         if (pos == 'fixed') {
  3766.           left += ((obj.offsetParent || {}).scrollLeft || bodyNode.scrollLeft || htmlNode.scrollLeft);
  3767.           top += ((obj.offsetParent || {}).scrollTop || bodyNode.scrollTop || htmlNode.scrollTop);
  3768.         }
  3769.       }
  3770.     } while (obj = obj.offsetParent);
  3771.   }
  3772.   return [left,top];
  3773. }
  3774.  
  3775. function getSize(elem, withoutBounds) {
  3776.   var s = [0, 0], de = document.documentElement;
  3777.   if (elem == document) {
  3778.     s =  [Math.max(
  3779.         de.clientWidth,
  3780.         bodyNode.scrollWidth, de.scrollWidth,
  3781.         bodyNode.offsetWidth, de.offsetWidth
  3782.       ), Math.max(
  3783.         de.clientHeight,
  3784.         bodyNode.scrollHeight, de.scrollHeight,
  3785.         bodyNode.offsetHeight, de.offsetHeight
  3786.       )];
  3787.   } else if (elem){
  3788.     function getWH() {
  3789.       s = [elem.offsetWidth, elem.offsetHeight];
  3790.       if (!withoutBounds) return;
  3791.       var padding = 0, border = 0;
  3792.       each(s, function(i, v) {
  3793.         var which = i ? ['Top', 'Bottom'] : ['Left', 'Right'];
  3794.         each(which, function(){
  3795.           s[i] -= parseFloat(getStyle(elem, 'padding' + this)) || 0;
  3796.           s[i] -= parseFloat(getStyle(elem, 'border' + this + 'Width')) || 0;
  3797.         });
  3798.       });
  3799.       s = [Math.round(s[0]), Math.round(s[1])];
  3800.     }
  3801.     if (!isVisible(elem)) {
  3802.       var props = {position: 'absolute', visibility: 'hidden', display: 'block'};
  3803.       var old = {};
  3804.       each(props, function(i, val){
  3805.         old[i] = elem.style[i];
  3806.         elem.style[i] = val;
  3807.       });
  3808.       getWH();
  3809.       each(props, function(i, val){
  3810.         elem.style[i] = old[i];
  3811.       });
  3812.     } else getWH();
  3813.  
  3814.   }
  3815.   return s;
  3816. }
  3817.  
  3818. /**
  3819.  *  Useful utils
  3820.  */
  3821.  
  3822. Function.prototype.pbind = function() {
  3823.   var args = Array.prototype.slice.call(arguments);
  3824.   args.unshift(window);
  3825.   return this.bind.apply(this, args);
  3826. };
  3827. Function.prototype.bind = function() {
  3828.   var func = this, args = Array.prototype.slice.call(arguments);
  3829.   var obj = args.shift();
  3830.   return function() {
  3831.     var curArgs = Array.prototype.slice.call(arguments);
  3832.     return func.apply(obj, args.concat(curArgs));
  3833.   }
  3834. }
  3835. function rand(mi, ma) { return Math.random() * (ma - mi + 1) + mi; }
  3836. function irand(mi, ma) { return Math.floor(rand(mi, ma)); }
  3837. function isFunction(obj) {return Object.prototype.toString.call(obj) === '[object Function]'; }
  3838. function isArray(obj) { return Object.prototype.toString.call(obj) === '[object Array]'; }
  3839. function isEmpty(o) { if(Object.prototype.toString.call(o) !== '[object Object]') {return false;} for(var i in o){ if(o.hasOwnProperty(i)){return false;} } return true; }
  3840. function vkNow() { return +new Date; }
  3841. function trim(text) { return (text || '').replace(/^\s+|\s+$/g, ''); }
  3842. function stripHTML(text) { return text ? text.replace(/<(?:.|\s)*?>/g, '') : ''; }
  3843. function escapeRE(s) { return s ? s.replace(/[.*+?^${}()|[\]\/\\]/g, '\\$0') : ''; }
  3844. function intval(value) {
  3845.   if (value === true) return 1;
  3846.   return parseInt(value) || 0;
  3847. }
  3848. function floatval(value) {
  3849.   if (value === true) return 1;
  3850.   return parseFloat(value) || 0;
  3851. }
  3852. function positive(value) {
  3853.   value = intval(value);
  3854.   return value < 0 ? 0 : value;
  3855. }
  3856.  
  3857. function winToUtf(text) {
  3858.  var m, i, j, code;
  3859.  m = text.match(/&#[0-9]{2}[0-9]*;/gi);
  3860.  for (j in m) {
  3861.    var val = '' + m[j]; // buggy IE6
  3862.    code = intval(val.substr(2, val.length - 3));
  3863.    if (code >= 32 && ('&#' + code + ';' == val)) { // buggy IE6
  3864.       text = text.replace(val, String.fromCharCode(code));
  3865.     }
  3866.   }
  3867.   text = text.replace(/&quot;/gi, '"').replace(/&amp;/gi, '&').replace(/&lt;/gi, '<').replace(/&gt;/gi, '>');
  3868.   return text;
  3869. }
  3870.  
  3871. /**
  3872.  *  Arrays, objects
  3873.  **/
  3874.  
  3875. function each(object, callback) {
  3876.   var name, i = 0, length = object.length;
  3877.  
  3878.   if (length === undefined) {
  3879.     for (name in object)
  3880.       if (callback.call(object[name], name, object[name]) === false)
  3881.         break;
  3882.   } else {
  3883.     for (var value = object[0];
  3884.       i < length && callback.call(value, i, value) !== false;
  3885.        value = object[++i]) {}
  3886.  }
  3887.  
  3888.  return object;
  3889. }
  3890.  
  3891. function indexOf(arr, value, from) {
  3892.  for (var i = from || 0; i < arr.length; i++) {
  3893.    if (arr[i] == value) return i;
  3894.  }
  3895.  return -1;
  3896. }
  3897. function inArray(value, arr) {
  3898.  return indexOf(arr, value) != -1;
  3899. }
  3900. function clone(obj) {
  3901.  var newObj = isArray(obj) ? [] : {};
  3902.  for (var i in obj) {
  3903.    newObj[i] = obj[i];
  3904.  }
  3905.  return newObj;
  3906. }
  3907.  
  3908. // Extending object by another
  3909. function extend() {
  3910.  var a = arguments, target = a[0] || {}, i = 1, length = a.length, deep = false, options;
  3911.  
  3912.  if (typeof target === 'boolean') {
  3913.    deep = target;
  3914.    target = a[1] || {};
  3915.    i = 2;
  3916.  }
  3917.  
  3918.  if (typeof target !== 'object' && !isFunction(target)) target = {};
  3919.  
  3920.  if (length == i) return target;
  3921.  
  3922.  for (; i < length; i++) {
  3923.    if ((options = a[i]) != null) {
  3924.      for (var name in options) {
  3925.        var src = target[name], copy = options[name];
  3926.  
  3927.        if (target === copy) continue;
  3928.  
  3929.        if (deep && copy && typeof copy === 'object' && !copy.nodeType) {
  3930.          target[name] = extend(deep, src || (copy.length != null ? [] : {}), copy);
  3931.        } else if (copy !== undefined) {
  3932.          target[name] = copy;
  3933.        }
  3934.      }
  3935.    }
  3936.  }
  3937.  
  3938.  return target;
  3939. }
  3940.  
  3941.  
  3942. /**
  3943. * CSS classes
  3944. **/
  3945.  
  3946. function hasClass(obj, name) {
  3947.  obj = ge(obj);
  3948.  return obj && (new RegExp('(\\s|^)' + name + '(\\s|$)')).test(obj.className);
  3949. }
  3950.  
  3951. function addClass(obj, name) {
  3952.  if (obj && !hasClass(obj, name)) obj.className = (obj.className ? obj.className + ' ' : '') + name;
  3953. }
  3954.  
  3955. function removeClass(obj, name) {
  3956.  if (obj = ge(obj)) {
  3957.    obj.className = trim((obj.className || '').replace((new RegExp('(\\s|^)' + name + '(\\s|$)')), ' '));
  3958.  }
  3959. }
  3960.  
  3961. function replaceClass(obj, oldName, newName) {
  3962.  removeClass(obj, oldName);
  3963.  addClass(obj, newName);
  3964. }
  3965.  
  3966. // Get computed style
  3967. function getStyle(elem, name, force) {
  3968.  elem = ge(elem);
  3969.  if (isArray(name)) { var res = {}; each(name, function(i,v){res[v] = getStyle(elem, v);}); return res; }
  3970.  if (force === undefined) {
  3971.    force = true;
  3972.  }
  3973.  if (!force && name == 'opacity' && browser.msie) {
  3974.    var filter = elem.style['filter'];
  3975.    return filter ? (filter.indexOf('opacity=') >= 0 ?
  3976.       (parseFloat(filter.match(/opacity=([^)]*)/)[1] ) / 100) + '' : '1') : '';
  3977.   }
  3978.   if (!force && elem.style && (elem.style[name] || name == 'height')) {
  3979.    return elem.style[name];
  3980.   }
  3981.  
  3982.   if (force && (name == 'width' || name == 'height')) {
  3983.    return getSize(elem, true)[({'width': 0, 'height': 1})[name]] + 'px';
  3984.   }
  3985.  
  3986.   var ret, defaultView = document.defaultView || window;
  3987.   if (defaultView.getComputedStyle) {
  3988.     name = name.replace(/([A-Z])/g, '-$1').toLowerCase();
  3989.     var computedStyle = defaultView.getComputedStyle(elem, null);
  3990.     if (computedStyle) {
  3991.       ret = computedStyle.getPropertyValue(name);
  3992.     }
  3993.   } else if (elem.currentStyle) {
  3994.     if (name == 'opacity' && browser.msie) {
  3995.      var filter = elem.currentStyle['filter'];
  3996.       return filter && filter.indexOf('opacity=') >= 0 ?
  3997.        (parseFloat(filter.match(/opacity=([^)]*)/)[1]) / 100) + '' : '1';
  3998.     }
  3999.     var camelCase = name.replace(/\-(\w)/g, function(all, letter){
  4000.       return letter.toUpperCase();
  4001.     });
  4002.     ret = elem.currentStyle[name] || elem.currentStyle[camelCase];
  4003.     //dummy fix for ie
  4004.     if (ret == 'auto') {
  4005.       ret = 0;
  4006.     }
  4007.  
  4008.     if (!/^\d+(px)?$/i.test(ret) && /^\d/.test(ret)) {
  4009.      var style = elem.style, left = style.left, rsLeft = elem.runtimeStyle.left;
  4010.  
  4011.       elem.runtimeStyle.left = elem.currentStyle.left;
  4012.       style.left = ret || 0;
  4013.       ret = style.pixelLeft + 'px';
  4014.  
  4015.       style.left = left;
  4016.       elem.runtimeStyle.left = rsLeft;
  4017.     }
  4018.   }
  4019.   return ret;
  4020. }
  4021.  
  4022. function setStyle(elem, name, value){
  4023.   elem = ge(elem);
  4024.   if (!elem) return;
  4025.   if (typeof name == 'object') return each(name, function(k, v) { setStyle(elem,k,v); });
  4026.   if (name == 'opacity') {
  4027.     if (browser.msie) {
  4028.       if ((value + '').length) {
  4029.         elem.style.filter = 'alpha(opacity=' + value * 100 + ')';
  4030.       } else {
  4031.         elem.style.filter = '';
  4032.       }
  4033.       elem.style.zoom = 1;
  4034.     };
  4035.     elem.style.opacity = value;
  4036.   } else {
  4037.     try{
  4038.     var isN = typeof(value) == 'number';
  4039.     if (isN && (/height|width/i).test(name)) value = Math.abs(value);
  4040.     elem.style[name] = isN && !(/z-?index|font-?weight|opacity|zoom|line-?height/i).test(name) ? value + 'px' : value;
  4041.     } catch(e){debugLog([name, value]);}
  4042.   }
  4043. }
  4044.  
  4045. /**
  4046.  * Store data connected to element
  4047.  **/
  4048.  
  4049. var vkExpand = 'VK' + vkNow(), vkUUID = 0, vkCache = {};
  4050.  
  4051. function data(elem, name, data) {
  4052.   var id = elem[vkExpand], undefined;
  4053.   if (!id) {
  4054.     id = elem[vkExpand] = ++vkUUID;
  4055.   }
  4056.  
  4057.   if (name && !vkCache[id]) {
  4058.    vkCache[id] = {};
  4059.     if (__debugMode) vkCache[id].__elem = elem;
  4060.   }
  4061.  
  4062.   if (data !== undefined) {
  4063.     vkCache[id][name] = data;
  4064.   }
  4065.  
  4066.   return name ? vkCache[id][name] : id;
  4067. }
  4068. function removeAttr(el) {
  4069.   for (var i = 0; i < arguments.length; ++i) {
  4070.    var n = arguments[i];
  4071.    if (el[n] === undefined) continue;
  4072.    try {
  4073.      delete el[n];
  4074.    } catch(e) {
  4075.      try {
  4076.        el.removeAttribute(n);
  4077.      } catch(e) {}
  4078.    }
  4079.  }
  4080. }
  4081. function removeData(elem, name) {
  4082.  var id = elem ? elem[vkExpand] : false;
  4083.  if (!id) return;
  4084.  
  4085.  if (name) {
  4086.    if (vkCache[id]) {
  4087.      delete vkCache[id][name];
  4088.      name = '';
  4089.      for (name in vkCache[id]) {
  4090.        break;
  4091.      }
  4092.  
  4093.      if (!name) {
  4094.        removeData(elem);
  4095.      }
  4096.    }
  4097.  } else {
  4098.    removeEvent(elem);
  4099.    removeAttr(elem, vkExpand);
  4100.    delete vkCache[id];
  4101.  }
  4102. }
  4103. function cleanElems() {
  4104.  var a = arguments;
  4105.  for (var i = 0; i < a.length; ++i) {
  4106.    var el = ge(a[i]);
  4107.    if (el) {
  4108.      removeData(el);
  4109.      removeAttr(el, 'btnevents');
  4110.    }
  4111.  }
  4112. }
  4113.  
  4114. // Simple FX
  4115. function animate(el, params, speed, callback) {
  4116.  el = ge(el);
  4117.  if (!el) return;
  4118.  var _cb = isFunction(callback) ? callback : function() {};
  4119.  var options = extend({}, typeof speed == 'object' ? speed : {duration: speed, onComplete: _cb});
  4120.  var fromArr = {}, toArr = {}, visible = isVisible(el), self = this, p;
  4121.  options.orig = {};
  4122.  params = clone(params);
  4123.  if (browser.iphone)
  4124.    options.duration = 0;
  4125.  var tween = data(el, 'tween'), i, name, toggleAct = visible ? 'hide' : 'show';
  4126.  if (tween && tween.isTweening) {
  4127.    options.orig = extend(options.orig, tween.options.orig);
  4128.    tween.stop(false);
  4129.    if (tween.options.show) toggleAct = 'hide';
  4130.    else if (tween.options.hide) toggleAct = 'show';
  4131.  }
  4132.  for (p in params)  {
  4133.    if (!tween && (params[p] == 'show' && visible || params[p] == 'hide' && !visible)) {
  4134.      return options.onComplete.call(this, el);
  4135.    }
  4136.    if ((p == 'height' || p == 'width') && el.style) {
  4137.      if (options.orig.overflow == undefined) {
  4138.        options.orig.overflow = getStyle(el, 'overflow');
  4139.      }
  4140.      el.style.overflow = 'hidden';
  4141.      el.style.display = 'block';
  4142.    }
  4143.    if (/show|hide|toggle/.test(params[p])) {
  4144.      if (params[p] == 'toggle') {
  4145.        params[p] = toggleAct;
  4146.      }
  4147.      if (params[p] == 'show') {
  4148.        var from = 0;
  4149.        options.show = true;
  4150.        if (options.orig[p] == undefined) {
  4151.          options.orig[p] = getStyle(el, p, false) || '';
  4152.          setStyle(el, p, 0);
  4153.        }
  4154.  
  4155.        var o;
  4156.        if (p == 'height' && browser.msie6) {
  4157.          o = '0px';
  4158.          el.style.overflow = '';
  4159.        } else {
  4160.          o = options.orig[p];
  4161.        }
  4162.  
  4163.        var old = el.style[p];
  4164.        el.style[p] = o;
  4165.        params[p] = parseFloat(getStyle(el, p, true));
  4166.        el.style[p] = old;
  4167.  
  4168.        if (p == 'height' && browser.msie) {
  4169.          el.style.overflow = 'hidden';
  4170.        }
  4171.      } else {
  4172.        if (options.orig[p] == undefined) {
  4173.          options.orig[p] = getStyle(el, p, false) || '';
  4174.        }
  4175.        options.hide = true;
  4176.        params[p] = 0;
  4177.      }
  4178.    }
  4179.  }
  4180.  if (options.show && !visible) {
  4181.    show(el);
  4182.  }
  4183.  tween = new Fx.Base(el, options);
  4184.  each(params, function(name, to) {
  4185.    if (/backgroundColor|borderBottomColor|borderLeftColor|borderRightColor|borderTopColor|color|borderColor|outlineColor/.test(name)) {
  4186.      var p = (name == 'borderColor') ? 'borderTopColor' : name;
  4187.      from = getColor(el, p);
  4188.      to = getRGB(to);
  4189.    } else {
  4190.      var parts = to.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
  4191.        start = tween.cur(name, true) || 0;
  4192.      if (parts) {
  4193.        to = parseFloat(parts[2]);
  4194.        if (parts[1]) {
  4195.          to = ((parts[1] == '-=' ? -1 : 1) * to) + to;
  4196.        }
  4197.      }
  4198.  
  4199.      if (options.hide && name == 'height' && browser.msie6) {
  4200.        el.style.height = '0px';
  4201.        el.style.overflow = '';
  4202.      }
  4203.      from = tween.cur(name, true);
  4204.      if (options.hide && name == 'height' && browser.msie6) {
  4205.        el.style.height = '';
  4206.        el.style.overflow = 'hidden';
  4207.      }
  4208.      if (from == 0 && (name == 'width' || name == 'height'))
  4209.        from = 1;
  4210.  
  4211.      if (name == 'opacity' && to > 0 && !visible) {
  4212.        setStyle(el, 'opacity', 0);
  4213.         from = 0;
  4214.         show(el);
  4215.       }
  4216.     }
  4217.     if (from != to || (isArray(from) && from.join(',') == to.join(','))) {
  4218.      fromArr[name] = from;
  4219.       toArr[name] = to;
  4220.     }
  4221.   });
  4222.   tween.start(fromArr, toArr);
  4223.   data(el, 'tween', tween);
  4224.  
  4225.   return tween;
  4226. }
  4227.  
  4228. function fadeTo(el, speed, to, callback) {
  4229.   return animate(el, {opacity: to}, speed, callback);
  4230. }
  4231.  
  4232. var Fx = fx = {
  4233.   Transitions: {
  4234.     linear: function(t, b, c, d) { return c*t/d + b; },
  4235.     sineInOut: function(t, b, c, d) { return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; },
  4236.     halfSine: function(t, b, c, d) { return c * (Math.sin(Math.PI * (t/d) / 2)) + b; },
  4237.     easeOutBack: function(t, b, c, d) { var s = 1.70158; return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; },
  4238.     easeInCirc: function(t, b, c, d) { return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; },
  4239.     easeOutCirc: function(t, b, c, d) { return c * Math.sqrt(1 - (t=t/d-1)*t) + b; },
  4240.     easeInQuint: function(t, b, c, d) { return c*(t/=d)*t*t*t*t + b; },
  4241.     easeOutQuint: function(t, b, c, d) { return c*((t=t/d-1)*t*t*t*t + 1) + b; }
  4242.   },
  4243.   Attrs: [
  4244.     [ 'height', 'marginTop', 'marginBottom', 'paddingTop', 'paddingBottom' ],
  4245.     [ 'width', 'marginLeft', 'marginRight', 'paddingLeft', 'paddingRight' ],
  4246.     [ 'opacity', 'left', 'top' ]
  4247.   ],
  4248.   Timers: [],
  4249.   TimerId: null
  4250. }
  4251.  
  4252. Fx.Base = function(el, options, name) {
  4253.   this.el = ge(el);
  4254.   this.name = name;
  4255.   this.options = extend({
  4256.     onComplete: function() {},
  4257.     transition: Fx.Transitions.sineInOut,
  4258.     duration: 500
  4259.   }, options || {});
  4260. }
  4261.  
  4262. function genFx(type, num) {
  4263.   var obj = {};
  4264.   each(Fx.Attrs.concat.apply([], Fx.Attrs.slice(0, num)), function() {
  4265.     obj[this] = type;
  4266.   });
  4267.   return obj;
  4268. };
  4269.  
  4270. // Shortcuts for custom animations
  4271. each({slideDown: genFx('show', 1),
  4272.   slideUp: genFx('hide', 1),
  4273.   slideToggle: genFx('toggle', 1),
  4274.   fadeIn: {opacity: 'show'},
  4275.   fadeOut: {opacity: 'hide'},
  4276.   fadeToggle: {opacity: 'toggle'}}, function(f, val) {
  4277.   window[f] = function(el, speed, callback) { return animate(el, val, speed, callback); }
  4278. });
  4279.  
  4280. Fx.Base.prototype = {
  4281.   start: function(from, to){
  4282.     this.from = from;
  4283.     this.to = to;
  4284.     this.time = vkNow();
  4285.     this.isTweening = true;
  4286.  
  4287.     var self = this;
  4288.     function t(gotoEnd) {
  4289.       return self.step(gotoEnd);
  4290.     }
  4291.     t.el = this.el;
  4292.     if (t() && Fx.Timers.push(t) && !Fx.TimerId) {
  4293.      Fx.TimerId = setInterval(function() {
  4294.        var timers = Fx.Timers;
  4295.         for (var i = 0; i < timers.length; i++) {
  4296.          if (!timers[i]()) {
  4297.            timers.splice(i--, 1);
  4298.          }
  4299.        }
  4300.        if (!timers.length) {
  4301.          clearInterval(Fx.TimerId);
  4302.          Fx.TimerId = null;
  4303.        }
  4304.      }, 13);
  4305.    }
  4306.    return this;
  4307.  },
  4308.  
  4309.  stop: function(gotoEnd) {
  4310.    var timers = Fx.Timers;
  4311.  
  4312.    for (var i = timers.length - 1; i >= 0; i--) {
  4313.       if (timers[i].el == this.el ) {
  4314.         if (gotoEnd) {
  4315.           timers[i](true);
  4316.         }
  4317.         timers.splice(i, 1);
  4318.       }
  4319.     }
  4320.     this.isTweening = false;
  4321.   },
  4322.  
  4323.   step: function(gotoEnd) {
  4324.     var time = vkNow();
  4325.     if (!gotoEnd && time < this.time + this.options.duration) {
  4326.      this.cTime = time - this.time;
  4327.       this.now = {};
  4328.       for (p in this.to) {
  4329.         // color fx
  4330.         if (isArray(this.to[p])) {
  4331.           var color = [], j;
  4332.           for (j = 0; j < 3; j++) {
  4333.            if (this.from[p] === undefined || this.to[p] === undefined) {
  4334.              return false;
  4335.            }
  4336.            color.push(Math.min(parseInt(this.compute(this.from[p][j], this.to[p][j])), 255));
  4337.          }
  4338.          this.now[p] = color;
  4339.        } else {
  4340.          this.now[p] = this.compute(this.from[p], this.to[p]);
  4341.        }
  4342.      }
  4343.      this.update();
  4344.      return true;
  4345.    } else {
  4346.      setTimeout(this.options.onComplete.bind(this, this.el), 10);
  4347.      this.now = extend(this.to, this.options.orig);
  4348.      this.update();
  4349.      if (this.options.hide) hide(this.el);
  4350.      this.isTweening = false;
  4351.      return false;
  4352.    }
  4353.  },
  4354.  
  4355.  compute: function(from, to){
  4356.    var change = to - from;
  4357.    return this.options.transition(this.cTime, from, change, this.options.duration);
  4358.  },
  4359.  
  4360.  update: function(){
  4361.    for (var p in this.now) {
  4362.      if (isArray(this.now[p])) setStyle(this.el, p, 'rgb(' + this.now[p].join(',') + ')');
  4363.      else this.el[p] != undefined ? (this.el[p] = this.now[p]) : setStyle(this.el, p, this.now[p]);
  4364.    }
  4365.  },
  4366.  
  4367.  cur: function(name, force){
  4368.    if (this.el[name] != null && (!this.el.style || this.el.style[name] == null))
  4369.      return this.el[name];
  4370.    return parseFloat(getStyle(this.el, name, force)) || 0;
  4371.  }
  4372. };
  4373.  
  4374. // Parse strings looking for color tuples [255,255,255]
  4375. function getRGB(color) {
  4376.  var result;
  4377.  if (color && isArray(color) && color.length == 3)
  4378.    return color;
  4379.  if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
  4380.    return [parseInt(result[1]), parseInt(result[2]), parseInt(result[3])];
  4381.  if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
  4382.    return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
  4383.  if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
  4384.    return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
  4385.  if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
  4386.    return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
  4387. }
  4388.  
  4389. function getColor(elem, attr) {
  4390.  var color;
  4391.  do {
  4392.    color = getStyle(elem, attr);
  4393.    if (!color.indexOf('rgba')) color = '';
  4394.    if (color != '' && color != 'transparent' || elem.nodeName.toLowerCase() == 'body') {
  4395.      break;
  4396.    }
  4397.    attr = 'backgroundColor';
  4398.  } while (elem = elem.parentNode);
  4399.  return getRGB(color);
  4400. }
  4401.  
  4402. function scrollToTop(speed) {
  4403.  if (speed == undefined) speed = 400;
  4404.  if (speed) {
  4405.    if (browser.msie6) {
  4406.      animate(pageNode, {scrollTop: 0}, speed);
  4407.    } else {
  4408.      animate(htmlNode, {scrollTop: 0}, speed);
  4409.      animate(bodyNode, {scrollTop: 0}, speed);
  4410.    }
  4411.  } else {
  4412.    window.scroll(0, 0);
  4413.    if (browser.msie6) {
  4414.      pageNode.scrollTop = 0;
  4415.    }
  4416.  }
  4417. }
  4418.  
  4419. function notaBene(el, color, nofocus) {
  4420.  el = ge(el);
  4421.  if (!el) return;
  4422.  
  4423.  if (!nofocus) focus(el);
  4424.  var oldBack = data(el, 'back') || data(el, 'back', getStyle(el, 'backgroundColor'));
  4425.  var colors = {notice: '#FFFFE0', warning: '#FAEAEA'};
  4426.  setStyle(el, 'backgroundColor', colors[color] || color || colors.warning);
  4427.  setTimeout(animate.pbind(el, {backgroundColor: oldBack}, 300), 400);
  4428. }
  4429.  
  4430. /**
  4431. * Events
  4432. **/
  4433. var KEY = window.KEY = {
  4434.  LEFT: 37,
  4435.  UP: 38,
  4436.  RIGHT: 39,
  4437.  DOWN: 40,
  4438.  DEL: 8,
  4439.  TAB: 9,
  4440.  RETURN: 13,
  4441.  ENTER: 13,
  4442.  ESC: 27,
  4443.  PAGEUP: 33,
  4444.  PAGEDOWN: 34,
  4445.  SPACE: 32
  4446. };
  4447.  
  4448. function addEvent(elem, types, handler, custom, context) {
  4449.  elem = ge(elem);
  4450.  if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
  4451.    return;
  4452.  
  4453.  var realHandler = context ? function (e) {
  4454.    var prevData = e.data;
  4455.    e.data = context;
  4456.    var ret = handler.apply(this, [e]);
  4457.    e.data = prevData;
  4458.    return ret;
  4459.  } : handler;
  4460.  
  4461.  // For IE
  4462.  if (elem.setInterval && elem != window) elem = window;
  4463.  
  4464.  var events = data(elem, 'events') || data(elem, 'events', []),
  4465.      handle = data(elem, 'handle') || data(elem, 'handle', function() {
  4466.        _eventHandle.apply(arguments.callee.elem, arguments);
  4467.      });
  4468.  // to prevent a memory leak
  4469.  handle.elem = elem;
  4470.  
  4471.  each(types.split(/\s+/), function(index, type) {
  4472.    if (!events[type]) {
  4473.      events[type] = [];
  4474.      if (!custom && elem.addEventListener) {
  4475.        elem.addEventListener(type, handle, false);
  4476.      } else if (!custom && elem.attachEvent) {
  4477.        elem.attachEvent('on' + type, handle);
  4478.      }
  4479.    }
  4480.    events[type].push(realHandler);
  4481.  });
  4482.  
  4483.  elem = null;
  4484. }
  4485. function removeEvent(elem, types, handler) {
  4486.  elem = ge(elem);
  4487.  if (!elem) return;
  4488.  var events = data(elem, 'events');
  4489.  if (!events) return;
  4490.  if (typeof(types) != 'string') {
  4491.    for (var i in events) {
  4492.      removeEvent(elem, i);
  4493.    }
  4494.    return;
  4495.  }
  4496.  each(types.split(/\s+/), function(index, type) {
  4497.    if (!isArray(events[type])) return;
  4498.    if (isFunction(handler)) {
  4499.      for (var i = 0; i < events[type].length; i++) {
  4500.        if (events[type][i] == handler) {
  4501.          for (var j = i + 1; j < events[type].length; j++) {
  4502.            events[type][j - 1] = events[type][j];
  4503.          }
  4504.          events[type].pop();
  4505.          break;
  4506.        }
  4507.      }
  4508.    } else {
  4509.      for (var i = 0; i < events[type].length; i++) {
  4510.        delete events[type][i];
  4511.      }
  4512.    }
  4513.    if (!events[type].length) {
  4514.      if (elem.removeEventListener) {
  4515.        elem.removeEventListener(type, data(elem, 'handle'), false);
  4516.      } else if (elem.detachEvent) {
  4517.        elem.detachEvent('on' + type, data(elem, 'handle'));
  4518.      }
  4519.      delete events[type];
  4520.    }
  4521.  });
  4522. }
  4523. function triggerEvent(elem, type, ev) {
  4524.  var handle = data(elem, 'handle');
  4525.  if (handle) {
  4526.    setTimeout(function() {
  4527.      handle.call(elem, extend((ev || {}), {type: type, target: elem}))
  4528.    }, 0);
  4529.  }
  4530. }
  4531. function cancelEvent(event) {
  4532.  var e = event.originalEvent || event;
  4533.  if (e.preventDefault) e.preventDefault();
  4534.  if (e.stopPropagation) e.stopPropagation();
  4535.  event.cancelBubble = e.cancelBubble = true;
  4536.  event.returnValue = e.returnValue = false;
  4537.  return false;
  4538. }
  4539. function _eventHandle(event) {
  4540.  event = event || window.event;
  4541.  
  4542.  var originalEvent = event;
  4543.  event = clone(originalEvent);
  4544.  event.originalEvent = originalEvent;
  4545.  
  4546.  if (!event.target) {
  4547.    event.target = event.srcElement || document;
  4548.  }
  4549.  
  4550.  // check if target is a textnode (safari)
  4551.  if (event.target.nodeType == 3) {
  4552.    event.target = event.target.parentNode;
  4553.  }
  4554.  
  4555.  if (!event.relatedTarget && event.fromElement) {
  4556.    event.relatedTarget = event.fromElement == event.target;
  4557.  }
  4558.  
  4559.  if (event.pageX == null && event.clientX != null) {
  4560.    var doc = document.documentElement, body = bodyNode;
  4561.    event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
  4562.    event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
  4563.  }
  4564.  
  4565.  if (!event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode)) {
  4566.    event.which = event.charCode || event.keyCode;
  4567.  }
  4568.  
  4569.  if (!event.metaKey && event.ctrlKey) {
  4570.    event.metaKey = event.ctrlKey;
  4571.  }
  4572.  
  4573.  // click: 1 == left; 2 == middle; 3 == right
  4574.  if (!event.which && event.button) {
  4575.    event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
  4576.  }
  4577.  
  4578.  var handlers = data(this, 'events');
  4579.  if (!handlers || typeof(event.type) != 'string' || !handlers[event.type] || !handlers[event.type].length) {
  4580.    return;
  4581.  }
  4582.  
  4583.  for (var i in (handlers[event.type] || [])) {
  4584.    if (event.type == 'mouseover' || event.type == 'mouseout') {
  4585.      var parent = event.relatedElement;
  4586.      while (parent && parent != this) {
  4587.        try { parent = parent.parentNode; }
  4588.        catch(e) { parent = this; }
  4589.      }
  4590.      if (parent == this) {
  4591.        continue
  4592.      }
  4593.    }
  4594.    var ret = handlers[event.type][i].apply(this, arguments);
  4595.    if (ret === false) {
  4596.      cancelEvent(event);
  4597.    }
  4598.  }
  4599. }
  4600.  
  4601. // Prevent memory leaks in IE
  4602. addEvent(window, 'unload', function() {
  4603.  for (var id in vkCache) {
  4604.    if (vkCache[id].handle && vkCache[id].handle.elem != window) {
  4605.      removeEvent(vkCache[id].handle.elem);
  4606.    }
  4607.  }
  4608. });
  4609. if (__debugMode) {
  4610.  function __checkData() {
  4611.    var r = [];
  4612.    for (var i in vkCache) {
  4613.      var c = vkCache[i], el;
  4614.      if (!c || !(el = c.__elem)) continue;
  4615.      var id = el.id;
  4616.      if (!id) el.id = id = '__vk' + irand(1000000, 9999999);
  4617.      if (ge(id) == el) continue;
  4618.      var d = [];
  4619.      for (var j in c) {
  4620.        if (j == '__elem' || j == 'handle' && c.events) continue;
  4621.        if (j == 'events') {
  4622.          var e = [];
  4623.          for (var k in c[j]) e.push(k + '(' + c[j][k].length + ')');
  4624.          d.push('{' + e.join(', ') + '}');
  4625.        } else {
  4626.          d.push(j);
  4627.        }
  4628.      }
  4629.      var n;
  4630.      if (!/^__vk/.test(id)) n = '#' + id;
  4631.      else if (trim(el.className)) n = '.' + el.className.split(' ').join('.');
  4632.      else if (el.tagName) n = '&lt;' + el.tagName.toLowerCase() + '&gt;';
  4633.      else n = el + '';
  4634.      r.push(n + ': ' + d.join(', '));
  4635.    }
  4636.    return r.join('<br>');
  4637.   }
  4638.   addEvent(document, 'keydown', function(e) {
  4639.     if (e.keyCode == 120 && !e.charCode) {
  4640.      showFastBox({title: 'Debug'}, __checkData());
  4641.     }
  4642.   });
  4643. }
  4644.  
  4645. var _layerAnim = false;
  4646. // Layers
  4647. var layers = {
  4648.   sh: (!_layerAnim || browser.msie || browser.iphone) ? function(el, done) {
  4649.     show(el);
  4650.     if (done) done();
  4651.   } : function(el, done) {
  4652.     fadeIn(el, 200, done);
  4653.   },
  4654.   hd: (!_layerAnim || browser.msie || browser.iphone) ? function(el, done) {
  4655.     hide(el);
  4656.     if (done) done();
  4657.   } : function(el, done) {
  4658.     fadeOut(el, 200, done);
  4659.   },
  4660.   visible: false,
  4661.   _show: function(el, con, opacity, color) {
  4662.     setStyle(el, {opacity: opacity || 0, backgroundColor: color || ''});
  4663.     if (!layers.visible) {
  4664.       toggleFlash();
  4665.       if (browser.mozilla) {
  4666.         window._oldScroll = htmlNode.scrollTop;
  4667.         pageNode.style.height = (_oldScroll + lastWindowHeight) + 'px';
  4668.         pageNode.style.marginTop = -_oldScroll + 'px';
  4669.       } else if (!browser.msie6) {
  4670.         (browser.msie7 ? htmlNode : bodyNode).style.overflow = 'hidden';
  4671.       }
  4672.     }
  4673.     layers.visible = true;
  4674.     show(con);
  4675.     layers.sh(el);
  4676.   },
  4677.   _hide: function(el, con) {
  4678.     var done = function() {
  4679.       hide(con);
  4680.       if (!isVisible(layerWrap) && !isVisible(boxLayerWrap) && ((window.mvcur && mvcur.minimized) || !isVisible(window.mvLayerWrap))) {
  4681.        layers.visible = false;
  4682.         toggleFlash(true);
  4683.         if (browser.mozilla) {
  4684.           pageNode.style.height = 'auto';
  4685.           pageNode.style.marginTop = '0px';
  4686.           if (window._oldScroll) {
  4687.             htmlNode.scrollTop = _oldScroll;
  4688.           }
  4689.         } else if (!browser.msie6) {
  4690.           (browser.msie7 ? htmlNode : bodyNode).style.overflow = 'auto';
  4691.         }
  4692.       }
  4693.     }
  4694.     layers.hd(el, done);
  4695.   }
  4696. };
  4697.  
  4698. function updSideBackLink(resized) {
  4699.   if (!window.scrollNode || !isVisible(_sbLink)) return;
  4700.  
  4701.   var pb = ge('page_body'), xy = getXY(pb);
  4702.   if (resized === true) {
  4703.     setStyle(_sbLink, {
  4704.       left: vk.rtl ? (xy[0] + getSize(pb)[0] + 5) : (xy[0] - 5 - _sbLink.offsetWidth) + 'px'
  4705.     });
  4706.     return;
  4707.   }
  4708.   var st = window.pageYOffset || scrollNode.scrollTop || document.documentElement.scrollTop;
  4709.   var sb = ge('side_bar'), is = isVisible(sb);
  4710.   var sz = is ? getSize(sb) : [0, 500], y = pb.offsetTop + ge('page_layout').parentNode.offsetTop + sz[1] - st;
  4711.  
  4712.   setStyle(_sbLink, {
  4713.     left: vk.rtl ? (xy[0] + getSize(pb)[0] + 5) : (xy[0] - 5 - _sbLink.offsetWidth) + 'px',
  4714.     top: (Math.max(y, 0) + 5) + 'px',
  4715.     opacity: Math.min(Math.max(1 - y / 100, 0), 1)
  4716.   });
  4717. }
  4718.  
  4719. function updGlobalPlayer() {
  4720.   var _gp = ge('gp');
  4721.   var _gb = ge('gp_back');
  4722.   if (!_gp || !_gb || window.gpExpanded) return;
  4723.   var pb = ge('page_body'), xy = getXY(pb), psz = getSize(pb);
  4724.   var w = window, de = document.documentElement;
  4725.   if (!w.pageNode) return;
  4726.   var dheight = Math.max(intval(w.innerHeight), intval(de.clientHeight));
  4727.   var dwidth = Math.max(intval(w.innerWidth), intval(de.clientWidth));
  4728.   var gsz = getSize(_gp);
  4729.   var sb = ge('side_bar'), is = isVisible(sb), sz = is ? getSize(sb) : [118, 500], pos = getXY(sb);
  4730.   var pb = ge('page_body');
  4731.   var st = window.pageYOffset || scrollNode.scrollTop || document.documentElement.scrollTop;
  4732.   var y = pb.offsetTop + ge('page_layout').parentNode.offsetTop + dheight - gsz[1] - 40;
  4733.   var sw = (vk.rtl) ? pos[0] - xy[0] - psz[0] : xy[0] - pos[0] - sz[0];
  4734.  
  4735.   if (browser.msie7 || browser.msie6) y -= 33;
  4736.   setStyle(_gb, {
  4737.     width: sz[0] + 13 + sw + 'px'
  4738.   });
  4739.   setStyle(_gp, {
  4740.     top: Math.max(y, 0) + 'px',
  4741.     left: (vk.rtl) ? pos[0] - sw - 2 + 'px' : pos[0] - 11 + 'px',
  4742.     width: sz[0] + 13 + sw + 'px'
  4743.   });
  4744. }
  4745.  
  4746. function expandGlobalPlayer(open) {
  4747.   var _gp = ge('gp');
  4748.   var _gb = ge('gp_back');
  4749.   if (!_gp || !_gb) return;
  4750.   var _w = 504;
  4751.   if (open) {
  4752.     if (window.gp_timer) {
  4753.       clearTimeout(gp_timer);
  4754.       window.gp_timer = null;
  4755.       return;
  4756.     }
  4757.     window.gpExpanded = true;
  4758.     hide('gp_small');
  4759.     show('gp_large');
  4760.     if (audioPlayer && audioPlayer.player) {
  4761.      audioPlayer.player.callPlayProgress();
  4762.     }
  4763.     var el = geByClass1('title_wrap', ge('gp_large'));
  4764.     if (el) {
  4765.       setStyle(el, {width: '330px'});
  4766.     }
  4767.     var l = parseInt(_gp.style.left), w = getSize(_gp)[0];
  4768.     setStyle(_gp, {
  4769.       width: _w+'px',
  4770.       left: (vk.rtl) ? l+w-_w+'px' : l+'px'
  4771.     });
  4772.     setStyle(_gb, {width: _w+'px'});
  4773.   } else {
  4774.     if (!window.gp_timer) {
  4775.       window.gp_timer = setTimeout(function(){
  4776.         var pb = ge('page_body'), xy = getXY(pb), psz = getSize(pb);
  4777.         var sb = ge('side_bar'), is = isVisible(sb), sz = is ? getSize(sb) : [118, 500], pos = getXY(sb);
  4778.         var sw = (vk.rtl) ? pos[0] - xy[0] - psz[0] : xy[0] - pos[0] - sz[0];
  4779.         setStyle(_gb, {width: sz[0] + 13 + sw + 'px'});
  4780.         setStyle(_gp, {
  4781.           left: vk.rtl ? (pos[0] - sw - 2) + 'px' : pos[0] - 11 + 'px',
  4782.           width: sz[0] + 13 + sw + 'px'
  4783.         });
  4784.         hide('gp_large');
  4785.         show('gp_small');
  4786.         window.gpExpanded = false;
  4787.         window.gp_timer = null;
  4788.       }, 800);
  4789.     }
  4790.   }
  4791. }
  4792.  
  4793. function toggleGlobalPlayer(open) {
  4794.   var _gp = ge('gp');
  4795.   if (!_gp) return;
  4796.   if (open) {
  4797.     show(_gp);
  4798.     updGlobalPlayer();
  4799.     var sz = getSize(_gp);
  4800.     geByClass1('wrap', ge('pad_wrap')).style.paddingBottom = sz[1]+'px';
  4801.     var t_pos = parseInt(_gp.style.top);
  4802.     _gp.style.top = t_pos + getSize(_gp)[1] + 'px';
  4803.     animate(_gp, {top: t_pos+'px'}, 200);
  4804.   } else {
  4805.     updGlobalPlayer();
  4806.     var t_pos = parseInt(_gp.style.top);
  4807.     if (window.audioPlayer) {
  4808.       if (audioPlayer.id && !ge('audio'+audioPlayer.id)) audioPlayer.stop();
  4809.     }
  4810.     animate(_gp, {top: t_pos + getSize(_gp)[1] + 'px'}, 200, function(){hide(_gp)});
  4811.   }
  4812. }
  4813.  
  4814. function onBodyResize(force) {
  4815.   var w = window, de = document.documentElement;
  4816.   if (!w.pageNode) return;
  4817.   var dwidth = Math.max(intval(w.innerWidth), intval(de.clientWidth));
  4818.   var dheight = Math.max(intval(w.innerHeight), intval(de.clientHeight));
  4819.   var sbw = sbWidth();
  4820.  
  4821.   if (browser.mobile) {
  4822.     dwidth = Math.max(dwidth, intval(bodyNode.scrollWidth));
  4823.     dheight = Math.max(dheight, intval(bodyNode.scrollHeight));
  4824.   } else if (browser.msie7) {
  4825.     if (htmlNode.scrollHeight > htmlNode.offsetHeight && !layers.visible) {
  4826.      dwidth += sbw + 1;
  4827.     }
  4828.   } else if (browser.msie8) {
  4829.     if (htmlNode.scrollHeight + 3 > htmlNode.offsetHeight && !layers.visible) {
  4830.      dwidth += sbw + 1;
  4831.     }
  4832.   }
  4833.   if (w.lastWindowWidth != dwidth || force === true) {
  4834.     w.lastWindowWidth = dwidth;
  4835.     layerWrap.style.width = boxLayerWrap.style.width = dwidth + 'px';
  4836.     var layerWidth = layer.style.width = boxLayer.style.width = (dwidth - sbw - 2) + 'px';
  4837.     if (window.mvLayerWrap) {
  4838.       mvLayerWrap.style.width = dwidth + 'px';
  4839.       mvLayer.style.width = layerWidth;
  4840.     }
  4841.  
  4842.     if (bodyNode.offsetWidth < layoutWidth + sbw + 2) {
  4843.      dwidth = layoutWidth + sbw + 2;
  4844.    }
  4845.    if (dwidth) {
  4846.      for (var el = pageNode.firstChild; el; el = el.nextSibling) {
  4847.        if (!el.tagName) continue;
  4848.        for (var e = el.firstChild; e; e = e.nextSibling) {
  4849.          if (e.className == 'scroll_fix') {
  4850.            e.style.width = (dwidth - sbw * (browser.msie7 ? 2 : 1) - 2) + 'px';
  4851.          }
  4852.        }
  4853.      }
  4854.    }
  4855.  }
  4856.  if (w.lastWindowHeight != dheight || force === true) {
  4857.    w.lastWindowHeight = dheight;
  4858.    layerBG.style.height = boxLayerBG.style.height =
  4859.    layerWrap.style.height = boxLayerWrap.style.height = dheight + 'px';
  4860.    if (window.mvLayerWrap) {
  4861.      mvLayerWrap.style.height = dheight + 'px';
  4862.    }
  4863.    if (browser.mozilla && layers.visible) {
  4864.      pageNode.style.height = (_oldScroll + dheight) + 'px';
  4865.    } else if (browser.msie6) {
  4866.      pageNode.style.height = dheight + 'px';
  4867.    }
  4868.  }
  4869.  updSideBackLink();
  4870.  updGlobalPlayer();
  4871. }
  4872. function onBodyScroll() {
  4873.  bnr1.onScroll();
  4874.  bnr2.onScroll();
  4875.  updSideBackLink();
  4876.  updGlobalPlayer();
  4877. }
  4878.  
  4879. function onCtrlEnter(ev, handler) {
  4880.  ev = ev || window.event;
  4881.  if (ev.keyCode == 10 || ev.ctrlKey && ev.keyCode == 13) {
  4882.    handler();
  4883.  }
  4884. }
  4885.  
  4886. function setFavIcon(href, force) {
  4887.  if (!window.icoNode) return;
  4888.  if (icoNode.href == href && !force) return;
  4889.  var ico = ce('link', {rel: 'shortcut icon', type: 'image/gif', href: href});
  4890.  headNode.replaceChild(ico, icoNode);
  4891.  icoNode = ico;
  4892. }
  4893.  
  4894. (function() {
  4895. var step = 1, timer, to, func, title;
  4896. if (browser.mozilla) {
  4897.  func = function() {
  4898.    setFavIcon('/images/icons/prgicon.gif');
  4899.  }
  4900. } else if (browser.chrome || browser.opera && !browser.opera_mobile) {
  4901.  func = function() {
  4902.    step = step % 4 + 1;
  4903.    setFavIcon('/images/icons/prgicon' +  step + '.gif');
  4904.    timer = setTimeout(arguments.callee, 250);
  4905.  }
  4906. } else {
  4907.  func = function() {
  4908.    var newTitle = '';
  4909.  
  4910.    for (var i = 1; i <= 5; ++i) {
  4911.      newTitle += (i == step) ? String.fromCharCode(0x25CF) : '-';
  4912.    }
  4913.    document.title = newTitle;
  4914.    step = step % 5 + 1;
  4915.    timer = setTimeout(arguments.callee, 250);
  4916.  }
  4917. }
  4918. window.showTitleProgress = function(timeout) {
  4919.  if (browser.mozilla || browser.chrome) return;
  4920.  if (timeout > 0) {
  4921.     to = setTimeout(showTitleProgress.pbind(false), timeout);
  4922.     return;
  4923.   }
  4924.   if (timer) {
  4925.     return;
  4926.   }
  4927.   if (document.body) {
  4928.     document.body.style.cursor = 'progress';
  4929.   }
  4930.   title = document.title;
  4931.   func();
  4932. }
  4933. window.hideTitleProgress = function(newTitle) {
  4934.   if (browser.mozilla || browser.chrome) return;
  4935.   clearTimeout(to);
  4936.   document.body.style.cursor = 'default';
  4937.   if (timer) {
  4938.     clearTimeout(timer);
  4939.     timer = false;
  4940.   }
  4941.   if (newTitle || title) {
  4942.     document.title = newTitle || title;
  4943.     title = false;
  4944.   }
  4945.   if (browser.mozilla || browser.chrome || browser.opera && !browser.opera_mobile) {
  4946.    setFavIcon('/images/favicon' + (vk.intnat ? 'vknew' : 'new') + '.ico');
  4947.   }
  4948. }
  4949. })();
  4950.  
  4951. var layoutWidth = 791;
  4952. function domStarted() {
  4953.   window.headNode = geByTag1('head');
  4954.   extend(window, {
  4955.     icoNode:  geByTag1('link', headNode),
  4956.     bodyNode: geByTag1('body'),
  4957.     htmlNode: geByTag1('html'),
  4958.     utilsNode: ge('utils')
  4959.   });
  4960.   if (!utilsNode) return;
  4961.  
  4962.   if (browser.mozilla) {
  4963.     addClass(bodyNode, 'firefox');
  4964.   } else if (browser.msie6) {
  4965.     addClass(bodyNode, 'nofixed');
  4966.   }
  4967.  
  4968.   for (var i in StaticFiles) {
  4969.     var f = StaticFiles[i];
  4970.     f.l = 1;
  4971.     if (f.t == 'css') {
  4972.       utilsNode.appendChild(ce('div', {id: f.n}));
  4973.     }
  4974.   }
  4975.  
  4976.   var l = ge('layer_bg'), lw = l.nextSibling, bl = ge('box_layer_bg'), blw = bl.nextSibling;
  4977.   extend(window, {
  4978.     layerBG: l,
  4979.     boxLayerBG: bl,
  4980.     layerWrap: lw,
  4981.     layer: lw.firstChild,
  4982.     boxLayerWrap: blw,
  4983.     boxLayer: blw.firstChild,
  4984.     _sbLink: ge('side_back_link')
  4985.   });
  4986.   _sbLink.innerHTML = getLang('global_to_top');
  4987.  
  4988.   extend(layers, {
  4989.     show: layers._show.pbind(l, lw),
  4990.     boxshow: layers._show.pbind(bl, blw),
  4991.     wrapshow: layers._show.pbind(l),
  4992.     hide: layers._hide.pbind(l, lw),
  4993.     boxhide: layers._hide.pbind(bl, blw),
  4994.     wraphide: layers._hide.pbind(l)
  4995.   });
  4996.  
  4997.   hab.init();
  4998. }
  4999. function domReady() {
  5000.   if (!utilsNode) return;
  5001.  
  5002.   extend(window, {
  5003.     pageNode: ge('page_wrap'),
  5004.     _tbLink: ge('top_back_link')
  5005.   });
  5006.   window.scrollNode = browser.msie6 ? pageNode : ((browser.chrome || browser.safari) ? bodyNode : htmlNode);
  5007.  
  5008.   if (vk.al == 1) {
  5009.     showTitleProgress();
  5010.   }
  5011.  
  5012.   onBodyResize();
  5013.   setTimeout(showSideBackLink.pbind(false), 100);
  5014.  
  5015.   var scrolledNode = browser.msie6 ? pageNode : window,
  5016.       bnrCode = function(id, data) {
  5017.     var rnd = irand(1, 1000000), addate = new Date();
  5018.     var def = 'p1=' + data.p1 + '&amp;p2=' + data.p2;
  5019.     var params = ['p3=a', 'p4=a', 'pucn=a', 'pfc=a', 'pfb=a', 'pr=' + rnd, 'pt=b', 'pd=' + addate.getDate(), 'pw=' + addate.getDay(), 'pv=' + addate.getHours(), 'py=a', 'puid1=' + data.sex, 'puid2=' + data.year, 'puid3=' + data.status, def];
  5020.     var src = 'http://a.adwolf.ru/getCode?' + params.join('&amp;');
  5021.     return '<iframe src="' + src + '" id="' + id + '_' + rnd + '" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"><a href="http://a.adwolf.ru/goDefaultLink?' + def + '" target="_top"><img src="http://a.adwolf.ru/getDefaultImage?' + def + '"></a></iframe>';
  5022.   }, docEl = document.documentElement;
  5023.   var bnrLoader = function(id) {
  5024.     var el = ge(id) || {style: {}}, h = (id == 'banner1') ? 150 : 30;
  5025.     var res = {
  5026.       id: id,
  5027.       el: el,
  5028.       update: function() {
  5029.         el = res.el = ge(id) || {style: {}};
  5030.         if (!el.id) return;
  5031.  
  5032.         var vis = isVisible(el);
  5033.         if (!vis) show(el);
  5034.         res.yc = intval(el.offsetTop + h);
  5035.         if (!vis) hide(el);
  5036.       },
  5037.       onScroll: function() {
  5038.         if (!el.id || !res.data) return;
  5039.  
  5040.         var ch = window.innerHeight || docEl.clientHeight || bodyNode.clientHeight;
  5041.         var st = window.pageYOffset || scrollNode.scrollTop || docEl.scrollTop;
  5042.  
  5043.         if (res.yc > st && st + ch > res.yc) {
  5044.          show(el);
  5045.           el.innerHTML = bnrCode(el.id, res.data);
  5046.           res.data = false;
  5047.         }
  5048.       }
  5049.     }
  5050.     return res;
  5051.   }
  5052.   window.bnr1 = bnrLoader('banner1');
  5053.   window.bnr2 = bnrLoader('banner2');
  5054.  
  5055.   addEvent(scrolledNode, 'scroll', onBodyScroll);
  5056. }
  5057. function onDomReady(f) {
  5058.   f();
  5059. }
  5060.  
  5061. // Ajax
  5062. function serializeForm(form) {
  5063.   if (typeof(form) != 'object') {
  5064.     return false;
  5065.   }
  5066.   var result = {};
  5067.   var g = function(n) {
  5068.     return geByTag(n, form);
  5069.   };
  5070.   var nv = function(i, e){
  5071.     if (!e.name) return;
  5072.     if (e.type == 'text' || !e.type) {
  5073.       result[e.name] = val(e);
  5074.     } else {
  5075.       result[e.name] = (browser.msie && !e.value && form[e.name]) ? form[e.name].value : e.value;
  5076.     }
  5077.   };
  5078.   each(g('input'), function(i, e) {
  5079.     if ((e.type != 'radio' && e.type != 'checkbox') || e.checked) return nv(i, e);
  5080.   });
  5081.   each(g('select'), nv);
  5082.   each(g('textarea'), nv);
  5083.  
  5084.   return result;
  5085. }
  5086.  
  5087. function ajx2q(qa) {
  5088.   var query = [], enc = function (str) {
  5089.     try {
  5090.       return encodeURIComponent(str);
  5091.     } catch (e) { return str;}
  5092.   };
  5093.  
  5094.   for (var key in qa) {
  5095.     if (qa[key] == null || isFunction(qa[key])) continue;
  5096.     if (isArray(qa[key])) {
  5097.       for (var i = 0, c = 0; i < qa[key].length; ++i) {
  5098.        if (qa[key][i] == null || isFunction(qa[key][i])) {
  5099.          continue;
  5100.        }
  5101.        query.push(enc(key) + '[' + c + ']=' + enc(qa[key][i]));
  5102.        ++c;
  5103.      }
  5104.    } else {
  5105.      query.push(enc(key) + '=' + enc(qa[key]));
  5106.    }
  5107.  }
  5108.  query.sort();
  5109.  return query.join('&');
  5110. }
  5111. function q2ajx(qa) {
  5112.  if (!qa) return {};
  5113.  var query = {}, dec = function (str) {
  5114.    try {
  5115.      return decodeURIComponent(str);
  5116.    } catch (e) { return str;}
  5117.  };
  5118.  qa = qa.split('&');
  5119.  each(qa, function(i, a) {
  5120.    var t = a.split('=');
  5121.    if (t[0]) {
  5122.      var v = dec(t[1] + '');
  5123.      if (t[0].substr(t.length - 2) == '[]') {
  5124.        var k = dec(t[0].substr(0, t.length - 2));
  5125.        if (!query[k]) {
  5126.          query[k] = [];
  5127.        }
  5128.        query[k].push(v);
  5129.      } else {
  5130.        query[dec(t[0])] = v;
  5131.      }
  5132.    }
  5133.  });
  5134.  return query;
  5135. }
  5136.  
  5137. var stManager = {
  5138.  _add: function(f, old) {
  5139.    var name = f.replace(/[\/\.]/g, '_');
  5140.    if (old && old.l && old.t == 'css') {
  5141.      var elem = ce('style', {
  5142.        type: 'text/css',
  5143.        media: 'screen'
  5144.      });
  5145.      headNode.appendChild(elem);
  5146.      var text = '#' + name + ' { display: block; }';
  5147.      if (elem.sheet) {
  5148.        elem.sheet.insertRule(text, 0);
  5149.      } else if (elem.styleSheet) {
  5150.        elem.styleSheet.cssText = text;
  5151.      }
  5152.    }
  5153.    StaticFiles[f] = {v: stVersions[f], n: name, l: 0, c: 0};
  5154.    var f_full = f + '?' + stVersions[f];
  5155.    if (f.indexOf('.js') != -1) {
  5156.      var p = 'js/';
  5157.      if (stTypes.fromLib[f]) {
  5158.        p += 'lib/';
  5159.      } else if (!/^lang\d/i.test(f) && !stTypes.fromRoot[f]) {
  5160.        p += 'al/';
  5161.      }
  5162.      headNode.appendChild(ce('script', {
  5163.        type: 'text/javascript',
  5164.        src: p + f_full
  5165.      }));
  5166.  
  5167.      StaticFiles[f].t = 'js';
  5168.    } else if (f.indexOf('.css') != -1) {
  5169.      var p = 'css/' + (stTypes.fromRoot[f] ? '' : 'al/');
  5170.      headNode.appendChild(ce('link', {
  5171.        type: 'text/css',
  5172.        rel: 'stylesheet',
  5173.        href: p + f_full
  5174.      }));
  5175.  
  5176.      StaticFiles[f].t = 'css';
  5177.  
  5178.      if (!ge(name)) {
  5179.        utilsNode.appendChild(ce('div', {id: name}));
  5180.      }
  5181.    }
  5182.  },
  5183.  
  5184.  add: function(files, callback) {
  5185.    var wait = [], de = document.documentElement;
  5186.    if (!isArray(files)) files = [files];
  5187.    for (var i in files) {
  5188.      var f = files[i];
  5189.      if (f.indexOf('?') != -1) {
  5190.        f = f.split('?')[0];
  5191.      }
  5192.      if (/^lang\d/i.test(f)) {
  5193.        stVersions[f] = stVersions['lang'];
  5194.      } else if (!stVersions[f]) {
  5195.        stVersions[f] = 1;
  5196.      }
  5197. // Opera Speed Dial fix
  5198.      var opSpeed = browser.opera && de.clientHeight == 768 && de.clientWidth == 1024;
  5199.      if ((opSpeed || __debugMode) && f != 'common.js' && f != 'common.css' && stVersions[f] > 0 && stVersions[f] < 1000000000) stVersions[f] += irand(1000000000, 2000000000);
  5200.       var old = StaticFiles[f];
  5201.       if (!old || old.v != stVersions[f]) {
  5202.         stManager._add(f, old);
  5203.       }
  5204.       if (callback && !StaticFiles[f].l) {
  5205.        wait.push(f);
  5206.       }
  5207.     }
  5208.     if (!callback) return;
  5209.     if (!wait.length) {
  5210.       return callback();
  5211.     }
  5212.     var waiter = function() {
  5213.       var nwait = [];
  5214.       for (var i in wait) {
  5215.         var f = wait[i];
  5216.         if (!StaticFiles[f].l && StaticFiles[f].t == 'css' && getStyle(StaticFiles[f].n, 'display') == 'none') {
  5217.          if (stVersions[f] < 0) {
  5218.            topMsg('<b>Warning:</b> Something is bad, please <b><a href="/techsupp.php?fid=1&act=t&tid=497998">clear your cache</a></b> and restart your browser.', 10);
  5219.           }
  5220.           StaticFiles[f].l = 1;
  5221.         }
  5222.         if (!StaticFiles[f].l) {
  5223.           if (++StaticFiles[f].c > 150) { // Can't load for 15 seconds.
  5224.             if (stVersions[f] < 0) {
  5225.              topError('<b>Error:</b> Could not load <b>' + f + '</b>.', 3);
  5226.               StaticFiles[f].l = 1;
  5227.             } else {
  5228.               topMsg('Some problems with loading <b>' + f + '</b>...', 3);
  5229.               stVersions[f] = irand(-10000, -1);
  5230.               stManager._add(f, StaticFiles[f]);
  5231.             }
  5232.           }
  5233.         }
  5234.         if (!StaticFiles[f].l) {
  5235.           nwait.push(f);
  5236.         }
  5237.       }
  5238.       wait = nwait;
  5239.       if (wait.length) {
  5240.         return setTimeout(arguments.callee, 100);
  5241.       }
  5242.       callback();
  5243.     }
  5244.     setTimeout(waiter, 1);
  5245.   },
  5246.   done: function(f) {
  5247.     StaticFiles[f].l = 1;
  5248.   }
  5249. }
  5250.  
  5251. function requestBox(box, onDone, onFail) {
  5252.   box.setOptions({onHide: onFail});
  5253.   box.onDone = function() {
  5254.     box.setOptions({onHide: false});
  5255.     onDone();
  5256.   }
  5257.   return box;
  5258. }
  5259. function activateMobileBox(opts) {
  5260.   return requestBox(showBox('activation.php', {
  5261.     act: 'activate_mobile_box',
  5262.     hash: opts.hash
  5263.   }), function() {
  5264.     vk.nophone = 0;
  5265.     opts.onDone();
  5266.   }, opts.onFail);
  5267. }
  5268.  
  5269. var ajaxCache = {};
  5270. var globalAjaxCache = {};
  5271. var ajax = {
  5272.   _init: function() {
  5273.     var r = false;
  5274.     try {
  5275.       if (r = new XMLHttpRequest()) {
  5276.         ajax._req = function() { return new XMLHttpRequest(); }
  5277.         return;
  5278.       }
  5279.     } catch(e) {}
  5280.     each(['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'], function() {
  5281.       try {
  5282.         var t = '' + this;
  5283.         if (r = new ActiveXObject(t)) {
  5284.           (function(n) {
  5285.             ajax._req = function() { return new ActiveXObject(n); }
  5286.           })(t);
  5287.           return false;
  5288.         }
  5289.       } catch(e) {}
  5290.     });
  5291.     if (!ajax._req) {
  5292.       location.replace('/badbrowser.php');
  5293.     }
  5294.   },
  5295.   _getreq: function() {
  5296.     if (!ajax._req) ajax._init();
  5297.     return ajax._req();
  5298.   },
  5299.   _frameover: function() {
  5300.     var node = iframeTransport.parentNode;
  5301.     node.innerHTML = '';
  5302.     utilsNode.removeChild(node);
  5303.     iframeTransport = false;
  5304.     if (cur.onFrameBlocksDone) {
  5305.       cur.onFrameBlocksDone();
  5306.     }
  5307.   },
  5308.   _receive: function(cont, html, js) {
  5309.     cont = cont && ge(cont);
  5310.     if (cont && html) {
  5311.      html = ce('div', {innerHTML: html});
  5312.       while (html.firstChild) {
  5313.         cont.appendChild(html.firstChild);
  5314.       }
  5315.     }
  5316.     if (js) {
  5317.       eval('(function(){' + js + ';})()');
  5318.     }
  5319.   },
  5320.   framedata: false,
  5321.   framegot: function(c, h, j) {
  5322.     if (ajax.framedata === false) {
  5323.       setTimeout(ajax._receive.pbind(c, h, j), 0);
  5324.     } else {
  5325.       ajax.framedata.push([c, h, j]);
  5326.     }
  5327.   },
  5328.   framepost: function(url, query, done) {
  5329.     if (window.iframeTransport) {
  5330.       ajax._frameover();
  5331.     }
  5332.     window.iframeTransport = utilsNode.appendChild(ce('div', {innerHTML: '<iframe></iframe>'})).firstChild;
  5333.     ajax._framedone = done;
  5334.     iframeTransport.src = url + '?' + ((typeof(query) != 'string') ? ajx2q(query) : query);
  5335.   },
  5336.   plainpost: function(url, query, done, fail) {
  5337.     var r = ajax._getreq();
  5338.     var q = (typeof(query) != 'string') ? ajx2q(query) : query;
  5339.     r.onreadystatechange = function() {
  5340.       if (r.readyState == 4) {
  5341.         if (r.status >= 200 && r.status < 300) {
  5342.          if (done) done(r.responseText, r);
  5343.         } else if (r.status) {
  5344.           if (fail) fail(r.responseText, r);
  5345.         }
  5346.       }
  5347.     }
  5348.     try {
  5349.       r.open('POST', url, true);
  5350.     } catch(e) {
  5351.       topMsg('<b>Ajax Error:</b> ' + e.message);
  5352.     }
  5353.     r.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  5354.     r.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  5355.     r.send(q);
  5356.     return r;
  5357.   },
  5358.   post: function(url, query, options) {
  5359.     if (url.substr(0, 1) != '/') url = '/' + url;
  5360.     var o = extend({_captcha: false, _box: false}, options || {}), q = extend({al: o.frame ? -1 : 1}, query);
  5361.     if (o.progress) {
  5362.       if (!o.showProgress) {
  5363.         o.showProgress = show.pbind(o.progress);
  5364.       }
  5365.       if (!o.hideProgress) {
  5366.         o.hideProgress = hide.pbind(o.progress);
  5367.       }
  5368.     }
  5369.     return ajax._post(url, q, o);
  5370.   },
  5371.   preload: function(url, query, data) {
  5372.     if (url.substr(0, 1) != '/') url = '/' + url;
  5373.     ajaxCache[url + '#' + ajx2q(query)] = data;
  5374.   },
  5375.   _debugLog: function(text) {
  5376.      window._updateDebug = function() {
  5377.        var dlw = ge('debuglogwrap');
  5378.        if (dlw) {
  5379.          dlw.innerHTML = text;
  5380.          window._updateDebug = false;
  5381.        }
  5382.      }
  5383.   },
  5384.   _parseRes: function(answer) {
  5385.     window._updateDebug = false;
  5386.     for (var i = 0; i < answer.length; ++i) {
  5387.      var ans = answer[i];
  5388.      if (ans.substr(0, 2) == '<!') {
  5389.        var from = ans.indexOf('>');
  5390.         var type = ans.substr(2, from - 2);
  5391.         ans = ans.substr(from + 1);
  5392.         switch (type) {
  5393.         case 'json' : answer[i] = eval('(' + ans + ')'); break;
  5394.         case 'int'  : answer[i] = intval(ans); break;
  5395.         case 'float': answer[i] = floatval(ans); break;
  5396.         case 'bool' : answer[i] = intval(ans) ? true : false; break;
  5397.         case 'null' : answer[i] = null; break;
  5398.         case 'debug':
  5399.           ajax._debugLog(ans);
  5400.           answer.pop(); // <!debug> must be last one
  5401.         break;
  5402.         }
  5403.       }
  5404.     }
  5405.   },
  5406.   _post: function(url, q, o) {
  5407.     if (!q.captcha_sid && o.showProgress) o.showProgress();
  5408.     var cacheKey = false;
  5409.     if (o.ads && vk.id) q.al_ad = 1;
  5410.     if (o.cache) {
  5411.       var boldq = clone(q);
  5412.       delete boldq.al;
  5413.       delete boldq.al_ad;
  5414.       delete boldq.captcha_sid;
  5415.       delete boldq.captcha_key;
  5416.       cacheKey = url + '#' + ajx2q(boldq);
  5417.     }
  5418.     var hideBoxes = function() {
  5419.       for (var i = 0; i < arguments.length; ++i) {
  5420.        var box = arguments[i];
  5421.        if (box && box.isVisible()) {
  5422.          box.setOptions({onHide: false});
  5423.          box.hide();
  5424.        }
  5425.      }
  5426.      return false;
  5427.    }
  5428.    var fail = function(text) {
  5429.      if (o.hideProgress) o.hideProgress();
  5430.      if (o._suggest) cleanElems(o._suggest);
  5431.      o._suggest = o._captcha = o._box = hideBoxes(o._box, o._captcha);
  5432.      if (isFunction(o.onFail)) {
  5433.        if (o.onFail(text)) {
  5434.          return;
  5435.        }
  5436.      }
  5437.      topError(text);
  5438.    }
  5439.    // Process response function
  5440.    var processResponse = function(code, answer) {
  5441.      if (o.cache && !o.forceGlobalCache) {
  5442.        if (!code) {
  5443.          ajaxCache[cacheKey] = answer;
  5444.        }
  5445.        if (o.cache === 2) {
  5446.          return;
  5447.        }
  5448.      }
  5449.  
  5450.      // Parse response
  5451.  
  5452.      if (o.hideProgress) o.hideProgress();
  5453.      o._box = hideBoxes(o._box);
  5454.      if (o._captcha && code != 2) {
  5455.        if (o._suggest) cleanElems(o._suggest);
  5456.        o._suggest = o._captcha = hideBoxes(o._captcha);
  5457.      }
  5458.      switch (code) {
  5459.      case 1: // email not confirmed
  5460.        if (ge('confirm_mail')) {
  5461.          showFastBox({
  5462.            width: 430,
  5463.            title: ge('confirm_mail_title').value,
  5464.            onHide: o.onFail
  5465.          }, '<div class="confirm_mail">' + ge('confirm_mail').innerHTML + '</div>');
  5466.         } else {
  5467.           topMsg('<b>Error!</b> Email is not confirmed!');
  5468.         }
  5469.         break;
  5470.       case 2: // captcha
  5471.         var resend = function(sid, key) {
  5472.           var nq = extend(q, {captcha_sid: sid, captcha_key: key});
  5473.           var no = o.cache ? extend(o, {cache: -1}) : o;
  5474.           ajax._post(url, nq, no);
  5475.         }
  5476.         var addText = '';
  5477.         if (vk.nophone == 1 && !vk.nomail) {
  5478.          addText = getLang('global_try_to_activate').replace('{link}', '<a class="phone_validation_link">').replace('{/link}', '</a>');
  5479.           addText = '<div class="phone_validation_suggest">' + addText + '</div>';
  5480.         }
  5481.         o._captcha = showCaptchaBox(answer[0], intval(answer[1]), o._captcha, {
  5482.           onSubmit: resend,
  5483.           addText: addText,
  5484.           onHide: function() {
  5485.             if (o.onFail) o.onFail();
  5486.           }
  5487.         });
  5488.         o._suggest = geByClass1('phone_validation_link', o._captcha.bodyNode);
  5489.         if (o._suggest) {
  5490.           addEvent(o._suggest, 'click', function() {
  5491.             o._box = activateMobileBox({onDone: o._captcha.submit});
  5492.           });
  5493.         }
  5494.         break;
  5495.       case 3: // auth failed
  5496.         var no = o.cache ? extend(o, {cache: -1}) : o;
  5497.         window.onReLoginDone = ajax._post.pbind(url, q, no);
  5498.         window.onReLoginFailed = function(toRoot) {
  5499.           if (toRoot) {
  5500.             nav.go('/');
  5501.           } else {
  5502.             window.onReLoginDone();
  5503.           }
  5504.         }
  5505.         var iframe = ce('iframe', {src: 'http://login.vk.com/?al_frame=1&from_host=' + locHost}), t = 0;
  5506.         utilsNode.appendChild(iframe);
  5507.         break;
  5508.       case 4: // redirect
  5509.         if (answer[1]) { // ajax layout redirect
  5510.           nav.go(answer[0]);
  5511.         } else {
  5512.           hab.stop();
  5513.           location.href = answer[0];
  5514.         }
  5515.         break;
  5516.       case 5: // reload
  5517.         nav.reload({force: intval(answer[0])}); // force reload
  5518.         break;
  5519.       case 6: // mobile activation needed
  5520.         var no = o.cache ? extend(o, {cache: -1}) : o;
  5521.         o._box = activateMobileBox({onDone: ajax._post.pbind(url, q, no), onFail: o.onFail, hash: answer[0]});
  5522.         break;
  5523.       case 7: // message
  5524.         if (o.onFail) o.onFail();
  5525.         topMsg(answer[0], 10);
  5526.         break;
  5527.       case 8: // error
  5528.         if (o.onFail) {
  5529.           if (o.onFail(answer[0])) {
  5530.             return;
  5531.           }
  5532.         }
  5533.         topError(answer[0], answer[1] ? 0 : 10);
  5534.         break;
  5535.       case 9: // votes payment
  5536.         o._box = showFastBox(answer[0], answer[1]);
  5537.         var no = extend(clone(o), {showProgress: o._box.showProgress, hideProgress: o._box.hideProgress});
  5538.         if (o.cache) {
  5539.           no.cache = -1;
  5540.         }
  5541.         o._box = requestBox(o._box, function() {
  5542.           if (isVisible(o._box.progress)) return;
  5543.           ajax._post(url, extend(q, {_votes_ok: 1}), no);
  5544.         }, o.onFail);
  5545.         var f = eval('((function() { return function() { var box = this; ' + (answer[2] || '') + ' ;}; })())');
  5546.         f.apply(o._box);
  5547.         break;
  5548.       case 10: //zero zone
  5549.         o._box = showFastBox({
  5550.           title: answer[0] || getLang('global_charged_zone_title'),
  5551.           onHide: o.onFail
  5552.         }, answer[1], getLang('global_charged_zone_continue'), function() {
  5553.           var nq = extend(q, {charged_confirm: answer[3]});
  5554.           ajax._post(url, nq, o);
  5555.         }, getLang('global_cancel'));
  5556.         break;
  5557.       default:
  5558.         if (code == -1) {
  5559.           var ad = answer.pop();
  5560.           if (vk.id) {
  5561.             bnr1.data = false;
  5562.             hide('banner1');
  5563.             var la = ge('left_ads');
  5564.             if (la) la.parentNode.removeChild(la);
  5565.             ge('left_blocks').appendChild(ce('div', {id: 'left_ads', innerHTML: ad}));
  5566.           }
  5567.         }
  5568.         if (o.onDone) { // page, box or other
  5569.           o.onDone.apply(window, answer);
  5570.         }
  5571.         break;
  5572.       }
  5573.       if (window._updateDebug) _updateDebug();
  5574.     }
  5575.     var done = function(text, data) { // data - for iframe transport post
  5576.       if (!trim(text).length) {
  5577.         data = [8, getLang('global_unknown_error')];
  5578.         text = stVersions['nav'] + '<!><!>' + vk.lang + '<!>' + stVersions['lang'] + '<!>8<!>' + data[1];
  5579.       }
  5580.  
  5581.       var answer = text.split('<!>');
  5582.  
  5583.       var navVersion = intval(answer.shift());
  5584.       if (!navVersion) {
  5585.         return fail(text);
  5586.       }
  5587.  
  5588.       // First strict check for index.php reloading, in vk.al == 1 mode.
  5589.       if (vk.version && vk.version != navVersion) {
  5590.        if (navVersion && answer.length > 4) {
  5591.          nav.reload({force: true});
  5592.         } else {
  5593.           if (nav.strLoc) {
  5594.             location.replace(locBase);
  5595.           } else {
  5596.             topError('Server error.');
  5597.           }
  5598.         }
  5599.         return;
  5600.       }
  5601.       vk.version = false;
  5602.  
  5603.       // Common response fields
  5604.       var newStatic = answer.shift();
  5605.       var langId = intval(answer.shift());
  5606.       var langVer = intval(answer.shift());
  5607.  
  5608.       if (o.frame) answer = data;
  5609.  
  5610.       var code = intval(answer.shift());
  5611.       if (vk.lang != langId && o.canReload) { // Lang changed
  5612.        nav.reload({force: true});
  5613.         return;
  5614.       }
  5615.  
  5616.       // Wait for attached static files
  5617.       var waitResponseStatic = function() {
  5618.         var st = ['common.css'];
  5619.         if (browser.msie6) {
  5620.           st.push('ie6.css');
  5621.         } else if (browser.msie7) {
  5622.           st.push('ie7.css');
  5623.         }
  5624.         if (newStatic) {
  5625.           newStatic = newStatic.split(',');
  5626.           for (var i = 0; i < newStatic.length; ++i) {
  5627.            st.push(newStatic[i]);
  5628.          }
  5629.        }
  5630.        if (stVersions['lang'] < langVer) {
  5631.          stVersions['lang'] = langVer;
  5632.          for (var i in StaticFiles) {
  5633.            if (/^lang\d/i.test(i)) {
  5634.              st.push(i);
  5635.            }
  5636.          }
  5637.        }
  5638.  
  5639.        if (!o.frame) {
  5640.          try {
  5641.            ajax._parseRes(answer);
  5642.          } catch(e) {
  5643.            topError('<b>JSON Error:</b> ' + e.message);
  5644.           }
  5645.         }
  5646.         stManager.add(st, processResponse.pbind(code, answer));
  5647.       }
  5648.  
  5649.       // Static managing function
  5650.       if (navVersion <= stVersions['nav']) {
  5651.        return waitResponseStatic();
  5652.      }
  5653.      headNode.appendChild(ce('script', {
  5654.        type: 'text/javascript',
  5655.        src: '/al_loader.php?act=nav&v=' + navVersion
  5656.      }));
  5657.      setTimeout(function() {
  5658.        if (navVersion <= stVersions['nav']) {
  5659.          return waitResponseStatic();
  5660.        }
  5661.        setTimeout(arguments.callee, 100);
  5662.      }, 0);
  5663.    }
  5664.    if (o.cache > 0 || o.forceGlobalCache) {
  5665.       var answer = ajaxCache[cacheKey];
  5666.       if (answer && !o.forceGlobalCache) {
  5667.        processResponse(0, answer);
  5668.         return;
  5669.       } else if (answer = globalAjaxCache[cacheKey]) {
  5670.         if (answer == -1) {
  5671.           globalAjaxCache[cacheKey] = o.onDone;
  5672.         } else {
  5673.           o.onDone.apply(window, answer);
  5674.         }
  5675.         return;
  5676.       }
  5677.     }
  5678.     return o.frame ? ajax.framepost(url, q, done) : ajax.plainpost(url, q, done, fail);
  5679.   }
  5680. }
  5681. function HistoryAndBookmarks(params) {
  5682.   // strict check for cool hash display in ff.
  5683.   var fixEncode = function(loc) {
  5684.     var l = loc.split('?');
  5685.     return l[0] + (l[1] ? ('?' + ajx2q(q2ajx(l[1]))) : '');
  5686.   }
  5687.  
  5688.   if (locHash.charAt(0) == '#') {
  5689.     location.hash = '#' + vk.navPrefix + locHash.replace(/^#/, '');
  5690.   }
  5691.  
  5692.   var frame = null, withFrame = browser.msie6 || browser.msie7;
  5693.   var frameDoc = function() {
  5694.     return frame.contentDocument || (frame.contentWindow ? frame.contentWindow.document : frame.document);
  5695.   }
  5696.  
  5697.   var options = extend({onLocChange: function() {}}, params);
  5698.  
  5699.   var getLoc = function(skipFrame) {
  5700.     var loc = '';
  5701.     if (withFrame && !skipFrame) {
  5702.      try {
  5703.        loc = frameDoc().getElementById('loc').innerHTML.replace(/&lt;/ig, '<').replace(/&gt;/ig, '>').replace(/&quot;/ig, '"').replace(/&amp;/ig, '&');
  5704.       } catch(e) {
  5705.         loc = curLoc;
  5706.       }
  5707.     } else {
  5708.       loc = browser.msie6 ? ((location.toString().match(/#(.*)/) || {})[1] || '') : location.hash.replace(/^#/, '');
  5709.       if (loc.substr(0, 1) != '!' && vk.navPrefix == '!') {
  5710.        loc = (location.pathname || '') + (location.search || '');
  5711.       }
  5712.     }
  5713.     if (!loc && vk.al > 1) {
  5714.      loc = (location.pathname || '') + (location.search || '');
  5715.     }
  5716.     return fixEncode(loc.replace(/^(\/|!)/, ''));
  5717.   }
  5718.  
  5719.   var curLoc = getLoc(true);
  5720.  
  5721.   var setFrameContent = function(loc) {
  5722.     try {
  5723.       var d = frameDoc();
  5724.       d.open();
  5725.  
  5726.       d.write('<script type="text/javascript">var u=navigator.userAgent,d=location.host.toString().match(/[a-zA-Z]+\\.[a-zA-Z]+$/)[0];if(/opera/i.test(u)||!/msie 6/i.test(u)||document.domain!=d)document.domain=d;</script>' +
  5727.         '<div id="loc">' +
  5728.           loc.replace('&', '&amp;').replace('"', '&quot;').replace('>', '&gt;').replace('<', '&lt;') +
  5729.        '</div>'
  5730.       );
  5731.  
  5732.       d.close();
  5733.     } catch(e) {}
  5734.   }
  5735.  
  5736.   var setLoc = function(loc) {
  5737.     curLoc = fixEncode(loc.replace(/#(\/|!)?/, ''));
  5738.     var l = (location.toString().match(/#(.*)/) || {})[1] || '';
  5739.     if (vk.al > 1) {
  5740.       if (!l) {
  5741.         l = (location.pathname || '') + (location.search || '');
  5742.       }
  5743.     }
  5744.     l = fixEncode(l);
  5745.  
  5746.     if (l.replace(/^(\/|!)/, '') != curLoc) {
  5747.       if (vk.al == 3) {
  5748.         try {
  5749.           history.pushState({}, '', '/' + curLoc);
  5750.           return;
  5751.         } catch(e) {}
  5752.       }
  5753.       window.chHashFlag = true;
  5754.       location.hash = '#' + vk.navPrefix + curLoc;
  5755.       if (withFrame && getLoc() != curLoc) {
  5756.        setFrameContent(curLoc);
  5757.       }
  5758.     }
  5759.   }
  5760.  
  5761.   var locChecker = function() {
  5762.     var loc = getLoc(true);
  5763.     if (loc != curLoc) {
  5764.       if (browser.msie6) {
  5765.         location.reload(true);
  5766.       } else {
  5767.         setFrameContent(loc);
  5768.       }
  5769.     }
  5770.   }
  5771.  
  5772.   var checker = function(force) {
  5773.     var l = getLoc();
  5774.     if (l == curLoc && force !== true) {
  5775.      return;
  5776.     }
  5777.  
  5778.     options.onLocChange(l);
  5779.  
  5780.     curLoc = l;
  5781.     if (withFrame && location.hash.replace('#' + vk.navPrefix, '') != l) {
  5782.      location.hash = '#' + vk.navPrefix + l;
  5783.     }
  5784.   }
  5785.   var checkTimer;
  5786.   var frameChecker = function() {
  5787.     try {
  5788.       if (frame.contentWindow.document.readyState != 'complete') {
  5789.         return;
  5790.       }
  5791.     } catch(e) {
  5792.       return;
  5793.     }
  5794.     checker();
  5795.   }
  5796.   var init = function() {
  5797.     if (vk.al == 1) {
  5798.       checker(true);
  5799.     }
  5800.     if (vk.al < 3) {
  5801.      if (withFrame) {
  5802.        frame = document.createElement('iframe');
  5803.        frame.id = 'hab_frame';
  5804.        frame.attachEvent('onreadystatechange', frameChecker);
  5805.        frame.src = 'al_loader.php?act=hab_frame&loc=' + encodeURIComponent(curLoc);
  5806.  
  5807.        utilsNode.appendChild(frame);
  5808.  
  5809.        checkTimer = setInterval(locChecker, 200);
  5810.      } else {
  5811.        if ('onhashchange' in window) {
  5812.          addEvent(window, 'hashchange', function() {
  5813.            if (window.chHashFlag) {
  5814.              window.chHashFlag = false;
  5815.            } else {
  5816.              checker();
  5817.            }
  5818.          });
  5819.        } else {
  5820.          checkTimer = setInterval(checker, 200);
  5821.        }
  5822.      }
  5823.    } else if (vk.al == 3) {
  5824.      addEvent(window, 'popstate', checker);
  5825.    }
  5826.  }
  5827.  
  5828.  return {
  5829.    setLoc: setLoc,
  5830.    getLoc: getLoc,
  5831.    init: init,
  5832.    setOptions: function(params) {
  5833.      options = extend(options, params);
  5834.    },
  5835.    checker: checker,
  5836.    stop: function() {
  5837.      if (vk.al < 3) {
  5838.        clearInterval(checkTimer);
  5839.        if (withFrame) {
  5840.          frame.detachEvent('onreadystatechange', frameChecker);
  5841.        }
  5842.      } else if (vk.al == 3) {
  5843.        removeEvent(window, 'popstate', checker);
  5844.      }
  5845.    }
  5846.  }
  5847. }
  5848.  
  5849. window.hab = new HistoryAndBookmarks({onLocChange: function(loc) {
  5850.  nav.go('/' + loc, undefined, {back: true});
  5851. }});
  5852.  
  5853. function checkEvent(e) {
  5854.  return (e && (e.which > 1 || e.button > 1 || e.ctrlKey));
  5855. }
  5856.  
  5857. function leftBlockOver(block) {
  5858.   var timer = 'timer', over = 1;
  5859.   if (!block.id) {
  5860.     block = ge('left_hide' + block);
  5861.     over = 0;
  5862.   }
  5863.   if (over || !block.timer) {
  5864.     if (block.showing) {
  5865.       removeAttr(block, 'showing');
  5866.     } else {
  5867.       animate(block, {opacity: over ? 1 : 0.5}, 200);
  5868.       if (over) {
  5869.         block.showing = 1;
  5870.       }
  5871.     }
  5872.   }
  5873.   if (block.timer) {
  5874.     clearTimeout(block.timer);
  5875.     removeAttr(block, 'timer');
  5876.   }
  5877. }
  5878. function leftBlockOut(block) {
  5879.   var opacity = 0.5;
  5880.   if (!block.id) {
  5881.     block = ge('left_hide' + block);
  5882.     opacity = 0;
  5883.   }
  5884.   block.timer = setTimeout(function() {
  5885.     animate(block, {opacity: opacity}, 200);
  5886.     removeAttr(block, 'timer');
  5887.   }, 1);
  5888. }
  5889. function leftBlockHide(block, hash) {
  5890.   ajax.post('al_index.php', {act: 'hide_block', block: block, hash: hash});
  5891.   hide('left_block' + block);
  5892. }
  5893. function leftAdBlockHide(blockId, url) {
  5894.   ajax.post(url, {}, {onDone: function(response) {
  5895.     if (!response.done) return;
  5896.  
  5897.     var box = ge('ad_box' + blockId);
  5898.     var mask = ge('ad_hide_mask' + blockId);
  5899.  
  5900.     if (!box || !mask) return false;
  5901.  
  5902.     mask.timer = setTimeout(function() {
  5903.       animate(mask, {opacity: 1}, 200);
  5904.       delete mask.timer;
  5905.     }, 0);
  5906.     var x = getXY(box), s = getSize(box), btop = 1, bbot = 1;
  5907.     if (box.style.borderTop == '0px') {
  5908.       btop = 0;
  5909.     }
  5910.     if (btop) {
  5911.       s[1] -= btop;
  5912.     }
  5913.     if (bbot) {
  5914.       s[1] -= bbot;
  5915.     }
  5916.  
  5917.     var textH = (mask.firstChild.nextSibling === null) ? 40 : 108;
  5918.     var padtop;
  5919.     if (s[1] < textH + 10) {
  5920.      s[1] = textH + 10;
  5921.      padtop = Math.floor((s[1] - textH) / 2);
  5922.      box.style.height = s[1] - 6 - padtop + 'px';
  5923.    }
  5924.    var padtop = Math.floor((s[1] - textH) / 2);
  5925.    setStyle(mask, {left: 4 /* x[0] */, top: x[1], height: s[1] - padtop, paddingTop: padtop, display: 'block'});
  5926.  }});
  5927.  
  5928.  
  5929.  var hideX = ge('left_hide' + blockId);
  5930.  if (hideX && hideX.parentNode) {
  5931.    hideX.parentNode.removeChild(hideX);
  5932.  }
  5933.  
  5934.  return false;
  5935. }
  5936.  
  5937. function updateAdsCounters(ad) {
  5938.  if (vk.zero) return;
  5939.  
  5940.  (new Image()).src = 'http://www.tns-counter.ru/V13a***R>' + document.referrer.replace(/\*/g,'%2a') + '*vkontakte_ru/ru/UTF-8/tmsec=' + (vk.intnat ? 'vk' : 'vkontakte') + '_total/' + Math.round(Math.random() * 1000000000);
  5941.   (new Image()).src = 'http://counter.yadro.ru/hit?r' + escape(document.referrer) + (window.screen === undefined ? '' : ';s' + screen.width + '*' + screen.height + '*' + (screen.colorDepth ? screen.colorDepth : screen.pixelDepth)) + ';u' + escape(document.URL) + ';' + Math.random() + '';
  5942.  
  5943.   if (!ad) {
  5944.     hide('banner1', 'banner2');
  5945.   }
  5946.  
  5947.   bnr1.data = ad ? extend(clone(ad), {p1: ad.lp1, p2: ad.lp2}) : false;
  5948.   bnr2.data = ad ? extend(clone(ad), {p1: ad.bp1, p2: ad.bp2}) : false;
  5949.   bnr1.update();
  5950.   bnr2.update();
  5951.   onBodyScroll();
  5952. }
  5953. function handlePageParams(params) {
  5954.   vk.id = positive(params.id);
  5955.  
  5956.   if (vk.noleftmenu && !params.noleftmenu) {
  5957.    ge('page_body').className = ge('footer_wrap').className = 'fl_r';
  5958.     show('side_bar');
  5959.   } else if (!vk.noleftmenu && params.noleftmenu) {
  5960.    hide('side_bar');
  5961.     ge('page_body').className = ge('footer_wrap').className = 'simple';
  5962.   }
  5963.   vk.noleftmenu = params.noleftmenu;
  5964.  
  5965.   if (vk.notopmenu && !params.notopmenu) {
  5966.    show('quick_search', 'top_links', 'qsearch_border', 'bottom_nav');
  5967.   } else if (!vk.notopmenu && params.notopmenu) {
  5968.    hide('quick_search', 'top_links', 'qsearch_border', 'bottom_nav');
  5969.   }
  5970.   vk.notopmenu = params.notopmenu;
  5971.  
  5972.   var confMail = ge('confirm_mail_wrap'), chPhone = ge('change_phone_wrap');
  5973.   if (confMail) {
  5974.     if (!params.nomail) {
  5975.       confMail.parentNode.removeChild(confMail);
  5976.     } else if (params.notopbars) {
  5977.       hide(confMail);
  5978.     } else {
  5979.       show(confMail);
  5980.     }
  5981.   }
  5982.   vk.nomail = params.nomail;
  5983.   if (chPhone) {
  5984.     if (!params.chphone) {
  5985.       chPhone.parentNode.removeChild(chPhone);
  5986.     } else if (params.notopbars) {
  5987.       hide(chPhone);
  5988.     } else {
  5989.       show(chPhone);
  5990.     }
  5991.   }
  5992.  
  5993.   vk.nophone = intval(params.nophone);
  5994.  
  5995.   if (vk.id) {
  5996.     ge('left_blocks').innerHTML = (params.leftblocks || '');
  5997.   }
  5998.  
  5999.   setTimeout(updateAdsCounters.pbind(params.ad), 10);
  6000.  
  6001.   if (!params.counters) return;
  6002.   var cnts = (params.counters || '').split(',');
  6003.  
  6004.   var i = 0, sep = false, sh = false, ids = ['fr', 'ph', 'vid', 'msg', 'nts', 'gr', 'ev', 'wsh', 'mat', 'op', 'ap', 'ques', 'ads', 'nws'];
  6005.   var lnks = ['friends', 'albums' + vk.id, 'video', 'mail', 'notes', 'groups.php', 'events.php', 'gifts.php?act=wishlist', 'matches.php', 'opinions.php', 'apps.php', 'questions.php', 'ads.php?act=office', 'feed'];
  6006.   var adds = ['', 'act=added', 'section=tagged', '', 'act=comments', '', '', '', '', '', 'act=notifications', '', '', 'section=mentions'];
  6007.   var allnks = [1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1];
  6008.  
  6009.   if (vk.counts === undefined) {
  6010.     vk.counts = {};
  6011.   }
  6012.   if (vk.al_video) {
  6013.     lnks[2] = 'video';
  6014.     allnks[2] = 1;
  6015.     adds[2] = 'section=tagged';
  6016.   }
  6017.   if (vk.default_im) {
  6018.     lnks[3] = 'im';
  6019.   }
  6020.  
  6021.   for (; i < 14; ++i) {
  6022.    if (vk.counts[i] === cnts[i]) {
  6023.      continue;
  6024.    }
  6025.  
  6026.    vk.counts[i] = cnts[i];
  6027.  
  6028.    var v = intval(cnts[i]), e = ge('l_' + ids[i]);
  6029.    if (i == 8) {
  6030.      sep = e.previousSibling;
  6031.    } else if (i == 3) {
  6032.      ge('top_new_msg').innerHTML = (v > 0) ? (' &nbsp;<b>(</b><span>' + v + '</span><b>)</b>') : '';
  6033.     }
  6034.  
  6035.     if (v < 0) {
  6036.      hide(e);
  6037.    } else {
  6038.      geByTag1('span', e.firstChild).innerHTML = v ? ('(<b>' + v + '</b>)') : '';
  6039.       if (i != 7) {
  6040.         e.firstChild.href = '/' + lnks[i] + ((v && adds[i]) ? ('?' + adds[i]) : '');
  6041.         e.firstChild.onclick = (allnks[i] ? function (ev) { return nav.go(this, ev);} : null);
  6042.       } else {
  6043.         e.firstChild.href = '/' + (v ? ('gifts.php?act=wish&wish=' + vk.id + '_' + intval(cnts[i].split(':')[1])) : lnks[i]);
  6044.       }
  6045.       show(e);
  6046.     }
  6047.   }
  6048.  
  6049.   for (var e = sep.nextSibling; e; e = e.nextSibling) {
  6050.     if (e.tagName && e.tagName.toLowerCase() == 'li' && isVisible(e)) {
  6051.      sh = true;
  6052.       break;
  6053.     }
  6054.   }
  6055.   (sh ? show : hide)(sep);
  6056.   for (; i < cnts.length; ++i) {
  6057.    var id_v = cnts[i].split(':'), e = ge('l_app' + intval(id_v[0]));
  6058.    if (!e) continue;
  6059.    geByTag1('span', e.firstChild).innerHTML = intval(id_v[1]) ? ('(<b>' + intval(id_v[1]) + '</b>)') : '';
  6060.   }
  6061.  
  6062. }
  6063.  
  6064. function processDestroy(c) {
  6065.   if (c._back && c._back.hide && c == cur) {
  6066.    for (var i in c._back.hide) {
  6067.      try {c._back.hide[i]();}catch(e){}
  6068.     }
  6069.   }
  6070.   if (!c.destroy || !c.destroy.length) return;
  6071.   for (var i in c.destroy) {
  6072.     try {c.destroy[i](c);}catch(e){}
  6073.   }
  6074. }
  6075.  
  6076. var globalHistory = [];
  6077. function showSideBackLink(loc, text, check) {
  6078.   if (loc && check) {
  6079.    var i = 0, l = globalHistory.length;
  6080.     for (; i < l; ++i) {
  6081.      if (globalHistory[i].loc == loc) {
  6082.        break;
  6083.      }
  6084.    }
  6085.    if (i == l) {
  6086.      loc = false;
  6087.    }
  6088.  }
  6089.  _tbLink.loc = loc;
  6090.  if (loc) {
  6091.    extend(_tbLink, {href: '/' + loc, innerHTML: text});
  6092.    show(_tbLink);
  6093.  } else {
  6094.    hide(_tbLink);
  6095.  }
  6096.  show(_sbLink);
  6097.  updSideBackLink();
  6098. }
  6099. var nav = {
  6100.  getData: function(loc) {
  6101.    if (loc.length) {
  6102.      for (var i in navMap) {
  6103.        if (i[0] == '<') continue;
  6104.        var m = loc.match(new RegExp('^' + i, 'i'));
  6105.        if (m) {
  6106.          return {url: navMap[i][0], files: navMap[i][1]};
  6107.        }
  6108.      }
  6109.      var m = loc.match(/^[a-z0-9\-_]+\.php$/i);
  6110.      if (m) {
  6111.        return {url: loc};
  6112.      }
  6113.      return {url: navMap['<other>'][0], files: navMap['<other>'][1]};
  6114.     }
  6115.     return {url: navMap['<void>'][0], files: navMap['<void>'][1]};
  6116.   },
  6117.   reload: function(opts) {
  6118.     opts = opts || {};
  6119.     if (opts.force) {
  6120.       hab.stop();
  6121.       location.href = '/' + nav.strLoc;
  6122.     } else {
  6123.       nav.go('/' + nav.strLoc, undefined, extend({nocur: true}, opts));
  6124.     }
  6125.   },
  6126.   go: function(loc, ev, opts) {
  6127.     if (checkEvent(ev)) return;
  6128.     if (loc.tagName && loc.tagName.toLowerCase() == 'a' && loc.href) {
  6129.      loc = loc.href;
  6130.     }
  6131.     var strLoc = '', objLoc = {};
  6132.     if (typeof(loc) == 'string') {
  6133.       loc = loc.replace(new RegExp('^(http://' + locHost + ')?/?', 'i'), '');
  6134.       strLoc = loc;
  6135.       objLoc = nav.fromStr(loc);
  6136.     } else {
  6137.       if (!loc[0]) loc[0] = '';
  6138.       strLoc = nav.toStr(loc);
  6139.       objLoc = loc;
  6140.     }
  6141.  
  6142.     if (window.audioPlayer && audioPlayer.id) {
  6143.      if (objLoc[0] != 'audio' && objLoc[0] != 'al_audio.php' || nav.objLoc[0] != 'audio' && nav.objLoc[0] != 'al_audio.php') {
  6144.        audioPlayer.stop();
  6145.       }
  6146.     }
  6147.     if (isVisible(ge('gp'))) {
  6148.       if (objLoc[0] != 'audio' && objLoc[0] != 'al_audio.php' || nav.objLoc[0] != 'audio' && nav.objLoc[0] != 'al_audio.php') {
  6149.        toggleGlobalPlayer(false);
  6150.       }
  6151.     }
  6152.     opts = opts || {};
  6153.     if (!opts.nocur) {
  6154.       var changed = clone(objLoc);
  6155.       for (var i in nav.objLoc) {
  6156.         if (nav.objLoc[i] == changed[i]) {
  6157.           delete(changed[i]);
  6158.         } else if (changed[i] === undefined) {
  6159.           changed[i] = false;
  6160.         }
  6161.       }
  6162.       if (zNav(clone(changed)) === false) {
  6163.         return false;
  6164.       }
  6165.       for (var i in (cur.nav || {})) {
  6166.         if (cur.nav[i](clone(changed), nav.objLoc, objLoc, opts) === false) {
  6167.           return false;
  6168.         }
  6169.       }
  6170.     }
  6171.     if (vk.al == 4) {
  6172.       location.href = '/' + strLoc;
  6173.       return false;
  6174.     }
  6175.     if (opts.back) {
  6176.       for (var i = 0, l = globalHistory.length; i < l; ++i) {
  6177.        if (globalHistory[i].loc == strLoc) {
  6178.          var h = globalHistory.splice(i, 1)[0];
  6179.          var wNode = ge('wrap3'), tNode = ge('title');
  6180.  
  6181.          if (window.tooltips) tooltips.destroyAll();
  6182.          processDestroy(cur);
  6183.          radioBtns = h.radioBtns;
  6184.          ajaxCache = h.ajaxCache;
  6185.          boxQueue.hideAll();
  6186.          if (layers.fullhide) layers.fullhide(true);
  6187.          hide(_sbLink, _tbLink);
  6188.  
  6189.          cur = h.cur;
  6190.          if (gSearch.on) gSearch.hide();
  6191.          setTimeout(function() {
  6192.            wNode.innerHTML = '';
  6193.            wNode.parentNode.replaceChild(h.content, wNode);
  6194.            scrollNode.scrollTop = h.scrollTop;
  6195.            document.title = h.htitle;
  6196.            tNode.innerHTML = h.title;
  6197.            setStyle(tNode.parentNode, 'display', h.hideHeader ? 'none' : 'block');
  6198.            for (var i = 0, l = cur._back.show.length; i < l; ++i) cur._back.show[i]();
  6199.            nav.setLoc(strLoc);
  6200.            var b = h.back || {};
  6201.            setTimeout(showSideBackLink.pbind(b[0], b[1], true), 10);
  6202.          }, 20);
  6203.          return false;
  6204.        }
  6205.      }
  6206.    }
  6207.  
  6208.    var dest = objLoc[0];
  6209.    delete(objLoc[0]);
  6210.  
  6211.    var where = nav.getData(dest);
  6212.    if (where.files) {
  6213.      stManager.add(where.files);
  6214.    }
  6215.    where.params = extend({__query: dest, al_id: vk.id}, objLoc);
  6216.    var done = function(title, html, js, params) {
  6217.      if (stVersions['common.js'] > StaticFiles['common.js'].v) {
  6218.         nav.setLoc(params.loc || '');
  6219.         location.reload(true);
  6220.         return;
  6221.       }
  6222.       var newPage = (where.params.al_id === undefined) || (where.params.al_id != params.id);
  6223.       var _back = (strLoc != (cur._back || {}).loc) && cur._back, wNode = ge('wrap3'), tNode = ge('title'), hist = false;
  6224.  
  6225.       if (window.tooltips) tooltips.destroyAll();
  6226.       if (gSearch.on) gSearch.hide();
  6227.       if (_back && !newPage) {
  6228.        hist = {
  6229.          loc: _back.loc || nav.strLoc,
  6230.          cur: cur,
  6231.          radioBtns: radioBtns,
  6232.          ajaxCache: ajaxCache,
  6233.          scrollTop: scrollNode.scrollTop,
  6234.          htitle: document.title.toString(),
  6235.          back: _tbLink.loc ? [_tbLink.loc, _tbLink.innerHTML] : false
  6236.        };
  6237.         if (tNode && tNode.parentNode && !isVisible(tNode.parentNode)) {
  6238.          hist.hideHeader = true;
  6239.         }
  6240.         for (var i = 0, l = globalHistory.length; i < l; ++i) {
  6241.          if (globalHistory[i].loc == hist.loc) {
  6242.            var h = globalHistory.splice(i, 1)[0];
  6243.            processDestroy(h.cur);
  6244.            h.content.innerHTML = '';
  6245.            --i; --l;
  6246.          }
  6247.        }
  6248.        if (globalHistory.length > 2) {
  6249.           var h = globalHistory.shift();
  6250.           processDestroy(h.cur);
  6251.           h.content.innerHTML = '';
  6252.         }
  6253.         for (var i = 0, l = cur._back.hide.length; i < l; ++i) cur._back.hide[i]();
  6254.        showSideBackLink(hist.loc, _back.text);
  6255.      } else {
  6256.        processDestroy(cur);
  6257.        if (globalHistory.length) {
  6258.          var h = globalHistory.shift();
  6259.          processDestroy(h.cur);
  6260.          h.content.innerHTML = '';
  6261.        }
  6262.        showSideBackLink();
  6263.      }
  6264.      radioBtns = {};
  6265.      ajaxCache = {};
  6266.      boxQueue.hideAll();
  6267.      if (layers.fullhide) layers.fullhide(true);
  6268.  
  6269.      cur = {destroy: [], nav: []};
  6270.      if (newPage) {
  6271.        cleanElems('quick_login_button', 'quick_expire', 'search_form', 'top_links', 'bottom_nav')
  6272.        while(globalHistory.length) processDestroy(globalHistory.shift().cur);
  6273.        pageNode.innerHTML = html;
  6274.        if (!browser.mobile) onBodyResize(true);
  6275.      } else {
  6276.        if (_back) {
  6277.          var newW = ce('div', {id: 'wrap3'});
  6278.          extend(hist, {
  6279.            content: wNode.parentNode.replaceChild(newW, wNode),
  6280.            title: tNode.innerHTML
  6281.          });
  6282.          globalHistory.push(hist);
  6283.          wNode = newW;
  6284.        }
  6285.        wNode.innerHTML = html;
  6286.        tNode.innerHTML = title;
  6287.        (title ? show : hide)(tNode.parentNode);
  6288.      }
  6289.      handlePageParams(params);
  6290.  
  6291.      if (!opts.noscroll && !params.noscroll) scrollToTop(0);
  6292.      var wide = window.wideLayout;
  6293.      window.wideLayout = false;
  6294.      eval('(function(){' + js + ';})()');
  6295.      if (wide && !window.wideLayout) {
  6296.        ge('page_layout').style.width = '791px';
  6297.        ge('page_body').style.width = '631px';
  6298.      }
  6299.  
  6300.      for (var i = 0, l = ajax.framedata.length; i < l; ++i) {
  6301.        var d = ajax.framedata[i];
  6302.        setTimeout(ajax._receive.pbind(d[0], d[1], d[2]), 0);
  6303.      }
  6304.      ajax.framedata = false;
  6305.  
  6306.      if (browser.mobile) onBodyResize();
  6307.      setTimeout(nav.setLoc.pbind(params.loc || ''), browser.chrome ? 100 : 50);
  6308.    }
  6309.    ajax.post(where.url, where.params, {onDone: function() {
  6310.      var a = arguments;
  6311.      if (__debugMode) {
  6312.        done.apply(null, a);
  6313.      } else try {
  6314.        done.apply(null, a);
  6315.      } catch (e) {
  6316.        topError(e, 15);
  6317.      }
  6318.    }, onFail: opts.onFail || function(text) {
  6319.      if (!text) return;
  6320.  
  6321.      setTimeout(showFastBox(getLang('global_error'), text).hide, 2000);
  6322.      return true;
  6323.    }, frame: opts.noframe ? 0 : 1, canReload: true, showProgress: showTitleProgress, hideProgress: hideTitleProgress, cache: opts.search ? 1 : ''});
  6324.    return false;
  6325.  },
  6326.  setLoc: function(loc) {
  6327.    if (typeof(loc) == 'string') {
  6328.      nav.strLoc = loc;
  6329.      nav.objLoc = nav.fromStr(loc);
  6330.    } else {
  6331.      nav.strLoc = nav.toStr(loc);
  6332.      nav.objLoc = loc;
  6333.    }
  6334.    hab.setLoc(nav.strLoc);
  6335.  },
  6336.  change: function(loc, ev, opts) {
  6337.    var params = clone(nav.objLoc);
  6338.    each(loc, function(i,v) {
  6339.      if (v === false) {
  6340.        delete params[i];
  6341.      } else {
  6342.        params[i] = v;
  6343.      }
  6344.    });
  6345.    return nav.go(params, ev, opts);
  6346.  },
  6347.  fromStr: function(str) {
  6348.    var res = str.split('?');
  6349.    return extend(q2ajx(res[1] || ''), {'0': res[0] || ''});
  6350.  },
  6351.  toStr: function(obj) {
  6352.    obj = clone(obj);
  6353.    var res = obj[0] || '';
  6354.    delete(obj[0]);
  6355.    var str = ajx2q(obj);
  6356.    return str ? (res + '?' + str) : res;
  6357.  },
  6358.  init: function() {
  6359.    nav.strLoc = hab.getLoc();
  6360.    nav.objLoc = nav.fromStr(nav.strLoc);
  6361.  }
  6362. }
  6363. nav.init();
  6364.  
  6365. /**
  6366. * Cookies
  6367. **/
  6368.  
  6369. var _cookies;
  6370. function _initCookies() {
  6371.  _cookies = {};
  6372.  var ca = document.cookie.split(';');
  6373.  var re = /^[\s]*([^\s]+?)$/i;
  6374.  for (var i = 0; i < ca.length; i++) {
  6375.    var c = ca[i].split('=');
  6376.    if (c.length == 2) {
  6377.     _cookies[c[0].match(re)[1]] = unescape(c[1].match(re) ? c[1].match(re)[1] : '');
  6378.    }
  6379.  }
  6380. }
  6381. function getCookie(name) {
  6382.  _initCookies();
  6383.  return _cookies[name];
  6384. }
  6385. function setCookie(name, value, days) {
  6386.  var expires = '';
  6387.  if (days) {
  6388.    var date = new Date();
  6389.    date.setTime(date.getTime()+(days*24*60*60*1000));
  6390.    expires = '; expires='+date.toGMTString();
  6391.  }
  6392.  var domain = locDomain;
  6393.  document.cookie = name + '='+escape(value) + expires + '; path=/' + (domain ? '; domain=.' + domain : '');
  6394. }
  6395.  
  6396. /**
  6397. * Other stuff
  6398. **/
  6399.  
  6400. function dispatchIntro(step, params) {
  6401.  if (typeof dispatchIntroEvent != 'undefined') {dispatchIntroEvent(step, params);}
  6402. }
  6403.  
  6404. function parseLatin(text){
  6405.  var outtext = text;
  6406.  var lat1 = ['yo','zh','kh','ts','ch','sch','shch','sh','eh','yu','ya','YO','ZH','KH','TS','CH','SCH','SHCH','SH','EH','YU','YA',"'"];
  6407.  var rus1 = ['ё', 'ж', 'х', 'ц', 'ч', 'щ',  'щ',   'ш', 'э', 'ю', 'я', 'Ё', 'Ж', 'Х', 'Ц', 'Ч', 'Щ',  'Щ',   'Ш', 'Э', 'Ю', 'Я', 'ь'];
  6408.  for (var i = 0; i < lat1.length; i++) {
  6409.    outtext = outtext.split(lat1[i]).join(rus1[i]);
  6410.  }
  6411.  var lat2 = 'abvgdezijklmnoprstufhcyABVGDEZIJKLMNOPRSTUFHCYёЁ';
  6412.  var rus2 = 'абвгдезийклмнопрстуфхцыАБВГДЕЗИЙКЛМНОПРСТУФХЦЫеЕ';
  6413.  for (var i = 0; i < lat2.length; i++) {
  6414.    outtext = outtext.split(lat2.charAt(i)).join(rus2.charAt(i));
  6415.  }
  6416.  return (outtext == text) ? null : outtext;
  6417. }
  6418.  
  6419. function placeholderSetup(id, curVal, back) {
  6420.  var el = ge(id);
  6421.  if (!el) return;
  6422.  
  6423.  var ph = el.getAttribute('placeholder') || el.placeholder;
  6424.  if (el.phevents || !ph) {
  6425.    return;
  6426.  }
  6427.  
  6428.  el.setAttribute('placeholder', '');
  6429.  var prop = [];
  6430.  each(['Top', 'Bottom', 'Left', 'Right'], function(i,v) {
  6431.    prop.push('margin' + v);
  6432.    prop.push('padding' + v);
  6433.    prop.push('border' + v + 'Width');
  6434.  });
  6435.  var pad = extend(getStyle(el, prop), {borderStyle:'solid', borderColor:'#FFF'});
  6436.  b1 = ce('div', {className: 'input_back_wrap'});
  6437.  var to, b = ce('div', {className: 'input_back', innerHTML: '<div>' + ph + '</div>'}, pad), c = b.firstChild;
  6438.   el.phonsize = function() {
  6439.     var s = getSize(el, true);
  6440.     if (s[0] <= 0) {
  6441.      s[0] = parseFloat(getStyle(el, 'width', false));
  6442.    }
  6443.    if (s[1] <= 0) {
  6444.      s[1] = parseFloat(getStyle(el, 'height', false));
  6445.    }
  6446.  
  6447.    setStyle(b, {width: s[0], height: s[1]});
  6448.  }
  6449.  if (browser.msie && !browser.msie8) {
  6450.    setStyle(b, {marginTop: 1});
  6451.  }
  6452.  el.phonfocus = function(hid) {
  6453.    el.focused = true;
  6454.    if (hid) {
  6455.      setStyle(el, {backgroundColor: '#FFF'});
  6456.      hide(b);
  6457.    }
  6458.    el.phonsize();
  6459.    checkValue(true, false);
  6460.  }
  6461.  el.phonblur = function() {
  6462.    el.focused = false;
  6463.    setStyle(el, {backgroundColor: 'transparent'});
  6464.    show(b);
  6465.    el.phonsize();
  6466.    checkValue(false, true);
  6467.  }
  6468.  var shown = true;
  6469.  var animation = null;
  6470.  if (el.value) {
  6471.    shown = false;
  6472.    hide(c);
  6473.  };
  6474.  var checkValue = function(focus, blur) {
  6475.    var cv = function() {
  6476.      var val = el.value;
  6477.      if (shown && (back && val || !back && (focus || val))) {
  6478.        hide(c);
  6479.        shown = false;
  6480.      } else if (!shown && !val && (back || blur)) {
  6481.        show(c);
  6482.        shown = true;
  6483.      }
  6484.      if (back && focus && !val) {
  6485.        clearTimeout(animation);
  6486.        animation = setTimeout(function() {
  6487.          animate(c, {color: '#C0C8D0'}, 200);
  6488.        }, 100);
  6489.      }
  6490.      if (back && blur && !val) {
  6491.        clearTimeout(animation);
  6492.        animation = setTimeout(function() {
  6493.          animate(c, {color: '#777777'}, 200);
  6494.        }, 100);
  6495.      }
  6496.    };
  6497.    if (browser.mobile) {
  6498.      cv();
  6499.    } else {
  6500.      setTimeout(cv, 0);
  6501.    }
  6502.  }
  6503.  
  6504.  var onFocus = function() {el.phonfocus();}
  6505.  var onBlur = function() {el.phonblur(); return false;}
  6506.  
  6507.  if (!browser.opera_mobile) {
  6508.    addEvent(c, 'focus click', function() { el.blur(); el.focus(); });
  6509.    addEvent(el, 'focus', onFocus);
  6510.    addEvent(el, 'keydown paste cut input', checkValue);
  6511.  }
  6512.  addEvent(el, 'blur', onBlur);
  6513.  if (el.id != 'search_input') {
  6514.    cur.destroy.push(function() {
  6515.      removeEvent(el, 'focus', onFocus);
  6516.      removeEvent(el, 'blur', onBlur);
  6517.      removeEvent(el, 'keydown paste cut input', checkValue);
  6518.    });
  6519.  }
  6520.  el.getValue = function(){return el.value;};
  6521.  el.setValue = function(v){el.value = v; checkValue();}
  6522.  el.phevents = true;
  6523.  
  6524.  b1.appendChild(b);
  6525.  el.parentNode.insertBefore(b1, el);
  6526.  
  6527.  setStyle(el, {backgroundColor:'transparent',zIndex:parseInt(getStyle(b, 'zIndex')) + 1,position:'relative',resize: 'none'});
  6528.  el.phonsize();
  6529. }
  6530.  
  6531. function val (input, value) {
  6532.  input = ge(input);
  6533.  if (!input) return;
  6534.  
  6535.  if (value !== undefined) {
  6536.    if (input.setValue) {
  6537.      input.setValue(value);
  6538.      input.phonblur && input.phonblur();
  6539.    } else {
  6540.      input.value = value;
  6541.    }
  6542.  }
  6543.  return input.getValue ? input.getValue() : input.value;
  6544. }
  6545.  
  6546. function focus(el, from, to) {
  6547.  el = ge(el);
  6548.  try {
  6549.    el.focus();
  6550.    if (from === undefined || from === false) from = el.value.length;
  6551.    if (to === undefined || to === false) to = from;
  6552.    if (el.createTextRange) {
  6553.      var range = el.createTextRange();
  6554.      range.collapse(true);
  6555.      range.moveEnd('character', from);
  6556.      range.moveStart('character', to);
  6557.      range.select();
  6558.    } else if (el.setSelectionRange) {
  6559.      el.setSelectionRange(from, to);
  6560.    }
  6561.  } catch(e) {}
  6562. }
  6563.  
  6564. // Message box
  6565. var _message_box_guid = 0, _message_boxes = [], _show_flash_timeout = 0;
  6566.  
  6567. var __bq = boxQueue = {
  6568.  hideAll: function() {
  6569.    if (__bq.count()) {
  6570.      var box = _message_boxes[__bq._boxes.pop()];
  6571.      box._in_queue = false;
  6572.      box._hide();
  6573.    }
  6574.    while (__bq.count()) {
  6575.      var box = _message_boxes[__bq._boxes.pop()];
  6576.      box._in_queue = false;
  6577.    }
  6578.  },
  6579.  hideLast: function() {
  6580.    if (__bq.count()) {
  6581.      _message_boxes[__bq._boxes[__bq.count() - 1]].hide();
  6582.    }
  6583.  },
  6584.  hideBGClick: function(e) {
  6585.    if (e && e.target && /^box_layer/.test(e.target.id)) {
  6586.      __bq.hideLast();
  6587.    }
  6588.  },
  6589.  count: function() {
  6590.    return __bq._boxes.length;
  6591.  },
  6592.  _show: function(guid) {
  6593.    var box = _message_boxes[guid];
  6594.    if (!box || box._in_queue) return;
  6595.    if (__bq.count()) {
  6596.      _message_boxes[__bq._boxes[__bq.count() - 1]]._hide(true, true);
  6597.    } else if (window.tooltips) {
  6598.      tooltips.hideAll();
  6599.    }
  6600.    box._in_queue = true;
  6601.    var notFirst = __bq.count() ? true : false;
  6602.    __bq.curBox = guid;
  6603.    box._show(notFirst || __bq.currHiding, notFirst);
  6604.    __bq._boxes.push(guid);
  6605.  },
  6606.  _hide: function(guid) {
  6607.    var box = _message_boxes[guid];
  6608.    if (!box || !box._in_queue || __bq._boxes[__bq.count() - 1] != guid || !box.isVisible()) return;
  6609.    box._in_queue = false;
  6610.    __bq._boxes.pop();
  6611.    box._hide(__bq.count() ? true : false);
  6612.    if (__bq.count()) {
  6613.      var prev_guid = __bq._boxes[__bq.count() - 1];
  6614.      __bq.curBox = prev_guid;
  6615.      _message_boxes[prev_guid]._show(true, true, true);
  6616.    }
  6617.  },
  6618.  _boxes: [],
  6619.  curBox: 0
  6620. }
  6621.  
  6622. function curBox() { var b = _message_boxes[__bq.curBox]; return (b && b.isVisible()) ? b : null; }
  6623.  
  6624. if (!browser.mobile) {
  6625.  addEvent(document, 'keydown', function(e) {
  6626.    if (e.keyCode == KEY.ESC && __bq.count()) {
  6627.      __bq.hideLast();
  6628.      return false;
  6629.    }
  6630.  });
  6631. }
  6632.  
  6633. function MessageBox(options) {
  6634.  var defaults = {
  6635.    width: 410,
  6636.    animSpeed: browser.msie ? 0 : 200,
  6637.    height: 'auto',
  6638.    bodyStyle: '',
  6639.    selfDestruct: true,
  6640.    progress: false
  6641.  };
  6642.  
  6643.  options = extend(defaults, options);
  6644.  
  6645.  var buttonsCount = 0,
  6646.      boxContainer, boxBG, boxContainer, boxLayout;
  6647.  var boxTitleWrap, boxTitle, boxCloseButton, boxBody;
  6648.  var boxControlsWrap, boxControls, boxProgress, boxControlsText;
  6649.  var guid = _message_box_guid++, visible = false;
  6650.  
  6651.  if (!options.progress) options.progress = 'box_progress' + guid;
  6652.  
  6653.  var controlsStyle = options.hideButtons ? ' style="display: none"' : '';
  6654.  boxContainer = ce('div', {
  6655.    className: 'popup_box_container',
  6656.    innerHTML: '<div class="box_layout"><div class="box_title_wrap"><div class="box_x_button"></div><div class="box_title"></div></div><div class="box_body" style="' + options.bodyStyle + '"></div><div class="box_controls_wrap"' + controlsStyle + '><div class="box_controls"><div class="progress" id="' + options.progress + '"></div><div class="box_controls_text"></div></div></div></div>'
  6657.   }, {
  6658.     display: 'none'
  6659.   });
  6660.   boxContainer.className = 'popup_box_container';
  6661.   hide(boxContainer);
  6662.  
  6663.   boxLayout = boxContainer.firstChild;
  6664.  
  6665.   boxTitleWrap = boxLayout.firstChild;
  6666.   boxCloseButton = boxTitleWrap.firstChild;
  6667.   boxTitle = boxCloseButton.nextSibling;
  6668.  
  6669.   boxBody = boxTitleWrap.nextSibling;
  6670.  
  6671.   boxControlsWrap = boxBody.nextSibling;
  6672.   boxControls = boxControlsWrap.firstChild;
  6673.   boxProgress = boxControls.firstChild;
  6674.   boxControlsText = boxProgress.nextSibling;
  6675.  
  6676.   boxLayer.appendChild(boxContainer);
  6677.  
  6678.   refreshBox();
  6679.   refreshCoords();
  6680.  
  6681.   // Refresh box position
  6682.   function refreshCoords() {
  6683.     var height = window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : boxLayerBG.offsetHeight);
  6684.     var top = browser.mobile ? intval(window.pageYOffset) : 0;
  6685.     containerSize = getSize(boxContainer);
  6686.     boxContainer.style.marginTop = Math.max(0, top + (height - containerSize[1]) / 3) + 'px';
  6687.   }
  6688.  
  6689.   // Refresh box properties
  6690.   function refreshBox() {
  6691.     // Set title
  6692.     if (options.title) {
  6693.       boxTitle.innerHTML = options.title;
  6694.       removeClass(boxBody, 'box_no_title');
  6695.       show(boxTitleWrap);
  6696.     } else {
  6697.       addClass(boxBody, 'box_no_title');
  6698.       hide(boxTitleWrap);
  6699.     }
  6700.  
  6701.     // Set box dimensions
  6702.     boxContainer.style.width = typeof(options.width) == 'string' ? options.width : options.width + 'px';
  6703.     boxContainer.style.height = typeof(options.height) == 'string' ? options.height : options.height + 'px';
  6704.   }
  6705.  
  6706.   // Add button
  6707.   function addButton(label, onclick, type) {
  6708.     ++buttonsCount;
  6709.     if (type=='no') type = 'gray';
  6710.     if (type=='yes') type = 'blue';
  6711.     var buttonWrap = ce('div', {
  6712.       className: 'fl_r button_' + (type?type:'blue'),
  6713.       innerHTML: '<button>'+label+'</button>'
  6714.     });
  6715.     boxControls.insertBefore(buttonWrap, boxProgress);
  6716.     createButton(buttonWrap.firstChild, onclick);
  6717.     return buttonWrap;
  6718.   }
  6719.  
  6720.   // Add custom controls text
  6721.   function setControlsText(text) {
  6722.     boxControlsText.innerHTML = text;
  6723.   }
  6724.  
  6725.   // Remove buttons
  6726.   function removeButtons() {
  6727.     var buttons = [];
  6728.     each (boxControls.childNodes, function(i, x) {
  6729.       if (x && x.firstChild && x.className != 'box_controls_text') {
  6730.        cleanElems(x.firstChild.firstChild);
  6731.         buttons.push(x);
  6732.       }
  6733.     });
  6734.     each(buttons, function() { boxControls.removeChild(this); });
  6735.   }
  6736.  
  6737.   var destroyMe = function() {
  6738.     if (options.onClean) options.onClean();
  6739.     removeButtons();
  6740.     cleanElems(boxContainer, boxCloseButton, boxTitleWrap, boxControlsWrap);
  6741.     boxLayer.removeChild(boxContainer);
  6742.     delete _message_boxes[guid];
  6743.   }
  6744.  
  6745.   // Hide box
  6746.   var hideMe = function(showingOther, tempHiding) {
  6747.     if (!visible) return;
  6748.     visible = false;
  6749.  
  6750.     var speed = (showingOther === true) ? 0 : options.animSpeed;
  6751.  
  6752.     if (options.hideOnBGClick) {
  6753.       removeEvent(document, 'click', __bq.hideBGClick);
  6754.     }
  6755.  
  6756.     if (isFunction(options.onBeforeHide)) {
  6757.       options.onBeforeHide();
  6758.     }
  6759.  
  6760.     if (_layerAnim && !showingOther) {
  6761.      layers.boxhide();
  6762.     }
  6763.  
  6764.     var onHide = function () {
  6765.       if (__bq.currHiding == _message_boxes[guid]) {
  6766.         __bq.currHiding = false;
  6767.       }
  6768.       if (!_layerAnim && !_message_boxes[guid].shOther && !showingOther) {
  6769.        layers.boxhide();
  6770.       }
  6771.       if (!tempHiding && options.selfDestruct) {
  6772.        destroyMe();
  6773.       } else {
  6774.         hide(boxContainer);
  6775.       }
  6776.  
  6777.       if (options.onHide) {
  6778.         options.onHide();
  6779.       }
  6780.     }
  6781.     if (speed > 0) {
  6782.       __bq.currHiding = _message_boxes[guid];
  6783.       fadeOut(boxContainer, speed, onHide);
  6784.     } else {
  6785.       onHide();
  6786.     }
  6787.   }
  6788.  
  6789.   // Show box
  6790.   function showMe(noAnim, notFirst, isReturned) {
  6791.     if (visible || !_message_boxes[guid]) return;
  6792.     visible = true;
  6793.  
  6794.     var speed = (noAnim === true || notFirst) ? 0 : options.animSpeed;
  6795.  
  6796.     if (options.hideOnBGClick) {
  6797.       addEvent(document, 'click', __bq.hideBGClick);
  6798.     }
  6799.  
  6800.     // Show blocking background
  6801.     if (!notFirst) {
  6802.       layers.boxshow();
  6803.     }
  6804.  
  6805.     if (__bq.currHiding) {
  6806.       __bq.currHiding.shOther = true;
  6807.       var cont = __bq.currHiding.bodyNode.parentNode.parentNode;
  6808.       data(cont, 'tween').stop(true);
  6809.     }
  6810.  
  6811.     // Show box
  6812.     if (speed > 0) {
  6813.       fadeIn(boxContainer, speed);
  6814.     } else {
  6815.       show(boxContainer);
  6816.     }
  6817.  
  6818.     refreshCoords();
  6819.     if (options.onShow) {
  6820.       options.onShow(isReturned);
  6821.     }
  6822.  
  6823.     _message_box_shown = true;
  6824.   }
  6825.  
  6826.   var fadeToColor = function(color) {
  6827.     return function() {
  6828.       animate(this, {backgroundColor: color}, 200);
  6829.     }
  6830.   }
  6831.   addEvent(boxCloseButton, 'mouseover', fadeToColor('#FFFFFF'));
  6832.   addEvent(boxCloseButton, 'mouseout', fadeToColor('#9CB8D4'));
  6833.   addEvent(boxCloseButton, 'click', __bq.hideLast);
  6834.  
  6835.   var retBox = _message_boxes[guid] = {
  6836.     guid: guid,
  6837.     _show: showMe,
  6838.     _hide: hideMe,
  6839.  
  6840.     bodyNode: boxBody,
  6841.  
  6842.     // Show box
  6843.     show: function() {
  6844.       __bq._show(guid);
  6845.       return this;
  6846.     },
  6847.     progress: boxProgress,
  6848.     showProgress: function() {
  6849.       hide(boxControlsText);
  6850.       show(boxProgress);
  6851.     },
  6852.     hideProgress: function() {
  6853.       hide(boxProgress);
  6854.       show(boxControlsText);
  6855.     },
  6856.  
  6857.     // Hide box
  6858.     hide: function(attemptParam) {
  6859.       if (isFunction(options.onHideAttempt) && !options.onHideAttempt(attemptParam)) return false;
  6860.       __bq._hide(guid);
  6861.       return true;
  6862.     },
  6863.  
  6864.     isVisible: function() {
  6865.       return visible;
  6866.     },
  6867.     bodyHeight: function() {
  6868.       return getStyle(boxBody, 'height');
  6869.     },
  6870.  
  6871.     // Insert html content into the box
  6872.     content: function(html) {
  6873.       if (options.onClean) options.onClean();
  6874.       boxBody.innerHTML = html;
  6875.       refreshCoords();
  6876.       refreshBox();
  6877.       return this;
  6878.     },
  6879.  
  6880.     // Add button
  6881.     addButton: function(label, onclick, type, returnBtn) {
  6882.       var btn = addButton(label, onclick ? onclick: this.hide, type);
  6883.       return (returnBtn) ? btn : this;
  6884.     },
  6885.  
  6886.     setButtons: function(yes, onYes, no, onNo) {
  6887.       var b = this.removeButtons();
  6888.       if (!yes) return b.addButton(box_close);
  6889.       if (no) b.addButton(no, onNo, 'no');
  6890.       return b.addButton(yes, onYes);
  6891.     },
  6892.  
  6893.     // Set controls text
  6894.     setControlsText: setControlsText,
  6895.  
  6896.     // Remove buttons
  6897.     removeButtons: function() {
  6898.       removeButtons();
  6899.       return this;
  6900.     },
  6901.  
  6902.     destroy: destroyMe,
  6903.  
  6904.     // Update box options
  6905.     setOptions: function(newOptions) {
  6906.       if (options.hideOnBGClick) {
  6907.         removeEvent(document, 'click', __bq.hideBGClick);
  6908.       }
  6909.       options = extend(options, newOptions);
  6910.       if ('bodyStyle' in newOptions) {
  6911.         var items = options.bodyStyle.split(';');
  6912.         for (var i = 0; i < items.length; ++i) {
  6913.          var name_value = items[i].split(':');
  6914.          if (name_value.length > 1 && name_value[0].length) {
  6915.            boxBody.style[trim(name_value[0])] = trim(name_value[1]);
  6916.             if (boxBody.style.setProperty) {
  6917.               boxBody.style.setProperty(trim(name_value[0]), trim(name_value[1]), '');
  6918.             }
  6919.           }
  6920.         }
  6921.       }
  6922.       if (options.hideOnBGClick) {
  6923.         addEvent(document, 'click', __bq.hideBGClick);
  6924.       }
  6925.       if (options.hideButtons) {
  6926.         hide(boxControlsWrap);
  6927.       } else {
  6928.         show(boxControlsWrap);
  6929.       }
  6930.       refreshBox();
  6931.       refreshCoords();
  6932.       return this;
  6933.     },
  6934.     evalBox: function(js, url, params) {
  6935.       var fn = eval('((function() { return function() { var box = this; ' + (js || '') + ';}; })())'); // IE :(
  6936.       fn.apply(this, [url, params]);
  6937.     }
  6938.   }
  6939.   return retBox;
  6940. }
  6941.  
  6942. function showBox(url, params, options, e) {
  6943.   var opts = options || {}, box = new MessageBox(opts.params || {});
  6944.   if (checkEvent(e)) return false;
  6945.   if (url.substr(0, 1) != '/') url = '/' + url;
  6946.   var done = function(title, html, js) {
  6947.     try {
  6948.       box.setOptions({title: title, bodyStyle: 'background: #FFF'});
  6949.       box.content(html).evalBox(js, url, params);
  6950.       if (isFunction(opts.onDone)) opts.onDone();
  6951.     } catch(e) {
  6952.       topError(e, 15);
  6953.       box.hide();
  6954.     }
  6955.   }
  6956.   var onDone = done;
  6957.   if (opts.stat) {
  6958.     stManager.add(opts.stat);
  6959.     onDone = function(title, html, js) {
  6960.       stManager.add(opts.stat, done.pbind(title, html, js));
  6961.     }
  6962.   }
  6963.   var onFail = function(error) {
  6964.     box.failed = true;
  6965.     setTimeout(box.hide, 0);
  6966.     if (isFunction(opts.onFail)) return opts.onFail(error);
  6967.   }
  6968.   box.setOptions({title: false, hideButtons: false, bodyStyle: 'background: #FFF url(/images/progress7.gif) center no-repeat'});
  6969.   box.removeButtons().addButton(getLang('global_close'));
  6970.   var h = intval(box.bodyHeight());
  6971.   box.content('<div style="height: 50px"></div>');
  6972.   box.show();
  6973.   ajax.post(url, params, {onDone: onDone, onFail: onFail, cache: opts.cache});
  6974.   return box;
  6975. }
  6976.  
  6977. function showTabbedBox(url, params, options, e) {
  6978.   options = options || {};
  6979.   options.stat = options.stat || [];
  6980.   options.stat.push('box.js', 'boxes.css');
  6981.   return showBox(url, params, options, e)
  6982. }
  6983.  
  6984. function showFastBox(o, c, yes, onYes, no, onNo) {
  6985.   return (new MessageBox(typeof(o) == 'string' ? {title: o} : o)).content(c).setButtons(yes, onYes, no, onNo).show();
  6986. }
  6987.  
  6988. function showCaptchaBox(sid, dif, box, o) {
  6989.   var done = function(e) {
  6990.     if (e && e.keyCode !== undefined && e.keyCode != 10 && e.keyCode != 13) return;
  6991.     var key = geByTag1('input', box.bodyNode);
  6992.     if (!trim(key.value) && e !== true) {
  6993.      focus(key);
  6994.       return;
  6995.     }
  6996.     var imgs = geByTag1('img', box.bodyNode);
  6997.     var captcha = imgs[0], loader = imgs[1];
  6998.     removeEvent(key);
  6999.     removeEvent(captcha);
  7000.     show(geByClass1('progress', box.bodyNode));
  7001.     hide(key);
  7002.     o.onSubmit(sid, key.value);
  7003.   }
  7004.   var was_box = box ? true : false;
  7005.   var difficulty = intval(dif) ? '' : '&s=1';
  7006.   var imgSrc = o.imgSrc || '/captcha.php?sid=' + sid + difficulty;
  7007.   if (!was_box) {
  7008.     var content = '\
  7009. <div class="captcha">\
  7010.   <div><img src="' + imgSrc + '"/></div>\
  7011.   <div><input type="text" class="text" maxlength="7" /><div class="progress" /></div></div>\
  7012. </div>' + (o.addText || '');
  7013.     box = showFastBox({
  7014.       title: getLang('captcha_enter_code'),
  7015.       width: 300,
  7016.       onHide: o.onHide
  7017.     }, content, getLang('captcha_send'), function() {
  7018.       box.submit();
  7019.     }, getLang('captcha_cancel'), function() {
  7020.       var key = geByTag1('input', box.bodyNode);
  7021.       var captcha = geByTag1('img', box.bodyNode);
  7022.       removeEvent(key);
  7023.       removeEvent(captcha);
  7024.       box.hide();
  7025.     });
  7026.   }
  7027.   box.submit = done.pbind(true);
  7028.   var key = geByTag1('input', box.bodyNode);
  7029.   var captcha = geByTag1('img', box.bodyNode);
  7030.   if (was_box) {
  7031.     key.value = '';
  7032.     captcha.src = '/captcha.php?sid=' + sid + difficulty;
  7033.     hide(geByClass1('progress', box.bodyNode));
  7034.   }
  7035.   show(key);
  7036.   addEvent(key, 'keypress', done);
  7037.   addEvent(captcha, 'click', function() {
  7038.     this.src = '/captcha.php?sid=' + sid + difficulty + '&v=' + irand(1000000, 2000000);
  7039.   });
  7040.   focus(key);
  7041.   return box;
  7042. }
  7043.  
  7044. // Three-state button
  7045.  
  7046. function createButton(el, onClick) {
  7047.   el = ge(el);
  7048.   if (!el || el.btnevents) return;
  7049.   var p = el.parentNode;
  7050.  
  7051.   if (hasClass(p, 'button_blue') || hasClass(p, 'button_gray')) {
  7052.     if (isFunction(onClick))
  7053.       el.onclick = onClick.pbind(el);
  7054.     return;
  7055.   }
  7056.   var hover = false;
  7057.   addEvent(el, 'click mousedown mouseover mouseout', function(e) {
  7058.     if (hasClass(p, 'locked')) return;
  7059.     switch (e.type) {
  7060.     case 'click':
  7061.       if (!hover) return;
  7062.       el.className = 'button_hover';
  7063.       onClick(el);
  7064.     break;
  7065.     case 'mousedown':
  7066.       el.className = 'button_down';
  7067.     break;
  7068.     case 'mouseover':
  7069.       hover = true;
  7070.       el.className = 'button_hover';
  7071.     break;
  7072.     case 'mouseout':
  7073.       el.className = 'button';
  7074.       hover = false;
  7075.     break;
  7076.     }
  7077.   });
  7078.   el.btnevents = true;
  7079. }
  7080.  
  7081. function lockButton(el) {
  7082.   if (!el || el.tagName.toLowerCase() != 'button') return;
  7083.   var lock = ce('span', {className: 'button_lock'});
  7084.   el.parentNode.insertBefore(lock, el);
  7085.   el['old_width'] = el.style.width;
  7086.   el['old_height'] = el.style.height;
  7087.   var s = getSize(el.parentNode);
  7088.   setStyle(el, {width: s[0] - 2, height: s[1] - 2});
  7089.   if (browser.msie6 || browser.msie7) {
  7090.     el['old_html'] = el.innerHTML; el.innerHTML = '';
  7091.   } else {
  7092.     el.style.textIndent = '-9999px';
  7093.   }
  7094. }
  7095. function unlockButton(el) {
  7096.   var lock = geByClass('button_lock', el.parentNode, 'span')[0];
  7097.   if (!lock) return;
  7098.   el.parentNode.removeChild(lock);
  7099.   el.style.width = el['old_width'];
  7100.   el.style.height = el['old_height'];
  7101.   if (browser.msie6 || browser.msie7) el.innerHTML = el['old_html'];
  7102.   el.style.textIndent = '';
  7103. }
  7104.  
  7105. function sbWidth() {
  7106.   if (window._sbWidth === undefined) {
  7107.     var t = ce('div', {innerHTML: '<div style="height: 75px;">1<br>1</div>'}, {
  7108.       overflowY: 'scroll',
  7109.       position: 'absolute',
  7110.       width: '50px',
  7111.       height: '50px'
  7112.     });
  7113.     bodyNode.appendChild(t);
  7114.     window._sbWidth = t.offsetWidth - t.firstChild.offsetWidth - 1;
  7115.     bodyNode.removeChild(t);
  7116.   }
  7117.   return window._sbWidth;
  7118. }
  7119.  
  7120. function imPopup(peer_id) {
  7121.   if (window.event && (window.event.which == 2 || window.event.button == 1)) {
  7122.    return true;
  7123.   }
  7124.  
  7125.   var params = 'scrollbars=0,resizable=1,menubar=0,location=0,width=810,height=669,toolbar=0,status=0';
  7126.   var url = 'http://' + locHost + '/im.php?act=a_box&popup=1';
  7127.   var js = 'window.im.activate_tab(0);';
  7128.   if (peer_id) {
  7129.     url += '&sel=' + peer_id;
  7130.     js = 'window.im.add_peers(' + peer_id + ', ' + peer_id + ')';
  7131.   }
  7132.  
  7133.   url = 'javascript: try { ' + js + ' } catch(e) { document.location = "' + url + '"; void(0); }';
  7134.  
  7135.   window.im_popup_window = window.open(url, 'im', params);
  7136.  
  7137.   try {
  7138.     if (!browser.chrome && !browser.msie && !browser.mozilla && !browser.safari && window.im_popup_window.im) {
  7139.      window.im_already_box = new MessageBox({title: getLang('im_already_shown_title')});
  7140.       im_already_box.content(getLang('im_already_shown'));
  7141.       im_already_box.addButton(getLang('box_close'));
  7142.       setTimeout('im_already_box.hide(400)', 2000);
  7143.       im_already_box.show();
  7144.     }
  7145.   } catch (e) {}
  7146.  
  7147.   if (!browser.msie) {
  7148.     window.im_popup_window.blur();
  7149.   }
  7150.   window.im_popup_window.focus();
  7151.  
  7152.   return false;
  7153. }
  7154.  
  7155. function checkTextLength(maxLen, inp, warn, nobr) {
  7156.   var val = (inp.getValue) ? inp.getValue() : inp.value;
  7157.   if (inp.lastLen === val.length) return;
  7158.   inp.lastLen = val.length;
  7159.   var countRealLen = function(text, nobr) {
  7160.     var spec = {'&': 5, '<': 4, '>': 4, '"': 6, "\n": (nobr ? 1 : 4), "\r": 0, '!': 5, "'": 5};
  7161.     var res = 0;
  7162.     for (var i = 0; i < text.length; i++) {
  7163.      var l = spec[text.charAt(i)], c = text.charCodeAt(i);
  7164.      if (l !== undefined) res += l;
  7165.      else if ((c > 0x80 && c < 0xC0) || c > 0x500) res += ('&#' + c + ';').length;
  7166.       else res += 1;
  7167.     }
  7168.     return res;
  7169.   }
  7170.   var realLen = countRealLen(val, nobr);
  7171.   warn = ge(warn);
  7172.   if (realLen > maxLen - 100) {
  7173.     show(warn);
  7174.     if (realLen > maxLen) {
  7175.       warn.innerHTML = getLang('text_exceeds_symbol_limit', realLen - maxLen);
  7176.     } else {
  7177.       warn.innerHTML = getLang('text_N_symbols_remain', maxLen - realLen);
  7178.     }
  7179.   } else {
  7180.     hide(warn);
  7181.   }
  7182. }
  7183.  
  7184. function autosizeSetup(el, options) {
  7185.   el = ge(el);
  7186.   if (!el) return;
  7187.   if (el.autosize) {
  7188.     el.autosize.update();
  7189.     return;
  7190.   }
  7191.  
  7192.   options.minHeight = intval(options.minHeight) || intval(getStyle(el, 'height'));
  7193.   options.maxHeight = intval(options.maxHeight);
  7194.  
  7195.   var elwidth = intval(getStyle(el, 'width'));
  7196.   if (elwidth < 1) {
  7197.    elwidth = intval(getStyle(el, 'width', false));
  7198.  }
  7199.  el.autosize = {
  7200.    options: options,
  7201.    helper: ce('textarea', {className: 'ashelper'}, {
  7202.      width: elwidth,
  7203.      height: 10,
  7204.      fontFamily: getStyle(el, 'fontFamily'),
  7205.      fontSize: intval(getStyle(el, 'fontSize')) + 'px',
  7206.      lineHeight: getStyle(el, 'lineHeight')
  7207.    }),
  7208.    handleEvent: function(val, e) {
  7209.      var ch = e.charCode ? String.fromCharCode(e.charCode) : e.charCode;
  7210.      if (ch === undefined) {
  7211.        ch = String.fromCharCode(e.keyCode);
  7212.        if (e.keyCode == 10 || e.keyCode == 13) {
  7213.          ch = '\n';
  7214.        } else if (!browser.msie && e.keyCode <= 40) {
  7215.          ch = '';
  7216.        }
  7217.      }
  7218.      if (!ch) {
  7219.        return val;
  7220.      }
  7221.      if (!browser.msie) {
  7222.        return val.substr(0, el.selectionStart) + ch + val.substr(el.selectionEnd);
  7223.      }
  7224.      var r = document.selection.createRange();
  7225.      if (r.text) {
  7226.        val = val.replace(r.text, '');
  7227.      }
  7228.      return val + ch;
  7229.    },
  7230.    update: function(e) {
  7231.      var value = el.value;
  7232.      if (e && e.type != 'blur' && e.type != 'keyup' && (!browser.msie || e.type == 'keypress')) {
  7233.        if (!e.ctrlKey && !e.altKey) {
  7234.          value = el.autosize.handleEvent(value, e);
  7235.        }
  7236.      }
  7237.      if (!value) {
  7238.        value = ' ';
  7239.      }
  7240.      if (el.autosize.helper.value != value) {
  7241.        el.autosize.helper.value = value;
  7242.      }
  7243.      var opts = el.autosize.options;
  7244.  
  7245.      var oldHeight = getSize(el, true)[1];
  7246.      var newHeight = el.autosize.helper.scrollHeight;
  7247.      if (newHeight < opts.minHeight) {
  7248.        newHeight = opts.minHeight;
  7249.      }
  7250.      var newStyle = {overflow: 'hidden'};
  7251.      if (opts.maxHeight && newHeight > opts.maxHeight) {
  7252.         newHeight = opts.maxHeight;
  7253.         newStyle = extend(newStyle, {overflow: 'auto', overflowX: 'hidden'});
  7254.       }
  7255.       if (oldHeight != newHeight) {
  7256.         newStyle.height = newHeight;
  7257.         setStyle(el, newStyle);
  7258.         if (el.phonsize) el.phonsize();
  7259.         if (isFunction(opts.onResize)) {
  7260.           opts.onResize(newHeight);
  7261.         }
  7262.       }
  7263.     }
  7264.   }
  7265.   utilsNode.appendChild(el.autosize.helper);
  7266.   if (browser.opera_mobile) {
  7267.     setStyle(el, {overflow: 'hidden'});
  7268.     el.autosize.update();
  7269.     addEvent(el, 'blur', el.autosize.update);
  7270.   } else {
  7271.     addEvent(el, 'keydown keyup keypress', el.autosize.update);
  7272.     setTimeout(function() {
  7273.       setStyle(el, {overflow: 'hidden'});
  7274.       el.autosize.update();
  7275.     }, 0);
  7276.   }
  7277. }
  7278.  
  7279. function goAway(lnk, prms, e) {
  7280.   if (checkEvent(e)) return true;
  7281.   if (/https?:\/\/([a-zA-Z0-9\-_\.]+\.)?(vk\.com|vkontakte\.ru)(\/|$)/i.test(lnk)) {
  7282.     location.href = lnk;
  7283.     return false;
  7284.   }
  7285.   if (/http:\/\/(www\.)?(fontanka\.ru|regnum\.ru)(\/|$)/i.test(lnk)) {
  7286.     window.open(lnk, '_blank');
  7287.     return false;
  7288.   }
  7289.   var no_warning = intval(getCookie('remixsettings_bits'));
  7290.   if (/https?:\/\/([a-zA-Z0-9\-_]+\.)(vk\.com|vkontakte\.ru)(\/|$)/i.test(locBase) || no_warning & 1) {
  7291.    window.open('/away.php?to=' + encodeURIComponent(lnk) + ((prms && prms.h !== undefined) ? '&h=' + prms.h : ''), '_blank');
  7292.     return false;
  7293.   }
  7294.   var params = extend({act: 'a_go', to: lnk}, prms || {});
  7295.   return !showBox('away.php', params, {}, e);
  7296. }
  7297.  
  7298. function isChecked(el) {
  7299.   el = ge(el);
  7300.   return hasClass(el, 'on') ? 1 : '';
  7301. }
  7302. function checkbox(el, val) {
  7303.   el = ge(el);
  7304.   if (!el || hasClass(el, 'disabled')) return;
  7305.  
  7306.   if (val === undefined) {
  7307.     val = !isChecked(el);
  7308.   }
  7309.   if (val) {
  7310.     addClass(el, 'on');
  7311.   } else {
  7312.     removeClass(el, 'on');
  7313.   }
  7314.   return false;
  7315. }
  7316.  
  7317. function disable(el, val) {
  7318.   el = ge(el);
  7319.  
  7320.   if (val === undefined) {
  7321.     val = !hasClass(el, 'disabled');
  7322.   }
  7323.   if (val) {
  7324.     addClass(el, 'disabled');
  7325.   } else {
  7326.     removeClass(el, 'disabled');
  7327.   }
  7328.   return false;
  7329. }
  7330.  
  7331. var radioBtns = {};
  7332. function radioval(name) {
  7333.   return radioBtns[name] ? radioBtns[name].val : false;
  7334. }
  7335. function radiobtn(el, val, name) {
  7336.   if (!radioBtns[name]) return;
  7337.   each(radioBtns[name].els, function() {
  7338.     if (this == el) {
  7339.       addClass(this, 'on');
  7340.     } else {
  7341.       removeClass(this, 'on');
  7342.     }
  7343.   });
  7344.   radioBtns[name].val = val;
  7345. }
  7346.  
  7347. function renderFlash(cont, opts, params, vars) {
  7348.   if (!opts.url || !opts.id) {
  7349.     return false;
  7350.   }
  7351.   opts = extend({
  7352.     version: 9,
  7353.     width: 1,
  7354.     height: 1
  7355.   }, opts);
  7356.   var f = opts.url;
  7357.   if (!stVersions[f]) {
  7358.     stVersions[f] = '';
  7359.   }
  7360.   if (__debugMode && stVersions[f] < 1000000) stVersions[f] += irand(1000000, 2000000);
  7361.  
  7362.   opts.url += ((opts.url.indexOf('?') == -1) ? '?' : '&') + '_stV=' + stVersions[f];
  7363.  
  7364.   params = extend({
  7365.     quality: 'high',
  7366.     flashvars: ajx2q(vars)
  7367.   }, params);
  7368.   if (browser.flash < opts.version) {
  7369. //    if (opts.express) {
  7370. //      params.flashvars += '&MMplayerType=PlugIn&MMredirectURL=' + encodeURIComponent(locBase + location.hash);
  7371. //    } else {
  7372.      return false;
  7373. //    }
  7374.  }
  7375.  ge(cont).innerHTML = browser.flashwrap(opts, params);
  7376.  return true;
  7377. }
  7378.  
  7379. function playAudio() {
  7380.  var args = arguments;
  7381.  stManager.add('player.js', function() {
  7382.    audioPlayer.operate.apply(null, args);
  7383.  });
  7384. }
  7385.  
  7386. function playAudioNew() {
  7387.  var args = arguments;
  7388.  if (args[args.length-1] !== false) args = Array.prototype.slice.apply(arguments).concat([true]);
  7389.  if (!browser.ipad) {
  7390.    stManager.add(['new_player.js', 'new_player.css'], function() {
  7391.      audioPlayer.operate.apply(null, args);
  7392.    });
  7393.  } else {
  7394.    audioPlayer.operate.apply(null, args);
  7395.  }
  7396. }
  7397.  
  7398. window.onLogout = window.onLoginDone = nav.reload;
  7399.  
  7400. function onLoginFailed(code, opts) {
  7401.  switch (code) {
  7402.    case 2: location.href = '/login.php?r=1&email=' + opts.email; break;
  7403.    case 3: location.href = '/register.php?hash=' + opts.regh + '&gid=' + opts.inv; break;
  7404.    case 4: location.href = '/login.php?m=1&email=' + opts.email; break;
  7405.    default: location.href = '/login.php'; break;
  7406.  }
  7407. }
  7408. function onLoginCaptcha(sid, dif) {
  7409.  window.qloginBox = showCaptchaBox(sid, dif, window.qloginBox, {onSubmit: function(sid, key) {
  7410.    ge('quick_captcha_sid').value = sid;
  7411.    ge('quick_captcha_key').value = key;
  7412.    ge('quick_login_form').submit();
  7413.  }, onHide: function() { window.qloginBox = false; }});
  7414. }
  7415.  
  7416. function callHub(func, count) {
  7417.  this.count = count || 1;
  7418.  this.done = function(c) {
  7419.    this.count -= c || 1;
  7420.    if (this.count <= 0) {
  7421.      func();
  7422.    }
  7423.  };
  7424. }
  7425.  
  7426. function showWriteMessageBox(e, id) {
  7427.  gSearch.hide(e, true);
  7428.  var box = showBox('al_mail.php', {act: 'write_box', to: id}, {params: {width: 450}, stat: ['page.js', 'mail.css'], cache: 1}, e);
  7429.  if (box) cancelEvent(e);
  7430.  return !box;
  7431. }
  7432.  
  7433. var gSearch = new (function() {
  7434.  this.on = 0;
  7435.  var self = this;
  7436.  this.hub = new callHub(function() {
  7437.    if (self.onShow) self.onShow();
  7438.  }, 2);
  7439.  this.hintsHub = new callHub(function() {
  7440.    self.showStartHints();
  7441.  }, 2);
  7442.  this.load = function() {
  7443.    if (!ge('quick_search')) return;
  7444.    if (this.loading) return;
  7445.    this.loading = true;
  7446.    stManager.add('qsearch.js', function() {
  7447.      self.hub.done();
  7448.    });
  7449.    ajax.post('hints.php', {act: 'a_start_hints'}, {onDone: function(text) {
  7450.      self.startHintsText = trim(text);
  7451.      self.hintsHub.done();
  7452.    }});
  7453.  },
  7454.  this.show = function(e, noAnim) {
  7455.    if (!ge('quick_search')) return;
  7456.    if (this.on) {
  7457.      return this.go(e);
  7458.    }
  7459.    this.on = 1;
  7460.    show(self.sCont);
  7461.    placeholderSetup('search_input');
  7462.    ge('search_input').setAttribute('autocomplete', 'off');
  7463.    addClass(ge('qsearch_link'), 'active');
  7464.    this.prev_content = ge('content');
  7465.    if (!this.qsearch_cont) {
  7466.      this.qsearch_cont = ce('div', {id: 'content', innerHTML: '<div style="padding: 200px; text-align: center;"><img src="/images/progress7.gif"/></div>'});
  7467.     }
  7468.     // hide('header');
  7469.     this.prev_content.parentNode.replaceChild(this.qsearch_cont, this.prev_content);
  7470.     if (!this.loading) this.load();
  7471.     self.hub.done();
  7472.     self.hintsHub.done();
  7473.     if (e) return cancelEvent(e);
  7474.   };
  7475.   this.go = function (e) {
  7476.     var url = '/gsearch.php?section=' + (self.last_section || 'people') + '&q=' + trim(ge('search_input').value) + '&name=1';
  7477.     cancelEvent(e || window.event);
  7478.     location.href = url;
  7479.     return false;
  7480.   };
  7481.  
  7482.   this.hide = function(e, force) {
  7483.     if (!ge('quick_search')) return;
  7484.     if ((self.active && !force) || !self.on) return;
  7485.     self.on = 0;
  7486.     toggleFlash();
  7487.     if (self.beforeHide && self.beforeHide()) {
  7488.      return true;
  7489.     }
  7490.     if (ge('search_input').setValue) {
  7491.       ge('search_input').setValue('');
  7492.     } else {
  7493.       ge('search_input').value = '';
  7494.     }
  7495.     // show('header');
  7496.     hide(self.sCont);
  7497.     removeClass(ge('qsearch_link'), 'active');
  7498.     self.qsearch_cont.parentNode.replaceChild(self.prev_content, self.qsearch_cont);
  7499.   };
  7500.   this.init = function(options) {
  7501.     this.sCont = ge('quick_search');
  7502.     this.opt = options || {};
  7503.   };
  7504.   var qsearch_start = false, qsearch_requested = false;
  7505.   this.preload = function () {
  7506.     var url = '/al_search.php', params = {__query: 'search', al_id: vk.id}, q = url + '#' + ajx2q(params);
  7507.     if (globalAjaxCache[q] !== undefined) return;
  7508.     globalAjaxCache[q] = -1
  7509.     ajax.post(url, extend(params, {al: 1}), {onDone: function () {
  7510.       var cb = globalAjaxCache[q];
  7511.       globalAjaxCache[q] = arguments;
  7512.       if (isFunction(cb)) {
  7513.         cb.apply(window, globalAjaxCache[q]);
  7514.       }
  7515.     }, onFail: function () {
  7516.       delete globalAjaxCache[q];
  7517.     }});
  7518.   };
  7519. })();
  7520.  
  7521. // opts: {url: '...', params: {}} or {text: '...'} or {content: '...'}
  7522. var _cleanHide = function(el) {
  7523.   if (el.temphide) {
  7524.     removeEvent(el, 'mouseout', el.temphide);
  7525.     removeAttr(el, 'temphide');
  7526.   }
  7527. }
  7528. function showTooltip(el, opts) {
  7529.   _cleanHide(el);
  7530.  
  7531.   var showing = true;
  7532.   el.temphide = function() {
  7533.     showing = false;
  7534.   }
  7535.   addEvent(el, 'mouseout', el.temphide);
  7536.  
  7537.   if (opts.stat) stManager.add(opts.stat);
  7538.   stManager.add(['tooltips.js', 'tooltips.css'], function() {
  7539.     if (!showing) return;
  7540.     _cleanHide(el);
  7541.  
  7542.     if (!el.tt || !el.tt.el || opts.force) {
  7543.       tooltips.create(el, opts);
  7544.     }
  7545.     tooltips.show(el, opts);
  7546.   });
  7547. }
  7548. function reportAd(aid) {
  7549.   showBox('reports.php', {act: 'a_report_ad_box', aid: aid}, {params: {width: 350}, stat: ['ui_controls.js', 'ui_controls.css']});
  7550. }
  7551.  
  7552. function updateMoney(data) {
  7553.   if (!data) return;
  7554.   vk.balance = data[0];
  7555.   vk.money = data[1];
  7556.   var el = ge('left_money_box');
  7557.   if (data[2]) {
  7558.     if (el) el.innerHTML = data[2];
  7559.     show(el);
  7560.   } else {
  7561.     hide(el);
  7562.   }
  7563. }
  7564.  
  7565. function zNav(changed, opts) {
  7566.   var z = changed.z;
  7567.   delete(changed.z);
  7568.  
  7569.   if (!isEmpty(changed)) return;
  7570.  
  7571.   if (z === false) {
  7572.     if (layers.fullhide) {
  7573.       layers.fullhide();
  7574.     }
  7575.     return false;
  7576.   }
  7577.   if (!z) return;
  7578.   var zType = z.match(/^([a-z]+)(-?\d+_\d+)\/?(.*)/i);
  7579.   if (zType) {
  7580.     var onFail = function() {
  7581.       delete nav.objLoc.z;
  7582.       nav.setLoc(nav.objLoc);
  7583.       return true;
  7584.     };
  7585.     switch (zType[1]) {
  7586.       case 'photo':
  7587.         showPhoto(zType[2], zType[3], extend(opts || {}, {onFail: onFail}));
  7588.         return false;
  7589.         break;
  7590.       case 'video':
  7591.         showVideo(zType[2], zType[3], extend(opts || {}, {onFail: onFail}));
  7592.         return false;
  7593.         break;
  7594.     }
  7595.   }
  7596. }
  7597.  
  7598. function showPhotoProgress(img) {
  7599.   var xy = getXY(img), sz = getSize(img)
  7600.   setStyle(ge('global_prg'), {
  7601.     left: (xy[0] + Math.floor((sz[0] + 6) / 2) - 16) + 'px',
  7602.     top: (xy[1] + Math.floor((sz[1] + 9) / 2) - 4) + 'px',
  7603.     display: 'block'
  7604.   });
  7605. }
  7606. function showPhoto(photoId, listId, options, ev) {
  7607.   if (checkEvent(ev)) return;
  7608.  
  7609.   var stat = ['photoview.js', 'photoview.css'], res;
  7610.   if (options.img) {
  7611.     options.showProgress = showPhotoProgress.pbind(options.img);
  7612.     options.hideProgress = hide.pbind('global_prg');
  7613.   }
  7614.   if (window.photoview && (photoview.showPhoto(photoId, listId, options) === false)) {
  7615.    return false;
  7616.   }
  7617.   if (options.temp) {
  7618.     stManager.add(stat, function() {
  7619.       extend(cur, {pvBig: options.big, pvDark: options.dark});
  7620.       if (!cur.pvData) cur.pvData = {};
  7621.       cur.pvData.temp = [options.temp];
  7622.       photoview.show('temp', 0);
  7623.     });
  7624.   }
  7625.   if (window.photoview) {
  7626.     return false;
  7627.   }
  7628.   extend(options, {onDone: function(lst) {
  7629.     photoview.list(photoId, listId, lst);
  7630.     photoview.loaded.apply(window, arguments);
  7631.     photoview.showPhoto(photoId, listId, options);
  7632.   }, stat: stat, cache: 1});
  7633.   ajax.post('al_photos.php', {act: 'show', photo: photoId, list: listId}, options);
  7634.  
  7635.   return false;
  7636. }
  7637.  
  7638. function showVideo(videoId, listId, options, ev) {
  7639.   if (checkEvent(ev)) return true;
  7640.  
  7641.   var stat = ['videoview.js', 'videoview.css'];
  7642.  
  7643.   var hub = new callHub(function() {
  7644.     videoview.showVideo.apply(videoview, hub.data);
  7645.   }, 2);
  7646.  
  7647.   if (!options) {
  7648.     options = {};
  7649.   }
  7650.  
  7651.   stManager.add(stat, function() {
  7652.     videoview.show(ev, videoId, listId, options);
  7653.     hub.done();
  7654.   });
  7655.  
  7656.   extend(options, {onDone: function() {
  7657.     hub.data = arguments;
  7658.     hub.done();
  7659.   }, cache: 1});
  7660.  
  7661.   ajax.post('al_video.php', {act: 'show', video: videoId, list: listId, autoplay: (options.autoplay) ? 1 : 0}, options);
  7662.   return false;
  7663. }
  7664.  
  7665. function videoCallback(params) {
  7666.   var method = params.shift();
  7667.   debugLog(method, params);
  7668.   if (window.videoview && videoview.playerCallback[method]) {
  7669.    videoview.playerCallback[method].apply(videoview, params);
  7670.   } else {
  7671.     throw Error('Unregistered player callback: ' + method);
  7672.   }
  7673. }
  7674.  
  7675. try{stManager.done('common.js');}catch(e){}
  7676.  
  7677. var page = {
  7678.   inviteToGroup: function(gid, mid, invited, hash) {
  7679.     var setInvited = function(invited) {
  7680.       var row = ge('member_row'+mid);
  7681.       geByClass('actions', row)[0].innerHTML = invited ? '<a href="" onclick="return page.inviteToGroup('+gid+', '+mid+', 1, \''+hash+'\')">'+getLang('friends_cancel_event_invite')+'</a>' : '<a href="" onclick="return page.inviteToGroup('+gid+', '+mid+', 0, \''+hash+'\')">'+getLang('friends_send_event_invite')+'</a>';
  7682.     }
  7683.     if (invited) {
  7684.       ajax.post('/al_page.php', {act: 'a_cancel_invite', mid: mid, gid: gid, hash: hash}, {onDone: function(res){ }});
  7685.       setInvited(0);
  7686.     } else {
  7687.       ajax.post('/al_page.php', {act: 'a_invite', mid: mid, gid:gid, hash: hash}, {onDone: function(res, message) {
  7688.         if (!res) {
  7689.           setInvited(0);
  7690.           ge('res'+mid).innerHTML = '<div class="res">' + message + '</div>';
  7691.           var row = ge('member_row' + mid);
  7692.           hide(geByClass('actions', row)[0]);
  7693.         }
  7694.       }});
  7695.       setInvited(1);
  7696.     }
  7697.     return false;
  7698.   },
  7699.   memberListAction: function(el, action, gid, mid, hash) {
  7700.     ajax.post('al_page.php', {act:'a_member_list_action', action:action, gid:gid, mid:mid, hash:hash}, {onDone: function(res) {
  7701.       el.parentNode.innerHTML = res;
  7702.     }});
  7703.   },
  7704.   showPageMembers: function(ev, oid, tab) {
  7705.     return !showTabbedBox('al_page.php', {act: 'show_members_box', gid: -oid, tab:tab}, {cache: 1}, ev);
  7706.   },
  7707.   newPhoto: function(params) {
  7708.     cur.hideOther();
  7709.     showBox('al_page.php', extend(params || {}, {act: 'a_new_photo'}));
  7710.   },
  7711.   editPhoto: function(newph) {
  7712.     cur.hideOther();
  7713.     showBox('al_page.php', extend(newph || {}, {act: 'a_edit_photo'}), {
  7714.       params: {onHide: (newph && newph.photo) ? page.newPhoto.pbind({oid: newph.oid}) : false, bodyStyle: 'padding: 16px 7px'},
  7715.      stat: ['tagger.js', 'tagger.css']
  7716.    });
  7717.   },
  7718.   deletePhoto: function(oid, hash) {
  7719.     cur.hideOther();
  7720.     var box = showFastBox({title: getLang('global_warning')}, getLang('sure_delete_photo'), getLang('global_delete'), function() {
  7721.       ajax.post('al_page.php', {
  7722.         act: 'a_delete_photo',
  7723.         hash: hash,
  7724.         oid: oid
  7725.       }, {
  7726.         showProgress: box.showProgress,
  7727.         hideProgress: box.hideProgress
  7728.       });
  7729.     }, getLang('global_cancel'));
  7730.   },
  7731.   showContacts: function(oid, edit, callback) {
  7732.     var b = showBox('/al_page.php', {act: 'a_get_contacts', oid: oid, edit: edit}, {params:{width:467}});
  7733.     b.setOptions({onHideAttempt: function() {
  7734.       if (cur.reloadAfterClose) {
  7735.         if (callback) {
  7736.           callback();
  7737.         } else {
  7738.           nav.reload({noscroll: true});
  7739.           cur.reloadAfterClose = false;
  7740.         }
  7741.       }
  7742.       return true;
  7743.     }});
  7744.   },
  7745.   editContact: function(oid, cid, hash, callback) {
  7746.     var b = showBox('al_page.php', {act: 'a_edit_contact_box', cid: cid, oid: oid}).setButtons(getLang('global_save'), function() {
  7747.       cur.reloadAfterClose = true;
  7748.       function onSearch() {
  7749.         var params = {act: 'a_add_contact', cid: cid, oid: oid};
  7750.         params.hash = hash;
  7751.         if (!hash) params.hash = ge('public_contact_hash').value;
  7752.         if (ge('public_contact_memlink')) params.page = ge('public_contact_memlink').value;
  7753.         params.title = ge('public_contact_position').value;
  7754.         params.phone = ge('public_contact_phone').value;
  7755.         params.email = ge('public_contact_email').value;
  7756.         ajax.post('al_page.php', params, {onDone: function(res) {
  7757.           b.hide();
  7758.           if (curBox()) {
  7759.             curBox().content(res);
  7760.           } else {
  7761.             page.showContacts(oid, 1, callback);
  7762.           }
  7763.         }, onFail: function(error) {
  7764.           if (ge('public_contact_error')) {
  7765.             ge('public_contact_error').innerHTML = error;
  7766.             show('public_contact_error');
  7767.             return true;
  7768.           }
  7769.         }});
  7770.       }
  7771.       if (!cid && cur.lastContact != ge('public_contact_memlink').value) {
  7772.        page.searchContact(ge('public_contact_memlink').value, onSearch);
  7773.       } else {
  7774.         onSearch();
  7775.       }
  7776.     }, getLang('global_cancel'));
  7777.   },
  7778.   searchContact: function(oid, page, onSearch) {
  7779.     if (!trim(page)) {
  7780.       cur.lastContact = '';
  7781.       return;
  7782.     }
  7783.     if (page == cur.lastContact) return;
  7784.     ajax.post('al_page.php', {act: 'a_search_contact', pid: oid, page: page}, {onDone:function(uid, img, name, hash) {
  7785.       cur.lastContact = page;
  7786.       ge('public_contact_name').innerHTML = name;
  7787.       ge('public_contact_image').innerHTML = img;
  7788.       ge('public_contact_hash').value = hash;
  7789.       if (!uid) {
  7790.         notaBene('public_contact_memlink', '', true);
  7791.         hide('public_contact_error');
  7792.       } else {
  7793.         if (onSearch) {
  7794.           onSearch();
  7795.         } else {
  7796.           hide('public_contact_error');
  7797.         }
  7798.       }
  7799.     }});
  7800.   },
  7801.   deleteContact: function(oid, cid, hash) {
  7802.     cur.reloadAfterClose = true;
  7803.     ajax.post('al_page.php', {act:'a_delete_contact', oid:oid, cid:cid, hash:hash}, {onDone: function(res){
  7804.       curBox().content(res);
  7805.     }});
  7806.   },
  7807.   showInput: function(el) {
  7808.     el = el.parentNode;
  7809.     addClass(el, 'unshown');
  7810.     var input_wrap = geByClass('input_wrap', el.parentNode)[0];
  7811.     removeClass(input_wrap, 'unshown');
  7812.     geByClass('text', input_wrap)[0].focus();
  7813.   },
  7814.   hideInput: function(el, val) {
  7815.     return;
  7816.   }
  7817. };
  7818.  
  7819. var wall = {
  7820.   switchWall: function() {
  7821.     var cnts = {all: 0, own: 0}, sw = ge('page_wall_switch');
  7822.     if (ge('page_wall_count_all')) cnts.all = intval(ge('page_wall_count_all').value);
  7823.     if (ge('page_wall_count_own')) cnts.own = intval(ge('page_wall_count_own').value);
  7824.     if (!cnts.own || cnts.own >= cnts.all) {
  7825.       return false;
  7826.     }
  7827.     cur.wallType = ge('page_wall_posts').className = (cur.wallType == 'own') ? 'all' : 'own';
  7828.     wall.update();
  7829.     return false;
  7830.   },
  7831.   cmp: function(id1, id2) {
  7832.     var l1 = id1.length, l2 = id2.length;
  7833.     if (l1 < l2) {
  7834.      return -1;
  7835.    } else if (l1 > l2) {
  7836.       return 1;
  7837.     } else if (id1 < id2) {
  7838.      return -1;
  7839.    } else if (id1 > id2) {
  7840.       return 1;
  7841.     }
  7842.     return 0;
  7843.   },
  7844.   receive: function(rows, names) {
  7845.     var n = ce('div', {innerHTML: rows}), posts = ge('page_wall_posts');
  7846.     var current = posts.lastChild;
  7847.     for (el = n.lastChild; el; el = n.lastChild) {
  7848.       if (el.tagName.toLowerCase() == 'input') {
  7849.         var old = ge(el.id), el = n.removeChild(el);
  7850.         if (old) {
  7851.           posts.replaceChild(el, old);
  7852.         }
  7853.         continue;
  7854.       }
  7855.       while (current && current.tagName.toLowerCase() == 'div' && wall.cmp(current.id, el.id) < 0) {
  7856.        current = current.previousSibling;
  7857.       }
  7858.       if (!current) {
  7859.         posts.insertBefore(el, posts.firstChild);
  7860.       } else if (!wall.cmp(current.id, el.id)) {
  7861.         posts.replaceChild(el, current);
  7862.         current = el;
  7863.       } else if (current.nextSibling) {
  7864.         posts.insertBefore(el, current.nextSibling);
  7865.       } else {
  7866.         posts.appendChild(el);
  7867.       }
  7868.     }
  7869.     each(geByTag('textarea', posts), function() { placeholderSetup(this); });
  7870.     wall.update();
  7871.     extend(cur.options.reply_names, names);
  7872.   },
  7873.   showMore: function(offset) {
  7874.     if (cur.viewAsBox) return cur.viewAsBox();
  7875.  
  7876.     var type = cur.wallType;
  7877.     var pr = ge('wall_more_progress');
  7878.     ajax.post('al_wall.php', {act: 'get_wall', owner_id: cur.oid, offset: offset, type: type}, {
  7879.       onDone: wall.receive,
  7880.       showProgress: function() {
  7881.         show(pr);
  7882.         hide(pr.nextSibling);
  7883.       },
  7884.       hideProgress: function() {
  7885.         show(pr.nextSibling);
  7886.         hide(pr);
  7887.       }
  7888.     });
  7889.   },
  7890.   lenLimit: function(post, def) {
  7891.     var el = ge('reply_len_limit' + post);
  7892.     return el ? intval(el.value) : def;
  7893.   },  
  7894.   checkPostLen: function(val, force) {
  7895.     var pf = ge('post_field');
  7896.     val = trim(val);
  7897.     val = val.replace(/\n\n\n+/g, '\n\n');
  7898.     if (pf.lastLen === val.length && !force) return;
  7899.     var realLen = pf.lastLen = val.length, maxLen = cur.options.max_post_len, noteName = ge('post_note_name_wrap');
  7900.     var brCount = realLen - val.replace(/\n/g, '').length;
  7901.     warn = ge('post_warn');
  7902.     if (realLen > maxLen - 100 || brCount > 4) {
  7903.       var canNote = (cur.oid == vk.id) && !(cur.wallAddMedia || {}).chosenMedia;
  7904.       if (realLen > maxLen) {
  7905.         warn.innerHTML = getLang('text_exceeds_symbol_limit', realLen - maxLen);
  7906.       } else {
  7907.         warn.innerHTML = getLang('text_N_symbols_remain', maxLen - realLen);
  7908.       }
  7909.       if (canNote && (realLen > maxLen || brCount > 4)) {
  7910.        show(noteName);
  7911.         placeholderSetup(noteName.firstChild);
  7912.         hide(warn);
  7913.       } else {
  7914.         hide(noteName);
  7915.         if (realLen > maxLen - 100) {
  7916.           show(warn);
  7917.         }
  7918.       }
  7919.     } else {
  7920.       hide(warn, noteName);
  7921.     }
  7922.   },
  7923.   showEditPost: function() {
  7924.     if (cur.viewAsBox) {
  7925.       setTimeout(function() { ge('post_field').blur() }, 0);
  7926.       return cur.viewAsBox();
  7927.     }
  7928.  
  7929.     if (cur.editing === 0) return;
  7930.     if (cur.withMentions && !cur.mentionsAdded) {
  7931.      cur.mentionsAdded = true;
  7932.       stManager.add(['ui_controls.css', 'ui_controls.js', 'mentions.js'], function() {
  7933.         initMentionClass();
  7934.         cur.postMention = new MentionAutocomplete('post_field', {
  7935.           minHeight: cur.fullPostView ? (cur.fullPostHeight || 50) : 32,
  7936.           introText: getLang('profile_mention_start_typing'),
  7937.           noResult: getLang('profile_mention_not_found'),
  7938.           onSubmit: wall.sendPost,
  7939.           checkLen: wall.checkPostLen,
  7940.           onValueChange: (cur.wallAddMedia || {}).checkPostLink
  7941.         });
  7942.         addEvent(cur.postMention.rtaEl, 'focus', wall.showEditPost);
  7943.         if (ge('post_field').focused !== false) {
  7944.           triggerEvent(ge('post_field'), 'focus');
  7945.         }
  7946.       });
  7947.     } else if (cur.postMention) {
  7948.       cur.postMention.options.minHeight = cur.fullPostView ? (cur.fullPostHeight || 50) : 32;
  7949.     }
  7950.     wall.hideEditPostReply();
  7951.     show('submit_post');
  7952.     ge('send_post').onclick = wall.sendPost;
  7953.     autosizeSetup('post_field', {minHeight: cur.fullPostView ? (cur.fullPostHeight || 50) : 32});
  7954.     cur.editing = 0;
  7955.   },
  7956.   hideEditPost: function(force) {
  7957.     cur.editing = false;
  7958.     var rf = ge('post_field');
  7959.     if (browser.opera_mobile || !rf || cur.fullPostView) return;
  7960.     if (!force && rf.getValue && trim(rf.getValue())) return;
  7961.     hide('submit_post');
  7962.     if (rf && !rf.value) {
  7963.      if (cur.postMention) {
  7964.        cur.postMention.options.minHeight = 14;
  7965.       }
  7966.       setStyle(rf, {height: 14});
  7967.       rf.phonsize();
  7968.     }
  7969.   },
  7970.   sendPost: function() {
  7971.     var addmedia = cur.wallAddMedia || {}, media = addmedia.chosenMedia || {}, share = (addmedia.shareData || {});
  7972.     var msg = ge('post_field').getValue(), noteName = ge('post_note_name'), noteNameWrap = ge('post_note_name_wrap');
  7973.     if (share.initialPattern) {
  7974.       msg = msg.replace(share.initialPattern, ' ');
  7975.     }
  7976.     if (media[0] == 'share') {
  7977.       if (share.failed || !share.url) {
  7978.         media = {};
  7979.       } else {
  7980.         media[1] = share.user_id + '_' + share.photo_id;
  7981.       }
  7982.     }
  7983.  
  7984.     if (!media[0] && !msg) {
  7985.      focus('post_field');
  7986.       return;
  7987.     }
  7988.     if (isVisible(noteNameWrap) && !noteName.value) {
  7989.      focus(noteName);
  7990.       return;
  7991.     }
  7992.     var params = {
  7993.       act: 'post',
  7994.       media_type: media[0],
  7995.       media: media[1],
  7996.       message: msg,
  7997.       to_id: cur.postTo,
  7998.       type: cur.wallType,
  7999.       note_title: ge('post_note_name').value,
  8000.       friends_only: isChecked('friends_only'),
  8001.       status_export: isChecked('status_export'),
  8002.       facebook_export: ge('facebook_export') ? (isChecked('facebook_export') ? 1 : 0) : '',
  8003.       official: isChecked('official'),
  8004.       hash: cur.options.post_hash
  8005.     }, ownmsg = (cur.postTo == vk.id || params.official || cur.options.only_official);
  8006.  
  8007.     if (media[0] == 'poll') {
  8008.       var poll = addmedia.pollData();
  8009.       if (!poll) {
  8010.         return;
  8011.       }
  8012.       params = extend(params, poll);
  8013.     }
  8014.  
  8015.     show('page_post_progress');
  8016.     hide('page_add_media');
  8017.  
  8018.     if (media[0] == 'share') {
  8019.       if (share.images && share.images.length) {
  8020.        addmedia.uploadShare(wall.sendPost);
  8021.         return;
  8022.       }
  8023.       params = extend(params, {
  8024.         url: share.url,
  8025.         title: share.title,
  8026.         description: share.description,
  8027.         extra: share.extra,
  8028.         extra_data: share.extraData,
  8029.         open_graph_data: (share.openGraph || {}).data,
  8030.         open_graph_hash: (share.openGraph || {}).hash
  8031.       });
  8032.     }
  8033.  
  8034.     ajax.post('al_wall.php', params, {
  8035.       onDone: function(rows, names) {
  8036.         show('page_add_media');
  8037.  
  8038.         var rf = ge('post_field');
  8039.         if (cur.withMentions) {
  8040.           var mention = data(rf, 'mention');
  8041.           if (mention) {
  8042.             mention.rtaEl.innerHTML = '';
  8043.             hide(mention.cont);
  8044.             show(rf);
  8045.           }
  8046.         }
  8047.         rf.value = '';
  8048.         rf.blur();
  8049.         rf.phonblur();
  8050.         wall.hideEditPost(true);
  8051.         if (cur.wallAddMedia) cur.wallAddMedia.unchooseMedia();
  8052.         checkbox('export_status', false);
  8053.         hide('post_warn');
  8054.  
  8055.         if (cur.wallOffset) {
  8056.           var nloc = nav.objLoc;
  8057.           delete(nloc.offset);
  8058.           if (vk.id != cur.oid) {
  8059.             delete(nloc.own);
  8060.           }
  8061.           return nav.go(nloc);
  8062.         }
  8063.         if (vk.id != cur.oid && cur.wallType == 'full_own') {
  8064.          var nloc = nav.objLoc;
  8065.           delete(nloc.own);
  8066.           return nav.go(nloc);
  8067.         }
  8068.         if (cur.wallType == 'feed') {
  8069.           return cur.wallPostCb();
  8070.         }
  8071.         wall.receive(rows, names);
  8072.         if (!ownmsg && cur.wallType == 'own') {
  8073.          wall.switchWall();
  8074.         }
  8075.       },
  8076.       onFail: show.pbind('page_add_media'),
  8077.       showProgress: function() {
  8078.         show('page_post_progress');
  8079.         hide('page_add_media');
  8080.       },
  8081.       hideProgress: function() {
  8082.         show('page_add_media');
  8083.         hide('page_post_progress');
  8084.       }
  8085.     });
  8086.   },
  8087.  
  8088.   _repliesLoaded: function(post, hl, replies, names) {
  8089.      var r = ge('replies' + post);
  8090.      if (hl) {
  8091.       var el = browser.msie6 ? pageNode : ((browser.chrome || browser.safari) ? bodyNode : htmlNode);
  8092.       var h = r.offsetHeight;
  8093.       r.innerHTML = replies;
  8094.       el.scrollTop = intval(el.scrollTop) + (r.offsetHeight - h);
  8095.       setTimeout(wall.highlightReply.pbind('post' + hl), 0);
  8096.     } else {
  8097.       r.innerHTML = replies;
  8098.     }
  8099.     extend(cur.options.reply_names, names);
  8100.   },
  8101.   highlightReply: function(el) {
  8102.     el = ge(el);
  8103.     if (!el) return;
  8104.  
  8105.     var hlfunc = animate.pbind(el, {backgroundColor: '#ECEFF3'}, 200, function() {
  8106.       setTimeout(function() {
  8107.         animate(el, {backgroundColor: '#FFF'}, 200);
  8108.       }, 1000);
  8109.     });
  8110.  
  8111.     var xy = getXY(el), top = xy[1] - (bodyNode.scrollTop || htmlNode.scrollTop || 0);
  8112.     if (top < 0) {
  8113.      var cont = browser.msie6 ? pageNode : ((browser.chrome || browser.safari) ? bodyNode : htmlNode);
  8114.      animate(cont, {scrollTop: cont.scrollTop + top - 50}, 300, hlfunc);
  8115.    } else {
  8116.      hlfunc();
  8117.    }
  8118.  },
  8119.  showReply: function(post, reply) {
  8120.    if (cur.viewAsBox) return false;
  8121.    var p = ge('post' + reply);
  8122.    if (p) {
  8123.      wall.highlightReply(p);
  8124.    } else {
  8125.      wall.showReplies(post, false, reply);
  8126.    }
  8127.    return false;
  8128.  },
  8129.  showReplies: function(post, count, hl) {
  8130.    if (cur.viewAsBox) return cur.viewAsBox();
  8131.    hide('replies_link' + post);
  8132.    ajax.post('al_wall.php', {act: 'get_replies', post: post, count: count}, {
  8133.      onDone: wall._repliesLoaded.pbind(post, hl),
  8134.      onFail: show.pbind('replies_link' + post),
  8135.      progress: 'replies_progress' + post
  8136.    });
  8137.  },
  8138.  moreReplies: function(post, offset, count) {
  8139.    hide('replies_link' + post);
  8140.    ajax.post('al_wall.php', {act: 'get_replies', offset: offset, post: post, count: count}, {
  8141.      onDone: function(replies, names) {
  8142.        var r = ge('replies' + post);
  8143.        r.removeChild(r.firstChild); // remove header
  8144.        r.innerHTML = replies + r.innerHTML;
  8145.        extend(cur.options.reply_names, names);
  8146.      },
  8147.      onFail: show.pbind('replies_link' + post),
  8148.      progress: 'replies_progress' + post
  8149.    });
  8150.  },
  8151.  showEditReply: function(post) {
  8152.    if (cur.viewAsBox) {
  8153.      setTimeout(function() { ge('reply_field' + post).blur() }, 0);
  8154.      return cur.viewAsBox();
  8155.    }
  8156.  
  8157.    var rf = ge('reply_field' + post);
  8158.    if (cur.editing === post) {
  8159.      focus(rf);
  8160.      return;
  8161.    }
  8162.    autosizeSetup(rf, {minHeight: 32});
  8163.    wall.hideEditPostReply();
  8164.    show('replies_wrap' + post, 'submit_reply' + post);
  8165.    hide('reply_link' + post);
  8166.    ge('reply_button' + post).onclick = wall.sendReply.pbind(post);
  8167.    cur.editing = post;
  8168.    focus(rf);
  8169.  },
  8170.  hideEditReply: function(post) {
  8171.    cur.editing = false;
  8172.    if (browser.opera_mobile) return;
  8173.    hide('submit_reply' + post);
  8174.    var replyLink = ge('reply_link' + post);
  8175.    if (replyLink) {
  8176.      show(replyLink);
  8177.      hide('replies_wrap' + post);
  8178.    }
  8179.    var rf = ge('reply_field' + post);
  8180.    rf.blur();
  8181.    if (!rf.active) {
  8182.      setStyle(rf, {height: 14});
  8183.    }
  8184.    if (rf.phonblur) rf.phonblur();
  8185.    ge('reply_to' + post).value = ge('reply_to_title' + post).innerHTML = '';
  8186.  },
  8187.  replyTo: function(post, toMsgId, toId) {
  8188.    ge('reply_to' + post).value = toMsgId;
  8189.    ge('reply_to_title' + post).innerHTML = cur.options.reply_names[toId];
  8190.    wall.showEditReply(post);
  8191.  },
  8192.  sendReply: function(post) {
  8193.    var msg = ge('reply_field' + post).value;
  8194.    if (!trim(msg).length) {
  8195.      focus('reply_field' + post);
  8196.      return;
  8197.    }
  8198.    var post_hash = ge('post_hash' + post) ? ge('post_hash' + post).value : cur.options.post_hash;
  8199.    ajax.post('al_wall.php', {
  8200.      act: 'post',
  8201.      type: cur.wallType,
  8202.      reply_to: post,
  8203.      reply_to_msg: ge('reply_to' + post).value,
  8204.      start_id: ge('start_reply' + post).value,
  8205.      message: msg,
  8206.      hash: post_hash
  8207.    }, {
  8208.      onDone: function(reply, replies, names) {
  8209.        var replyLink = ge('reply_link' + post);
  8210.        if (replyLink) {
  8211.          replyLink.parentNode.removeChild(replyLink);
  8212.        }
  8213.        ge('reply_field' + post).setValue('');
  8214.        hide('reply_warn' + post);
  8215.        wall.hideEditReply(post);
  8216.        wall._repliesLoaded(post, false, replies, names);
  8217.      },
  8218.      progress: 'page_reply_progress' + post
  8219.    });
  8220.  },
  8221.  postTooltip: function(el, post, opts) {
  8222.    if (cur.viewAsBox) return;
  8223.  
  8224.    showTooltip(el, {
  8225.      url: 'al_wall.php',
  8226.      params: extend({act: 'post_tt', post: post}, opts || {}),
  8227.      slide: 15,
  8228.      shift: [35, -3, 0],
  8229.      ajaxdt: 100,
  8230.      showdt: 400,
  8231.      hidedt: 200,
  8232.      className: 'rich wall_tt'
  8233.    });
  8234.  },
  8235.  
  8236.  hideEditPostReply: function(e) {
  8237.    if (cur.editing === false || isVisible(boxLayerBG) || isVisible(layerBG)) return;
  8238.    var el = (e && e.target) ? e.target : {};
  8239.    var id = el.id;
  8240.    if (cur.editing) {
  8241.      if (!e || !hasClass(el, 'reply_link') && id != 'reply_field' + cur.editing && el.className != 'reply_to_link') {
  8242.        wall.hideEditReply(cur.editing);
  8243.      }
  8244.    } else if (!cur.chosenMedia) {
  8245.      if (!e || id != 'post_field') {
  8246.        wall.hideEditPost();
  8247.      }
  8248.    }
  8249.  },
  8250.  deletePost: function(post, hash) {
  8251.    ajax.post('al_wall.php', {
  8252.      act: 'delete',
  8253.      post: post,
  8254.      hash: hash
  8255.    }, {
  8256.      onDone: function(msg) {
  8257.        var r = ge('post' + post), t = geByTag1('table', r);
  8258.        var pd = ge('post_del' + post);
  8259.        if (pd) {
  8260.          pd.innerHTML = msg;
  8261.          show(pd);
  8262.        } else {
  8263.          r.appendChild(ce('div', {id: 'post_del' + post, className: 'dld', innerHTML: msg}));
  8264.        }
  8265.        hide(t);
  8266.      }
  8267.    });
  8268.  },
  8269.  markAsSpam: function(post, hash) {
  8270.    ajax.post('al_wall.php', {
  8271.      act: 'spam',
  8272.      post: post,
  8273.      hash: hash
  8274.    }, {
  8275.      onDone: function(msg) {
  8276.        var r = ge('post' + post), t = geByTag1('table', r);
  8277.        var pd = ge('post_del' + post);
  8278.        if (pd) {
  8279.          pd.innerHTML = msg;
  8280.          show(pd);
  8281.        } else {
  8282.          r.appendChild(ce('div', {id: 'post_del' + post, className: 'dld', innerHTML: msg}));
  8283.        }
  8284.        hide(t);
  8285.      }
  8286.    });
  8287.  },
  8288.  restorePost: function(post, hash) {
  8289.    ajax.post('al_wall.php', {
  8290.      act: 'restore',
  8291.      post: post,
  8292.      hash: hash
  8293.    }, {
  8294.      onDone: function(msg) {
  8295.        var pd = ge('post_del' + post);
  8296.        if (!pd) return;
  8297.        var r = ge('post' + post), t = geByTag1('table', r);
  8298.        show(t);
  8299.        hide(pd);
  8300.      }
  8301.    });
  8302.  },
  8303.  
  8304.  postOver: function(post) {
  8305.    if (!vk.id) return;
  8306.  
  8307.    var lnk = ge('like_link' + post), el = ge('post' + post), icon = ge('like_icon' + post), no_likes = hasClass(icon, 'no_likes');
  8308.    if (hasClass(el, 'one')) return;
  8309.    if (!lnk) {
  8310.      wall.showDeletePost(post);
  8311.      return;
  8312.    }
  8313.    if (lnk.timeout) {
  8314.      clearTimeout(lnk.timeout);
  8315.      removeAttr(lnk, 'timeout');
  8316.    } else {
  8317.      wall.showDeletePost(post);
  8318.      lnk.style.visibility = 'visible';
  8319.      animate(lnk, {opacity: 1}, 200);
  8320.      if (no_likes) {
  8321.        icon.style.visibility = 'visible';
  8322.        animate(icon, {opacity: 0.4}, 200);
  8323.      }
  8324.    }
  8325.  },
  8326.  postOut: function(post) {
  8327.    if (!vk.id) return;
  8328.    var lnk = ge('like_link' + post), el = ge('post' + post), icon = ge('like_icon' + post), hid = function(el) {
  8329.      el.style.visibility = 'hidden';
  8330.    }
  8331.    if (hasClass(el, 'one')) return;
  8332.    if (!lnk) {
  8333.      wall.hideDeletePost(post);
  8334.      return;
  8335.    }
  8336.    lnk.timeout = setTimeout(function() {
  8337.      removeAttr(lnk, 'timeout');
  8338.      wall.hideDeletePost(post);
  8339.      animate(lnk, {opacity: 0}, 200, hid.pbind(lnk));
  8340.      if (hasClass(icon, 'no_likes')) {
  8341.        animate(icon, {opacity: 0}, 200, hid.pbind(icon));
  8342.      }
  8343.    }, 0);
  8344.  },
  8345.  actsOver: function(post) {
  8346.    if (!vk.id) return;
  8347.    var acts = ge('actions' + post);
  8348.    if (!acts) return;
  8349.    if (acts.timeout) {
  8350.      clearTimeout(acts.timeout);
  8351.      removeAttr(acts, 'timeout');
  8352.    } else {
  8353.      fadeIn(acts, 200);
  8354.    }
  8355.  },
  8356.  actsOut: function(post) {
  8357.    if (!vk.id) return;
  8358.    var acts = ge('actions' + post);
  8359.    if (!acts) return;
  8360.    acts.timeout = setTimeout(function() {
  8361.      removeAttr(acts, 'timeout');
  8362.      fadeOut(acts, 200);
  8363.    }, 1);
  8364.  },
  8365.  likeOver: function(post) {
  8366.    var icon = ge('like_icon' + post);
  8367.    if (!icon) return;
  8368.    if (!hasClass(icon, 'my_like')) {
  8369.      setTimeout(animate.pbind(icon, {opacity: 1}, 200, false), 1);
  8370.    } else {
  8371.      icon.style.visibility = 'visible';
  8372.      setStyle(icon, {opacity: 1});
  8373.    }
  8374.    var leftShift = vk.id ? 35 : 55, matches = post.match(/(-?\d+)_(photo|video|note|topic|)(\d+)/), like_obj = (matches[2] || 'wall') + matches[1] + '_' + matches[3];
  8375.  
  8376.    if (cur.viewAsBox) return;
  8377.  
  8378.    showTooltip(icon.parentNode, {
  8379.      url: 'like.php',
  8380.      params: {act: 'a_get_stats', 'object': like_obj},
  8381.      slide: 15,
  8382.      shift: [leftShift, -3, 0],
  8383.      ajaxdt: 100,
  8384.      showdt: 400,
  8385.      hidedt: 200,
  8386.      tip: {
  8387.        over: function() {
  8388.          wall.postOver(post);
  8389.          wall.likeOver(post);
  8390.        },
  8391.        out: function() {
  8392.          wall.likeOut(post);
  8393.          wall.postOut(post);
  8394.        }
  8395.      },
  8396.      className: 'rich like_tt'
  8397.    });
  8398.  },
  8399.  likeOut: function(post) {
  8400.    var icon = ge('like_icon' + post);
  8401.    if (!icon) return;
  8402.    if (!hasClass(icon, 'my_like')) {
  8403.      setTimeout(animate.pbind(ge('like_icon' + post), {opacity: 0.4}, 200, false), 1);
  8404.    }
  8405.  },
  8406.  likeUpdate: function(post, my, count, title) {
  8407.    count = intval(count);
  8408.  
  8409.    var m = post.match(/(-?\d+)_(photo|video|note|topic|)(\d+)/), like_obj = (m[2] || 'wall') + m[1] + '_' + m[3];
  8410.    var countInput = ge('like_real_count_' + like_obj) || {}, rows = ge('like_table_' + like_obj);
  8411.    var titleNode = ge('like_title_' + like_obj), countNode = ge('like_count' + post);
  8412.    var icon = ge('like_icon' + post);
  8413.    var tt = countNode.parentNode.tt || {}, opts = clone(tt.opts || {}), newleft = (my ? 0 : -31);
  8414.  
  8415.    if (title && titleNode) {
  8416.      titleNode.innerHTML = title;
  8417.    }
  8418.    countInput.value = count;
  8419.    countNode.innerHTML = count ? count : '';
  8420.  
  8421.    if (my) {
  8422.      addClass(icon, 'my_like');
  8423.    } else {
  8424.      removeClass(icon, 'my_like');
  8425.      var cb = ge('like_share_wall' + post);
  8426.      if (cb) checkbox(cb, false);
  8427.    }
  8428.    if (count) {
  8429.      var styleName = vk.rtl ? 'right' : 'left';
  8430.      if (tt.el && !isVisible(tt.container) && !title) {
  8431.        rows.style[styleName] = newleft + 'px';
  8432.        tooltips.show(tt.el, extend(opts, {showdt: 0}));
  8433.      } else if (rows) {
  8434.        var params = {};
  8435.        params[styleName] = newleft;
  8436.        animate(rows, params, 200);
  8437.      }
  8438.      removeClass(icon, 'no_likes');
  8439.    } else {
  8440.      if (tt.el) tt.hide();
  8441.      addClass(icon, 'no_likes');
  8442.    }
  8443.  },
  8444.  like: function(post, hash) {
  8445.    if (!vk.id || cur.viewAsBox) return;
  8446.    var my = hasClass(ge('like_icon' + post), 'my_like'), matches = post.match(/(-?\d+)_(photo|video|note|topic|)(\d+)/), like_obj = (matches[2] || 'wall') + matches[1] + '_' + matches[3];
  8447.    ajax.post('like.php', {act: 'a_do_' + (my ? 'un' : '') + 'like', 'object': like_obj, hash: hash, wall: 1}, {
  8448.      onDone: wall.likeUpdate.pbind(post, !my)
  8449.    });
  8450.    var countInput = ge('like_real_count_wall' + post);
  8451.    var count = countInput ? countInput.value : ge('like_count' + post).innerHTML;
  8452.    wall.likeUpdate(post, !my, intval(count) + (my ? -1 : 1));
  8453.  },
  8454.  likeShare: function(post, hash) {
  8455.    var el = ge('like_share_wall' + post), was = isChecked(el);
  8456.    checkbox(el);
  8457.    ajax.post('like.php', {act: 'a_do_' + (was ? 'un' : '') + 'publish', object: 'wall' + post, hash: hash, wall: 1}, {
  8458.      onDone: wall.likeUpdate.pbind(post, true)
  8459.    });
  8460.    var countInput = ge('like_real_count_wall' + post);
  8461.    var count = countInput ? countInput.value : ge('like_count' + post).innerHTML;
  8462.    var my = hasClass(ge('like_icon' + post), 'my_like');
  8463.    wall.likeUpdate(post, true, intval(count) + (my ? 0 : 1));
  8464.  },
  8465.  showLikesPage: function(post, published, offset) {
  8466.    cur.likesBox.loadTabContent('like.php', {act: 'a_get_members', object: 'wall' + post, published: published, offset: offset, wall: 1}, published);
  8467.  },
  8468.  showPhoto: function(to_id, ph, hash, el, ev) {
  8469.    return !showBox('al_photos.php', {act: 'photo_box', to_id: to_id, photo: ph, hash: hash}, {cache: 1}, el.href ? ev : false);
  8470.  },
  8471.  _animDelX: function(opacity, new_active, post) {
  8472.    if (post === undefined) {
  8473.      post = new_active;
  8474.      new_active = undefined;
  8475.    }
  8476.    var el = ge('delete_post' + post);
  8477.    if (!el) return;
  8478.    if (new_active !== undefined) {
  8479.      el.active = new_active;
  8480.    } else if (el.active) {
  8481.      return;
  8482.    }
  8483.    animate(el, {opacity: opacity}, 200);
  8484.  },
  8485.  update: function(count) {
  8486.    if (cur.wallType != 'all' && cur.wallType != 'own') return;
  8487.    var cnts = {}, sw = ge('page_wall_switch'), pnw = ge('page_no_wall');
  8488.    each(['all', 'own'], function() {
  8489.      var el = ge('page_wall_count_' + this);
  8490.      cnts[this + ''] = el && intval(el.value);
  8491.    });
  8492.    if (cnts.all && pnw) {
  8493.      pnw.parentNode.removeChild(pnw);
  8494.    }
  8495.    if (!cnts.own || cnts.own >= cnts.all) {
  8496.       hide(sw);
  8497.     } else {
  8498.       show(sw);
  8499.       sw.innerHTML = cur.options[cur.wallType + '_link'];
  8500.     }
  8501.     ge('page_wall_posts_count').innerHTML = cnts[cur.wallType] ? langNumeric(cnts[cur.wallType], cur.options.wall_counts) : '';
  8502.     ge('page_wall_header').href = '/wall' + cur.oid + ((cur.wallType == 'own') ? '?own=1' : '');
  8503.     var morelnk = ge('wall_more_link'), count = geByClass(cur.wallType, ge('page_wall_posts')).length;
  8504.     if (count >= cnts[cur.wallType]) {
  8505.       hide(morelnk);
  8506.     } else {
  8507.       show(morelnk);
  8508.       morelnk.onclick = wall.showMore.pbind(count);
  8509.     }
  8510.   },
  8511.  
  8512.   init: function(opts) {
  8513.     extend(cur, {
  8514.       postField: ge('post_field'),
  8515.       postNoteName: ge('post_note_name'),
  8516.       wallType: opts.wall_type,
  8517.       withMentions: !(browser.mozilla && browser.version.match(/^2\./) || browser.mobile)
  8518.    });
  8519.     cur.destroy.push(function(c) {
  8520.       cleanElems(c.postField, c.postNoteName);
  8521.     });
  8522.     var rem = removeEvent.pbind(document, 'click', wall.hideEditPostReply);
  8523.  
  8524.     if (cur._back) {
  8525.       cur._back.hide.push(rem);
  8526.       cur._back.show.push(rem);
  8527.       cur._back.show.push(addEvent.pbind(document, 'click', wall.hideEditPostReply));
  8528.     } else {
  8529.       cur.destroy.push(rem);
  8530.     }
  8531.     var ownCnt = ge('page_wall_count_own');
  8532.     if (cur.wallType == 'own' && !intval(ownCnt && ownCnt.value)) {
  8533.      cur.wallType = ge('page_wall_posts').className = 'all';
  8534.     }
  8535.     wall.update();
  8536.  
  8537.     placeholderSetup(cur.postField);
  8538.  
  8539.     each(geByTag('textarea', ge('page_wall_posts')), function() { placeholderSetup(this); });
  8540.  
  8541.     removeEvent(document, 'click', wall.hideEditPostReply);
  8542.     addEvent(document, 'click', wall.hideEditPostReply);
  8543.  
  8544.     if (opts.media_types) {
  8545.       cur.wallAddMedia = initAddMedia(ge('page_add_media').firstChild, 'media_preview', opts.media_types);
  8546.       cur.wallAddMedia.onChange = function() {
  8547.         wall.checkPostLen(ge('post_field').value, true);
  8548.       }
  8549.     }
  8550.   }
  8551. }
  8552.  
  8553. wall = extend(wall, {
  8554.   showDeletePost: wall._animDelX.pbind(0.3),
  8555.   hideDeletePost: wall._animDelX.pbind(0),
  8556.   activeDeletePost: function(post, tt) {
  8557.     wall._animDelX(1, 1, post);
  8558.     if (tt) showTooltip(ge('delete_post' + post), {text: tt, showdt: 500});
  8559.   },
  8560.   deactiveDeletePost: wall._animDelX.pbind(0.3, 0)
  8561. });
  8562.  
  8563. var urlActiveExp = /([!()?., \n\r\t \u00A0]|^)((https?:\/\/)?((?:[a-z0-9_\-]+\.)+[a-z]{2,6})(\/.*?)?)(&nbsp;|[ \t\r\n \u00A0])/i,
  8564.     urlInactiveExp = /([!()?., \n\r\t \u00A0]|^)((https?:\/\/)?((?:[a-z0-9_\-]+\.)+[a-z]{2,6})(\/.*?)?)(&nbsp;|[ \t\r\n \u00A0]|$)/i;
  8565.  
  8566. function initAddMedia(lnk, previewId, types) {
  8567.   lnk = ge(lnk);
  8568.   if (!lnk) return;
  8569.  
  8570.   if (!window.__addMediaIndex) __addMediaIndex = 0;
  8571.   var lnkId = ++__addMediaIndex;
  8572.  
  8573.   previewId = previewId || 'media_preview';
  8574.  
  8575.   var icons = '/images/icons/wall_icons.gif';
  8576.   (new Image()).src = icons;
  8577.  
  8578.   var bgposes = {graffiti: 0, video: -22, photo: -44, audio: -66, poll: -88};
  8579.   var rows = '', spec_style = (/mac/.test(_ua) && browser.mozilla) ? 'height: 19px; padding-top: 3px;' : '';
  8580.   each(types, function(i, v) {
  8581.     var isApp = (v[0] == 'app');
  8582.     var icon = isApp ? v[4] : icons;
  8583.     var bgpos = isApp ? '3px 3px;' : ('0px ' + bgposes[v[0]] + 'px;');
  8584.     var url = isApp ? ('/app' + v[2] + '?to_id=' + cur.postTo) : false;
  8585.     var name = v[1].replace(/\s/g, '&nbsp;');
  8586.     rows += '<a' + (url ? ' href="' + url + '"' : '') + ' id="add_media_type_' +lnkId+ '_' + i + '" style="background-image: url(' + icon + '); background-position: ' + bgpos + spec_style + '"><nobr>' + name + '</nobr></a>';
  8587.   });
  8588.  
  8589.   var html = '\
  8590. <table cellspacing="0" cellpadding="0">\
  8591.   <tr>\
  8592.     <td class="side"><div></div></td>\
  8593.     <td><div class="rows">' + rows + '</div></td>\
  8594.     <td class="side"><div></div></td>\
  8595.   </tr>\
  8596.   <tr>\
  8597.     <td colspan="3">\
  8598.       <div class="bottom"></div><div class="bottom2"></div>\
  8599.     </td>\
  8600.   </tr>\
  8601. </table>';
  8602.   var menuNode = ce('div', {
  8603.     id: 'add_media_menu_' + lnkId,
  8604.     className: 'add_media_menu',
  8605.     innerHTML: '<div class="add_media_header"><div><nobr>' + lnk.innerHTML + '</nobr></div></div><div class="add_media_rows">' + html + '</div>'
  8606.   });
  8607.   bodyNode.appendChild(menuNode);
  8608.  
  8609.   var addMedia = {
  8610.     _addMediaLink: lnk,
  8611.     lnkId: lnkId,
  8612.     _showAddMedia: function() {
  8613.       clearTimeout(addMedia._hideAddMediaTimer);
  8614.       var el = menuNode;
  8615.       cur.chooseMedia = addMedia.chooseMedia;
  8616.       if (el && !isVisible(el)) {
  8617.        addMedia._addMediaLink.blur();
  8618.         var coords = getXY(addMedia._addMediaLink);
  8619.         var left = coords[0] - 8 + (browser.msie6 ? 1 : 0);
  8620.         var top = coords[1] - 4 + (browser.msie && !browser.msie8 ? 1 : 0);
  8621.         setStyle(el, {left: left, top: top});
  8622.         if (/mac/.test(_ua) && browser.mozilla) {
  8623.          setStyle(geByClass('add_media_rows', el), 'top', 22);
  8624.         }
  8625.         browser.msie ? show(el) : fadeIn(el, 100);
  8626.       }
  8627.     },
  8628.     _hideAddMedia: function(noTimeout) {
  8629.       var hideFunc = browser.msie ? hide.pbind(menuNode) : fadeOut.pbind(menuNode, 100);
  8630.       if (noTimeout === true) {
  8631.         hideFunc();
  8632.       } else {
  8633.         addMedia._hideAddMediaTimer = setTimeout(hideFunc, 300);
  8634.       }
  8635.     },
  8636.     chooseMedia: function(type, media, data) {
  8637.       if (addMedia.onChange && addMedia.onChange(type, media, data) === false) {
  8638.        return false;
  8639.       }
  8640.       addMedia.unchooseMedia();
  8641.       var preview = '';
  8642.       switch (type) {
  8643.         case 'graffiti': preview = '<img class="graffiti" src="' + data + '" />'; break;
  8644.         case 'photo'   : preview = '<img class="photo" src="' + (isArray(data) ? data[0] : data) + '" />'; break;
  8645.         case 'video'   : preview = '<img class="video" src="' + data + '" />'; break;
  8646.         case 'audio'   : preview = '<div class="audio"><div class="media_audio_icon"></div><span><b>' + data[0] + '</b> - ' + data[1] + '</span></div>'; break;
  8647.         case 'app'     : preview = '<div class="app"><img src="' + data[0] + '" /><span>' + data[1] + '</span></div>'; break;
  8648.         case 'share'   :
  8649.           preview = '<div class="share"><b class="fl_l"></b>' + getLang('forum_link_link') + ': <a href="/away.php?to=' + encodeURIComponent(data[1]) + '" target="_blank">' + data[0] + '</a></div>';
  8650.           addMedia.shareData = {domain: data[0], url: data[1], initialPattern: data[2]};
  8651.           addMedia.loadPreview(data[1]);
  8652.         break;
  8653.         case 'poll'    :
  8654.           preview = '<div class="poll"><b class="fl_l"></b>' + getLang('create_poll') + '<span id="create_poll_question_preview' + lnkId + '"></span></div>';
  8655.           addMedia.createPoll(data);
  8656.         break;
  8657.       }
  8658.       var prevNode = ge(previewId);
  8659.       prevNode.innerHTML = '<div class="fl_l">' + preview + '</div><div class="x fl_l" onmouseover="showTooltip(this, {text: \'' + getLang('dont_attach') + '\', shift: [6, 3, 3]})" onclick="cur.addMedia[' + lnkId + '].unchooseMedia()"></div>';
  8660.       show(prevNode);
  8661.       addMedia.chosenMedia = [type, media];
  8662.       boxQueue.hideLast();
  8663.       return false;
  8664.     },
  8665.     unchooseMedia: function() {
  8666.       var prevNode = ge(previewId);
  8667.       if (addMedia.chosenMedia) {
  8668.         var x = prevNode.firstChild.nextSibling;
  8669.         if (x && x.tt && x.tt.el) {
  8670.          x.tt.destroy();
  8671.         }
  8672.         addMedia.chosenMedia = false;
  8673.         hide(prevNode);
  8674.       }
  8675.       var share = addMedia.shareData;
  8676.       if (share) {
  8677.         if (share.url) {
  8678.           addMedia.urlsCancelled.push(share.url);
  8679.         }
  8680.         if (share.initialPattern) {
  8681.           addMedia.urlsCancelled.push(share.initialPattern);
  8682.         }
  8683.         addMedia.shareData = {};
  8684.       }
  8685.       var pr = [addMedia.sharePreview, addMedia.pollPreview];
  8686.       for (var i in pr) {
  8687.         if (pr[i]) {
  8688.           pr[i].parentNode.removeChild(pr[i]);
  8689.         }
  8690.       }
  8691.       addMedia.sharePreview = addMedia.pollPreview = false;
  8692.       if (addMedia.onChange) addMedia.onChange(false);
  8693.     },
  8694.  
  8695.     // Inline Polls
  8696.     createPoll: function(labels) {
  8697.       var prevNode = ge(previewId), h = browser.msie6 ? '' : 'height: 1px';
  8698.       addMedia.pollPreview = prevNode.parentNode.insertBefore(ce('div', {className: 'poll_preview', innerHTML: '\
  8699. <div class="content" style="' + h + '">\
  8700.   <div class="clear_fix">\
  8701.     <div class="label fl_l ta_r">' + labels[0] + '</div>\
  8702.     <div class="labeled fl_l"><input type="text" onkeyup="cur.addMedia[' + lnkId + '].updatePoll()" class="text" id="create_poll_question' + lnkId + '" /></div>\
  8703.   </div>\
  8704.   <div class="clear_fix">\
  8705.     <div class="label fl_l ta_r">' + labels[1] + '\
  8706.       <nobr class="no_select" onselectstart="return false;" ondblclick="return false;">\
  8707.         <a id="create_poll_inc' + lnkId + '" onclick="cur.addMedia[' + lnkId + '].incPoll()">' + getLang('global_add') + '</a><span class="sdivide">|</span><a id="create_poll_dec' + lnkId + '" class="disabled" onclick="cur.addMedia[' + lnkId + '].decPoll()">' + getLang('global_delete') + '</a>\
  8708.       </nobr>\
  8709.     </div>\
  8710.     <div class="labeled fl_l" id="create_poll_answers' + lnkId + '"></div>\
  8711.   </div>\
  8712. </div>\
  8713. <div class="bottom_pointer"></div>\
  8714.       '}), prevNode.parentNode.firstChild);
  8715.       var html = [], content = addMedia.pollPreview.firstChild;
  8716.       for (var i = 0; i < 10; ++i) {
  8717.        html.push('<input type="text" class="text" style="' + (i > 1 ? 'display: none' : '') + '" />');
  8718.       }
  8719.       ge('create_poll_answers' + lnkId).innerHTML = html.join('');
  8720.       if (browser.msie6) {
  8721.         focus('create_poll_question' + lnkId);
  8722.         return;
  8723.       }
  8724.       animate(content, {height: 87}, 200, function() {
  8725.         content.style.height = 'auto';
  8726.         focus('create_poll_question' + lnkId);
  8727.       });
  8728.     },
  8729.     incPoll: function() {
  8730.       var answers = ge('create_poll_answers' + lnkId);
  8731.       for (var el = answers.firstChild; el; el = el.nextSibling) {
  8732.         if (!isVisible(el)) {
  8733.           break;
  8734.         }
  8735.       }
  8736.       if (el) {
  8737.         ge('create_poll_dec' + lnkId).className = '';
  8738.         show(el);
  8739.       }
  8740.       if (!el || !el.nextSibling) {
  8741.         ge('create_poll_inc' + lnkId).className = 'disabled';
  8742.       }
  8743.     },
  8744.     decPoll: function() {
  8745.       var answers = ge('create_poll_answers' + lnkId), first = answers.firstChild;
  8746.       for (var el = answers.lastChild; el; el = el.previousSibling) {
  8747.         if (isVisible(el)) {
  8748.           break;
  8749.         }
  8750.       }
  8751.       if (el) {
  8752.         if (el == first || el == first.nextSibling) {
  8753.           el = false;
  8754.         }
  8755.         if (el) {
  8756.           ge('create_poll_inc' + lnkId).className = '';
  8757.           hide(el);
  8758.         }
  8759.       }
  8760.       if (!el || !el.previousSibling || el.previousSibling == first.nextSibling) {
  8761.         ge('create_poll_dec' + lnkId).className = 'disabled';
  8762.       }
  8763.     },
  8764.     updatePoll: function() {
  8765.       var q = trim(ge('create_poll_question' + lnkId).value);
  8766.       ge('create_poll_question_preview' + lnkId).innerHTML = q ? (': <span>' + q + '</span>') : '';
  8767.     },
  8768.     pollData: function() {
  8769.       var answers = ge('create_poll_answers' + lnkId), q = trim(ge('create_poll_question' + lnkId).value);
  8770.       var result = {media: q, answers: []};
  8771.       for (var el = answers.firstChild; el; el = el.nextSibling) {
  8772.         if (isVisible(el) && trim(el.value)) {
  8773.          result.answers.push(trim(el.value));
  8774.         }
  8775.       }
  8776.       if (!q) {
  8777.         focus('create_poll_question' + lnkId);
  8778.         return false;
  8779.       }
  8780.       if (!result.answers.length) {
  8781.         focus(answers.firstChild);
  8782.         return false;
  8783.       }
  8784.       return result;
  8785.     },
  8786.  
  8787.     // Inline Share
  8788.     urlsCancelled: [],
  8789.     shareData: {},
  8790.     checkPostLink: function(wikiValue, noFocus) {
  8791.       //if (vk.id != cur.oid) return; // temp
  8792.       if (addMedia.chosenMedia) return;
  8793.       var rx = noFocus ? urlInactiveExp : urlActiveExp, matchesUrl;
  8794.       while (wikiValue && (matchesUrl = wikiValue.match(rx))) {
  8795.        wikiValue = wikiValue.substr(matchesUrl.index + matchesUrl[0].length);
  8796.         var url = matchesUrl[2], initialUrl = url;
  8797.         url = url.replace(/[,.;'!@#$%^&*()?:]+$/, '');
  8798.         if (!url.match(/^https?:\/\//)) url = 'http://' + url;
  8799.         if (inArray(url, addMedia.urlsCancelled) || inArray(initialUrl, addMedia.urlsCancelled)) {
  8800.           continue;
  8801.         }
  8802.         if (matchesUrl[4].match(/vkontakte\.ru|vk\.com|vkontakte\.com|vk\.cc/)) {
  8803.           var query = matchesUrl[5] || '', mediaMatches = null, mediaType = false;
  8804.           if ((mediaMatches = query.match(/#photo\/(\-?\d+)_(\d+)/)) || (mediaMatches = query.match(/photo(\-?\d+)_(\d+)/)) || (mediaMatches = query.match(/photos\.php\?oid=\-?\d+&act=show&id=(\-?\d+)_(\d+)/))) {
  8805.            mediaType = 'photo';
  8806.           } else if (mediaMatches = query.match(/video(\-?\d+)_(\d+)/)) {
  8807.             mediaType = 'video';
  8808.           } else if (mediaMatches = query.match(/audio\.php\?id=(\-?\d+)&audio_id=(\d+)/)) {
  8809.            mediaType = 'audio';
  8810.           }
  8811.           if (!mediaType) continue;
  8812.           if (addMedia.mediaInfoLoading) return;
  8813.           addMedia.mediaInfoLoading = true;
  8814.           var media = mediaMatches[1] + '_' + mediaMatches[2];
  8815.           ajax.post('share.php', {act: 'media_info', type: mediaType, media: media}, {
  8816.             onDone: function(data) {
  8817.               addMedia.chooseMedia(mediaType, media, data);
  8818.               addMedia.shareData = {initialPattern: initialUrl};
  8819.               addMedia.mediaInfoLoading = false;
  8820.             },
  8821.             onFail: function () {
  8822.               addMedia.urlsCancelled.push(url);
  8823.               addMedia.mediaInfoLoading = false;
  8824.               return true;
  8825.             }
  8826.           });
  8827.           return;
  8828.         }
  8829.         addMedia.chooseMedia('share', '', [matchesUrl[4], url, initialUrl]);
  8830.         return;
  8831.       }
  8832.     },
  8833.     loadPreview: function(url) {
  8834.       if (!url) return;
  8835.       var prevNode = ge(previewId);
  8836.       addMedia.sharePreview = prevNode.parentNode.insertBefore(ce('div', {className: 'share_preview', innerHTML: '\
  8837. <div class="content"><div></div><div class="progress"></div></div>\
  8838. <div class="bottom_pointer"></div>\
  8839. <iframe class="upload_frame" name="share_parse_iframe' + lnkId + '"></iframe>\
  8840.      '}), prevNode.parentNode.firstChild);
  8841.       var parseForm = addMedia.sharePreview.appendChild(ce('form', {action: cur.options.share.url, method: 'post', target: 'share_parse_iframe' + lnkId}));
  8842.       each({
  8843.         act: 'parse_share',
  8844.         from_host: locHost,
  8845.         mid: vk.id,
  8846.         hash: cur.options.share.hash,
  8847.         rhash: cur.options.share.rhash,
  8848.         url: url
  8849.       }, function(i, v) {
  8850.         parseForm.appendChild(ce('input', {type: 'hidden', name: i, value: v}));
  8851.       });
  8852.  
  8853.       window.onParseDone = function(data) {
  8854.         var data = addMedia.shareData = extend(addMedia.shareData, data);
  8855.         if (!data.images || !data.images.length) {
  8856.           addMedia.showPreview();
  8857.           return;
  8858.         }
  8859.         var tmpImg = new Image();
  8860.         var url = '';
  8861.         data.imagesStyles = {};
  8862.         if (/^\//.test(data.images[0])) {
  8863.           url = (/^https:\/\//i.test(data.url) ? 'https://' : 'http://') + data.domain;
  8864.         } else if (!/^https?:\/\//i.test(data.images[0])) {
  8865.           url = data.url.replace(/[^\/]*$/, '');
  8866.           if (/^https?:\/\/$/i.test(url)) {
  8867.             url = data.url + '/';
  8868.           }
  8869.         }
  8870.         data.images[0] = url + data.images[0];
  8871.         tmpImg.src = data.images[0];
  8872.         var imgLoadInterval = setInterval(function() {
  8873.           if (tmpImg.width || tmpImg.height) {
  8874.             var w = tmpImg.width, h = tmpImg.height;
  8875.             if (w < 10 || h < 10) {
  8876.              data.images = [];
  8877.            } else {
  8878.              if (w > h && w > 150) {
  8879.                h = 150 * h / w;
  8880.                 w = 150;
  8881.               } else if (h > 150) {
  8882.                 w = 150 * w / h;
  8883.                 h = 150;
  8884.               }
  8885.               data.imagesStyles[0] = 'style="width: ' + w + 'px; height: ' + h + 'px;"';
  8886.             }
  8887.             clearInterval(imgLoadInterval);
  8888.             imgLoadInterval = true;
  8889.             addMedia.showPreview();
  8890.           }
  8891.         }, 500);
  8892.         setTimeout(function() {
  8893.           if (imgLoadInterval === true) return;
  8894.           data.images = [];
  8895.           clearInterval(imgLoadInterval);
  8896.           addMedia.showPreview();
  8897.         }, 5000);
  8898.       }
  8899.  
  8900.       window.onParseFail = function () {
  8901.         data.failed = true;
  8902.         addMedia.showPreview();
  8903.       }
  8904.  
  8905.       parseForm.submit();
  8906.     },
  8907.     showPreview: function() {
  8908.       var data = addMedia.shareData, prev = addMedia.sharePreview;
  8909.       if (data.failed) {
  8910.         var html = getLang('page_not_loaded');
  8911.       } else {
  8912.         var html = (data.images && data.images[0]  ? '<img src="' + data.images[0] + '" class="fl_l" ' + data.imagesStyles[0] + ' />' : '') + (data.title ? '<h4 class="header">' + data.title + '</h4>' : '') + (data.description ? '<div class="descr">' + data.description + '</div>' : '') + '<div class="clear"></div>';
  8913.       }
  8914.       var tmpDiv = ge(previewId).appendChild(ce('div', {innerHTML: '<div class="share_preview">' + html + '</div>'}, {position: 'absolute', width: getSize(prev)[0] - 10, visibility: 'hidden'}));
  8915.       var height = getSize(tmpDiv)[1];
  8916.       tmpDiv.parentNode.removeChild(tmpDiv);
  8917.  
  8918.       animate(prev.firstChild, {height: height}, 200, function () {
  8919.         prev.firstChild.innerHTML = html;
  8920.       });
  8921.     },
  8922.     uploadShare: function(callback) {
  8923.       var data = addMedia.shareData, prev = addMedia.sharePreview;
  8924.       var uploadCont = prev.appendChild(ce('div', {innerHTML: '<iframe class="upload_frame" name="share_upload_iframe' + lnkId + '"></iframe>'})),
  8925.           uploadForm = uploadCont.appendChild(ce('form', {action: '/share.php', method: 'post', target: 'share_upload_iframe' + lnkId}));
  8926.       each({
  8927.         act: 'a_photo',
  8928.         url: data.url,
  8929.         index: lnkId,
  8930.         image: data.images[0],
  8931.         extra: data.extra || 0
  8932.       }, function (i, v) {
  8933.         uploadForm.appendChild(ce('input', {type: 'hidden', name: i, value: v}));
  8934.       });
  8935.       window.onUploadDone = function(index, params) {
  8936.         window.onUploadFail = window.onUploadDone = function () {};
  8937.         prev.removeChild(uploadCont);
  8938.         addMedia.shareData = extend(addMedia.shareData, {
  8939.           user_id: params.user_id,
  8940.           photo_id: params.photo_id,
  8941.           images: []
  8942.         });
  8943.         callback();
  8944.       }
  8945.       window.onUploadFail = function(index, msg) {
  8946.         window.onUploadFail = window.onUploadDone = function () {};
  8947.         prev.removeChild(uploadCont);
  8948.         addMedia.shareData.images = [];
  8949.         callback();
  8950.       }
  8951.       uploadForm.submit();
  8952.     }
  8953.   }
  8954.  
  8955.   each(types, function(i, v) {
  8956.     var handler = false, params = {to_id: cur.postTo, scrollbar_width: sbWidth()}, loc = hab.getLoc();
  8957.     if (/^(mail|im|al_mail\.php|al_im\.php)($|\?)/.test(loc)) {
  8958.       params.mail_add = 1;
  8959.     }
  8960.     switch (v[0]) {
  8961.       case 'graffiti':
  8962.         handler = showBox.pbind('al_wall.php', {act: 'draw_box', to_id: cur.postTo, flash: browser.flash}, {cache: 1});
  8963.       break;
  8964.       case 'photo':
  8965.         handler = showBox.pbind('photos.php', extend(params, {act: 'a_choose_photo_box'}), {cache: 1});
  8966. &nbs